blog/content/post/2007/12/09/2007-12-09-00000675.md

133 lines
9.4 KiB
Markdown
Raw Normal View History

2019-03-31 11:00:21 +00:00
---
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
---
<div class="section">
<p>
 現在<a href="http://www.meadowy.org/meadow/" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.meadowy.org/meadow/', 'Meadow');" target="_blank">Meadow</a>というemacsの亜種を使っています。このemacsというのは強力なエディタなのですが、使い方が複雑なのです。。。今日はだらだらと設定をいじくろうと決意し、いじっていました。
</p>
<p>
 ちなみに自分用のメモなのですが、このメモが役に立ちそうな人は:
</p>
<ul>
<li>
とりあえずMeadowが導入できて、書かれている指示に従えばelispを自力でなんとか導入できる。でも、それ以上のことはできない
</li>
</ul>
<p>
ような人です。一から懇切丁寧に…的な内容にはなっていません。
</p>
<h4>
<a href="http://homepage1.nifty.com/bmonkey/emacs/" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://homepage1.nifty.com/bmonkey/emacs/', 'screen-lines.el');" target="_blank">screen-lines.el</a>
</h4>
<p>
 とりあえずemacsの設定は.emacsというファイルを編集することでできます。こいつで色々ごにゃごにゃすれば大丈夫なわけです。便利そうな情報は「<a href="http://q.hatena.ne.jp/1137478760" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://q.hatena.ne.jp/1137478760', 'Emacs ユーザーの方に質問です。これは便利! と思える elisp プログラムを教えてください。\n標準で組み込まれてるものでも結構です。プログラムがどういうものかの説明も簡単にしていただけると嬉しいです。\nちなみに自分が便利だなと思うのは\n・ ELScreen (GNU screen のようなスクリーン機能を実現するもの)\n・kill-summary.el (killing buffer を履歴表示して yank するものを選べるようにする)\n・navi2ch (定番ですねw 2ちゃんねるビューワー)\n・riece (IRCクライアント)\nなどです。それから、こういう設定知ってる? 的なものも是非教えてください。\n今日 (windmove-default-keybindings) で shift + カーソルキーで分割したウィンドウが移動できることを知って驚愕してます。\nよろしくお願いします。');" target="_blank">Emacs ユーザーの方に質問です。これは便利! と思える elisp プログラムを教えてください。<br /> 標準で組み込まれてるものでも結構です。プログラムがどういうものかの説明も簡単にしていただけると嬉しいです。<br /> ちなみに自分が便利だなと思うのは<br /> ・ ELScreen (GNU screen のようなスクリーン機能を実現するもの)<br /> ・kill-summary.el (killing buffer を履歴表示して yank するものを選べるようにする)<br /> ・navi2ch (定番ですねw 2ちゃんねるビューワー)<br /> ・riece (IRCクライアント)<br /> などです。それから、こういう設定知ってる? 的なものも是非教えてください。<br /> 今日 (windmove-default-keybindings) で shift + カーソルキーで分割したウィンドウが移動できることを知って驚愕してます。<br /> よろしくお願いします。</a>」に集約されているので、ここを参照しました。
</p>
<p>
 今回自分は、<a href="http://homepage1.nifty.com/bmonkey/emacs/" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://homepage1.nifty.com/bmonkey/emacs/', 'screen-lines.el');" target="_blank">screen-lines.el</a>を導入しようと決意しました。実はemacsというエディタは、初期設定のままだと↓カーソルで移動しても、論理行ごとにしか移動できなかったりするのです。。こいつは不便すぎる。見た目の行ですぐ下に移って欲しいわけです。
</p>
<h4>
導入作業
</h4>
<p>
 <a href="http://homepage1.nifty.com/bmonkey/emacs/" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://homepage1.nifty.com/bmonkey/emacs/', 'screen-lines.el');" target="_blank">screen-lines.el</a>からscreen-lines.elをダウンロードして、site-lispに保存する。screen-lines.el内に書かれているとおりに、.emacsに以下を追記する。
</p>
<pre class="syntax-highlight">
<span class="synSpecial">(</span>autoload <span class="synSpecial">'</span><span class="synIdentifier">screen-lines-mode</span> <span class="synConstant">&#34;screen-lines&#34;</span>
<span class="synConstant">&#34;Toggle Screen Lines minor mode for the current buffer.&#34;</span> <span class="synStatement">t</span><span class="synSpecial">)</span>
<span class="synSpecial">(</span>autoload <span class="synSpecial">'</span><span class="synIdentifier">turn-on-screen-lines-mode</span> <span class="synConstant">&#34;screen-lines&#34;</span>
<span class="synConstant">&#34;Turn on Screen Lines minor mode for the current buffer.&#34;</span> <span class="synStatement">t</span><span class="synSpecial">)</span>
<span class="synSpecial">(</span>autoload <span class="synSpecial">'</span><span class="synIdentifier">turn-off-screen-lines-mode</span> <span class="synConstant">&#34;screen-lines&#34;</span>
<span class="synConstant">&#34;Turn off Screen Lines minor mode for the current buffer.&#34;</span> <span class="synStatement">t</span><span class="synSpecial">)</span>
</pre>
<p>
emacsを再起動して、
</p>
<blockquote>
<p>
M-x screen-lines-mode
</p>
</blockquote>
<p>
とすると、お目当ての挙動になります。
</p>
<h4>
howmとかLaTeXをいじるときに、自動的にscreen-lines-modeをオンにする
</h4>
<p>
 自分的に言うと、ここからが未体験ゾーンだった。
</p>
<p>
 elispには、何らかのタイミングでemacs自身に自分の状態を知らせるようにできる…らしい。つまり、課長さん(emacs)に仕事を頼まれた部下(elisp)は仕事が終わったり、一段落したら、課長さんに連絡することになっている…ようだ。この「ほうれんそう」するタイミングをelisp自身が定義している…みたい。この「タイミング」のことを「フック」と呼ぶらしい。だから、任意のelispが実行された時点で、screen-lines-modeをオンにするようにできればいいらしい…ということがわかった。
</p>
<p>
 現在自分が使っているelispでscreen-lines-modeと併用したいのは、
</p>
<ul>
<li>
<a href="http://howm.sourceforge.jp/index-j.html" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://howm.sourceforge.jp/index-j.html', 'Howm');" target="_blank">Howm</a>
</li>
<li>
<a href="http://www.yatex.org/" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.yatex.org/', 'YaTeX');" target="_blank">YaTeX</a>
</li>
<li>
<a href="https://sourceforge.jp/projects/hatena-mode/" onclick="__gaTracker('send', 'event', 'outbound-article', 'https://sourceforge.jp/projects/hatena-mode/', 'hatena-mode');" target="_blank">hatena-mode</a>
</li>
</ul>
<p>
という面々。こいつらが実行された時点のフックがわかれば「add hook」というヤツを使って、screen-lines-modeをオンにできるみたい。elisp自身が定義しているフックはelispファイル内に書かれていることが多いみたいで、ちょっと覗いてみるとすぐにわかった。後は、
</p>
<pre class="syntax-highlight">
<span class="synSpecial">(</span>add-hook <span class="synSpecial">'</span><span class="synIdentifier">実行されたときのフック</span> <span class="synSpecial">'</span><span class="synIdentifier">screen-lines-mode</span><span class="synSpecial">)</span>
</pre>
<p>
としてやればいいらしい。結局、
</p>
<pre class="syntax-highlight">
<span class="synComment">;; screen-linesの設定</span>
<span class="synSpecial">(</span>add-hook <span class="synSpecial">'</span><span class="synIdentifier">howm-mode-on-hook</span> <span class="synSpecial">'</span><span class="synIdentifier">screen-lines-mode</span><span class="synSpecial">)</span>
<span class="synSpecial">(</span>add-hook <span class="synSpecial">'</span><span class="synIdentifier">yatex-mode-hook</span> <span class="synSpecial">'</span><span class="synIdentifier">screen-lines-mode</span><span class="synSpecial">)</span>
<span class="synSpecial">(</span>add-hook <span class="synSpecial">'</span><span class="synIdentifier">hatena-mode-hook</span> <span class="synSpecial">'(</span><span class="synStatement">lambda</span> <span class="synSpecial">()</span>
<span class="synSpecial">(</span>screen-lines-mode 1<span class="synSpecial">)))</span>
</pre>
<p>
となった。
</p>
<h4>
課題
</h4>
<p>
 「(add-hook &#8216;xxx &#8216;xxx-mode)」と「(add-hook &#8216;xxx &#8216;(lambda ()))」の違いがわからない(..;)
</p>
</div>