2015-11-11 63 views
0

當我按Ctrl-z時,我有我的emacs編輯器設置來運行一個shell。在shell緩衝區內部時,我使用Ctrl-z通過運行erase-buffer函數來清除緩衝區。該代碼正在評估(當我Ctrl-h v和描述shell-mode-map我可以看到C-z在shell模式勢必clear-shell-buffer當我M-x運行clear-shell-buffer有消息稱:在shell模式下Emacs lisp鍵綁定不起作用

您可以運行該命令clear-shell-buffer <鋯石>

然而,當我在shell中鍵入Ctrl-z不運行的功能或全部給任何消息。任何想法,爲什麼?

(defun clear-shell-buffer() 
    "Clear the contents of the current buffer" 
    (interactive) 
    (erase-buffer) 
    ;; (insert "/usr/games/fortune -a") 
    (comint-send-input) 
) 

(put 'erase-buffer 'disabled nil) 
(eval-after-load 'shell 
    '(define-key shell-mode-map [(\C-z)] 'clear-shell-buffer)) 

回答

1

這是因爲鍵綁定不正確而發生的。在shell模式下,您可以通過執行C-h k C-z來驗證。

相反的[(\C-z)],使用下列選項之一:

  • [(?\C-z)]
  • [(control ?z)]
  • (kbd "C-z")

這將正確地設置鍵綁定,讓你調用正確的函數與C-z

如果您只評估這些語句,您可以看到發生了什麼。下面是輸出我得到每個

(define-key shell-mode-map [(\C-z)] 'clear-shell-buffer) 
;;Output: (define-key shell-mode-map [(C-z)] (quote clear-shell-buffer)) 

(define-key shell-mode-map [(?\C-z)] 'clear-shell-buffer) 
;;Output: (define-key shell-mode-map [(26)] (quote clear-shell-buffer)) 

你可以看到類型的鍵綁定不同。現在,當你想傳遞一個字符代碼時,你正在傳遞一個符號。

+0

或'[(control?z)]'。 – Drew

+0

這有效,什麼時候改變了? – mikeb