6

Я использую обычный 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 ответа2

4

Установите демон 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
2

Возможно, вы захотите взглянуть на Scim и / или Ibus. Оба демона могут быть запущены в .Xsession . Исходя из моего опыта, ibus - это путь, но он может не поддерживать ваш метод ввода.

Пример конфигурации задокументирован для xfce.

Отказ от ответственности: я бы добавил это как комментарий, а не как ответ.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .