Haskell dmenu 在按键时自动启动

标签 haskell xmonad

我才刚刚开始使用 haskell 和 xmonad。 我想知道如何配置它,以便在没有打开任何窗口的情况下,任何键输入都会启动 dmenu。假设我有一个空白屏幕并开始输入“firefox”,dmenu 将启动,其中包含我的“firefox”。

几乎不重要,但如果我能得到一些正确方向的指示,那就太好了:)

最佳答案

这是一个有趣的想法!目前,我们假设您只想映射“f”键。我想到的方法是将键映射到一个检查是否有任何窗口打开的函数。如果没有打开的窗口,它会启动 dmenu,并用您刚刚键入的字符(即“f”)预先填充它。如果还有其他窗口打开,它会执行您通常希望该键执行的操作。

 main = xmonad $ blah blah blah
             `additionalKeys`
                [
                  ((0, xK_f), multiMapKey f someAction)
                  -- other mappings
                ]


multiMapKey :: Char -> X () -> X ()
multiMapKey c someAction =
  if ?a window is open?
    then launch dmenu with c already entered
    else someAction

注释:

  1. 我不知道如何确定窗口是否已打开,但我怀疑您会在 xmonad 或 xmonad-contrib 包中找到此功能。
  2. 我不知道如何使用已输入的字符启动 dmenu。也许 XMonad.Util.Dmenu 中的某些内容会有所帮助。
  3. 我认为您必须在 additionalKeys 中为要映射的每个键设置一个单独的条目。也许只映射 26 个字母键就足够了。

要了解有关 Xmonad 内部结构的更多信息,我推荐 jekor 的视频:part 1 part 2

关于Haskell dmenu 在按键时自动启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17446826/

相关文章:

haskell - IO monad 在 System.Random 中如何工作

linux - 如何在 Haskell 中获取按下和释放键的扫描码?

haskell - 为什么 rank-n 类型需要显式的 forall 量词?

haskell - 类型族导致不明确的变量错误

haskell - 将窗口移动到另一台显示器时如何使窗口保持焦点?

ubuntu-12.04 - 如何在Ubuntu 12.04 LTS上开始使用Xmonad?

Xmonad 多子图组合键

haskell - 如果我已经知道 OCaml,我应该学习 Haskell 还是 F#?