我如何编写一个可点击的XMobar监视器插件,使其Haskell逻辑可以检测到点击?

问题描述 投票:0回答:1

例如,使用

Kbd
监视器插件,用于显示选择的键盘。

我是这样安装的

Run $ Kbd [("it", "IT"), ("ru(phonetic)", "RU")]

然后通过

setxkbmap
切换键盘,显示器会反映变化。

到目前为止一切顺利。

现在,假设

  • 我想让显示器可点击,
  • 并且单击应该“旋转”键盘布局(在提供的布局中,请参阅上面的
    []

即使这意味着编写

MyOwnKbd
插件。

还假设另一个要求是我不希望在外部脚本中编码旋转逻辑。


由于我不想绑定一个键来在键盘之间切换,我正在考虑通过单击显示器本身来允许切换。

我知道我可以将显示器的文本包裹在

<action=`the command`>
</action>
中以使其可点击,但我不知道
the command
应该是什么。

我知道我可以编写一个 shell 脚本来检测键盘的状态并设置另一个键盘的状态,但我想使用上面的列表,

[("it", "IT"), ("ru(phonetic)", "RU")]
作为单击监视器应该循环的键盘布局的来源,所以问题就变成了:我可以将点击监视器事件反馈给监视器的业务逻辑吗?

或者,如果不可能,我还有什么其他选择?


(1) 例如我本可以做到的

setxkbmap -layout it,ru -variant ,phonetic -option 'grp:caps_toggle'

一劳永逸,Caps Lock将允许在这两种布局之间切换,并且插件将反映正在使用的布局。但我不想将任何键映射到布局切换操作。

嗯,并不是我不想要这个解决方案,而是我很好奇知道另一种解决方案是什么。


(我已经删除了之前的问题,因为导致我提出这个问题的具体场景实际上使问题变得复杂。如果这个问题的答案不足以解决这个问题,我将取消删除它。)

haskell functional-programming xmonad io-monad xmobar
1个回答
0
投票

最终我自己想出了一个解决方案,它与PR #696合并。

当我写下

我知道我可以将显示器的文本包裹在

<action=`the command`>
</action>
中以使其可点击,但我不知道命令应该是什么。

我错误地认为我必须知道

the command
无论当前布局如何都会做正确的事情,但这是不正确的,因为我可以为每个布局计算不同的命令,这将简单地切换到下一个布局.

举个具体的例子,如果我这样安装插件,

Run $ Kbd [("it", "IT"), ("ru(phonetic)", "RU"), ("us", "US")]

选择3种布局中的每一种时我要打印的文本如下:

  • "<action=`setxkbmap -layout ru -variant phonetic` button=1>IT</action>"
  • "<action=`setxkbmap -layout us` button=1>RU</action>"
  • "<action=`setxkbmap -layout it` button=1>US</action>"
© www.soinside.com 2019 - 2024. All rights reserved.