shell-mode で C-k したとき、サブプロセス を消す

これも、だいぶ前に書いたもの。
M-x shell でコマンドプロンプトに入って、作業後に C-k して "サブプロセスが走っています。" とか言われてムキッとなった人に。
けっこう重宝するので貼っておく。

(defun kill-process-and-buffer ()
  (interactive)
  (let* ((buf (selected-buffer))
         (proc (buffer-process buf)))
    (when proc
      (kill-process proc)
      (sleep-for 0.5))
    (kill-buffer buf)))

(add-hook 'ed::*shell-mode-hook*
          #'(lambda ()
              (define-key ed::*shell-mode-map* #\C-\d       'kill-process-and-buffer) ; unix 風に C-d でも抜けるように
              (define-key ed::*shell-mode-map* '(#\C-x #\k) 'kill-process-and-buffer)))

フック先を変えれば shell 以外でも使える。