Emacs ESS密钥绑定

时间:2013-06-02 20:02:07

标签: emacs latex elisp ess

我正在尝试为ESS设置一些键绑定。我读过一种方法是:

(eval-after-load "ess-mode"
  '(define-key ess-mode-map (kbd "<f5>") 'myfunc))

但这仅适用于<<>>@分隔的代码块内部。

另一个问题是我想将相同的密钥用于普通LaTeX模式(.tex文件)和LaTeX作为Noweb(.rnw文件)的一部分,因此我不能只为密钥定义两次LaTeX模式和ESS模式。

虽然有LaTeX-mode-hook,但我看不到类似`ess-noweb-mode-hook的内容。

2 个答案:

答案 0 :(得分:2)

ess-noweb模式只是一个包装器,它在相应的块中加载latex模式和R模式。因此,如果您在latex-mode-map中定义一个快捷方式,它也应该在.rnw缓冲区中可用。

答案 1 :(得分:1)

经过一些反复试验后,我找到了答案。

如果我们在仅限LaTeX的缓冲区中,则为真:(and (equal (symbol-name major-mode) "latex-mode") (not ess-noweb-mode)))

如果我们在ESS缓冲区的外部,这是真的:ess-noweb-mode

您可能对以下便利功能感兴趣。

;Check ESS related modes 
(defun is-pure-latex ()
  "The buffer is in LaTeX mode, but not in ESS mode."
  (and (equal (symbol-name major-mode) "latex-mode") (not ess-noweb-mode)))

(defun is-ess ()
  "The buffer is in ESS mode."
  ess-noweb-mode)

(defun is-ess-doc ()
  "The buffer is in ESS mode and insertion point is outside a chunk."
  (and ess-noweb-mode (equal (symbol-name major-mode) "latex-mode")))

(defun is-ess-chunk ()
  "The buffer is in ESS mode an insertion point is inside  a chunk."
  (equal (symbol-name major-mode) "ess-mode"))

(defun is-ess-inf ()
  "The buffer is in inferior ESS mode"
  (equal (symbol-name major-mode) "inferior-ess-mode"))