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
にバインドして使っている。