@kyanny's blog

My thoughts, my life. Views/opinions are my own.

おれの eshell の設定

21世紀の1/10が過ぎたにもかかわらず未だに eshell をメインのシェルとして使ってる刺身☆ブーメランですこんにちわ。

http://oldtype.sumibi.org/show-page/kiyoka.2011_02_22#10 に触発されておれの eshell の設定をさらしてみる。もともと GitHub にあるけども。

https://github.com/kyanny/emacs-config/blob/master/dot.emacs.d/init.el#L249

;; Eshell
;; Emacs 起動時に Eshell を起動
;(add-hook 'after-init-hook (lambda () (eshell) ))
;; 補完時に大文字小文字を区別しない
(setq eshell-cmpl-ignore-case t)
;; 確認なしでヒストリ保存
(setq eshell-ask-to-save-history (quote always))
;; 補完時にサイクルする
;(setq eshell-cmpl-cycle-completions t)
(setq eshell-cmpl-cycle-completions nil)
;;補完候補がこの数値以下だとサイクルせずに候補表示
;(setq eshell-cmpl-cycle-cutoff-length 5)
;; 履歴で重複を無視する
(setq eshell-hist-ignoredups t)
;; prompt 文字列の変更
(setq eshell-prompt-function
      (lambda ()
        (concat "[kyanny@kyanny-laptop2 "
                (eshell/pwd)
                (if (= (user-uid) 0) "]\n# " "]\n$ ")
                )))
;; 変更した prompt 文字列に合う形で prompt の初まりを指定 (C-a で"$ "の次にカーソルがくるようにする)
;; これの設定を上手くしとかないとタブ補完も効かなくなるっぽい
(setq eshell-prompt-regexp "^[^#$]*[$#] ")
;; キーバインドの変更
(add-hook 'eshell-mode-hook
          '(lambda ()
             (progn
               (define-key eshell-mode-map "\C-a" 'eshell-bol)
;               (yas/minor-mode -1)      ; yasnippet マイナーモードだと eshell-cmpl-cycle-completions がバグるのでオフる。 C-u - M-x yas/minor-mode と等価。
               (define-key eshell-mode-map [up] 'previous-line)
               (define-key eshell-mode-map [down] 'next-line)
               ;(define-key eshell-mode-map [(meta return)] 'ns-toggle-fullscreen)
               (define-key eshell-mode-map [(meta return)] (select-toggle-fullscreen))
               )
             ))
(define-key global-map (kbd "C-z") 'eshell)
;; エスケープシーケンスを処理
;; http://d.hatena.ne.jp/hiboma/20061031/1162277851
(autoload 'ansi-color-for-comint-mode-on "ansi-color"
          "Set `ansi-color-for-comint-mode' to t." t)
(add-hook 'eshell-load-hook 'ansi-color-for-comint-mode-on)
;; http://www.emacswiki.org/emacs-ja/EshellColor
(require 'ansi-color)
(require 'eshell)
(defun eshell-handle-ansi-color ()
  (ansi-color-apply-on-region eshell-last-output-start
                              eshell-last-output-end))
(add-to-list 'eshell-output-filter-functions 'eshell-handle-ansi-color)

たいしたことやってませんね。 select-toggle-fullscreen とかは全画面にするパッチの機能です。一番のお気に入りは (define-key global-map (kbd "C-z") 'eshell) で、先のエントリにあったのと似たことを Dired 開いてから C-u C-z でできます (prefix arg つきで M-x eshell すると新しい *eshell* バッファを作るのだけど、 Dired バッファで新しい *eshell* バッファを作るとカレントディレクトリが Dired で開いてる場所になる)