Що таке мета-ключ bash?


16

Я намагався використовувати xmodmapдля складання картиMETA_L з MENUключем , але не схоже , щоб бути прийнятим в bashякості ключа мета. Отже, мені цікаво, як ці компоненти (клавіатура, X, xterm, bash) співвідносяться з кожним щодо мета- та супер-клавіш. Будь-яке пояснення буде вдячним.

Дозвольте сказати іншим способом. Сторінка bash man говорить, наприклад, що функція yank-nth-arg пов'язана M-C-yі працює, коли я натискаю Esc-Control-y. Але я вважаю це трохи громіздким. Тож як я можу змусити баш прийняти інший ключ як Meta(як Menu) для всіх його прив'язок за замовчуванням?


Ваш MENUключ навіть помітив X? Який диспетчер вікон ви використовуєте - деякі з них можуть допомогти вам переглянути свої ключі.
choroba

Відповіді:


11

Відображення від клавіш клавіатури до модифікаторів, як Metaі Controlобробляється сервером X (тобто низькорівневою частиною графічного інтерфейсу). Цим відображенням можна керувати за допомогою команди старого стилю xmodmapабо нового стилю XKB інтерфейсу або через інструменти конфігурації графічного інтерфейсу, які використовують один із них під кришкою.

За замовчуванням у більшості налаштувань Metaклавіша є ключем Alt. Це тому, що історично багато робочих станцій Unix мали ключ, на Metaякому ПК мають ключ Alt. Тож якщо у вас є прив’язка для M-C-y, натисніть Ctrl+ Alt+Y .

Щоб перевірити, які ваші поточні прив’язки, запустіть xevпрограму в терміналі. Коли фокусується вікно xev, натискайте клавіші; ви побачите стенограму згенерованих подій у терміналі.

Для зв'язку між емуляторами терміналів (або термінальними пристроями, що відповідають фізичним терміналам) та програмами, використовуються символи. Коли ви натискаєте A, термінал отримує інформацію " Aключ, не модифікуючий", але те, що він надсилає програмі, що працює в терміналі, це символ a. Коли ви натискаєте функціональну клавішу, як-от Upабо F1, немає відповідного символу; термінал посилає символьну послідовність, починаючи з символу втечі (байт 27, іноді записується \eабо ^[). Коли емулятор термінала, такий як xterm, отримав подію натискання клавіші з Metaмодифікатором, він переводить цю клавішу на символ втечі, після чого виконується основна функція ключа, наприклад \ea(втеча, малий a) при натисканні Meta+ A.

Яка точна різниця між терміналом, 'оболонкою', 'tty' та 'консоллю'? може бути корисним фоном.


5

Ключова подія генерується сервером X (як налаштовано xmodmap) та надсилається вашій програмі X. Ваш менеджер вікон міг перехопити це до того, як він буде надісланий до xterm. XTerm, в свою чергу, переводить подію в деякі байти і відправляє байти в псевдо-tty, виділену вашою оболонкою, bash.

Зауважте, що не всі події XTerm переводяться безпосередньо в байти. Наприклад, Ctrlі shiftключі, самі по собі, генерувати рентгенівські події клавіатури, але XTerm не посилає нічого до оболонки (або іншому додатку) працює в ньому. Сюди також входить Metaключ сам по собі, але не Menuключ. Однак подія, породжена натисканням Meta- eзмусить XTerm надсилати або байт 0xE5, або двобайтову послідовність 0x1B 0x65, в залежності від налаштування ресурсу XTerm.VT100.metaSendsEscape.


2

Мета-ключ Баша спочатку був визначений так ( lib/readline/ChangeLog):

Mon Jul 13 11:34:07 1992  Brian Fox  (bfox@cubit)
        * readline.c: (rl_variable_bind) New variable "meta-flag" if "on"
        means force the use of the 8th bit as Meta bit.  Internal variable
        is called meta_flag.

Це трапляється так, як його інтерпретують ncurses та xterm . Через кілька терміналів , передбачених для створення цієї функції факультативного (цей аспект не були широко поширений Більшість терміналів ви будете стикатися використовувати жорстко поведінку (і не дуже цікаво) В .. Terminfo посібників документів ці можливостей терміналу:

   has_meta_key              km     km   Has a meta key
                                         (i.e., sets 8th-bit)
   meta_off                  rmm    mo   turn off meta mode
   meta_on                   smm    mm   turn on meta mode
                                         (8th-bit on)

і пояснює особливість:

Якщо в терміналі є "мета-клавіша", яка виконує функцію клавіші зсуву, встановлюючи 8-й біт будь-якого переданого символу, цей факт можна вказати за допомогою km. В іншому випадку програмне забезпечення передбачає, що 8-й біт є паритетом, і він зазвичай буде очищений. Якщо рядки існують, щоб увімкнути та вимкнути цей "мета режим", їх можна надати як smmі rmm.

Інша особливість, префіксація символу втечі у відповідь на Altключ, була включена в деякі емулятори терміналу. Bash (власне readlineбібліотека) документи, які використовують у своєму журналі змін із 2004 року:

lib/readline/callback.c            
        - use _rl_dispatch_callback and a chain of _rl_keyseq_contexts to
          simulate the recursion used to decode multicharacter key sequences
          (even things like ESC- as meta-prefix

Meta - особливий випадок ключа модифікатора . Як controlі shift, ви натискаєте її одночасно з іншою клавішею і очікуєте, що побачите щось інше, ніж натискання клавіші самостійно. X забезпечує ключі модифікатора, присвоюючи біт значення модифікатора, переданого разом у події X для ключа. Натискання клавіш може бути декількома подіями X; X надає функції для комбінування цих подій, зберігаючи модифікатори.

X також визначає символи для кожної з клавіш, які можуть з’являтися на вашій клавіатурі. Він передбачає інші значення (наприклад, Unicode) спеціальним керуванням у функціях, що поєднують події.

Але "мета" - це особливий випадок.

У X додатках немає metaключа, за винятком умовно. У X немає визначення мета-ключа або мета-модифікатора. Зазвичай клеми для Alt-Key і / або один з модифікаторів , відомих xmodmap, наприклад, mod2. Пізніша функція xkb ускладнює речі (але не забезпечує покращення щодо цієї дискусії), надаючи ще один рівень інформації для пошуку Altключа.

Конвенція, звичайно, може зайняти вас лише поки що, враховуючи, що xmodmapані xkbнічого, ані нічого не знаю, зокрема про мета . Наприклад, xterm настроюється, і не всі користувачі хочуть налаштувати мета однаково. Наприклад, це Altможе бути не призначений мета-ключ, наприклад, якщо він використовується в translationресурсі. Іншою клавішею може бути мета-ключ, але користувачі (особливо ті, що використовують послідовності евакуації в bash), можуть захотіти, щоб символ втечі надсилався при натисканні Alt. Але майте на увазі, що якщо він не налаштований як модифікатор, нічого з цього не відбувається: xterm не поєднує події сам по собі.

xterm має декілька параметрів ресурсів (задокументовані на сторінці керівництва ):

  • altIsNotMetaта altSendsEscape(додано у 2007 році ).
  • eightBitInputпочинаючи з 2006 року відповідає первісного змісту режиму позначки, і є керуюча послідовність визначається для цього , яке забезпечує smmі rmm(набір / видалити мета-режим) можливість терміналу.
  • eightBitInputбув модифікований у 2003 році для врахування UTF-8 шляхом зміщення декодованих значень Unicode на 128, а не необроблених вхідних байтів.
  • metaSendsEscapeдатується 1999 роком
  • eightBitInputнабагато старший за metaSendsEscape. Це здійснило вибір між мета режим (додавання восьмий біт) або префікси ключа з escapeмоменту X11R4 (1989). Але функція була визначена при запуску: під час ініціалізації вона перевірялася, щоб визначити, чи встановлено вхід таким чином, щоб дозволити 8 біт або лише 7. Після цього він не змінився.

Деякі люди прирівнюють два ( 8-й біт і префікс втечі), посилаючись на останній як мета- режим. Залежно від вашої точки зору щодо цього, eightBitInputналаштування ресурсів xterm є частиною рішення для отримання працездатного мета-ключа.

Подальше читання:

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