GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/eintr/Mode-Line.html ・ emacs-doc.conao3.com

16.14 修正モード線

最後に、本当に気に入っている機能:カスタマイズしたモードライン。

ネットワーク経由で作業していると、どのマシンを使っているのか分からなくなる。また、自分がどこにいて、どのラインポイントにいるのかも把握しにくくなる傾向がある。

そこで、モードラインをこんな感じにリセットしました:

-:-- 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。それだけです。