emacs-lisp-intro 輪講(3)
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) ではデフォルトでナロイング禁止になっている模様.
- 「widen は C-x w にバインドしてある」と記述があるものの, emacs 22.2.1 (NTEmacs) ではバインドされてない.
- C-x n w に変わってる模様. M-x widen したときに emacs がメッセージで教えてくれた.
きょうはここまでです. つぎは 7 章からです.