在角色模式下从ansi-term运行Emacs命令

时间:2013-01-23 16:27:30

标签: emacs elisp

我希望Emacs能够在 ansi-term 缓冲区中触发与字符模式中的M-x command RET相关联的标准行为。

我实际上曾经有过这个功能,但由于某些原因它在过去几天就消失了,即使我有升级的Emacs(尽管我可能无意中修改了我的init文件)

另外,我有以下用于工作的钩子(在窗口之间切换),但它不再存在。

(global-set-key (kbd "M-J") 'windmove-left)          ; move to left window
(global-set-key (kbd "M-L") 'windmove-right)         ; move " " 
(global-set-key (kbd "M-I") 'windmove-up)            ; move " "
(global-set-key (kbd "M-K") 'windmove-down)          ; move " " 

(add-hook 'term-mode-hook
  (lambda()
    (define-key term-raw-map (kbd "M-J") 'windmove-left)  
    (define-key term-raw-map (kbd "M-L") 'windmove-right) 
    (define-key term-raw-map (kbd "M-I") 'windmove-up)    
    (define-key term-raw-map (kbd "M-K") 'windmove-down)  
    (define-key term-raw-map (kbd "M-F") 'toggle-maximize-buffer) 
    ))

更新

如果我评估(lookup-key term-raw-map (read-kbd-macro "\C-x")) 之前打开任何ansi-term,我会得到:term-send-raw,但如果我评估 之后我会打开一个ansi-term,我得到:

(keymap #^[nil nil keymap 
#^^[3 0 pop-global-mark nil list-buffers term-send-raw list-directory eval-last-sexp find-file nil nil indent-rigidly ...] #^^[1 0 #^^[2 0 
#^^[3 0 pop-global-mark nil list-buffers term-send-raw list-directory eval-last-sexp find-file nil nil indent-rigidly ...] nil nil nil nil nil nil nil nil nil ...] nil nil nil nil nil nil nil nil nil ...] nil nil nil nil nil nil nil ...] (67108912 . text-scale-adjust) (67108925 . text-scale-adjust) (67108909 . text-scale-adjust) (67108907 . text-scale-adjust) (67108896 . pop-global-mark) (C-left . previous-buffer) (left . previous-buffer) (C-right . next-buffer) (right . next-buffer))

这是预期的行为吗?

1 个答案:

答案 0 :(得分:6)

我使用这样的设置:

(define-key term-raw-map (kbd "M-x") 'nil)

然后M-x像往常一样在term-char-mode中工作。如果对某些函数使用全局键绑定,请将'nil放在term-raw-map中的相同键绑定中。