evil-modeのelispをちょっと覗いてみる
本記事は Emacs Advent Calendar 2016 の5日目の記事になります。
( ´_ゝ`)ノシ
VimConf2016が終わったと思ったらこんな季節に。
ネタは何かと問われれば
Emacs with evil-mode が主戦力の Vimmer なので
evil-mode の elisp を見てみる、そういう事になった。
Spacemacsのユーザーが増えているようですが
各種elispのviキーバインド適応設定+独自設定ファイルまで
詰め込まれているのは重たすぎると思うので
当分evil-modeのままで行きます。
内容は emacs 何それ美味しいの?人向けのレベルです。
ただし、何がしかのプログラミング言語が読めないとツライです。
evil.info
ここにevilのインストール方法とか書いてある。
evil.el
ここが.emacs(init.el)で
(add-to-list 'load-path "~/.emacs.d/evil") (require 'evil)
と書いて起動した時に読み込まれる部分。
evil.elのコード
;;; Code: (require 'evil-vars) (require 'evil-common) (require 'evil-core) (require 'evil-states) (require 'evil-repeat) (require 'evil-macros) (require 'evil-search) (require 'evil-ex) (require 'evil-digraphs) (require 'evil-types) (require 'evil-commands) (require 'evil-maps) (require 'evil-integration) (run-hooks 'evil-after-load-hook) ;;;###autoload (define-globalized-minor-mode evil-mode evil-local-mode evil-initialize) (provide 'evil) ;;; evil.el ends here
コードの説明。
require 'xxx
;はコメントアウト。
(require 'evil-vars)
で
(provide 'evil-vars)
と記述されている
evil-vars.elを読み込む。
*-hook
(run-hooks 'evil-after-load-hook)
で
一通りのevil-modeを構成するelispをロード後に
hookを読み込みます。
EmacsではEmacs上のイベント発生時に
ユーザーが読み込ませたい処理を仕込んでおく変数として
*-hookが用意されています。
evil-after-load-hook については
evil-vars.el 内で定義されています。
つまり、自分でelispでmode作る時は必要に応じて定義しておくものになります。
(define-globalized-minor-mode evil-mode evil-local-mode evil-initialize)
モード定義
define-globalized-minor-mode で
evil-mode、evil-local-mode、evil-initialize-mode を
どのバッファでも利用できるマイナーモードとして扱うように設定します。
(evil-mode は viキーバインドを実現する elisp なのでこの扱いが丁度いい)
バッファを開く際のメジャーモードで evil-mode が不都合な場合は
そのメジャーモードの hook で evil-mode をオフにすることができます。
(メジャーモード・マイナーモード・バッファは
Emacs独自の定義があるので興味があればググッてください。)
雑に言うと開くタブ毎に evil-mode のオン・オフ切り替えの設定・操作が可能です。