[xyzzy:07318] Re: カーソル移動を表示行単位で( C-a 、 C-e )
- Subject: [xyzzy:07318] Re: カーソル移動を表示行単位で( C-a 、 C-e )
- From: HABATA Katsuyuki <k_habata@xxxxxxxxxxxxxxxxxxxx>
- X-mailer: KaMail-0.0.2.4[01/04/15] on xyzzy-0.2.2.204 (windows-98)
- X-yzzy-version: 0.2.2.204
Beowulfさん,今日は。
私も詳しくはないのですが,自分の勉強のためという目的もあって,で
きそうな範囲でだけ説明してみます。
xyzzy.exe のあるフォルダから見て lisp/cmds.l の中に,
(defun end-of-vertual-line ()
という行で始まる,関数を定義する Lisp 式が書かれています。
この行の続きは,
(interactive)─────┬────(A)
(goto-virtual-eol))──┘
というふうになっているはずです。(インデントは適当です)
この式によって,「end-of-vertual-line」というシンボルに,上記(A)
のようなコマンドが定義づけられることになります。
ちなみに,見た目の行末にカーソルを移動させるコマンドは,(goto-
virtual-eol)なのですが,キーボード等からの入力によってコマンドを
実行するには,(interactive)という呪文が必要なので,この両者を組
み合わせて,わざわざ,end-of-vertual-line という関数が定義されて
いるのだと思います。
そこで,
(global-set-key #\C-e 'end-of-virtual-line)
という式は,C-e というキーボード操作に,end-of-virtual-line とい
う関数が割り当てられているわけです。
ただ,キーにコマンドを割り付ける場合,そのコマンドにわざわざ名前
を付けてから,global-set-key しなくてはならないわけでなく,いき
なり,一連のコマンドを割り付けることもできます。
このようなコマンドを記載した式を,lambda 式と言って,その書き方は,end-of-virtual-line を定義づけた式の例で説明すると,
defun end-of-virtual-line
の部分(名付けの部分)を
lambda
に置き換えればよいのです。そうすると,Beowulfさんの最初の式と同
じになります。
以上をまとめると,
(global-set-key #\C-e '(lambda () (interactive) (goto-virtual-eol)))
の
(interactive) (goto-virtual-eol)
という一連のコマンドには,end-of-virtual-line という名前が既に付
けられているので,上記のlambda 式を書く代わりに,
(global-set-key #\C-e 'end-of-virtual-line)
としても同じだということになります。
説明が冗長になってしまいましたが,悪しからず。
--
HABATA Katsuyuki
mailto:k_habata@xxxxxxxxxxxxxxxxxxxx