EmacsのM-x shellでzshを使う設定
.zshrcの設定内容によっては、EmacsのM-x shellでは動作しなくなる。それは、zleをいじっているから。だけど、zshでもEmacsの中で動かす方法はある。以下の行を.zshrcに入れるだけでよい。
[[ $EMACS = t ]] && unsetopt zle
この設定は環境変数 EMACS が t であるならば zle を使わなくするという意味。で、環境変数 EMACS は誰が設定しているかというと comint.el の comint-exec-1 だ。以下の部分で環境変数を設定している。
(let ((process-environment (nconc ;; If using termcap, we specify `emacs' as the terminal type ;; because that lets us specify a width. ;; If using terminfo, we specify `dumb' because that is ;; a defined terminal type. `emacs' is not a defined terminal type ;; and there is no way for us to define it here. ;; Some programs that use terminfo get very confused ;; if TERM is not a valid terminal type. ;; ;; There is similar code in compile.el. (if (and (boundp 'system-uses-terminfo) system-uses-terminfo) (list "TERM=dumb" "TERMCAP=" (format "COLUMNS=%d" (window-width))) (list "TERM=emacs" (format "TERMCAP=emacs:co#%d:tc=unknown:" (window-width)))) (unless (getenv "EMACS") (list "EMACS=t")) (list (format "INSIDE_EMACS=%s,comint" emacs-version)) process-environment)) 略
zleをいじってからM-x shellが動かなくなったから諦めていたのだが、助かった。やっと疑問が解けたよ。
zshのエスケープシーケンスが有効な場合は以下の設定がよい。ansi-colorでエスケープシーケンスをfontifyする設定。
(autoload 'ansi-color-for-comint-mode-on "ansi-color" "Set `ansi-color-for-comint-mode' to t." t) (add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
履歴は共有した状態で anything-complete-shell-history を使う。これを使うと素のzshの履歴が貧弱でしょうがなくなる。だけど逆に補完は貧弱だから素のzshと併用するのが現実的だろうね。
anything.elとプラグイン等をリリース - http://rubikitch.com/に移転しました
M-x install-elisp http://www.emacswiki.org/cgi-bin/wiki/download/anything.el
M-x install-elisp http://www.emacswiki.org/cgi-bin/wiki/download/anything-config.el
M-x install-elisp http://www.emacswiki.org/cgi-bin/wiki/download/anything-match-plugin.el
M-x install-elisp http://www.emacswiki.org/cgi-bin/wiki/download/shell-history.el
M-x install-elisp http://www.emacswiki.org/cgi-bin/wiki/download/anything-complete.el