2013-06-02 2 views
1

Я пытаюсь установить некоторые привязки клавиш для ESS. Я прочитал один способ:Связывание ключей Emacs 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.

ответ

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")) 
2

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

+0

Должен быть способ различать не-chunk-режим буфера .rnw и .tex-буфера. – antonio