EmacsをTerminalとして使う
emacs-libvterm っていうのを見つけたのだけどこれがすごく良いので紹介します。
emacs-libvterm
https://github.com/akermu/emacs-libvterm
EmacsにはTerminal系の機能としてterm-modeやeshellなどがあるんですが、遅かったり、クセが強かったりで使えてませんでした。一時期それでも使おうとしてたんですがちょっと無理でした。
それがemacs-libvtermはTerminal.appと遜色ないくらいに速く動いてくれます。しかもtmuxもちゃんと動く。 ちなみにneovim/libvterm というやつを元にしてるみたいなのでvim様には頭が上がらないですね。
試し始めはたまになんかもっさりしたり、tigみたいなncurses系のアプリで表示が崩れたりしたんだけどそれは使っている日本語フォントに起因する問題だったようで、 Cicaというフォントにしたら見事に解消しました。
https://github.com/miiton/Cica
Emacs in Emacsしてしまうのを封じる
さて、Emacsの中でシェル使えるようにしてもEmacsの中のシェルでさらにEmacsを開くとわけがわからなくなるのでそれを防止しましょう。emacs
の代わりに emacsclient
を使って、新たにEmacsを起動するのではなく今起動しているEmacsに新しいバッファを開くようにします。
Emacs側ではサーバーを起動して置いて
;; .emacs.d/init.el (server-start)
さらに次のスクリプトを ~/bin/emacs
として置いておきます。
#!/bin/bash if [[ "$1" == "" ]] then /path/to/emacsclient -n . else /path/to/emacsclient -n "$@" fi
逆にEmacsからterminal側に移るにも適宜keybindを設定してterminalとEmacsの行き来を便利にすると良いでしょう。
まとめ
emacs-libvtermを使うことでTerminalの中でEmacsを使うのではなくEmacsの中でTerminalが使えます。このブログはエイプリルフールではなくて真面目に書いたつもりです。