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

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

最佳答案

这是一个有趣的想法!目前,让我们假设您只想映射“f”键。我想到的方法是将 key 映射到一个检查是否有打开的窗口的函数。如果没有打开的窗口,它将启动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

笔记:
  • 我不知道如何确定窗口是否已经打开,但是我怀疑您会在xmonad或xmonad-contrib包中找到用于此功能的函数。
  • 我不知道如何使用已经输入的字符来启动dmenu。也许XMonad.Util.Dmenu中有一些有用的东西。
  • 我想您要映射的每个键都必须在additionalKeys中有一个单独的条目。也许仅映射26个字母键就足够了。

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

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

    10-12 13:24