[Emacs]既存の関数をちょこっと拡張して自作関数を作る方法
既存の関数の挙動を調べる
まずは敵を知れ。revert-bufferについて調べてみましょう。
関数の説明を見るのはdescribe-functionコマンドです。
(お使いの環境によって、キーバインド"F1-f" や" C-h f" などに割り当てられているかもしれません。)
M-x describe-function
Describe function:revert-buffer
関数名を聞かれるので、"revert-buffer"と入力しましょう。関数の説明が出てきます。
It is bound to <menu-bar> <file> <revert-buffer>.
(revert-buffer &optional IGNORE-AUTO NOCONFIRM PRESERVE-MODES)
ごちゃごちゃと書いてますが、"NOCONFIRM"というのが、何かそれっぽいですね。下の方に説明があります。
Optional second argument NOCONFIRM means don't ask for confirmation
at all.
おお!まさにこれですね。revert-bufferの第二引数がNONCONFIRMオプションで、それを真(1とかtとか)にすれば、確認を聞かない( don't ask confirmation)っぽいです。
さっそくやってみましょう。
自作関数を定義する
.emacsファイルに次のように書きます。;; revert-buffer without asking
(defun revert-buffer-force()
(interactive)
(revert-buffer nil t)
)
1行目のdefun revert-buffer-force() は、関数の定義です。名前はご自由に。2行目の(interactive)は、M-x で呼び出せるようにするための決まり文句です。
3行目の(revert-buffer nil t)が関数の本体です。
revert-bufferに第一引数 "nil", 第二引数 "t" を渡して呼び出しています。
第二引数の"t"がNONCONFIRMつまり「yes/no聞くな」ということですね。
第一引数は、IGNORE-AUTOとかいうやつで・・・・よくわかりません(笑) デフォルトがnilらしいのでnilにしました。
細かいことは気にしないのがコツです!
書いた関数を評価(eval)する
さて、関数を書いただけでは有効にならないので、eval(評価)してあげる必要があります。関数定義文の最後のかっこの後ろにカーソルをおいて、C-x C-e と打ってください。
(defun revert-buffer-force()
...
) ←ここで C-x C-e
これで、書いた関数が有効になります。(このテクニックを知らずにEmacsを再起動してる人がいたら、教えてあげてくださいね。)
自作関数を実行する
いよいよ呼び出してみましょう。M-x revert-buffer-force
おぉ!yes/no聞かれずにrevert-bufferできました!これは感動ものです。
おまけ:キーバインドを割り当てる
ついでにキーバインドを割り当てます。.emacsで、
(global-set-key "\C-cv" 'revert-buffer-force)
最後のかっこの後ろで C-x C-e するのをお忘れなく!これで、C-cv でrevert-buffer-forceを起動できるようになりました。
ざっとこんな感じです。
いかがでしたか?
「こんな便利な関数を作った」などがあれば、コメントやtwitterで教えていただるとうれしいです。
Enjoy!
カテゴリ:
Emacs