Автоматический запуск Haskell dmenu при нажатии клавиш

Я только начинаю haskell и xmonad. Мне было интересно, как можно настроить его так, чтобы, если бы не было открытых окон, любой ключевой ввод запустил бы dmenu. Так, скажем, если бы у меня был пустой экран и я начал печатать "firefox", dmenu запустился бы с моим "firefox", например, внутри него.

Вряд ли важно, но было бы неплохо, если бы я мог получить несколько указателей в правильном направлении:)

1 ответ

Это интересная идея! На данный момент предположим, что вы хотите отобразить только клавишу "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

Другие вопросы по тегам