Обычно по историческим причинам emacs рассматривает TAB
код и C-i
ключ как один и тот же, ср. документация по emacs lisp по функциональным клавишам или ответ abo-abo на вопрос "В чем разница между TAB и?" ,
Примечание: В этой статье, являются коды клавиш
TAB
,<tab>
иC-i
; tabи Ctrl+ iс другой стороны - это физические клавиши на клавиатуре.Тем не менее, на данный момент, Emacs обрабатывает
TAB
иC-i
то же самое, то есть(equal (kbd "TAB") (kbd "C-i"))
->t
.
Однако, поскольку мы больше не живем в камне вычислений, я нахожу это чрезвычайно раздражающим. Есть несколько предложений, что можно сделать, чтобы обойти это, например,
«Как связать команду с Ci, не меняя TAB?»
- Решение Трея у меня не сработало, переменная
local-function-key-maps
не изменилась. Изменение его для использования,delete
аdelq
не в результате приводит к измененной переменной, но это не приводит к разрешению ... tabи Ctrl+ iвсе те же. - Перевод на гиперкарту кажется обходным решением 1980-х годов ... Я мог бы также использовать Hyper+ i.
- Решение Трея у меня не сработало, переменная
Использование
input-decode-map
to map Ctrl+ iк некоторому управляющему коду после ASCII - почти то, что я ищу. За исключением того, что он не работает должным образом сkbd
макросом, что означает, что нужно изменить все биты исходного кода, который будет связывать Ctrl+ i. Возможно, это лучшее решение, учитывая, что весь исходный код изменен правильно.Используя
(kbd "<tab>")
для tabи(kbd "C-i")
(что переводится(kbd "TAB")
т.е.\t
Литерал) для Ctrl+ i делает работу , но вы должны изменить все исходные файлы , которые используют неправильный вид tab[читай: сканTAB
] , который раздражает.
Это было предложено, например, в выпуске github, а также на emacs.sx .
Ни одно из этих решений не кажется реальным, я бы предпочел рассматривать их как обходные пути или хаки (из существующей ошибки ).
Есть ли способ заставить emacs отображаться tabна
(kbd "<tab>")
и(kbd "TAB")
пока Ctrl+ iотображается так, чтобы(kbd "C-i")
не модифицировать исходный код emacs?Такой подход должен быть полностью невидимым для пользователя, а это означает , что , tabкак коды клавиши
<tab>
иTAB
должно быть связанно с одним связывающих в то время как Ctrl+ , iкак клавиатурныеC-i
следует сопоставить с другим обязательным.
На менее серьезном замечании: есть ли здесь разработчики emacs, которые могут прокомментировать, будет ли это когда-нибудь изменено / исправлено в исходном коде emacs?
источник
TAB
иC-i
(коды, а не ключи) являются одним и тем же по определениюTAB
.kbd
перевести TAB как [tab]. Это просто не будет работать для предустановленных частей Emacs.Ответы:
Будущее давно ушло, и каменный век компьютерных технологий скоро наступит. Все текстовые терминалы, которые я знаю, по-прежнему отправляют в Emacs точно такую же последовательность байтов, C-iкак и для TAB, так что первоначальная необходимость их «объединить» все еще остается у нас.
Карта ввода-декодирования (а-ля
(define-key input-decode-map "\C-i" [C-i])
), вероятно, примерно так же хороша, как и сейчас.Будучи бывшим сопровождающим Emacs, я бы приветствовал лучшее решение этой проблемы, чтобы освободить ключи C-i(и C-mи C-[) в графическом интерфейсе (возможно, сделать их «зарезервированными для пользователя»). Но я не знаю, как это сделать, не вызывая много проблем с существующими пакетами.
источник