2011-07-07 8 views
5

Jak ustawić akcję, która ma nastąpić w wydaniu klucza w Xmonad?Jak ustawić akcję, która ma wystąpić w wydaniu klucza w Xmonad?

Nie lubię pasków menu i paneli. Zamiast panelu takiego jak xmobar, chcę mieć pełną stronę informacyjną na ekranie (czas, aktualnie wybrane okno i przestrzeń robocza itp.) Pojawia się, gdy przytrzymam klawiszowe połączenie, a następnie znikam, kiedy puściłem klawisze. Mogę samodzielnie zakodować aplikację strony z informacjami. Mogę ustawić stronę informacyjną do odrodzenia na klawiszu.

Nie mogę ustawić niczego, co mogłoby się wydarzyć w kluczowym wydaniu.

Jak ustawić akcję dla wydania klucza?

Rozważam rozszerzenie xmonad samodzielnie, aby to zrobić. Mam nadzieję, że nie będę musiał, ponieważ byłoby to naprawdę denerwujące.

Odpowiedz

5

xmonad przekazuje wszystkie otrzymane imprez, w tym imprez naciśnięciem klawisza, do handleEventHook, więc ten kod będzie w stanie reagować na keyRelease wydarzeń:

module KeyUp where 

import Data.Monoid 
import qualified Data.Map as M 

import XMonad 
import Control.Monad 

keyUpEventHook :: Event -> X All 
keyUpEventHook e = handle e >> return (All True) 

keyUpKeys (XConf{ config = XConfig {XMonad.modMask = modMask} }) = M.fromList $ 
    [ ((modMask, xK_v), io (print "Hi")) ] 

handle :: Event -> X() 
handle (KeyEvent {ev_event_type = t, ev_state = m, ev_keycode = code}) 
    | t == keyRelease = withDisplay $ \dpy -> do 
     s <- io $ keycodeToKeysym dpy code 0 
     mClean <- cleanMask m 
     ks <- asks keyUpKeys 
     userCodeDef() $ whenJust (M.lookup (mClean, s) ks) id 
handle _ = return() 

będzie go używać tak w pliku xmonad.hs:

handleEventHook = handleEventHook defaultConfig `mappend` 
        keyUpEventHook `mappend` 
        fullscreenEventHook 

Niestety, to nie działa jeszcze: to będzie reagować tylko na KeyRelease wydarzeń, które mają odpowiedni wpis w zwykłej konfiguracji keys. Jest to spowodowane grayKeys w XMonad.Main, chwytając tylko klucze wymienione w keys. Możesz obejść to, definiując pozorne działanie dla każdej kombinacji, którą chcesz obsłużyć w postaci: KeyUp: