LINUX.ORG.RU

Можно ли различить Alt и Meta в XTerm?

 , , ,


1

1

Всем привет.

Хочу научить XTerm (а) понимать и (б) различать Alt и Meta, но не очень понимаю, возможно ли (б).

Сейчас XTerm сконфигурирован так:

*.vt100.altSendsEscape:         True
*.vt100.altIsNotMeta:           True
*.vt100.metaSendsEscape:        True
*.vt100.eightBitInput:          False

-- но в этом случае нажатия Alt+Key, Meta+Key и Esc, Key интерпретируются одинаково (как escape-последовательность, соответствующая Alt+Key).

Может кто-нибудь проконсультировать?

Заранее спасибо.

★★★★

Ответ на: комментарий от ashot

Ты не поверишь, но когда-то существовали клавиатуры с клавишами Meta. Например, последние Sun Type 6 Keyboards уже шли с USB-разъёмом, и их вполне можно воткнуть в PC без перепаивания штекера.

Bass ★★★★ ()
Последнее исправление: Bass (всего исправлений: 1)
Ответ на: комментарий от Bruce_Lee

Нет. Mod1 по Mod5 — это модификаторы более низкого уровня, которые вообще ничего не знают об Alt, Win, Super, Hyper и Meta.

Просто на твоей традиционной клавиатуре после применения стандартных XkbOptions условный Mod4 интерпретируется как Win.

Но стоит указать в настройках другую модель клавиатуры или слегка изменить XkbOptions (напр., altwin:meta_win) — и всё поменяется.

Ещё раз: мне неважно, что там на более низком уровне. Клавиатура настроена правильно: Alt интерпретируется как Alt, Meta интерпретируется как Meta, и это механически разные клавиши. Тот же Emacs (кроме консольного) их правильно опознаёт.

Вопрос: как правильно сконфигурировать XTerm? Вопрос исключительно в подборе правильной комбинации VT100-ресурсов.

Bass ★★★★ ()
Последнее исправление: Bass (всего исправлений: 1)

В общем, залез я на сайт Фомы Дикого (Thomas Dickey) и набрёл на след. таблицу:

The metaSendsEscape resource (and altSendsEscape if altIsNotMeta is set)
can be used to control the way the Meta modifier applies to ordinary
keys unless the modifyOtherKeys resource is set:

o   prefix a key with the ESC  character.

o   shift the key from codes 0-127 to 128-255 by adding 128.

The table shows the result for a given character "x" with modifiers
according to the default translations with the resources set on or off.
This assumes altIsNotMeta is set:

       -----------------------------------------------------------
       key          altSendsEscape   metaSendsEscape   result
       -----------+----------------+-----------------+------------
       x          | off            | off             | x
       Meta-x     | off            | off             | shift
       Alt-x      | off            | off             | shift
       Alt+Meta-x | off            | off             | shift
       x          | ON             | off             | x
       Meta-x     | ON             | off             | shift
       Alt-x      | ON             | off             | ESC  x
       Alt+Meta-x | ON             | off             | ESC  shift
       x          | off            | ON              | x
       Meta-x     | off            | ON              | ESC  x
       Alt-x      | off            | ON              | shift
       Alt+Meta-x | off            | ON              | ESC  shift
       x          | ON             | ON              | x
       Meta-x     | ON             | ON              | ESC  x
       Alt-x      | ON             | ON              | ESC  x
       Alt+Meta-x | ON             | ON              | ESC  x
       -----------+----------------+-----------------+------------

Это означает, что при нажатом модификаторе, в зависимости от значений ресурсов, можно либо генерировать Escape, Key, либо выполнять сдвиг («shift») значения нажатой клавиши путём прибавления 128 (т. е., напр., нажатая клавиша Q станет Ñ).

Это малополезно, т. к. во втором случае не генерируется столь желаемая escape-последовательность, а Ñ можно набрать и как Compose, ~, N.

Так что задача не решается. Оставил Alt и Meta генерящими одинаковые escape-последовательности.

Всем спасибо.

Bass ★★★★ ()
Ответ на: комментарий от Bass

Mod1 по Mod5 — это модификаторы более низкого уровня, которые вообще ничего не знают об Alt, Win, Super, Hyper и Meta.

Представь себе, на уровне ядра этих «низкоуровневых» модификаторов нет, там Alt, Meta (обычно Super в Xorg) и т.д.

anonymous ()