Как выключить альтернативу, Входят с Ctrl+M в Linux

Почему Ctrl+M обязан Войти в Бойкий Ubuntu? Как выключить его?

Я использую Emacs и хотел бы связать Ctrl+M с некоторой другой командой.

14
задан Trey Jackson 19 February 2010 в 19:28
поделиться

4 ответа

Примечание: Проблема не ограничивается Linux, она существует и на Windows (и, предположительно, Mac). Прочитайте другой (не связанный с переполнением стека) источник всех знаний: Википедия о возврате каретки.

Если вы хотите перепривязать C-m, не забудьте перепривязать все <возврат>, иначе вы рискуете больше не иметь возможности использовать клавишу Enter/Return. Кроме того, в терминале Emacs не может отличить одно от другого (C-m и ).

В обычном Emacs клавиша Enter/Return привязана к , которая (по умолчанию) переводится в RET (то же самое, что C-m). Если бы вы переводили только C-m, вы бы также воздействовали на клавишу 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.

7
ответ дан 1 December 2019 в 06:07
поделиться

Основной источник проблемы в том, что Enter и Ctrl-M соответствуют одному и тому же ASCII-коду (13). Вы сможете сопоставить их только в системе, которая может их различать.

2
ответ дан 1 December 2019 в 06:07
поделиться

(глобальный ключ набора (kbd "C-m") 'cmd);

Где cmd - ваша команда должна переназначить элемент управления m ...

Что касается того, почему ctrl + m обязателен для ввода. Я считаю, что это как-то связано с какой-то старой клавиатурой, в которой нет ввода, табуляции, возврата и т. Д. (Я могу сильно ошибаться)

Например, ctrl + h - это возврат, некоторые операционные системы unix будут выводить ^ H, когда вы нажали на них Backspace!

2
ответ дан 1 December 2019 в 06:07
поделиться

Я думаю, что ваш вопрос обратный. Не 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 как , а затем эта клавиша переводится в C-m.

Что вы хотите сделать, так это сначала убрать перевод в RET, привязав ее напрямую к тому, к чему она сейчас привязана косвенно, например, (global-set-key (kbd "") 'newline). Затем вы можете привязать C-m к чему угодно, не затрагивая Enter.

Это предполагает, что вы используете графический emacs. Если вы запускаете его в терминале, это не сработает, потому что Enter пошлет C-m, а не . Вы можете проверить это, используя переменную window-system.

32
ответ дан 1 December 2019 в 06:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: