簡體   English   中英

Shell模式下的Emacs Lisp鍵綁定不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM