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

Для зміни локальних привязок основного режиму ви повинні змінити локальну таблицю ключів цього режиму Зазвичай ви повинні дочекатися першого використання режиму, оскільки до того моменту більшість режимів не створюють свої таблиці ключів Якщо ви хочете вказати небудь у вашому файлі ~ / Emacs для зміни привязок основного режиму, то ви повинні використовувати пастку цього режиму, щоб затримати зміни до його першого використання

Наприклад, команда texinfo-mode для вибору режиму Texinfo запускає пастку texinfo-mode-hook Продемонструємо, як можна використовувати цю пастку для додавання локальних привязок (ми визнаємо, не надто корисною) для клавіш Cc n і Cc p в режимі Texinfo:

(add-hook  ’texinfo-mode-hook

’(lambda  ()

(define-key texinfo-mode-map

&quot\C-cp&quot

’backward-paragraph) (define-key texinfo-mode-map

&quot\C-cn&quot

’forward-paragraph)

))

Див Розділ 3123 [Пастки], с 349

3144  Таблиці ключів мінібуфера

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

•  minibuffer-local-map використовується для звичайного введення (без завершення)

minibuffer-local-ns-map схожа, але hSPCi  виходить, точно так само, якhRETi Це використовується головним чином для сумісності з Mocklisp

minibuffer-local-completion-map для вільного завершення

minibuffer-local-must-match-map для суворого і обережного завершення

3145  Інтерактивне зміна привязок ключів

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

M-x global-set-key hRETключ кмд hRETi

Глобально визначає ключ для запуску команди кмд

M-x local-set-key hRETключ кмд hRETi

Локально визначає ключ (у поточному основному режимі) для запуску команди

кмд

M-x global-unset-key hRETключ

Робить ключ невизначеним в глобальній таблиці ключів

M-x local-unset-key hRETключ

Робить ключ невизначеним в локальній таблиці ключів (у поточному основ-

ном режимі)

Припустимо наприклад, що ви хочете виконувати команди в підоболонці всередині буфера Emacs, а не припиняти Emacs і виконувати команди в ваших вхідних оболонці Зазвичай Cz привязаний до функції suspend-emacs (Коли не використовується система X Windows), але ви можете змінити Cz на запуск інтерактивної подоболочки всередині Emacs, привязавши її до команди shell, як показано:

M-x global-set-key hRETi  C-z shell hRETi

global-set-key зчитує імя команди після клавіші Після того як ви натиснете клавішу, зявиться приблизно таке повідомлення, так що ви зможете переконатися, що призначаєте ту клавішу, яку хочете:

Set  key C-z to  command:

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

Ви можете перепривязати ключ, який містить більше однієї події, тим же самим способом Emacs продовжує зчитувати ключ для перепрівязкі до тих пір, поки він не стане повним ключем (тобто непрефіксним) Таким чином, якщо ви натиснете Cf як ключ, то на цьому все закінчиться ви відразу потрапите в мінібуфер для зчитування команди кмд Але якщо ви натиснете Cx, зчитується ще один знак якщо це 4, зчитується ще один, і так далі Наприклад,

M-x global-set-key hRETi  C-x 4 $ spell-other-window hRETi

перевизначає Cx 4 $ для запуску команди (фіктивної) spell-other-window

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

Ви можете прибрати глобальне визначення ключа за допомогою команди global-unsetkey Це робить ключ невизначеним якщо ви наберете його, Emacs просто подасть звуковий сигнал Подібним чином local-unset-key робить ключ невизначеним в таблиці ключів поточного основного режиму, і в цьому основному режимі вступає в дію ухвалу (або відсутність визначення) з глобальної таблиці ключів

Якщо ви переопределили (або зробили невизначеним) якийсь ключ і потім хочете відмовитися від зміни, то скасування визначення не працюватиме – вам необхідно перевизначити ключ, використовуючи стандартне визначення Щоб знайти імя стандартного визначення ключа, перейдіть в буфер з режимом Fundamental і застосуєте Ch c Описи ключів в цьому посібнику також повідомляють імена соответсвующих команд

Якщо ви хочете убезпечити себе від помилкового виклику команди, то краще блокувати команду, а не скасовувати визначення ключа Блоковану команду простіше викликати, коли ви насправді захочете цього Див Розділ 31411 [Блокування команди], с 364

3146  Перепрівязка ключів у файлі ініціалізації

Якщо у вас є набір привязок ключів, які ви хочете використовувати завжди, ви можете вказати їх у вашому файлі . Emacs, використовуючи синтаксис Лиспа

Найпростіший спосіб працює тільки зі знаками ASCII і їх Meta-варіантами Цей метод використовує для представлення перепрівязиваемой послідовності ключів рядок Наприклад, як привязати Cz до команди shell:

(global-set-key &quot\C-z&quot ’shell)

Цей приклад використовує строкову константу, що містить один знак, Cz Одинарна лапки перед імям команди, shell, відзначає її як константних символ, а не як змінну Якщо ви опустите лапку, Emacs спробує відразу обчислити shell як змінну Це ймовірно викличе помилку це явно не те, що ви хочете

Ось інший приклад, який привязує послідовність ключів з двох знаків:

(global-set-key &quot\C-xl&quot  ’make-symbolic-link)

Коли послідовність ключів включає в себе функціональні клавіші, або со-

буття від кнопок миші або не входять в ASCII знаки, такі як C-= або Ha, ви повинні

використовувати більш загальний метод перепрівязкі, в якому для вказівки послідовно-

сти ключів використовується вектор

Для того щоб записати вектор в Emacs Lisp, необхідно укласти елементи вектора в квадратні дужки Для розділення елементів використовуйте пробіли Якщо елемент є символом, то просто напишіть імя символу – ніяких інших роздільників або пунктуації не потрібно Якщо елемент вектора є знаком, то пишіть його як знакову константу Лиспа: ?’, За яким слідує сам знак в тому вигляді, як він зявився б в рядку

Ось приклади використання векторів для перепрівязкі C-= (керуючий знак, який не входить до ASCII), Ha (Hyper-знак в ASCII взагалі немає Hyper) hF7(Функціональна клавіша) і C-Mouse-1 (модифікована з клавіатури кнопка миші):

(global-set-key [\C-=] ’make-symbolic-link) (global-set-key [\H-a] ’make-symbolic-link) (global-set-key [f7] ’make-symbolic-link)

(global-set-key [C-mouse-1]  ’make-symbolic-link)

Ви також можете використовувати вектор і для простих випадків Ось як можна перепити-

сать перші два приклади, наведені вище, з використанням векторів:

(global-set-key [\C-z] ’shell)

(global-set-key [\C-x l]  ’make-symbolic-link)

3147  Перепрівязка функціональних клавіш

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

left, up, right, down

Курсорні стрілки

begin, end, home, next, prior

Інші клавіші переміщення курсору

select, print, execute, backtab insert, undo, redo, clearline

insertline, deleteline, insertchar, deletechar,

Різні функціональні клавіші

f1, f2,   f35

Нумеровані функціональні клавіші (розташовані зверху клавіатури)

kp-add, kp-subtract, kp-multiply, kp-divide kp-backtab,  kp-space, kp-tab,  kp-enter

kp-separator, kp-decimal,  kp-equal

Клавіші додаткової клавіатури (праворуч від основної клавіатури), з іме-

нами або знаками пунктуації

kp-0, kp-1, kp-9

Клавіші додаткової клавіатури з цифрами

kp-f1, kp-f2, kp-f3, kp-f4

Функціональні клавіші додаткової клавіатури

Ці імена є загальноприйнятими, але деякі системи (особливо при використанні X Windows) можуть використовувати інші імена Щоб переконатися, який символ використовується для певної функціональної клавіші на вашому терміналі, наберіть Ch c і потім потрібну клавішу

Послідовність ключів, яка містить символи функціональних клавіш (або щось інше крім ASCII-знаків), повинні бути вектором, а не рядком Синтаксис векторів використовує пробіл між елементами і квадратні дужки навколо всього вектора Таким чином, для привязки функціональної клавіші f1 до команди rmail, напишіть наступне:

(global-set-key [f1] ’rmail)

Для привязки клавіші з правою стрілкою до команди forward-char, ви можете вико-

вать такий вислів:

(global-set-key [right] ’forward-char)

Тут використовується лісповскій синтаксис для вектора, що містить символ right (Ця привязка існує за замовчуванням в Emacs)

Див Розділ 3146 [Перепрівязка при старті], с 360, для додаткової інформації про використання векторів для перепрівязкі

У послідовності ключів ви можете змішувати функціональні клавіші і знаки

Цей приклад привязує C-x hNEXTдо команди forward-page

(global-set-key [\C-x next] ’forward-page)

де \ Cx – це знакова константа Лиспа для знаку Cx Елемент вектора next є лісповскім символом, і тому до нього не приписаний знак питання

Ви можете використовувати клавіші-модифікаториhCTRLi, hMETAi, hHYPERi, hSUPERi, hALTi і hSHIFTi  разом з функціональними клавішами Для представлення цих модифікаторів додайте рядки C-, M-, H-, s-, A- і S- в початок імені символу Таким чином, щоб Hyper-Meta-hRIGHTпереміщував вперед на слово, потрібно зробити так:

(global-set-key [H-M-right]  ’forward-word)

3148  Іменовані керуючі ASCII-знаки

hTABi, hRETi, hBSi, hLFDi, hESCі hDELпочали своє життя як імена певних керуючих символів ASCII, що використовувалися так часто, що для них були зроблені спеціальні клавіші Пізніше, користувачі визнали зручним розрізняти в Emacs ці клавіші і ті ж самі керуючі знаки, набраними за допомогою клавіші hCTRLi

Джерело: Річард Столмен, Керівництво по 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>

*

*