5

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

几乎不重要,但如果我能在正确的方向上得到一些指示会很好​​:)

4

1 回答 1

2

这是一个有趣的想法!目前,让我们假设您只想映射“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 的视频:第 1 部分第 2 部分

于 2013-07-03T12:23:37.067 回答