с двумя функциями, выполняемыми с одной клавиатурой - PullRequest
2 голосов
/ 26 августа 2011

Я пытаюсь отобразить C-<return> на move-end-of-line, затем newline-and-indent

. В моих .emacs я играл со следующим:

(global-set-key (kbd "C-<return>") '(progn (move-end-of-line) (newline-and-indent)))

И

(defun c-ret()
    '(move-end-of-line newline-and-indent))
(global-set-key (kbd "C-<return>") 'c-ret)

но ни один не работает.

Указатели?

Ответы [ 3 ]

6 голосов
/ 26 августа 2011

Вы цитируете команды.

Это означает, что они не будут выполнены.Вам также нужно (интерактивно) указать emacs, что его можно вызывать с клавиатуры.

Затем вам нужно правильно настроить параметры для ваших функций.

Далее, я думаю, что ваша номенклатура длявозврат неправильный.

Ваше основное недоразумение здесь заключается в знании того, как работает eLisp.Это нормально, это тайный язык программирования.

'aka QUOTE - это специальная инструкция для Lisp.Он говорит: «Не оценивайте то, что следует за мной», и возвращает неоцененный параметр.

So '(строка foo) обнуляется в (QUOTE (FOO BAR)), которая возвращает (FOO BAR).

Попробуйте это:

(defun c-ret()
    (interactive)
    (move-end-of-line nil)
    (newline-and-indent))

(global-set-key (kbd "C-RET") 'c-ret)
2 голосов
/ 26 августа 2011

Вы можете сделать это без написания кода самостоятельно.См. http://www.emacswiki.org/emacs/KeyboardMacrosTricks для получения инструкций по захвату последовательности команд в виде макроса клавиатуры, названию ее и сохранению в вашем .emacs.Затем вы можете дать новой команде привязку клавиш по вашему выбору, например, (global-set-key (kbd "C-c i") 'new-command-name).

1 голос
/ 29 августа 2011

Если вам нужно однострочное решение, оно тоже будет работать:

(global-set-key (kbd "C-<return>") (lambda () (interactive) (move-end-of-line nil) (newline-and-indent)))
...