emacs and tab
Table of Contents
Last modified: 20241116T1654+0900
2020年8月にリリースされたemacs27.1から、emacsはタブエディターに進化していたのに、つい最近まで知らなかった。(2024-10-15現在)
調べてみると、挑発的と言えるほどすばらしい拡張だった。
Thunderbirdというメーラーがあり、重たいのに一定の人気があるのは、タブが使えるからだという説があるし、自分もそうだと思う。複数のメールを参照しながらメールを作成するようなときにとても便利だ。複数のWebページを「タブ」で切り替えて閲覧するタブブラウザーの仕組みがもとになっていると思われる。
emacsで複数の文書を読み込んで切り替えるのには、次の三つの方法がある。
- window
- frame
- tab
順番に見ていこう。
1. window
おなじみのやつで、フレームを横分割(C-x 2
)、または縦分割(C-x 3
)する。二つの文書を見比べるのには便利だが、三つ以上になると苦しい。
2. frame
22 Frames and Graphical Displays
一般的には「ウインドウ」と呼ぶが、emacsでは、「ウインドウ」が前の意味で使われるので、「フレーム」と呼んで区別する。やはり、たくさんのフレームを開いて作業するのは煩雑だ。MS Wordで複数の文書を選択して起動すると、この状態になる。
emacsで、新しいフレームを開くコマンドは C-x 5 2
。作業スペースとは違うところに何かを表示させておきたいときに使えるが、時間がたつとぐだぐだになってしまうことが多い。
3. tab-bar
タブブラウザのように、一つのフレームの中に、複数の文書が「タブ」で切り替えられていく。文書間の行き来が簡単で、しかもタブに文書名が表示されているので、どの文書が開いているかが一目でわかる。
いわゆる「テキストエディター」と呼ばれるソフトウエアにはこの機能を備えているものが多い。
新しいタブを開くコマンドは、 C-x t 2
。
3.1. key bindings
キーストロークがちょとだけ長いので、使いやすいものに割り当てている。
(use-package emacs :bind ( ("s-<right>" . tab-next) ("s-<left>" . tab-previous) ("s-<up>" . tab-new) ("s-<down>" . tab-close) ("s-<return>" . tab-switch) ) )
Macだと、 s-
は command
キーを押しながらを意味するので、矢印キーのそれぞれに、左右タブへの移動、タブの開閉を割り当ててみた。最後の、 command-<return>
は便利。その時に開いているタブのリストが表示され、そこから選んで飛べる。
4. tab-line
通常の使用だとこれで十分だと思うが、これまでの説明はtab-barについてであり、これに加えてtab-lineがある。
tab-barはフレームに設置されるが、tab-lineはウインドウに設置される。
tabの種類 | 設置対象 |
---|---|
tab-bar | frame |
tab-line | window |
たとえば、一つのフレームの中に二つのウインドウを開いているとき、設置できるtab-barは一つだが、tab-lineは二つのウインドウに一つづつ設置できる。
全てのウインドウでtab-lineを有効にするには、 (global-tab-line-mode)
というコマンドを使う。通常は、その一行を init.el
の中に書いておく。
4.1. key bindings
動作 | tab-line |
---|---|
新しいtabを開く | (tab-lineの) + をクリック |
tabを閉じる | (tab-lineの) x をクリック |
次のtabへ移動 | C-x <right> |
前のtabへ移動 | C-x <left> |
5. 使いこなし
tab-barとtab-lineを実装することで、emacsはフレームとウインドウのそれぞれに複数のタブを設置できるようになった。すばらしい拡張だ。
emacsを起動して、一つのフレームが開く。このとき C-x 5 2
で、もう一つのフレームが離れた場所に開く。そこで C-x t 2
と打つと、一つのフレームの中に新しいタブができる。さらに C-x 2
と打つと、そのタブの下半分に新しいウインドウが開く。さらに M-x tab-line-new-tab
やtab-lineの +
をクリックすることで、そのウインドウの中に新しいタブが開く。
一つのフレームの中に C-x t 2
でタブを開いたとき、それはtab-barに表示され、その下にtab-lineが表示される。 C-x 2
や C-x 3
でフレームの中に分割ウインドウを開いたときには、それぞれの上部にtab-lineが表示される。
たとえば、 C-x 5 2
で開いた2つのフレームに、 C-x t 2
で二つのタブを開き、それぞれのタブに C-x 2
で二つのウインドウを開き、さらにそれぞれのウインドウに二つのタブを開くと、次のように、24個のバッファが開くことになる。
どのように使いこなすか、創造力が試されている。
tab-bar | tab-line | ||
---|---|---|---|
separate frame | tab (frame dependent) | window | tab (window dependent) |
1 | 1 | 1 | 1 |
2 | |||
2 | 1 | ||
2 | |||
2 | 1 | 1 | |
2 | |||
2 | 1 | ||
2 | |||
2 | 1 | 1 | 1 |
2 | |||
2 | 1 | ||
2 | |||
2 | 1 | 1 | |
2 | |||
2 | 1 | ||
2 |