如何使用comint将编译绑定到组合键

时间:2010-08-31 14:43:33

标签: emacs

我目前将编译绑定到C-x c。我知道我可以使用C-u C-x c在comint模式下运行编译,但我更喜欢直接将它绑定到C-x c。如果不从compile.el复制整个编译函数,调整它并绑定它,我无法理解如何做到这一点。还有更好的方法吗?

编辑:为了澄清我的草率语言,我不希望在comint模式下绑定C-x c。我希望使C-x c运行'使用comint模式编译。我目前有C-x绑定'编译。我可以通过键入C-u C-x c来做我想要的但我更喜欢能够输入C-x c来做到这一点。

4 个答案:

答案 0 :(得分:3)

您可以这样做:

(global-set-key [(C-f5)] 'compile)
(global-set-key [(f5)] 'recompile)

它将compile绑定到 C-f5 ,并且每次要使用compile中给出的相同命令重新编译时,只需键入 f5 。它适用于您目前所处的主要模式。

对于您的情况,请执行以下操作:

(global-set-key [?\C-x ?c] 'compile)

答案 1 :(得分:3)

认为这有效......

(defun c-w-c ()
  (interactive)
  (call-interactively 'compile t (vector 21 (this-command-keys-vector))))

(global-set-key (kbd "C-x c") 'c-w-c)

向量前面的'21'是ctrl-u前缀键,它似乎欺骗了编译函数,认为它是用C-u C-x c调用的。

修改

它不起作用,但确实如此:

(defun c-w-c ()
  (interactive)
  (setq current-prefix-arg '(4))
  (call-interactively 'compile))

答案 2 :(得分:1)

你要这个吗?

(define-key comint-mode-map (kbd "C-x c") 'compile)

答案 3 :(得分:0)

这也有效:

(define-key comint-mode-map (kbd "C-x c")
  (lambda (command)
    (interactive
     (list
      (let ((command (eval compile-command)))
        (if (or compilation-read-command current-prefix-arg)
            (compilation-read-command command)
          command))))
    (compile command t)))

它很难看,因为它复制了compile命令中的“交互式”规范。