f:id:clayfish:20090201185625j:image:medium:right
emacs-lisp-intro輪講 3 回目です. 今回は「5.3 beginning-of-buffer の完全な定義」から開始します.

5.3 beginning-of-buffer の完全な定義

  • 関数の省略可能な引数は &optional キーワードに続けて指定する
  • interactive スペシャルフォームで “P” を指定すると前置引数(C-u 引数)を関数に渡す
  • (interactive “P”) で渡ってくる引数は prefix-numeric-value で数値へ変換してから使用する
  • 説明文字列中での記法
    • lisp 式を表示するには (…) とする
    • \[universal-argument] と書くと C-u と表示されるようだ(実際の beginning-of-buffer の定義を参照するとそのような記法が使用されていた)

演習問題をといてみた. n に値を束縛するところがうまくかけないけど現状はこれが限界.

(defun over-column (&optional number)
  (interactive "P")
  (let ((n (if number
               (prefix-numeric-value number)
             56)))
    (if (> fill-column n)
          (message "small!")
        (message "big!"))))

6. ナロイングとワイドニング

ついに長かった 5 章を終え、6 章に突入。

  • save-restriction でナロイングを復元する. save-excursion と同じ用法.
  • save-restriction と save-excursion を続けて使う場合は, save-excursion が外側になるようにするとよい.
  • widen 関数はカレントバッファのナロイングを無効化する.

演習問題をやってみた。ナロイングしていようともバッファの先頭 60 文字を表示する関数.
goto-char の引数が 61 なのは (point-min) が 1 を表すので, 61 - 1 = 60 というわけです.

(defun show-60chars ()
  (interactive)
  (save-restriction
    (widen)
    (save-excursion
      (message "%s" (buffer-substring (point-min)
                                      (goto-char 61))))))

演習問題の実装&テストで気づいたこと.

  • 今使ってる emacs 22.2.1 (NTEmacs) ではデフォルトでナロイング禁止になっている模様.
    • C-x n n でナロイングしようとすると警告画面がでてきた.
    • 警告されても続行しようとすると, .emacs に (put ‘narrow-to-region ‘disabled nil) を追記された.
    • 上記をへて, やっとナロイングできるようになった.
  • 「widen は C-x w にバインドしてある」と記述があるものの, emacs 22.2.1 (NTEmacs) ではバインドされてない.
    • C-x n w に変わってる模様. M-x widen したときに emacs がメッセージで教えてくれた.

きょうはここまでです. つぎは 7 章からです.

履歴

輪講(1) 輪講(2)