1

我正在尝试为 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

4

2 回答 2

2

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

于 2013-06-02T21:15:25.550 回答
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"))
于 2013-06-04T20:21:29.893 回答