Привязки клавиш Emacs 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.


person antonio    schedule 02.06.2013    source источник


Ответы (2)


Режим ess-noweb - это просто оболочка, которая загружает латексный режим и R-режим в соответствующие блоки. Поэтому, если вы определяете ярлык в latex-mode-map, он также должен быть доступен в буферах .rnw.

person VitoshKa    schedule 02.06.2013
comment
Должен быть способ различать режим без фрагментов буфера .rnw и буфера .tex. - person antonio; 04.06.2013

После некоторых проб и ошибок я нашел ответ.

Если мы находимся в буфере только 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"))
person antonio    schedule 04.06.2013