Как сделать раскладку для каждого окна с помощью простого XMonad?
Я использую обычный XMonad в течение некоторого времени (не в сочетании с KDE/GNome). В настоящее время я переключаюсь между раскладками клавиатуры просто по глобальной комбинации клавиш:
[ ((modMask , xK_Scroll_Lock ),
spawn "setxkbmap -layout us ; xmodmap ~/.Xmodmap")
, ((modMask .|. shiftMask, xK_Scroll_Lock),
spawn "setxkbmap -layout cz ; xmodmap ~/.Xmodmap") ]
Однако это немного неудобно. Для многих окон (т. Е. Браузера, терминала) мне нужно большую часть времени сохранять макет в США. Мне нужен локализованный макет только для текстовых редакторов в 99% случаев. И я много переключаю окна / рабочие пространства, поэтому приходится переключать раскладки вручную почти каждый раз, когда я переключаюсь.
В идеале я бы хотел добиться:
- Нажав комбинацию клавиш, я установил флаг для текущего окна.
- XMonad вызывает
spawn
команды автоматически в соответствии с флагами при изменении фокуса окна.
Как это сделать (если это возможно)? Спасибо за помощь.
(Бонус: внешнее управление флагами с помощью некоторой команды из сценариев.)
2 ответа
Установите демон kbdd, который выполняет эту работу.
Запустите это при запуске:
kbdd
setxkbmap "us,ua" -option grp:scroll_toggle
Это все!
Для отображения вашего макета в виджете вы можете найти этот код Ruby полезным:
interface = 'ru.gentoo.KbddService'
member = 'layoutChanged'
mon = open "| dbus-monitor --monitor \"sender='#{interface}',member='#{member}'\""
loop do
str = mon.gets
if str =~ /layoutChanged/
lang = mon.gets[/.\Z/] # lang is now either 0 or 1 depending on the current layout
end
end
Возможно, вы захотите взглянуть на Ским и / или ibus. Оба демона могут быть запущены в .Xsession
, По моему опыту, ibus - это путь, но он может не поддерживать ваш метод ввода.
Пример конфигурации задокументирован для xfce.
Отказ от ответственности: я бы добавил это как комментарий, а не как ответ.