elisp:一発(キーバインド)でinit.elを開けるようにする
emacsを使い始めてからまだかなり日が浅いため、設定しなければならないことがたくさんある。
よって必然的にinit.elを頻繁に開くことになるわけだが、いちいち
C-x C-f ~/.emacs.d/init.el
と入力しなければいけないのは非常に面倒臭い。
(実際、一度開けば
find file: ~/.emacs.d/
まで勝手に表示されるので問題ないが、まぁこれは聞かなかったことに。)
そこで、少しelispを学んで、キーバインドでフォルダを開けるようにしようと思う。
まずは、自分の知っている限りでコードを書いてみた。
このようなものである。
(global-set-key 'find-file "~/.emacs.d/init.el")
*scratch*バッファで試してみたところ、ちゃんとinit.elが開くため、「行けんじゃね?」と思いinit.elに記述、保存、再起動。
・・・開かない。
さらに、エラーが出る始末。(文字化けは後日改善するつもり)
うーんうーんと悩んでいると、便りになるサイトを発見。
どうやら、
1.init.elを開いたバッファを受け取る
2.そのバッファを表示する(切り替える)
という流れになるらしい。
そのためには、find-fileではなくfind-file-noselect(バッファを受け取る)を使えばよいそう。
ちょっとやってみよう。
それっ!
(switch-to-buffer (find-file-noselect "~/.emacs.d/init.el"))
開いた! が、emacsを開くと同時にinit.elが開く!おかしい!
それもそのはず、キーバインドの設定をしていない。
これらを組み合わせるために、
GNU Emacs Lispリファレンスマニュアル: 9. 制御構造
ここを参考にさせてもらった。
人のinit.elなどを見るとwhenで記述している場合が多いので僕もwhenを使うことにする。
(when (global-set-key (kbd C-c C-e))
(switch-to-buffer (find-file-noselect "~/.emacs.d/init.el")))
うーん開かない。
関数を作ってやればいいのかな?
またもやネットを漁り・・・
マンガで分かるLisp(Manga Guide to Lisp)
非常にシュールだがわかりやすいlisp入門を見つけた。
これに従って書いてみる。
(global-set-key
(kbd "C-c C-e")
(lambda ()
(switch-to-buffer (find-file-noselect "~/.emacs.d/init.el"))))
今度こそ行けるだろう。
ダメだった。
ここで、神様のようなサイトを発見。
http://www.gentei.org/~yuuji/elisp/elisplec.html#SEC1
これによると、関数名の後に
(interactive)
を入れなければならないらしい。
(global-set-key
(kbd "C-c C-e")
(lambda () (interactive)
(switch-to-buffer (find-file-noselect "~/.emacs.d/init.el"))))
これでどうだ?
開いたー!!(汚いinit.elが見苦しい)
しかし粘って粘ってうまく行った時の感動は格別だなぁ。
今後自分のemacsがどんどん面白くなっていくのが楽しみだ。