[英]Emacs lisp key binding in shell mode not working
我有emacs編輯器設置,可以在按Ctrl-z
時運行shell。 在外殼緩沖區內部時,我使用Ctrl-z
通過運行erase-buffer
功能來erase-buffer
。 代碼正在評估中(當我Ctrl-h v
並描述shell-mode-map
我可以看到Cz
在shell模式下綁定到clear-shell-buffer
。當我使用Mx
運行clear-shell-buffer
時,消息說:
您可以使用<Cz>運行命令
clear-shell-buffer
但是,當我在外殼中鍵入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))
發生這種情況是因為鍵綁定不正確。 您可以通過在外殼模式下執行Ch k Cz
來驗證這一點。
代替[(\\Cz)]
,請使用以下選項之一:
[(?\\Cz)]
[(control ?z)]
(kbd "Cz")
它將正確設置鍵綁定,並讓您使用Cz
調用正確的函數
如果僅評估那些語句,則可以看到正在發生的事情。 這是我得到的輸出
(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))
您會看到密鑰綁定的類型有所不同。 現在,當您要傳遞字符代碼時,您正在傳遞符號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.