Різноманітні команди – ЧАСТИНА 12

Інший спосіб змінити поведінку клавіатурного макросу – використовувати як лічильника регістр, збільшуючи його при кожному повторі макросу Див Розділ 105 [РегЧісла], с 78

314  Налаштування привязок ключів

Цей розділ описує привязки ключів, які відображають ключі в команди, і таблиці ключів, які зберігають привязки Тут також пояснюється, як змінювати привязки ключів для своїх потреб

Нагадаємо, що команда – це функція Лиспа, чиє визначення забезпечує інтерактивне використання Подібно будь лісповской функції, кожна команда має імя, яке зазвичай складається з букв нижнього регістру і дефісів

3141  Таблиці ключів

Привязки між послідовностями ключів і функціями-командами зберігаються в структурах даних, званих таблицями ключів У Emacs багато таких таблиць, кожна з яких використовується в особливих випадках

Нагадаємо, що послідовність ключів (або коротко, ключ) – це послідовність подій введення, яка має сенс як одне ціле Події введення включають в себе знаки, функціональні клавіші і кнопки миші – всі види введення, які ви можете надіслати компютера з вашого терміналу Послідовність ключів отримує свій сенс з привязки, яка говорить, яку команду даний ключ запускає Призначення таблиць ключів полягає в збереженні цих привязок

Глобальна таблиця ключів є найбільш важливою, тому що вона діє завжди Глобальна таблиця визначає ключі для режиму Fundamental більшість з цих визначень є загальними для всіх основних режимів Кожен основний або другорядний режим може мати свою власну таблицю ключів, яка перекриває глобальні визначення деяких ключів

Наприклад, самовставляющійся знак, такий як g, є самовставляющімся, тому що глобальна таблиця ключів привязує його до команди self-insert-command Стандартні знаки редагування в Emacs, такі як Ca, також отримують свій стандартний сенс з глобальної таблиці ключів Команди для перепрівязкі ключів, такі як Mx global-set-key, насправді працюють шляхом збереження нової привязки у відповідному місці глобальної таблиці ключів Див Розділ 3145 [Перепрівязка], с 359

Meta-знаки працюють за іншим Emacs транслює кожен Meta-знак в пари знаків, що починаються з hESCi Коли ви набираєте знак Ma, Emacs замінює її на hESCa Metaклавіша приходить як одиночне подія введення, але для цілей привязки ключів стає двома подіями Це відбувається з історичних причин, і ми можемо коли-небудь це змінити

На більшості сучасних клавіатур крім знакових клавіш є функціональні клавіші Функціональні клавіші посилають події введення, точно так само, як і знакові клавіші, і таблиці ключів можуть містити привязки для них

На багатьох терміналах натискання на функціональну клавішу насправді посилає компютера послідовність знаків точна інформація про те, що це за послідовність, залежить від самої функціональної клавіші і від того, яку модель терміналу ви використовуєте (Часто така послідовність починається з hESC[) Якщо Emacs розуміє ваш тип терміналу правильно, то він розпізнає послідовності знаків, що формують функціональні клавіші, в якому б місці послідовності ключів вони не зустрічалися (НЕ тільки на початку) Таким чином, для більшості цілей ви можете вважати, що функціональні клавіші досягають Emacs безпосередньо, і ігнорувати їх кодування як послідовність знаків

Кнопки миші також виробляють події вводу Ці події приносять іншу інформацію – вікно і позицію, де була натиснута або відпущена кнопка миші, і тимчасову мітку Але для привязок ключів важливо лише знати кнопку інші дані відіграють роль, тільки якщо це потрібно команді (Команди, розроблені для виклику за допомогою миші, насправді зазвичай звертають увагу на ці дані)

Таблиця ключів записує визначення для одиночних подій Для інтерпретації послідовності ключів, що з кількох подій, потрібна ланцюжок таблиць ключів Перша таблиця дає визначення першої події це визначення є іншою таблицею ключів, яка використовується для пошуку другої події в послідовності, і так далі

Послідовність ключів може містити натискання на функціональні і знакові клавіші Наприклад, C-x hSELECTi  має сенс Якщо ви зробите клавішу hSELECTi  префіксним ключем, то hSELECTC-n теж буде мати сенс Ви навіть можете змішувати події від миші з подіями від клавіатури, але ми не рекомендуємо робити так, тому що такі послідовності незручно набирати

Як користувач ви можете перепривязати будь ключ але буде краще, якщо ви завжди будете використовувати послідовності ключів, що складаються з Cc, за яким слід буква Ці клавіші зарезервовані для користувачів , так що вони не будуть конфліктувати ні з одним правильно спроектованим розширенням Emacs Функціональні клавіші від hF5i  до hF9i  також зарезервовані для користувачів Якщо ви перепрівязиваете якийсь інший ключ, ваше визначення може бути перекрито деякими розширеннями або основними режимами, які мають пріоритет над той же самий ключ

3142  Таблиці префіксних ключів

Префіксний ключ, такий як Cx або hESCi, Мають власну таблицю ключів, кото-

раю зберігає визначення для подій, безпосередньо наступних за цим префіксом

Визначення префіксного ключа – це зазвичай таблиця ключів, в якій шукається наступна подія Це визначення також може бути лісповскім символом, чиє визначення функції є наступною таблицею ключів результат цього той же самий, але він надає для префіксного ключа командне імя, яке може бути використане як опис того, для чого призначений цей префіксний ключ Таким чином, привязка Cx – це символ Ctl-X-Prefix, чиє визначення функції є таблицею ключів для команд на Cx Визначення C-c, C-x, C-h і hESCi  як префіксних ключів зявляються в глобальній таблиці, так що ці префіксние ключі доступні завжди

Крім звичайних префіксних ключів існують фіктивні префіксние ключі, які представляють смужку меню дивіться розділ Menu Bar в The Emacs Lisp Reference Manual, Для додаткової інформації про привязках ключів смужки меню Події від кнопок миші, які запускають спливаючі меню, також є префіксними

ключами дивіться розділ Menu Keymaps в The Emacs Lisp Reference Manual, Для до-

полнительной інформації

Деякі таблиці префіксних ключів зберігаються в іменованих змінних:

•  ctl-x-map – це імя змінної для таблиці, використовуваної для знаків, наступних за Cx

help-map для знаків, наступних за Ch

esc-map для знаків, наступних за hESCi Таким чином, всі Meta-знаки в дійсно-

ності визначаються цією таблицею

ctl-x-4-map для знаків, наступних за Cx 4

mode-specific-map для знаків, наступних за Cc

3143  Локальні таблиці ключів

До цих пір ми пояснювали принципи роботи глобальної таблиці Основні режими налаштовують Emacs, надаючи власні привязки ключів в локальних таблицях ключів Наприклад, режим C перевизначає hTABi  для створення відступу поточного рядка коду на Сі Шматки тексту в буфері можуть вказувати свої власні таблиці ключів замість таблиці основного режиму цього буфера

Другорядні режими також можуть мати локальні таблиці ключів Коли діє другорядний режим, визначення з його таблиці ключів перекривають і локальну таблицю основного режиму, і глобальну таблицю

Локальні таблиці ключів для режиму Lisp і деяких інших основних режимів завжди існують, навіть коли не використовуються Вони зберігаються в змінних з іменами lisp-mode-map і так далі Для менш часто використовуваних основних режимів локальна таблиця ключів зазвичай створюється при першому використанні в сеансі Це зберігає ресурси Якщо ви хочете змінити одну з цих таблиць ключів, то ви повинні використовувати пастку режиму – дивіться нижче

Усі таблиці ключів другорядних режимів створюються заздалегідь Не існує способу затримати їх створення до тих пір, поки цей другорядний режим не буде включений перший раз

Локальна таблиця ключів може локально перевизначати ключ як префіксний, визначаючи його як префіксних таблицю ключів Якщо цей ключ визначений як префікс і в глобальній таблиці, то його локальне і глобальне визначення (з обох таблиць ключів) ефективно комбінується: обидві вони використовуються для пошуку події, яке слід за префіксним ключем Таким чином, якщо локальна таблиця ключів визначає Cc як ще одну таблицю ключів, а ця таблиця визначає Cz як команду, то це додає локальний сенс для Cc Cz Це не зачіпає інші послідовності, які починаються з Cc якщо у цих послідовностей немає власної локальної привязки, то продовжують діяти глобальні привязки

Інший спосіб зрозуміти це – вважати, що Emacs обробляє послідовності ключів, які з кількох подій, переглядаючи кілька таблиць ключів одну за однією в пошуках цієї послідовності цілком Спочатку він перевіряє таблиці ключів поточних другорядних режимів, потім таблицю ключів основного режиму і потім він шукає в глобальній таблиці Це не зовсім точно описує те, як працює пошук, але досить добре для розуміння звичайного стану справ

Джерело: Річард Столмен, Керівництво по GNU Emacs

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*