如何使用普通的 XMonad 制作每个窗口的键盘布局?

如何使用普通的 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根据标志自动调用命令。

怎么做(如果可能的话)?谢谢帮助。

(奖励:通过脚本中的某种命令从外部管理标志。)

答案1

安装知识库执行该工作的守护进程。

在启动时运行:

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

你可能想看看简写和/或伊布斯。两个守护进程都可以在 中启动.Xsession。根据我的经验,ibus 是可行的方法,但可能不支持您的输入法。

示例配置已记录微软

免责声明:我会将其添加为评论,而不是答案。

相关内容