1

私はオーバーライドして使用したいとC-l思います. はデフォルトである必要があり、それ以外の場合は です。どうすればいいですか?M-x erase-bufferRETm-shell-modeC-lrecenter-top-bottom

4

3 に答える 3

4

何であるかはわかりませんm-shell-modeが、それが明確に定義されたメジャーモードであれば、次のようにしてうまくいくはずです:

(require 'm-shell-mode)
(define-key m-shell-mode-map (kbd "C-l") 'erase-buffer)

同じ視覚効果を持つが、バッファの内容を保持する別のバインディングをお勧めします (これは便利です)。

(defun shell-clear-command (&optional a)
  "\"clear\" the screen"
  (interactive "P")
  (recenter (or a 0)))
(define-key m-shell-mode-map (kbd "C-l") 'shell-clear-command)
于 2012-05-31T17:29:25.503 に答える
3

m-shell-modeが に基づいている場合comint-mode(これは、別のプロセスと対話するためのシェルを提供する多くのモードに当てはまります) return、関数 を使用してキープレスを matlab に渡すことができますcomint-send-input。その場合、次のコードはあなたが望むことをするはずです:

(defun clear-and-return () 
  "Erases the buffer, and then passes a return to the buffer process.
Assumes the buffer is attached to a comint process."
  (interactive)
  (erase-buffer) 
  (comint-send-input))

(defun my-m-shell-mode-hook ()
  (local-set-key (kbd "C-l") 'clear-and-return))

(add-hook 'm-shell-mode-hook 'my-m-shell-mode-hook)

最初のdefunは、あなたが望むことをする関数を作ります。C-l2 つ目は、関数が呼び出されたときにアクティブなバッファーの関数にバインドするフック関数です。はadd-hook、 を起動するたびに 2 番目の関数を実行するように emacs に指示しますm-shell-mode。の本体内にさらに m-shell-mode のカスタマイズを追加できmy-m-shell-modeます。モードを開始するたびに、Emacs はそれらすべてを実行します。

m-shell-modeに基づいていない場合はcomint-mode、 を押したときに何が起こるかを調べる必要がありますreturn。モードを実行しているバッファーC-h k RETから、return キーにバインドされた関数を検索するために入力します。comint-send-input上記のコードではなく、その関数を使用してください。

于 2012-05-31T21:32:37.993 に答える
1

m-shell-mode次のコードをフックに追加できます。

(local-set-key (kbd "C-l") 'erase-buffer)
于 2012-05-31T17:34:44.767 に答える