2014-01-19 5 views
5

Ich bin ein Haskell-Neuling und ich habe derzeit keine Zeit, Haskell wirklich zu lernen, also bitte ich um Hilfe von den Experten, die es bereits herausgefunden haben. :)Wie man Dzen anstelle von Xmobar in diesem ungewöhnlichen Setup verwendet

Dies ist meine aktuelle xmonad.hs Datei: https://github.com/Greduan/dotfiles/blob/dd45d287fade73a3191ad313ec37231a8c802942/xmonad/xmonad.hs

Wie kann ich keybindings hinzufügen/konfigurieren (siehe myKeys Variable) und wie kann ich von Xmobar auf ein Basis ändern (keine Config noch) Dzen Setup .

Es ist ein Setup, das nicht in irgendeiner Konfiguration verwendet wird, die ich gefunden habe und jedes Mal, wenn ich versuche, es in das andere Format zu konvertieren, funktioniert es nicht so gut.

Das andere Format ist das main = do etc. etc. etc. BTW.

Und auch, wie kann ich nur konvertieren von diesem Format zu dem, das häufiger verwendet wird.

Antwort

5

über "Umwandlung":

Da xmonad.hs nur Haskell-Quellcode ist, der in "Ihr" xmonad kompiliert wird, gibt es nicht wirklich ein "Format" und es gibt viele Möglichkeiten, dasselbe zu schreiben.

Wenn Sie meinen, wie main konvertieren verwenden =<< operator zu tun Notation:

main = xmonad =<< statusBar myBar myPP statusbarToggleKey myConfig 

Hier werden Sie mit zwei Funktionen:

  • die statusBar Funktion, die vier Argumente und kehrt nimmt IO (XConfig (ModifiedLayout AvoidStruts l).Also im Grunde, indem Sie verwenden, was Sie statusBarerstellt die entsprechende XConfig und gibt es in der IO-Monade verpackt zurück.

  • xmonad die Funktion einen XConfig und Zurückkehren IO()

Die = < < Einnahme verbindet die beiden: nimmt der XConfig durch statusBar aus dem IO monadisch zurückgegeben und an xmonad passieren.

Das Äquivalent in do-Notation ist:

main = do 
    config <- statusBar myBar myPP statusbarToggleKey myConfig 
    xmonad config 

Aber wenn Sie verstehen, was die Monaden Betreiber tun, können sie mehr elegant aussehen als Notation zu tun.

Mit Dzen:

Wenn Sie die statusBar Funktion behalten möchten verwenden, müssen Sie nur die Argumente ändern Sie es sind vorbei.

-- the command line to launch the status bar 
myBar = "dzen2 -y -1" --that's for dzen at the bottom of the screen 
-- the PP 
myPP = defaultPP 

Tasturbefehle:

Sie können den Typ von keys in XConfig definition sehen. Es ist eine Funktion, die eine XConfig nimmt und eine Map zurückgibt. Hier

ist ein Beispiel für eine „ziemlich“ Art und Weise, es zu schreiben, mit der fromList Funktion von Data.Map:

import qualified Data.Map as M 

myKeys [email protected](XConfig {modMask = modm}) = M.fromList $ 
    [ 
    ((modm, xK_c), kill), 
    ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf) 
    ] 

Und dann, wenn Sie die Schlüssel in DefaultConfig definiert verwenden möchten zusätzlich zu Ihnen, Sie kann <+>:

myConfig = defaultConfig 
    { 
    ... 
    , keys = myKeys <+> keys defaultConfig 
    } 
+0

Ausgezeichnet. Alles hat funktioniert. Vielen Dank! : D – greduan

+0

Oh, ich habe die Standardschlüssel nicht meinen benutzerdefinierten Schlüsseln hinzugefügt, duh. Funktioniert auch für mich. – somesoaccount

3

Verwenden Sie für die Tastenbelegung additionalKeys (aus dem Modul XMonad.Util.EZConfig). Hier sind einige Tastenbelegungen ich (vielleicht brauchen Sie ein paar mehr Importe alle Arbeit zu machen):

defaultConfig 
{ 
-- stuff 
} `additionalKeys` 
[ ((0, xK_Print), spawn "scrot") 
, ((mod1Mask, xK_Print), spawn "scrot -m -d 1") 
, ((mod1Mask .|. shiftMask, xK_t), spawn "killall trayer && trayer --edge top --align right --SetDockType true --SetPartialStrut true --expand true --transparent true --width 5 --alpha 255 --tint 0x191970 --height 17") 
, ((mod1Mask, xK_p), spawn "dmenu_run") 
, ((mod1Mask, xK_b ), sendMessage ToggleStruts) 
, ((mod1Mask, xK_m ), focusUrgent) 
, ((mod1Mask, xK_n ), D.dzen "Hi, mom!" (seconds 4)) 
, ((mod1Mask, xK_f ), goToSelected defaultGSConfig) 
, ((mod4Mask, xK_l ), spawn "cmus-remote -n ") --next song 
, ((mod4Mask, xK_h ), spawn "cmus-remote -r") --previous song 
, ((mod4Mask, xK_s ), spawn "cmus-remote -s") --stop 
, ((mod4Mask, xK_p ), spawn "cmus-remote -p") --play 
, ((mod4Mask, xK_Right ), spawn "cmus-remote -k +5") --forward 5 sec 
, ((mod4Mask, xK_Left ), spawn "cmus-remote -k -5") --rewind 5 sec 
, ((mod4Mask, xK_KP_Subtract ), spawn "amixer -q sset PCM 2dB-") --quieter 
, ((mod4Mask, xK_KP_Add  ), spawn "amixer -q sset PCM 2dB+") --louder 
, ((mod1Mask .|. shiftMask, xK_udiaeresis), removeWorkspace) 
, ((mod1Mask .|. shiftMask, xK_numbersign), selectWorkspace defaultXPConfig) 
] 

Die D.dzen stammen aus import qualified XMonad.Util.Dzen as D. Ich benutze dzen nicht als Statusleiste, aber vielleicht gibt dir dieses Modul einige Hinweise.

bearbeiten: hier ist ein dzen config: And1's_xmonad.hs. Von dieser Site mit vielen Beispielen genommen: Config_archive.

edit2: Ich habe gerade ein bisschen mit der neuen Funktion statusBar gespielt, die anscheinend ziemlich neu ist und ein funktionierendes Beispiel lieferte.

edit3: LogHook wurde entfernt, da es nicht benötigt wird mit statusBar. main sieht nun wie folgt aus:

main = do 
    xmonad =<< statusBar "dzen2" myPP toggleStrutsKey 
    defaultConfig { --stuff 
    } 

Die keys Einstellung nicht für mich arbeiten und ich musste additionalKeys bleiben (sie die Klammern dann nicht vergessen):

main = do 
    xmonad =<< statusBar "dzen2" myPP toggleStrutsKey 
    (defaultConfig { --stuff 
    } `additionalKeys` 
    [ -- key bindings 
    ]) 

Sobald ich meine in Ordnung gebracht xmonad.hs kann ich biete auch die gesamte Datei ..

+0

Große Antwort, danke! Werde es in Zukunft wahrscheinlich nutzen. :) – greduan

Verwandte Themen