Emacsのモードラインについてなんとなく知っていても、表示されているもの全て説明できる人は少ないのではないだろうか。

まずはモードラインが画面のどこにあるかおさらいしておこう。

  • GUI版


ーCUI版


この画面でいうとグレーの帯の部分がモードラインである。
このモードラインにはカレントバッファの現在の様々な状況が表示されている。

モードラインの構成は以下のようになっている。

  • GUI版


  • CUI版
    以下の部分がGUI版と異なっている。
    • 文字セットが(表示、入力、出力)の3つあること。
    • フレーム名があること。
    • 一番左に - が一文字あり、マイナーモードの後は - の文字が連続で右端まで表示されている。
      おそらく色が表示できない場合でもモードラインだとわかりやすいように線を引いている。


それぞれ何を表しているか説明する。

  1. 文字セット
    現在どの文字セットが使われているか、1文字で表示している。

    <表示の例>

    • U UTF-8(Unicode)の文字セット
    • - 特別な文字セットを使っていない
    • = テキストデータを持っていない

    M-x list-coding-systems を実行すると文字コード一覧を確認できる。

    ###############################################
    # List of coding systems in the following format:
    # MNEMONIC-LETTER -- CODING-SYSTEM-NAME
    #   DOC-STRING
    U -- utf-8 (alias: mule-utf-8 cp65001)
      UTF-8 (no signature (BOM))
    E -- japanese-iso-8bit (alias: euc-japan-1990 euc-japan euc-jp)
      ISO 2022 based EUC encoding for Japanese (MIME:EUC-JP).
    J -- iso-2022-jp (alias: junet)
      ISO 2022 based 7bit encoding for Japanese (MIME:ISO-2022-JP).
    S -- japanese-shift-jis (alias: shift_jis sjis)
      Shift-JIS 8-bit encoding for Japanese (MIME:SHIFT_JIS)
    E -- euc-jis-2004 (alias: euc-jisx0213)
      ISO 2022 based EUC encoding for JIS X 0213 (MIME:EUC-JIS-2004).
    J -- iso-2022-jp-2004 (alias: iso-2022-jp-3)
      ISO 2022 based 7bit encoding for JIS X 0213:2004 (MIME:ISO-2022-JP-2004).
    1 -- iso-latin-1 (alias: iso-8859-1 latin-1)
      ISO 2022 based 8-bit encoding for Latin-1 (MIME:ISO-8859-1).
    B -- chinese-big5 (alias: big5 cn-big5 cp950)
      BIG5 8-bit encoding for Chinese (MIME:Big5)
    

    特に使われているのはUnicodeのUTF-8(表示はU)とWindowsで使われているShift-jis(表示はS)だろうか。
    一昔前のLinux系はeuc-jp(表示はE)が主に用いられていた。

    CUI版では2つの文字が追加されていて、キーボード入力の文字コードとターミナル出力の文字コードを示している。

    また、入力方式を使っていると文字セットの前に、入力方式を示す文字が表示される。
    例えば日本語入力の入力方式を起動した場合、次のようにUの前に Aあ が追加される。


  2. 改行コード
    改行コードの状態を表している。

    • コロン : または (Unix) 。改行コードはLF。
    • バックスラッシュ \ または (DOS) 。改行コードはCRLF。
    • スラッシュ / または (Mac) 。改行コードはCR。
  3. バッファ状態
    変更あり/なしや読み取り専用かどうかについて2文字で表している。

    • -- 変更なし
    • ** 変更あり
    • %% 読み取り専用で変更なし
    • %* 読み取り専用で変更あり
  4. ローカル/リモート
    今のバッファで開いているものがローカルまたはリモートか1文字で表している。

    • - ローカルファイル
    • @ リモートにあるファイルを開いているとき
  5. 専用フラグ
    ウィンドウが専用状態になっているか1文字で表している。

    • d 弱い専用状態
    • D 強い専用状態

    専用状態になっていない場合は何も表示されない。

  6. フレーム名
    CUI版のみ表示される。初期状態のフレーム名は F1

  7. バッファ名
    通常は編集しているファイル名が表示される。

  8. 位置
    ウィンドウがバッファのどの位置を表示しているか。

    • ALL ウィンドウにバッファの全てが表示されている状態
    • Top ウィンドウがバッファの先頭を表示している状態
    • Bot ウィンドウがバッファの末尾を表示している状態
    • nn% ウィンドウの上部がバッファ全体の何%の位置にあるか
  9. 行数
    Lの文字の後に行数が表示されている。
    列数モードをオンにすれば列数も表示できる。

  10. メジャーモード名
    現在有効になっているメジャーモードが表示されている。
    なお、メジャーモードによっては追加の情報をメジャーモード名の後に表示するものがある。

  11. マイナーモード名
    有効になっているマイナーモード名のリスト。無い場合は表示されない。
    Emacsのいくつかの機能はマイナーモードの場所に並べて表示される。
    例えば Def はキーボードマクロ記録中を意味する。

モードラインのフォーマットや外観は変えることができる。
GUI版のモードラインはマウス操作が可能で、ホバー(マウスオーバー)すればツールチップで情報が表示されるし、クリックすることで様々なコマンドを実行できる。

はじめは暗号のように見えるEmacsの画面だが(操作も暗号のように思うかもしれない)、
モードラインの内容を知ることで少しでもEmacsを身近に感じてもらえたら嬉しい。

動作環境

Emacs 30.2
Ubuntu 24.04

参考

Emacs公式マニュアル 1.3 The Mode Line