Emacs: как переопределить Ctrl-Enter при включенном режиме CUA?

Если cua-mode включен, переопределение Ctrl-Enter не работает должным образом и всегда запускает функцию cua-set-rectangle-mark. В приведенном ниже коде вы можете видеть, что я также определил Alt-Enter для своей функции просто для тестирования, и она работает нормально. Но я хочу оставить Alt-Enter на cua-set-rectangle-mark, потому что я предпочитаю использовать Ctrl-Enter для вызова моей функции, которая создает строку ниже текущей строки. Что случилось?

(cua-mode t)
(defun vscode-insert-line-below()
  (interactive)
  (move-end-of-line 1)
  (newline-and-indent))
(global-set-key (kbd "C-<return>") 'vscode-insert-line-below)
(global-set-key (kbd "M-<return>") 'vscode-insert-line-below)

person Márcio Moreira    schedule 18.04.2020    source источник


Ответы (1)


Это, вероятно, то, что вы хотите:

(cua-mode t)
(defun vscode-insert-line-below()
  (interactive)
  (move-end-of-line 1)
  (newline-and-indent))
(define-key cua-global-keymap (kbd "<C-return>") 'vscode-insert-line-below)

(Вы можете использовать либо (kbd "<C-return>"), либо (kbd "C-<return>"), но мне нравится использовать форму, которую мне показывает C-h k.)

Когда вы находитесь в cua-mode, локальная карта клавиш — cua-global-keymap, и ее привязки переопределяют те же глобальные привязки.

Я нашел эту карту, выполнив C-h k C-RET в cua-mode. Он сказал мне:

<C-return> запускает команду cua-set-rectangle-mark (находится в cua-global-keymap), которая является интерактивной автоматически загружаемой функцией Лиспа в cua-rect.el.

Он привязан к <C-return>.

[Список аргументов недоступен, пока не загружено определение функции.]

Начать прямоугольник с позиции щелчка мыши.

person Drew    schedule 19.04.2020
comment
Это сработало. Спасибо, Дрю. Я только начинаю с Emacs и Emacs Lisp. Для меня это до сих пор загадка :-) - person Márcio Moreira; 19.04.2020