Я пытаюсь настроить сочетания клавиш для ввода распространенных диакритических знаков. Я могу заставить xdotool вводить диакритические знаки в терминале или из командной строки icewm (или даже из gmrun):
xdotool key Aacute
Но следующие сопоставления клавиш (в файле ключей icewm) не работают:
key "Ctrl+Alt+a" xdotool key Aacute
key "Ctrl+Alt+a" xdotool --delay 1000 key Aacute
Вместо этого я просто вижу, как курсор мигает один раз, когда я набираю сочетание клавиш (в терминале или текстовом редакторе), но больше ничего не происходит. Ниже показано всплывающее окно, поэтому сам код клавиши правильный:
key "Ctrl+Alt+a" zenity --info --text="shortcut works"
Есть ли у кого-нибудь способ зарегистрировать привязку клавиш, чтобы диакритический знак действительно набирался в активном приложении?
решение1
Использование setxkbmap
или xmodmap
кажется правильным, но FWIW и FTR я обнаружил, что следующее сработало для меня после того, как я наткнулся на этот вопрос. Я надеюсь, что это поможет другим, кто хочет использовать xdotool
.
У меня есть xdotool, эмулирующий эти клавиши, поскольку у меня их нет на клавиатуре. Обратите внимание на использование &
для запуска команды в фоновом режиме, чтобы IceWM мог вернуться из обработки горячей клавиши и не мешать xdotool.
200 мс — это самая короткая задержка, которую я мог бы использовать и которая все еще работала бы надежно. Я не уверен, --clearmodifiers
имеет ли это смысл для вашего варианта использования или нет.
key "Ctrl+Up" xdotool sleep 0.2 key --clearmodifiers Page_Up &
key "Ctrl+Down" xdotool sleep 0.2 key --clearmodifiers Page_Down &
key "Ctrl+Shift+Up" xdotool sleep 0.2 key --clearmodifiers Home &
key "Ctrl+Shift+Down" xdotool sleep 0.2 key --clearmodifiers End &
Также обратите внимание, что удерживание этих клавиш не приводит к ожидаемому повторяющемуся поведению (поскольку горячие клавиши IceWM не являются лучшим выбором для этого), но для моих целей этого вполне достаточно.
решение2
Мне не удалось заставить работать мое оригинальное решение, поэтому я изменил раскладку клавиатуры. В раскладке клавиатуры по умолчанию для США нет нужных мне диакритических знаков, но в международной версии они есть. Чтобы попробовать:
setxkbmap -layout 'us(intl)'
Но интернациональная версия использует compose по умолчанию для некоторых клавиш. Например, символ ' больше не реагирует немедленно. Поэтому вместо этого я решил создать собственную раскладку клавиатуры на основе клавиатуры США.
Я создал новый файл:/usr/share/X11/xkb/symbols/erik
partial default alphanumeric_keys
xkb_symbols "basic" {
include "us"
include "eurosign(5)"
key <AC01> { [ a, A, aacute, Aacute ] };
key <AD03> { [ e, E, eacute, Eacute ] };
key <AD08> { [ i, I, iacute, Iacute ] };
key <AD09> { [ o, O, oacute, Oacute ] };
key <AD07> { [ u, U, uacute, Uacute ] };
key <RALT> { type[Group1]="TWO_LEVEL", [ ISO_Level3_Shift, Multi_key ] };
modifier_map Mod5 { <RALT> };
};
чтобы xkb принял изменения:
sudo dpkg-reconfigure xkb-data
чтобы попробовать раскладку клавиатуры:
setxkbmap -layout erik
Теперь alt_gr + [aeiou] должно набрать [áéíóú].
Я сделал изменения постоянными, вызвав указанную выше команду при запуске с помощью файла запуска icewm. Я думаю, что можно будет выбирать раскладку с помощью переключателя клавиатуры вашего дистрибутива, но я не проверял это. Можете свободно назвать файл как-нибудь иначе, если только вы не хотите оказать мне огромную честь назвать вашу раскладку клавиатуры в мою честь. Только обязательно избегайте двухбуквенных кодов, потому что все раскладки стран по умолчанию так называются.
примечания:
Вы можете проверить другие файлы сопоставления в каталоге символов для примеров.
Некоторые ресурсы для понимания формата файла можно найти здесь:
https://www.x.org/wiki/XKB/