今回も前回に引き続き 、「 ターミナルそのもの」に関するレシピをお届けします。
Emacsからターミナルを呼び出す
第32回 ・第33回 で紹介したように、geditやKateといったテキストエディタにはターミナルを組み込んだ状態で利用することができます。
テキストエディタを頻繁に利用する場合はこれらを利用した方が便利でしょう。
EmacsでもgeditやKateと同様に、組み込みターミナルを利用することができます。Emacsでターミナルを利用する場合は複数の方法があり、それぞれ特性が異なります。
Emacs::shell
Emacsのごく標準的な組み込みターミナルは、M-x shellで起動することができます(図1 ) 。
図1 M-x shell
しかし、上記のスクリーンショットでも部分的に文字が化けている通り、このモードはターミナルとしての機能に制限があります。端的には[tab]による補完なども機能しませんし、「 ターミナルソフトウェア」としては不完全なものです[1] 。
多くの場合、このモードはあまり役に立たないと思われます。
Emacs::eshell
eshellは、EmacsのLispインタープリタを利用して構築されたシェルです。Emacs22以降、Emacsに組み込まれていますので、コマンド入力インターフェースとして利用することができます(図2 ) 。M-x eshellとすることで起動できます。
図2 M-x eshell
eshellは厳密には「ターミナル」ではありませんので、vimなどを内部で動作させることこそできません(起動することはできますが、うまくカーソルを処理することができません)が、Emacs内で使うターミナルとして軽快に動作させることができるでしょう。
積極的に使うのであれば、Emacs Wiki やEmacs 電子書棚のWiki などから設定例を探すと良いでしょう。
Emacs::ansi-term
Emacs内で使えるターミナル機能として、もっとも使い勝手の良い実装はansi-termでしょう。M-x ansi-termで起動することができます(図3 ) 。
図3 M-x ansi-term
ansi-termはほぼフル機能のターミナルとして機能するため、Emacs上でターミナル上で動作するたいていのソフトウェアを動作させることができます。
Emacs内でターミナルをトグルで呼び出す(shell-toggle)
ansi-termは便利な機能なのですが、テキスト入力の途中でターミナルを呼び出し、またテキスト入力に戻る、といった操作を行うことを考えると、あまり便利ではありません。頻繁にEmacs内でターミナルを利用するのであれば、shell-toggleを導入するのが良いでしょう。
オリジナルのshell-toggle はansi-termを制御することができませんので、ansi-termに対応したパッチ版 を利用すると良いでしょう。
インストールは次のように行います。
$ mkdir .emacs.d
$ cd .emacs.d
$ wget http://www.linux-france.org/article/appli/emacs/bibliotheque.html/shell-toggle-patched.el
さらに、emacs.elに以下のコードを追加します[2] 。
リスト1
(load-library "~/.emacs.d/shell-toggle-pathed.el")
(autoload 'shell-toggle "shell-toggle"
"Toggles between the *shell* buffer and whatever buffer you are editing."
t)
(autoload 'shell-toggle-cd "shell-toggle"
"Pops up a shell-buffer and insert a \"cd <file-dir>\" command." t)
(global-set-key "\C-ct" 'shell-toggle)
(global-set-key "\C-cd" 'shell-toggle-cd)
[2] shell-toggleのオリジナルでは[Ctrl]+[F1]や[Alt]+[F1]に各コマンドを割り当てていますが、[ F1]が含まれるキーシーケンスはgnome-terminal上では利用できませんので変更しています(ヘルプが呼び出されてしまいます) 。
これにより、C-c tを入力するたびに、「 ansi-termを下側ウインドウを分割して表示」 →「 ansi-termをウインドウ全体に表示」 →「 ansi-termを消去し、元の画面に戻す」という動作を行うようになります。
ほとんどホームポジションから指を離さずにターミナルを呼び出すことができますので、便利に利用することができるでしょう。
なお、eshellを利用している場合は、esh-toglle.el を利用することで同じような使い方が可能です。
mlterm
Ubuntuの標準環境ではgnome-terminalが標準のターミナルソフトウェアとなっていますが、gnome-terminalには次のような問題があります。
一部のいわゆる全角文字の幅が適正でない問題は設定によって回避することができますが 、EUC-JPを指定して起動させることは現状では困難です[3] 。
用途にもよりますが、ターミナル内で日本語を積極的に利用するような場合(あるいはEUC-JP環境が存在している場合) 、異なるターミナルソフトウェアを利用する方が良いでしょう。
[3] gnome-terminal上で[端末] →[ 文字コードの設定] →[ 追加と削除...]( バージョンによっては[Add or Remove...] )から文字コード設定を開き、EUC-JPを登録しておけばEUC-JPを適正に表示することができます。しかし、環境変数などで文字コードを指定していても、バグによって起動時に自動反映されないため(本来であればLANG等の環境変数を読み取り、自動的に適切な文字コードにならなければいけません) 、起動後に毎回[端末] →[ 文字コードの設定] →[ EUC-JP]と選択する必要があります(図4 ) 。
図4 EUC-JPの設定
こうした問題を回避する場合、異なるターミナルソフトウェアを使う必要があります。これまでに紹介してきたTerminatorなどは独自の特徴のあるソフトウェアでしたので、単純にgnome-terminalの置き換えとして利用することは難しいでしょう[4] 。
gnome-terminalでは不足な場合(あるいは動作が気にいらない場合) 、mltermの利用を検討すると良いでしょう。mlterm (Multi Lingual TERMinal)は多言語に対応したターミナルソフトウェアで、gnome-terminal以上に軽快に動作します。
mltermを試すには次のようにインストールを行います(あるいはSynapticで同じパッケージをインストールしてください) 。なお、scimを利用しない場合はmlterm-im-scimパッケージをインストールする必要はありません。
$ sudo apt-get install mlterm mlterm-tools mlterm-im-scim
mltermを起動すると、( 図5 )のような画面になるはずです。
図5 mlterm
標準ではインプットメソッドとしてXIMを利用するようになっていますので、[ Ctrl]+マウス右クリックを行い、設定画面(図6 )を表示させ、scimを利用する設定にしておくと良いでしょう。また、スクロールバーが左側にあることに違和感を感じる方は、「 スクロールバー」タブで設定を変更することができますし、色の設定を行うこともできます。
なお、この設定画面はmlterm-toolsパッケージをインストールしていなければ利用できません。
図6 mltermの設定画面
mltermではフォントを変更したい場合、gnome-terminalのような形では行えません。設定ファイルを適宜記述する必要があります。設定ファイルは~/.mlterm/font(非アンチエイリアス状態で利用する場合)や~/.mlterm/aafont(アンチエイリアスを仕様する場合)ですので、これらの設定ファイルで検索してみることで設定が分かるはずです。
mltermを利用する場合、前述のgnome-terminalで一部の全角文字の表示幅がおかしい問題と同じような現象に遭遇するはずです(おそらく「■」などが妙に小さく表示されるはずです) 。~/.mlterm/mainに以下の設定を行うことで、この問題を回避することができます。
リスト2
col_size_of_width_a = 2
mltermにはタブはありませんが、代わりに[Ctrl]+[F2]を押すことでptyを増やすことができます(押すたびに増えていきます) 。pty同士の行き来には[Ctrl]+[F3]で「進む」 、[ Ctrl]+[F4]で「戻る」ことが可能です。何枚もターミナルを立ち上げるよりも、ptyを増やした方が効率良く操作できるでしょう。
その他、mltermの操作については/usr/share/doc/mlterm/README.ja.gzかhttp://mlterm.sourceforge.net/README.jaを参照してください。