[XMonad] main = do ? + lancer XMobar

Xorg, Compiz, KDE / Gnome / Xfce / Fluxbox / e17 / fvwm ... GDM/KDM/XDM...
Avatar de l’utilisateur
Stdrome1209
yeomen
Messages : 266
Inscription : sam. 29 nov. 2014, 19:39

[XMonad] main = do ? + lancer XMobar

Message par Stdrome1209 »

Bonsoir à toute te à tous,

Je suis en train de configurer XMonad à partir de la doc que je trouve sur le net et c’est juste l’enfer, il n’y en a pas un qui fait ou explique les même choses, résultat j’ai plus l’impression de bidouiller que de suivre une doc.

Et un "petit" détail m’échappe, la signification du

Code : Tout sélectionner

main = do
À quoi sert cette ligne ? Car dans certain essais je l’ai mise et ça fonctionnais alors que dans d’autre ça faisait planter le fichier, comme ici :

Code : Tout sélectionner

import XMonad
import XMonad.Util.EZConfig
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Util.Run
import System.IO

main = do
main = xmonad $ defaultConfig
    {terminal = "xterm"
    , modMask = mod4Mask
    , workspaces = ["1:","2:","3:","4:","5:","6:"]
    , borderWidth = 2
    , normalBorderColor = "#B8BABA"
    , focusedBorderColor = "#EC0000"
    --XMobar
    }
    
    `additionalKeys`
    [ ((mod4Mask .|. controlMask, xK_b), spawn "firefox")
    , ((mod4Mask .|. controlMask, xK_e), spawn "pcmanfm")
    , ((mod4Mask .|. controlMask, xK_q), spawn "shutdown -h now")
    ]
    
Bref j’aimerais comprendre car je suis sûr que cette ligne à une grande importance.

------------------------------------------------------------------------------------------------------------------
EDIT :

Bon entre temps et à force de m’arracher les cheveux par poignées entières, j'ai un peu avancé.
Voici à quoi ressemble mon xmonad.hs actuel :

Code : Tout sélectionner

import XMonad
import XMonad.Util.EZConfig
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.DynamicLog

main = do
    xmonad $ defaultConfig
        { terminal = myTerminal
        , modMask = myModMask
        , workspaces = myWorkspaces
        , borderWidth = 2
        , normalBorderColor  = myNormalBorderColor
        , focusedBorderColor = myFocusedBorderColor
        -- XMobar
        , layoutHook=avoidStruts $ layoutHook defaultConfig
        , manageHook=manageHook defaultConfig <+> manageDocks
        }
        `additionalKeys`
        [ ((mod4Mask .|. controlMask, xK_b), spawn "firefox")
        , ((mod4Mask .|. controlMask, xK_e), spawn "pcmanfm")
        , ((mod4Mask .|. controlMask, xK_q), spawn "shutdown -h now")
        ]
    
myTerminal = "xterm"
myModMask = mod4Mask
myWorkspaces = ["1:","2:","3:","4:","5:","6:"]
myBorderWidth = 2
myNormalBorderColor = "#C0C0C0"
myFocusedBorderColor = "#E60000"
J’ai configuré quelque option de base ainsi que quelque raccourcis, seulement je voudrais lancer XMobar maintenant, et là ça ce complique sacrément.

Je suis arrivé à lancé XMobar grâce à cette config :

Code : Tout sélectionner

import XMonad
import XMonad.Util.EZConfig
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.DynamicLog

main = do
    xmonad =<< xmobar defaultConfig
    xmonad $ defaultConfig
        { terminal = myTerminal
        , modMask = myModMask
        , workspaces = myWorkspaces
        , borderWidth = 2
        , normalBorderColor  = myNormalBorderColor
        , focusedBorderColor = myFocusedBorderColor
        -- XMobar
        , layoutHook=avoidStruts $ layoutHook defaultConfig
        , manageHook=manageHook defaultConfig <+> manageDocks
        }
        `additionalKeys`
        [ ((mod4Mask .|. controlMask, xK_b), spawn "firefox")
        , ((mod4Mask .|. controlMask, xK_e), spawn "pcmanfm")
        , ((mod4Mask .|. controlMask, xK_q), spawn "shutdown -h now")
        ]
    
myTerminal = "xterm"
myModMask = mod4Mask
myWorkspaces = ["1:","2:","3:","4:","5:","6:"]
myBorderWidth = 2
myNormalBorderColor = "#C0C0C0"
myFocusedBorderColor = "#E60000"
Comme vous pouvez le voir j’ai juste ajouté "xmonad =<< xmobar defaultConfig", seulement dans ce cas XMobar se lance mais toute les autres option ne sont plus prisent en compte (plus de modMask, de borderWidth, d’additionalKeys, rien nada, juste XMobar qui se lance).

Comme cela ça plante :

Code : Tout sélectionner

import XMonad
import XMonad.Util.EZConfig
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.DynamicLog

main = do
    xmonad =<< xmobar defaultConfig
        { terminal = myTerminal
        , modMask = myModMask
        , workspaces = myWorkspaces
        , borderWidth = 2
        , normalBorderColor  = myNormalBorderColor
        , focusedBorderColor = myFocusedBorderColor
        -- XMobar
        , layoutHook=avoidStruts $ layoutHook defaultConfig
        , manageHook=manageHook defaultConfig <+> manageDocks
        }
        `additionalKeys`
        [ ((mod4Mask .|. controlMask, xK_b), spawn "firefox")
        , ((mod4Mask .|. controlMask, xK_e), spawn "pcmanfm")
        , ((mod4Mask .|. controlMask, xK_q), spawn "shutdown -h now")
        ]
    
myTerminal = "xterm"
myModMask = mod4Mask
myWorkspaces = ["1:","2:","3:","4:","5:","6:"]
myBorderWidth = 2
myNormalBorderColor = "#C0C0C0"
myFocusedBorderColor = "#E60000"
Le meilleur résultat auquel je suis parvenu et celui-ci

Code : Tout sélectionner

import XMonad
import XMonad.Util.EZConfig
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.DynamicLog

main = do
    xmonad =<< xmobar defaultConfig
        { terminal = myTerminal
        , modMask = myModMask
        , workspaces = myWorkspaces
        , borderWidth = 2
        , normalBorderColor  = myNormalBorderColor
        , focusedBorderColor = myFocusedBorderColor
        -- XMobar
        , layoutHook=avoidStruts $ layoutHook defaultConfig
        , manageHook=manageHook defaultConfig <+> manageDocks
        }
    
myTerminal = "xterm"
myModMask = mod4Mask
myWorkspaces = ["1:","2:","3:","4:","5:","6:"]
myBorderWidth = 2
myNormalBorderColor = "#C0C0C0"
myFocusedBorderColor = "#E60000"
Comme cela j’ai mes options de bases qui sont prisent en compte, mais je suis obligé de supprimer mes raccourcis persos pour que ’a fonctionne, bref je n’y comprend rien et après tant d’heure passé à revoir/recommencer encore et encore mon fichier je suis désespéré.

HELP !!!!!!!!!!!
Dernière modification par Stdrome1209 le dim. 01 mars 2015, 22:20, modifié 1 fois.
Gaming desktop : Corsair Obsidian 350D, Intel Core I5 4690, Nvidia GTX 770, Asus H97M-E, 8 Go de DDR3, SSD 120 Go, HDD 500 Go, Powered by Arch Linux.

Notebook : Asus PU500CA, Intel Core i5-3317U, 4 Go de DDR3, SSD 240 Go, Powered by Arch Linux.

Netbook : LDLC Mercure MA1-2-S Slim, Intel Celeron N2830, 2 Go de DDR3, SSD 60 Go, Powered by Arch Linux.
Dnomyar
Hankyu
Messages : 27
Inscription : sam. 27 sept. 2014, 13:57

Re: [XMonad] main = do ?

Message par Dnomyar »

Bonsoir,

Le code :

Code : Tout sélectionner

main = ... 
correspond à la fonction principale (ce qui va s'exécuter quand tu vas lancer ton fichier haskell). On retrouve la fonction main dans beaucoup de langages.

Si tu as plus d'un "main =", ça va te poser des problèmes. Il ne saura pas quel main exécuter.

Code : Tout sélectionner

    Multiple declarations of `main'
    Declared at: test.hs:2:1
                 test.hs:4:1
En Haskell, la fonction main peut s'écrire de plusieurs façons. Exemple :
Style "impératif" :

Code : Tout sélectionner

main = do
	action_1
	action_2
Style "fonctionnel" :

Code : Tout sélectionner

main = action_1 >> action_2
Dans les 2 cas, les fonctions "action_1" et "action_2" seront exécutées successivement.

Au passage, le $ remplace les parenthèses. C'est plus pratique. Exemple bidon :

Code : Tout sélectionner

Prelude> filter (>5) $ map (+2) [1..5]
[6,7]                                 
Prelude> filter (>5) (map (+2) [1..5])
[6,7]
Au passage, voilà mes "dotfiles", si besoin : https://github.com/Dnomyar/dotfiles
Avatar de l’utilisateur
Stdrome1209
yeomen
Messages : 266
Inscription : sam. 29 nov. 2014, 19:39

Re: [XMonad] main = do ? + lancer XMobar

Message par Stdrome1209 »

Merci pour ces précision, mais pourquoi "main = do", et parfois "main = xmonad =<< xmobar defaultConfig { modMask = mod4Mask {- or any other configurations here ... -}}" ?
Gaming desktop : Corsair Obsidian 350D, Intel Core I5 4690, Nvidia GTX 770, Asus H97M-E, 8 Go de DDR3, SSD 120 Go, HDD 500 Go, Powered by Arch Linux.

Notebook : Asus PU500CA, Intel Core i5-3317U, 4 Go de DDR3, SSD 240 Go, Powered by Arch Linux.

Netbook : LDLC Mercure MA1-2-S Slim, Intel Celeron N2830, 2 Go de DDR3, SSD 60 Go, Powered by Arch Linux.
Dnomyar
Hankyu
Messages : 27
Inscription : sam. 27 sept. 2014, 13:57

Re: [XMonad] main = do ? + lancer XMobar

Message par Dnomyar »

Certains préfèrerons utiliser la première méthode, d'autres la seconde. Je ne pense pas que ça change quelque chose au final. C'est juste une façon différente d'écrire.

Je comprend que tu t'arraches les cheveux, moi aussi ça m'a fait pareil !
Je te conseille de repartir de mon xmonad.hs (https://github.com/Dnomyar/dotfiles/blo ... /xmonad.hs) et de supprimer (attention pas trop quand même) tout ce qui ne te va pas. Je fonctionne avec xmobar :)
Avatar de l’utilisateur
Stdrome1209
yeomen
Messages : 266
Inscription : sam. 29 nov. 2014, 19:39

Re: [XMonad] main = do ? + lancer XMobar

Message par Stdrome1209 »

Merci beaucoup de ton aide, je vais étudier ta configuration afin de mieux comprendre le fonctionnement du xmonad.hs.
Gaming desktop : Corsair Obsidian 350D, Intel Core I5 4690, Nvidia GTX 770, Asus H97M-E, 8 Go de DDR3, SSD 120 Go, HDD 500 Go, Powered by Arch Linux.

Notebook : Asus PU500CA, Intel Core i5-3317U, 4 Go de DDR3, SSD 240 Go, Powered by Arch Linux.

Netbook : LDLC Mercure MA1-2-S Slim, Intel Celeron N2830, 2 Go de DDR3, SSD 60 Go, Powered by Arch Linux.
Répondre