[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:07318] Re: カーソル移動を表示行単位で( C-a 、 C-e )



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

Index Home