Знаки, ключі і команди

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

21  Види користувача введення

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

ASCII складається з 128 знакових кодів Деяким з цих кодів приписані графічні позначення, такі як а і =; решта є керуючими знаками, наприклад Cоntrol-a (також іменується С-а для стислості) Ca отримав своє імя через те, що ви набираєте його, затиснувши клавішу hCTRLі потім натиснувши а

У деяких керуючих символів ASCII є спеціальні назви, і більшість терміналів мають спеціальні клавіші, за допомогою яких їх можна набрати, наприклад: hRETi,  hTABi,  hDELi  і hESCi Знак пробілу зазвичай позначається нижче як hSPCi, Хоча строго кажучи, він є графічним знаком, чиє зображення повинно бути порожнім На деяких клавіатурах є клавіша linefeed; це інша назва для C-j

Emacs розширює безліч знаків ASCII тисячами інших друкованих знаків (див Глава 18 [MULE], с 161), додатковими керуючими знаками та кількома модифікаторами, які можна комбінувати з будь-яким іншим знаком

На ASCII-терміналах існує тільки 32 керуючих знака Це варіанти з модифікатором control для букв і знаків @ [] \ ^ _. Крім того, клавіша shift не має сенсу з керуючими знаками: Ca і CA – Це одне і те ж, і Emacs не може їх розрізнити

Але в безлічі знаків Emacs є місце для варіантів з control для всіх друкованих знаків і для розрізнення між Ca і CA X Windows дозволяє ввести всі ці знаки Наприклад, C (тобто Control-мінус) і C-5 – допустимі команди Emacs в системі X

Ще одне розширення безлічі знаків Emacs – це додаткові біти модифікаторів Найчастіше використовується тільки один біт-модифікатор, він називається Meta Для будь-якого знака є його Meta-варіант приклади включають Meta-а (для стислості М-а), М-А (це не те ж саме, що М-а, але ці два знаки мають зазвичай одне і те ж значення в Emacs), M-hRETi  і M-C-a За традицією ми зазвичай пишемо С-М-а, а не М-С-а але логічно кажучи, порядок набору клавіш hCTRLі hMETAне має значення

Деякі термінали мають клавішу hMETAі дозволяють набирати Meta-знаки, натиснувши цю клавішу Таким чином, Meta-а набирається шляхом одночасного натискання клавіш hMETAі а Клавіша hMETAпрацює дуже схоже на hSHIFTi Подібні клавіші не завжди метятся hMETAi, Так як ці функції часто присвоюються спеціальними клавішах з якимось іншим початковим значенням

Якщо у вас немає клавіші hMETAi, Ви все ж можете набрати Meta-знаки, використовуючи послідовність двох знаків, що починається з hESCi Таким чином, щоб ввести M-а, ви можете набрати hESCa Щоб ввести С-М-а, ви повинні набрати hESCC-a hESCдозволена також і на терміналах з клавішами hMETAi, На випадок, якщо ви звикли використовувати її

X Windows надає декілька інших клавіш-модифікаторів, які можуть бути застосовані до будь-якого запроваджуваному знаку Ці клавіші називаються hSUPERi,  hHYPERі hALTi Ми пишемо s-, H- і A-, щоб сказати, що знак використовує ці модифікатори Таким чином, sHCx – це скорочення для Super-Hyper-Control-x Не всі X-термінали в дійсності надають клавіші для цих модифікаторів – фактично багато термінали мають клавішу, позначену hALTi, Яка насправді

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

Введення з клавіатури включає клавіші, не є знаками: наприклад функціональні клавіші і курсорні стрілки Кнопки миші також випадають з гами знаків Ви можете модифікувати ці події за допомогою клавіш-модифікаторів hCTRLi,  hMETAi, hSUPERi, hHYPERі hALTточно так само, як і знаки клавіатури

Введені знаки і незнакові введення разом називаються подіями Див розділ Input Events в The Emacs Lisp Reference Manual, Для подальшої інформації Якщо ви не програмуєте на Ліспі, а просто хочете перевизначити значення деяких знаків і незнакові подій, дивіться Глава 31 [Налаштування], с 341

ASCII-термінали в дійсності не можуть посилати нічого, крім знаків ASCII Такі термінали використовують для представлення кожної функціональної клавіші послідовність знаків Але це невидимо для користувача Emacs, бо процедури обробки введення з клавіатури розпізнають ці особливі послідовності і перетворять їх в події функціональних клавіш до того, як будь-які інші частини Emacs можуть їх побачити

22  Ключі

Послідовність ключів, (або коротко, ключ) є послідовність вводяться подій, яка сприймається як ціле, як єдина команда. Деякі командні послідовності Emacs – це просто одиночний знак або одна подія наприклад, просто Cf достатньо для переміщення вперед на один знак Але в Emacs також є команди, які викликаються двома або більше подіями

Якщо послідовність подій достатня для виклику команди, вона є закінченим ключем Прикладом закінчених ключів можуть бути Ca, X, hRETi, hNEXTi  (Функціональна клавіша), hDOWNi  (Стрілка), C-x C-f і C-x 4 C-f Якщо послідовність недостатня, щоб скласти закінчений ключ, вона називається префіксним ключем У прикладах вище Cx і Cx 4 є префіксними ключами Будь послідовність ключів – це або закінчений, або префіксний ключ

Більшість одиночних знаків є закінченими ключами в стандартних привязках команд Emacs Мало хто з них є префіксними ключами Префіксний ключ обєднується з наступним подією в більш довгу послідовність ключів, яка сама може бути закінченою або префиксной Наприклад, Cx – це префіксний ключ, тому Cx і наступна подія обєднуються в двухзнаковую послідовність ключів Більшість цих послідовностей є закінченими ключами, в тому числі Cx Cf і Cx b Деякі, наприклад Cx 4 і Cx r, самі є префіксними ключами, що приводять до трехзнаковим послідовностям ключів Немає обмеження на довжину послідовності ключів, але на практиці люди рідко використовують послідовності довше чотирьох подій

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

З усього сказаного випливає, що префіксними ключами в Emacs є Cc, Ch, Cx, Cx hRETi,  C-x @,  C-x a, C-x n, C-x r,  C-x v, C-x 4, C-x 5, C-x 6, hESCi, M-g і M-j Але цей список не вбудований це просто стандартна привязка ключів в Emacs В процесі настройки Emacs ви можете зробити нові префіксние ключі або знищити ці Див Розділ 314 [Привязки ключів], с 356

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

префікс, Cf Ck автоматично стають ключем (закінченим, якщо ви не визначите його теж як префікс) Навпаки, якщо ви знищите визначення префікса Cx 4, то С-х

4 f (або С-х 4 щонибудь) не буде в подальшому ключем

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

23  Ключі і команди

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

Кожна команда має імя, вибране для неї програмістом Звичайно це імя складається з декількох англійських слів, розділених дефісами наприклад, next-line або forward-word У команди також є визначення, що є програмою на Ліспі вона змушує функцію робити те, що вона робить Насправді, команда у мові Emacs Lisp – це особливий різновид лісповской функції це така функція, яка вказує, як читати аргументи при інтерактивному виклику Для отримання більшої інформації про команди і функціях дивіться розділ What Is a Function в The Emacs Lisp Reference Manual (Визначення, яке ми використовували в цьому посібнику, злегка спрощено)

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

таблицями ключів Див Розділ 3141 [Таблиці ключів], с 356

Коли ми говоримо, що Cn зрушує вертикально вниз на один рядок, ми замовчуємо відміну, яке не відноситься до справи при звичайному використанні, але істотно для розуміння того, як налаштовується Emacs Це команда next-line, яка запрограмована на зрушення вниз Ключ Cn має таку дію, так як він привязаний до цієї команди Якщо ви перепрівяжете С-n до команди forward-word, то він буде переміщати на одне слово вперед Перепрівязка клавіш – звичайний метод настройки

В іншій частині цього керівництва ми зазвичай будемо ігнорувати цю тонкість, щоб зберегти простоту Щоб дати необхідну для налаштування інформацію, ми ставимо імя команди, яка насправді виконує роботу, в круглих дужках після заслання на ключ, який її запускає Наприклад, ми будемо говорити: Команда С-n (next-line) пересуває точку вниз, маючи на увазі, що next-line – це команда, яка рухає вниз, а С-n – це ключ, який стандартно привязаний до неї

Раз вже ми говоримо зараз тільки про інформацію для настройки, то це відповідний момент, щоб розповісти вам про змінних Часто опис команд буде говорити: Щоб змінити це, встановіть змінну mumble-foo . Змінна – це імя, використовуване для запамятовування значення Багато описані в цьому керівництві змінні існують просто для полегшення налаштування: деяка команда або інша частина Emacs перевіряє змінну і веде себе по-різному в залежності від її значення Поки ви не цікавитеся налаштуванням, ви можете пропустити інформацію про змінних Коли ви будете готові, щоб зацікавитися, прочитайте базові відомості про змінних, і тоді інформація про окремі змінних буде мати сенс Див Розділ 312 [Змінні], с 343

24  Набори знаків для тексту

Текст в буферах Emacs – це послідовність восьмибітних байт Кожен байт може містити один знак ASCII Припустимі як керуючі знаки ASCII (з восьме-

ричном кодами від 000 до 037, і 0177), так і друковані ASCII-знаки (з кодами від 040 до 0176) однак, керуючі знаки не з ASCII не можуть зявитися в буфері Інші прапори-модифікатори, використовувані при введенні з клавіатури, такі як Meta, також неприпустимі в буферах

Деякі управляючі знаки ASCII служать в тексті для особливих цілей і мають особливі назви Наприклад, знак нового рядка (восьмеричний код 012) використовується в буфері для завершення рядка, а символ табуляції (Восьмеричний код 011) використовується для створення відступу до наступної позиції табуляції (зазвичай через кожні 8 шпальт) Див Розділ 116 [Відображення тексту], с 84

Друковані знаки, що не входять в ASCII, також можуть зявлятися в буферах Коли включені багатобайтові знаки, ви можете використовувати будь-які друковані НЕ-ASCII-знаки, які Emacs підтримує Вони мають коди, що починаються від 256, або вісімкового

0400, і кожен з них представляється як послідовність двох або більше байт Див

Глава 18 [MULE], с 161

Якщо ви вимкнете підтримку багатобайтові знаків, то зможете використовувати тільки один алфавіт НЕ-ASCII-знаків, кожен з яких вміщається в один байт Для них використовуються коди від 0200 до 0377 Див Розділ 1812 [однобайтное європейські знаки], с 172

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

*

*