@Renzo ответил на ваш вопрос о том, как эти ключи связаны, и как привязка может показаться влияющей на другую. Вот еще информация о том, что происходит в этом конкретном случае.
См. Руководство Emacs, узел DEL Does Not Delete.
Там вы увидите это, после объяснения проблемы/путаницы:
Чтобы исправить эту проблему в каждом сеансе Emacs, положить одну из следующих строк в файле инициализации (* Примечание Файл инициализации : :). Для первого случае выше, где BACKSPACE удаляет вперед, а не назад, используйте эту линию, чтобы сделать BACKSPACE действовать как DEL:
(normal-erase-is-backspace-mode 0)
Для двух других случаях используйте эту строку:
(normal-erase-is-backspace-mode 1)
Еще один способ исправить проблему для каждого сеанса Emacs - настроить переменную normal-erase-is-backspace
: значение t
определяет режим, в котором BS или BACKSPACE является DEL, и nil
specific в другом режиме. * Примечание. Легкая настройка ::.
См. Также GNU Emacs FAQ question about Backspace invoking help. Там вы увидите, в дополнение к информации, аналогичной той, что выше, информация о том, как переназначить DEL
на UNIX - использовать это:
stty erase '^?'
WRT C-j
и RET
(не упомянуто в вопросе, но упоминается в @ Renzo): поведение Emacs по умолчанию изменилось в большинстве режимов программирования, в Emacs 24.4.
Начиная с этой версией, electric--indent-mode
включена по умолчанию, что означает, что RET
вставляет символ новой строки и отступы, а C-j
просто вставляет символ новой строки. До этого релиза эти клавиши имели противоположное поведение. Если вы предпочитаете старое поведение, сделайте это, чтобы отключить electric-indent-mode
:
(when (fboundp 'electric-indent-mode)
(electric-indent-mode -1)) ; Use classic `C-j' and `RET'.
Я вижу, это имеет смысл! Следующий вопрос: в некоторых версиях emacs RETURN вызывает новую строку и отступ, а C-J вызывает только новую строку. Как можно назначить две разные команды, как вы утверждали, - по сути, один и тот же код символа? – nsimplex
Если они генерируют один и тот же код символа, я думаю, что это невозможно, если вы не переназначите их каким-либо другим способом на уровне операционной системы. – Renzo
Также обратите внимание, что существует существенная разница в отношении кодов ключей, полученных Emacs, между запуском Emacs в терминале и запуском его в качестве приложения GUI. GUI Emacs получает возможность различать множество ключевых последовательностей, которые неразличимы в терминале. – phils