Переопределение команд Emacs - PullRequest
2 голосов
/ 18 марта 2012

Я хочу переназначить forward-sexp в matlab-forward-sexp в matlab-mode.

В настоящее время я делаю это:

(define-key matlab-mode-map [remap forward-sexp] 'matlab-forward-sexp-safe)

но когда я набираю M-x forward-sexp в режиме matlab, я все равно получаю старое поведение. Зачем? Работает ли это только когда я вызываю forward-sexp с помощью сочетания клавиш?

когда я набираю C-h f forward-sexp все выглядит нормально:

forward-sexp is an interactive compiled Lisp function in `lisp.el'.

It is remapped to `matlab-forward-sexp-safe', which is bound to C-M-f,
<C-M-right>, ESC <C-right>.

(forward-sexp &optional ARG)



For more information check the manuals.

Move forward across one balanced expression (sexp).
With ARG, do it that many times.  Negative arg -N means
move backward across N balanced expressions.
This command assumes point is not in a string or comment.

This function is advised.

After-advice `ctx-flash'.

[back]

Ответы [ 2 ]

3 голосов
/ 19 марта 2012

Да, синтаксис [remap] явно предназначен для привязок клавиш.Когда привязка вызвала бы старую функцию, переназначение заставляет ее вызывать новую.Однако это не меняет определения любой функции - они все равно могут вызываться напрямую.

Подробнее см. M -: (info "(elisp) Remapping Commands") RET

Недавнее изменение в Emacs 24 прояснило этот текст справки, поэтому теперь он будет выглядеть следующим образом:

forward-sexp - интерактивная скомпилированная функция Lisp в `lisp.el '.

Его ключи переназначены в 'matlab-forward-sexp-safe'.Без этого переназначения он был бы связан с CMf,, ESC,.

2 голосов
/ 20 марта 2012

Если вы действительно хотите изменить поведение функции, вы можете использовать forward-sexp-function.

Также вы можете проверить режим октавы Emacs-24, который использует SMIE для анализа, заставляя forward-sexp автоматически перепрыгивать через фактические синтаксические элементы Octave, а не только в скобках / скобках / скобках.

...