Як визначити Compose Key у терміналі (немає середовища на робочому столі)?


18

Я хотів би визначити composeключ у своїй системі (Debian Sid "Wheezy"). У мене немає Xorg (і я не хочу будь-якого середовища на робочому столі). Тільки в терміналі.

Я хотів би встановити його на своєму Alt-Grключі (праворуч Alt). Я деякий час намагався, але не можу зрозуміти, як це налаштувати.

Я досліджував і знайшов деякі напрямки:

  • $ showkeyдає мені код мого Alt-Grключа (# 100)

  • $ dumpkeysі $ dumpkeys --compose-onlyвивести "поточний вміст драйвера клавіатури" у форматі, визначеному keymapsвідповідно до manсторінки

  • $ loadkeys завантажити таблицю перекладу клавіатури

Я впевнений, що це не так складно, але я сумую, як з цим боротися ...


Гм, я не дотримуюся 100%, що б ти хотів, щоб Alt-Gr робив, коли ти його вдарив?
Емануель Берг

Я хотів би, щоб це був композиційний ключ . Насправді я просто хотів би де-небудь визначити Compose Key, і оскільки я звик це мати в своєму Alt-Gr, я хотів би його визначити там. Це дуже просто налаштувати за допомогою графічного інтерфейсу , але я повинен мати змогу визначити його в чистому консольному режимі, оскільки у мене не встановлена ​​система X (це не варіант). Я просто не можу зрозуміти, як.
cedbeu

Відповіді:


11

У новіших системах Debian і Ubuntu ваші налаштування клавіатури вводяться /etc/default/keyboardта розподіляються між X та консоллю. Просто біжи

sudo dpkg-reconfigure keyboard-configuration

і виберіть Compose key: Right Alt (AltGr)на відповідному екрані.

Можна також покласти XKBOPTIONS=compose:raltв /etc/default/keyboardі запустити

sudo dpkg-reconfigure console-setup

У старих системах за замовчуванням є клавіша Compose на консолі. У usмакеті дію обох Alt клавіш разом діє Compose. 1

Наприклад: Alt+ AltGr, ", A=> а

Якщо ви віддаєте перевагу AltGrтільки бути Compose, вам потрібно змінити

alt keycode 100 = Compose

у вашій активній карті клавіатури до

keycode 100 = Compose

Найпростіший спосіб зробити це - внести зазначені вище зміни /lib/kbd/keymaps/i386/include/linux-with-alt-and-altgr.inc.

Кращий спосіб - створити новий файл, названий /lib/kbd/keymaps/i386/include/altgr-is-compose.incвищевказаним рядком, створити нову карту клавіш, яка включає його, і встановити це за вашою стандартною картографічною карткою.

  1. PrtScnтакож діє Composeза замовчуванням.

Я не отримую цього на роботі. dpkg-reconfigureМайстер дійсно запитує про ключі створення листи, але він каже , що не працює в режимі «Unicode» (?). Крім того, якщо він не перебуває в такому режимі, він каже, що період Control + працює як ключ створення. Але я також не отримую цього для роботи.
Емануель Берг

Я думаю, що це попередження стосується unicode_start. Для мене це все ще працює, якщо я бігаю, setupconяк dpkg-reconfigureкаже.
Мікель

Коли я бігаю setupconв свій X-термінал ( urxvt), він говорить: "Ми не на консолі, консоль не налаштована". Також showkeyскаржиться "Не вдалося отримати дескриптор файлу до консолі". І те tty, і інше працює, але showkeyговорить (перше), що "режим kb був UNICODE", так що, можливо, саме тому він не працює. Але період Control + працює в tty. Гаразд, це має сенс зараз.
Емануель Берг

У вашому запитанні сказано, що у вас немає X? Вам потрібно запустити setupconвіртуальну консоль Linux, наприклад, Ctrl + Alt + F1.
Мікель

1
Схоже console-setup, не підтримує дуже багато послідовностей складання за замовчуванням. Ви можете бігти, dumpkeys --compose-onlyщоб побачити, які з них. Ви повинні мати змогу змінити console-setupсценарій init, щоб додати додаткові правила складання, де він працює loadkeys.
Мікель

2

"compose" на консолі дозволяє набрати два символи, але вивести третій.

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

щоб змусити його працювати в UTF-8, який є багатобайтовим (щонайменше від 1 до 4 байтів), знадобляться значні зміни у способі керування входом консолі та замінить простий масив char, який зараз використовується чим-небудь складнішим. Здається, цього не планують (консенсус серед розробників ядра полягає в тому, що консоль повинна залишатися консоллю, чимось простим, використовуваним лише для останнього перегляду; якщо вам потрібен unicode, то, ймовірно, вам також знадобиться bidi, shaping тощо); краще запустити графічний термінал (повноекранний xterm на X11; але є й інші можливості).

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

І я також з’ясував, що він також працює, якщо вихід знаходиться в iso-8859-1 (які відповідають значенням unicode до 0x00ff); для цього ви можете ввести в стартовий сценарій рядок:

    loadkeys / somepath / somefile

і введіть у цей файл потрібні вами визначення (будьте обережні, щоб зберегти файл у кодуванні ISO-8859-1; і використовувати символи, що перевищують лише 0x7f, лише як вихід), синтаксис такого файлу дуже простий, такі рядки:

    скласти 'somechar' 'somthercharchar' до 'бажаний вихід'

наприклад:

    скласти 'a' 'a' to 'å'
    скласти 'a' 'e' to 'æ'

апострофа треба уникати.

у цьому файлі також визначено ефект мертвих ключів діакритики; для dead_acute + a ви визначаєте такий рядок:

    скласти '\' '' a 'до' b '

dead_grave використовує backtick (`), dead_diaeresis використовує doublequote ("), dead_circumflex використовує circumflex (^), а dead_tilde використовує tilde (~).


Дякую, дійшло до роботи. Тільки мені довелося перейти compose 'a' 'a' to 'å'в compose 'o' 'a' to U+00E5інший спосіб, loadkeysпоскаржившись на синтаксичну помилку.
Емануель Берг

коли ви використовували "å", ви писали файл у iso-8859-1 (не utf-8)?
Пабло Саратксага

Не знаю. Як це перевірити?
Емануель Берг

перевірити, чи файл у utf-8: iconv -f utf-8 -t utf-8 filename якщо помилок немає, це у utf-8
Pablo Saratxaga

Файл здається, що це кіт, але ні, echo $?принаймні немає помилок і не потрібно stderr. Також fileмені кажуть, що це UTF-8, тому це має сенс.
Емануель Берг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.