2013-01-21 54 views
2

我發現一個nice post幾個 天前詳細介紹瞭如何用C-d關鍵字殺死shell緩衝區。基本上, 用C-d查殺過程後你現在可以再次點擊C-d來殺死 的緩衝區。用C-d殺死*終端*緩衝區

我試圖實現term-mode類似的東西,但我遇到了一個 問題。在你終止這個術語的過程之後(用通常的C-d),看起來 緩衝區改變使用的鍵盤映射,但我找不到它是什麼!

例如,啓動term命令(M-x term RET RET),然後只需 立即命中C-d。一旦過程終止,緩衝區仍然報告爲term-mode中的 ,但它們使用的鍵盤映射既不是term-mode-map也不是 term-raw-map

所以
我要麼需要找出它正在使用,所以我可以綁定到C-d什麼kill-buffer映射。
或者我需要另一種方式在term-mode中使用C-d來終止緩衝區。

回答

1

雖然Trey Jackson的版本是絕對正確的,但下面是不需要知道緩衝區名稱的另一個版本。然後管理多個終端緩衝區變得更容易。

(defun term-handle-exit--close-buffer (&rest args) 
    (when (null (get-buffer-process (current-buffer))) 
    (insert "Press <C-d> to kill the buffer.") 
    (use-local-map (let ((map (make-sparse-keymap))) 
        (define-key map (kbd "C-d") 
         (lambda() 
         (interactive) 
         (kill-buffer (current-buffer)))) 
        map)))) 
(advice-add 'term-handle-exit :after #'term-handle-exit--close-buffer) 
2

嘗試了這一點:

(defun delete-char-or-kill-terminal-buffer (N &optional killflag) 
    (interactive "p\nP") 
    (if (string= (buffer-name) "*terminal*") 
    (kill-buffer (current-buffer)) 
(delete-char N killflag))) 
(global-set-key (kbd "C-d") 'delete-char-or-kill-terminal-buffer) 

*terminal*進程退出,緩衝切換到基本的模式,這就是爲什麼C-d你想要什麼沒有做。