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

Pet*_*etr 7 keyboard-layout window 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") ]
Run Code Online (Sandbox Code Playgroud)

不过这有点不方便。对于许多窗口(即浏览器、终端),我大部分时间都需要保持美式布局。在 99% 的情况下,我只需要文本编辑器的本地化布局。而且我经常切换窗口/工作区,因此几乎每次切换时都必须手动切换布局。

理想情况下,我想实现:

  • 通过按下组合键,我为当前聚焦的窗口设置了某种标志。
  • spawn当窗口焦点改变时,XMonad根据标志自动调用命令。

如何做到这一点(如果可能的话)?感谢帮助。

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

def*_*hlt 5

安装完成这项工作的kbdd守护进程。

在启动时运行:

kbdd
setxkbmap "us,ua" -option grp:scroll_toggle
Run Code Online (Sandbox Code Playgroud)

就这样!

要在小部件中显示您的布局,您会发现此 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
Run Code Online (Sandbox Code Playgroud)


rom*_*ski 2

您可能想看看scim和/或ibus。这两个守护进程都可以在.Xsession. 根据我的经验,ibus 是最佳选择,但可能不支持您的输入法。

xfce记录了示例配置。

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