--- title: elispの設定 author: kazu634 date: 2007-12-09 wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:3429;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - Emacs ---

 現在Meadowというemacsの亜種(?)を使っています。このemacsというのは強力なエディタなのですが、使い方が複雑なのです。。。今日はだらだらと設定をいじくろうと決意し、いじっていました。

 ちなみに自分用のメモなのですが、このメモが役に立ちそうな人は:

ような人です。一から懇切丁寧に…的な内容にはなっていません。

screen-lines.el

 とりあえずemacsの設定は.emacsというファイルを編集することでできます。こいつで色々ごにゃごにゃすれば大丈夫なわけです。便利そうな情報は「Emacs ユーザーの方に質問です。これは便利! と思える elisp プログラムを教えてください。
標準で組み込まれてるものでも結構です。プログラムがどういうものかの説明も簡単にしていただけると嬉しいです。
ちなみに自分が便利だなと思うのは
・ ELScreen (GNU screen のようなスクリーン機能を実現するもの)
・kill-summary.el (killing buffer を履歴表示して yank するものを選べるようにする)
・navi2ch (定番ですねw 2ちゃんねるビューワー)
・riece (IRCクライアント)
などです。それから、こういう設定知ってる? 的なものも是非教えてください。
今日 (windmove-default-keybindings) で shift + カーソルキーで分割したウィンドウが移動できることを知って驚愕してます。
よろしくお願いします。
」に集約されているので、ここを参照しました。

 今回自分は、screen-lines.elを導入しようと決意しました。実はemacsというエディタは、初期設定のままだと↓カーソルで移動しても、論理行ごとにしか移動できなかったりするのです。。こいつは不便すぎる。見た目の行ですぐ下に移って欲しいわけです。

導入作業

 screen-lines.elからscreen-lines.elをダウンロードして、site-lispに保存する。screen-lines.el内に書かれているとおりに、.emacsに以下を追記する。

(autoload 'screen-lines-mode "screen-lines"
"Toggle Screen Lines minor mode for the current buffer." t)
(autoload 'turn-on-screen-lines-mode "screen-lines"
"Turn on Screen Lines minor mode for the current buffer." t)
(autoload 'turn-off-screen-lines-mode "screen-lines"
"Turn off Screen Lines minor mode for the current buffer." t)

emacsを再起動して、

M-x screen-lines-mode

とすると、お目当ての挙動になります。

howmとかLaTeXをいじるときに、自動的にscreen-lines-modeをオンにする

 自分的に言うと、ここからが未体験ゾーンだった。

 elispには、何らかのタイミングでemacs自身に自分の状態を知らせるようにできる…らしい。つまり、課長さん(emacs)に仕事を頼まれた部下(elisp)は仕事が終わったり、一段落したら、課長さんに連絡することになっている…ようだ。この「ほうれんそう」するタイミングをelisp自身が定義している…みたい。この「タイミング」のことを「フック」と呼ぶらしい。だから、任意のelispが実行された時点で、screen-lines-modeをオンにするようにできればいいらしい…ということがわかった。

 現在自分が使っているelispでscreen-lines-modeと併用したいのは、

という面々。こいつらが実行された時点のフックがわかれば「add hook」というヤツを使って、screen-lines-modeをオンにできるみたい。elisp自身が定義しているフックはelispファイル内に書かれていることが多いみたいで、ちょっと覗いてみるとすぐにわかった。後は、

(add-hook '実行されたときのフック 'screen-lines-mode)

としてやればいいらしい。結局、

;; screen-linesの設定
(add-hook 'howm-mode-on-hook 'screen-lines-mode)
(add-hook 'yatex-mode-hook 'screen-lines-mode)
(add-hook 'hatena-mode-hook  '(lambda ()
(screen-lines-mode 1)))

となった。

課題

 「(add-hook ‘xxx ‘xxx-mode)」と「(add-hook ‘xxx ‘(lambda ()))」の違いがわからない(..;)