[Emacs] 最近のterm-modeの設定など
EmacsのTerm-mode + Multi-term-modeは非常に便利でMac使いだとTerminalとかiTermとかの存在意義が殆ど無くなるほど強力なのですが、Emacsとのbuffer間の連携にちょいとデフォだと問題があるので、最近加えた変更などうpしておきます
(add-hook 'term-mode-hook '(lambda () (define-key term-raw-map "\C-y" 'term-paste) (define-key term-raw-map "\C-q" 'move-beginning-of-line) (define-key term-raw-map "\C-r" 'term-send-raw) (define-key term-raw-map "\C-s" 'term-send-raw) (define-key term-raw-map "\C-f" 'forward-char) (define-key term-raw-map "\C-b" 'backward-char) (define-key term-raw-map "\C-t" 'set-mark-command) (define-key term-raw-map (kbd "ESC") 'term-send-raw) (define-key term-raw-map [delete] 'term-send-raw) (define-key term-raw-map "\C-z" (lookup-key (current-global-map) "\C-z"))))
内容としては移動 + コピペ関連はEmacs固有の関数を使う事で対処。 + VimやViを使った時にESCがEmacs側に奪われるのに問題があるということでESCを'term-send-rawにした感じです。あとは[delete]も'term-send-rawにしておきます。
ちなみにTerm-modeの拡張方法は基本的に以下の二種類に分けることが出来て、
- Emacsに割り当てられているキー割り当てをTerm側に割り当てたい(この場合はtem-send-rawを割り当てる(まあESCとdeleteくらいしか設定する必要ない?かと思いますが))
- term-mode内で、特定のキーバインドにEmacsの関数を割り当てる(設定の大部分はこっちになるはず。この場合はdescribe-key(C-h k)などを実行して普段Emacsで実行しているコマンドをterm-mode内のキーバインドにする。
という感じです。まあ上記の設定くらいやっておけば最低限のバッファ間共有は出来ると思いますが。(Term内部VimとEmacs間の交流とか, Termで実行したコマンド出力結果をEmacsの別バッファにペーストするとか)
まあそんなとこ