Як відрізнити Ci від TAB?


20

Зазвичай з історичних причин emacs трактує TABкод і C-iключ як однакові, пор. документація emacs lisp на функціональні клавіші або відповідь абобо на питання "Яка різниця між TAB та?" .

Примітка: У цій статті, є коди клавіш TAB, <tab>і C-i; tabі Ctrl+ iз іншого боку - фізичні клавіші на клавіатурі.

Однак на даний момент emacs розглядає TABі C-iяк те саме, тобто (equal (kbd "TAB") (kbd "C-i"))-> t.

Однак, оскільки ми вже не живемо в обчислювальній кількості, я вважаю це надзвичайно дратівливим. Там є кілька пропозицій, що можна зробити, щоб подолати це, наприклад

  • "Як я прив'язую команду до Ci, не змінюючи TAB?"

    • Рішення Trey не працювало для моєї, змінна local-function-key-mapsне змінюється. Модифікація його на використання, deleteа delqне призводить до зміни зміненої змінної, але вона не приносить рішення ... tabі Ctrl+ iзалишаються однаковими.
    • Переклад на гіперкарту здається вирішенням 1980-х… Я б також хотів використовувати Hyper+ i.
  • Використання знака input-decode-mapmap 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 в якийсь момент?


2
Зауважте, що TABі C-i(коди, а не ключі) є одними і тими самими за визначенням TAB.
Стефан

@Stefan Ось чому я додав річ Note . Я збираюся відредагувати публікацію і помістити її туди.
elemakil


IMO, це запитання не є дублікатом, оскільки воно хоче перенести всі сполучення клавіш, визначені в TAB (навіть ті, що стосуються зовнішніх пакетів), замість цього використовувати <tab>. У той час як інше питання було питання про те, як їх диференціювати у власному коді.
Малабарба

Моя пропозиція буде порадити kbdперекласти TAB як [вкладку]. Він просто не працюватиме для завантажених частин Emacs.
Малабарба

Відповіді:


21

Майбутнє вже давно минуло, а кам'яний вік обчислень вже найближчим часом. Усі текстові термінали, які я знаю, досі надсилають в Emacs таку саму послідовність байт, C-iяк і для TAB, тому оригінальна потреба "об'єднати" їх все ще дуже велика кількість у нас.

Мапа введення-декодування (à la (define-key input-decode-map "\C-i" [C-i])), ймовірно, настільки ж хороша, як і зараз.

Як екс-супровідник Emacs, я бажаю кращого рішення цієї проблеми, щоб звільнити C-i( C-mі C-[) клавіші під графічним інтерфейсом (можливо, зробити їх "зарезервованими для користувача"). Але я не знаю, як це зробити, не створюючи багато проблем з існуючими пакетами.



Цікаво, які клавіатури ви використовуєте? З типовими клавіатурами QWERT розрізнення просто очевидно, а неможливість розрізнити ці клавіші - це такий біль ...
Іван Хуанг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.