Почему Ctrl+M обязан Войти в Бойкий Ubuntu? Как выключить его?
Я использую Emacs и хотел бы связать Ctrl+M с некоторой другой командой.
Примечание: Проблема не ограничивается Linux, она существует и на Windows (и, предположительно, Mac). Прочитайте другой (не связанный с переполнением стека) источник всех знаний: Википедия о возврате каретки.
Если вы хотите перепривязать C-m, не забудьте перепривязать все <возврат>, иначе вы рискуете больше не иметь возможности использовать клавишу Enter/Return. Кроме того, в терминале Emacs не может отличить одно от другого (C-m и
В обычном Emacs клавиша Enter/Return привязана к
Попробуйте C-h k
RET (переводится с
)
Итак, перепривяжите обе клавиши в соответствующей карте клавиш, чтобы убедиться, что вы получите желаемое поведение.
Возможно, будет полезно поиграть со следующим кодом:
(defun my-return ()
(interactive)
(message "return"))
(defun my-ret ()
(interactive)
(message "RET"))
(defun my-c-m ()
(interactive)
(message "C-m"))
(global-set-key (kbd "<return>") 'my-return)
(global-set-key (kbd "C-m") 'my-c-m)
(global-set-key (kbd "RET") 'my-ret)
Поместите его в буфер *scratch*
и нажмите C-j после каждой строки (для оценки sexp). Затем поиграйте с клавишами Enter/Return и C-m.
Основной источник проблемы в том, что Enter и Ctrl-M соответствуют одному и тому же ASCII-коду (13). Вы сможете сопоставить их только в системе, которая может их различать.
(глобальный ключ набора (kbd "C-m") 'cmd);
Где cmd - ваша команда должна переназначить элемент управления m ...
Что касается того, почему ctrl + m обязателен для ввода. Я считаю, что это как-то связано с какой-то старой клавиатурой, в которой нет ввода, табуляции, возврата и т. Д. (Я могу сильно ошибаться)
Например, ctrl + h - это возврат, некоторые операционные системы unix будут выводить ^ H, когда вы нажали на них Backspace!
Я думаю, что ваш вопрос обратный. Не C-m связан с Enter, а Enter связан с C-m. А C-m - это то же самое, что RET
.
Если вы запустите C-h k C-m, вы увидите что-то вроде "RET выполняет команду ...
". C-m посылает RET
, потому что это управляющий код, см. http://en.wikipedia.org/wiki/Control_character.
Клавиша Enter связана с C-m; если вы запустите C-h k Enter, вы увидите что-то вроде "RET (переводится с
". Видите, Enter интерпретируется emacs как
Что вы хотите сделать, так это сначала убрать перевод RET
, привязав ее напрямую к тому, к чему она сейчас привязана косвенно, например, (global-set-key (kbd "
. Затем вы можете привязать C-m к чему угодно, не затрагивая Enter.
Это предполагает, что вы используете графический emacs. Если вы запускаете его в терминале, это не сработает, потому что Enter пошлет C-m, а не window-system
.