2013-07-03 3 views
5

Im только начало haskell и xmonad. Мне было интересно, как можно настроить его так, чтобы, если бы окна не были открыты, любой ввод ключа запускал бы dmenu. Скажите, если бы у меня был пустой экран и начал набирать «firefox», dmenu запускался бы с моим «firefox», например, внутри него.Автоматический запуск Haskell dmenu при нажатии клавиши

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

+0

@closevoter xmonad является (письменный и), выполненный в подлинном Haskell. Вы буквально программируете систему окон. Вы не можете настроить xmonad без написания haskell. Это программирование. – AndrewC

ответ

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-вно ,
  2. Я не знаю, как запустить dmenu с уже введенным символом. Может быть, в XMonad.Util.Dmenu есть что-то, что поможет.
  3. Я думаю, вам нужно будет иметь отдельную запись в additionalKeys за каждый ключ, который вы хотите отобразить. Возможно, достаточно отобразить 26 алфавитных ключей.

Для получения дополнительной информации о внутренностях Xmonad, я рекомендую видео jekor в: part 1part 2

Смежные вопросы