Eshellを開く・閉じるのにGitHubにあるEshell付属のesh-toggle.elを使っていたが、どうも開き方・閉じ方に不満があったのでpopwinを使おうと思い立った。
eshell-popを呼び出せばEshellが画面下半分に現れ、必要なくなったらC-gでEshellのウィンドウが消えます。
また、Universal Argument (C-u) を先に与えると、開いているバッファのカレントディレクトリにcdします。
これだけだとなんかいろいろ不具合があるような気がしますが、取り敢えず公開します。
my-eshell.el
(when (featurep 'popwin)
(push '("*eshell*" :height 0.5) popwin:special-display-config)
(defun eshell-pop (universal-argument)
"open eshell window using popwin-elf"
(interactive "P")
(let* ((eshell-buffer-name "*eshell*")
(eshell-buffer (get-buffer eshell-buffer-name))
(file-name (buffer-file-name (current-buffer)))
(current-directory (with-current-buffer (current-buffer) default-directory)))
(if eshell-buffer
(popwin:display-buffer eshell-buffer)
(eshell))
(when (and universal-argument file-name)
(eshell-kill-input)
(insert (concat "cd " current-directory))
(eshell-send-input)
(end-of-buffer)))))