最後に、本当に気に入っている機能:カスタマイズしたモードライン。
ネットワーク経由で作業していると、どのマシンを使っているのか分からなくなる。また、自分がどこにいて、どのラインポイントにいるのかも把握しにくくなる傾向がある。
そこで、モードラインをこんな感じにリセットしました:
-:-- foo.texi rattlesnake:/home/bob/ Line 1 (Texinfo Fill) Top
I am visiting a file called foo.texi, on my machine rattlesnake in my /home/bob buffer. I am on line 1, in Texinfo mode, and am at the top of the buffer.
私の.emacsファイルには、次のようなセクションがあります:
;; Set a Mode Line that tells me which machine, which directory,
;; and which line I am on, plus the other customary information.
(setq-default mode-line-format
(quote
(#("-" 0 1
(help-echo
"mouse-1: select window, mouse-2: delete others ..."))
mode-line-mule-info
mode-line-modified
mode-line-frame-identification
" "
mode-line-buffer-identification
" "
(:eval (substring
(system-name) 0 (string-match "\\..+" (system-name))))
":"
default-directory
#(" " 0 1
(help-echo
"mouse-1: select window, mouse-2: delete others ..."))
(line-number-mode " Line %l ")
global-mode-string
#(" %[(" 0 6
(help-echo
"mouse-1: select window, mouse-2: delete others ..."))
(:eval (format-time-string "%F"))
mode-line-process
minor-mode-alist
#("%n" 0 2 (help-echo "mouse-2: widen" local-map (keymap ...)))
")%] "
(-3 . "%P")
;; "-%-"
)))
ここでは、デフォルトのモードラインを再定義します。大部分はオリジナルのままですが、いくつか変更を加えています。Infoなどの各種モードで上書きできるよう、デフォルトのモードライン形式を設定しています。
リスト内の多くの要素は自明です。mode-line-modifiedはバッファが変更されたかどうかを示す変数であり、mode-nameはモード名を示す、といった具合です。しかし、まだ説明していない2つの特徴があるため、この形式は複雑に見えます。
モードラインの1行目は、ダッシュまたはハイフンの ‘-’
です。昔であれば、単に "-"
と指定されていたでしょう。しかし現在では、Emacs
は文字列にハイライトや、今回のようなヘルプ機能といったプロパティを追加できます。ハイフンの上にマウスカーソルを合わせると、ヘルプ情報が表示されます(デフォルトでは、情報が表示されるまで0.7秒待つ必要があります。このタイミングは
tooltip-delay の値を変更することで調整できます)。
新しい文字列形式には特殊な構文があります:
#("-" 0 1 (help-echo "mouse-1: select window, ..."))
#( はリストの開始を示します。リストの最初の要素は文字列そのものであり、単に
‘-’
となります。2番目と3番目の要素は、4番目の要素が適用される範囲を指定します。範囲は文字の後から始まるため、0 は範囲が最初の文字の直前から始まることを意味し、1
は範囲が最初の文字の直後で終わることを意味します。3番目の要素は範囲のプロパティです。これはプロパティリスト、プロパティ名(この場合は
‘help-echo’)、および値(この場合は文字列)で構成されます。この新しい文字列形式の2番目、3番目、および4番目の要素は、繰り返し指定することが可能です。
詳細については、The GNU Emacs Lisp Reference Manualのテキストプロパティ、およびThe GNU Emacs Lisp Reference Manualのモードライン形式を参照してください。
mode-line-buffer-identification
は現在のバッファ名を表示します。これは (#("%12b" 0 4
… から始まるリストです。#( でリストが始まります。
‘"%12b"’は、お馴染みのbuffer-name関数を用いて現在のバッファ名を表示し、‘12’は表示される最大文字数を指定します。名前の文字数が少ない場合は、この文字数に達するように空白が追加されます。(バッファ名は12文字より長くても構いませんし、むしろそうすべき場合が多いです。この長さは、一般的な80列幅のウィンドウに適しています。)
:eval
は、以下の形式を評価し、その結果を文字列として表示するように指示しています。この場合、式はシステム名全体の第1コンポーネントを表示します。第1コンポーネントの末尾は
‘.’(ピリオド)であるため、string-match
関数を使用して第1コンポーネントの長さを取得します。0番目の文字からその長さまでの部分文字列が、マシン名となります。
これがその表現です:
(:eval (substring
(system-name) 0 (string-match "\\..+" (system-name))))
‘%[’ と ‘%]’ は、再帰的な編集レベルごとに一対の角括弧を表示させます。‘%n’ は、ナローイングが有効なときに “Narrow” と表示します。‘%P’ は、バッファのうちウィンドウの下端より上にある部分の割合、あるいは “Top”、“Bottom”、“All” を表示します。(小文字の ‘p’ は、ウィンドウの上端より上にある割合を表示します。)‘%-’ は、行を埋めるのに十分な数のハイフンを挿入します。
忘れないでください。Emacsを好きになるために、必ずしもEmacsを好きである必要はありません。自分専用のEmacsなら、デフォルトのEmacsとは異なる色やコマンド、キーを設定できます。
一方、カスタマイズを一切行わない、素のEmacsを起動したい場合は、次のように入力してください:
emacs -q
これにより、~/.emacs 初期化ファイルをロードしない Emacs が起動します。ごく普通の、デフォルトの Emacs。それだけです。