header

2012年12月19日水曜日

multi-termにhelmでshell-historyを表示して挿入

multi-term.elの設定

最近helmからshell-historyを表示する記事を書いたのですが、
multi-termユーザー用に書いています。ただ、
自分のmulti-termの設定をみると普通のパッケージより
設定がめんどうだなと思ったので、紹介したいと思います。

特徴

multi-termの特徴はmulti-termコマンドを行うごとにターミナルが増えていくことです。(だからmulti-termという名称だと思いますが)

multi-termのインストール

Emacs24ユーザーならM-x list-packagesコマンドでインストールできます。

私の設定

私の設定例です。私はzshでemacsのキーバインド使っています。
ansi-term-color-vectorはterminalの色の設定です。黒画面向けです。
term-send-forward-charとかbackwardとかはデフォルトのmulti-termだと
C-pでEmacsで定義したC-pとなりますが、移動に関してはターミナルと
同じにしてほしいので定義しなおしています。


最初のadd-hook term-mode-hookはterm-modeが呼ばれた後でこの設定を読み直さないと反映されないために入れてあります。また、一番私がはまったポイントでもあります。
2013/1/18 訂正 keybindの定義をterm-mode-hookに絡ませれば
設定できましたのでコードを修正しました。
2013/3/27 Emacs24.3.5でエラーになったのでansi-term-color-vectorを修正

(eval-when-compile (require 'cl))
(require 'multi-term)

(setq multi-term-program shell-file-name)
(lexical-let
((emacs24.3
[term term-color-black
term-color-red
term-color-green
term-color-yellow
term-color-blue
term-color-magenta
term-color-cyan
term-color-white])
(old-emacs
[unspecified
"black" "red3" "green3" "yellow3"
"DeepSkyBlue" ; directory
"magenta1" "cyan3" "white"]))
(setq ansi-term-color-vector
(if (version< "24.3.5" emacs-version)
emacs24.3
old-emacs)))

;; my-keybinds for keybinds -e
(defun term-send-forward-char ()
(interactive)
(term-send-raw-string "\C-f"))

(defun term-send-backward-char ()
(interactive)
(term-send-raw-string "\C-b"))

(defun term-send-previous-line ()
(interactive)
(term-send-raw-string "\C-p"))

(defun term-send-next-line ()
(interactive)
(term-send-raw-string "\C-n"))

(add-hook 'term-mode-hook
'(lambda ()
(let* ((key-and-func
`(("\C-p" term-send-previous-line)
("\C-n" term-send-next-line)
("\C-b" term-send-backward-char)
("\C-f" term-send-forward-char)
(,(kbd "C-h") term-send-backspace)
(,(kbd "C-y") term-paste)
(,(kbd "ESC ESC") term-send-raw)
(,(kbd "C-S-p") multi-term-prev)
(,(kbd "C-S-n") multi-term-next)
;; 利用する場合は
;; helm-shell-historyの記事を参照してください
;; ("\C-r" helm-shell-history)
)))
(loop for (keybind function) in key-and-func do
(define-key term-raw-map keybind function)))))

おまけ

もしhelmを使っているのでしたら ここ でhelmでshell-historyを表示する方法を
紹介しています。helm-shell-history用の設定をしたら
key-and-funcの中に("\C-r" helm-shell-history)みたいなコードを
追加すれば使えると思います。よければ使ってみてください。

呼び出すときのコード

.emacsとかに設定してください。
私はCtrl+Meta+Reternで起動するようにしています。
ファイル名とキーバインドは適宜変更してみてください。
上のコードの設定のファイル名がinit_multi-term.elという名前 ~/.emacs.d/package_configs/中に配置されている場合のコードです。

(autoload 'multi-term "~/.emacs.d/package_configs/init_multi-term")
(global-set-key (kbd "<C-M-return>") 'multi-term)
Emacs Lispテクニックバイブル
るびきち
技術評論社
売り上げランキング: 46617

0 件のコメント:

コメントを投稿

Popular Posts

Blogger templates

Blogger news