理系学生日記

おまえはいつまで学生気分なのか

ナロイングの練習問題

そういや,個人的にはナロイングって使わないな.

バッファの後半にナロイングしていて最初の行を参照できないような場合であっても、カレントバッファの最初の60文字を表示する関数を書いてみよ。

(defun first-60-characters ()
  (interactive)
  (save-excursion
    (save-restriction
      (widen)
      (let ((start (point-min))
            (end (goto-char 60)))
        (message (buffer-substring start end))))))

save-excursion でポイントやマークを保存しておくのはもちろんだけど,ナロイングされているバッファに対応するために widen を呼び出す(=ナロイングを解除する) 必要があるので,save-restriction でナロイングの状態も保存しておく必要がある.あとは自然な感じ.