ansi-termを使ってターミナルエミュレータを起動していたが、引数を直接渡せないなどの細かい挙動が気になりだした。 考えつく限り自分の要求に合うように関数の挙動を変更した。
- 起動ごとに新たなプロセスとバッファを作成する。
- ただしすでに同じものがある場合、何もしない。
- バッファ名は実行しているコマンドとワーキングディレクトリで特定できるようにする。
- 同一コマンド同一ディレクトリの場合、同じような作業をやっているとみなして同一視する。
(require 'term)
(defun symdon-shell-command (line &optional cwd)
(interactive (list
(read-string "Command: " "" 'our-async-exec-cmd-history "")
(read-directory-name "Directory: " default-directory 'our-async-exec-cwd-history default-directory)))
(let ((default-directory cwd))
(switch-to-buffer
(funcall #'term-ansi-make-term
(format "%s: In %s" cmd (expand-file-name cwd))
"bash" nil "-c" line))))
C-t C-c にバインドして使っている。