2015-11-05 3 views
1

ma question devrait être un morceau de gâteau pour tout le monde un peu appris à Haskell:xmonad: Combiner les espaces de travail de style DWM par écran physique avec fonction cycliste

Je voudrais utiliser le multihead-setup comme DWM: chaque écran physique obtient son propre ensemble d'espaces de travail. Pas d'échange automatique de fenêtres ou de mise au point ou quoi que ce soit. Ceci est fourni par l'extension XMonad.Layout.IndependentScreens (http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Layout-IndependentScreens.html) qui fonctionne correctement.

Mais je voudrais également utiliser la fonction cyclisme fournie par XMonad.Actions.CycleWS (http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Actions-CycleWS.html) qui fonctionne tout aussi bien (par lui-même).

Comme il est, quand je défiler les espaces de travail, il va: Screen1 WS1 < -> Screen2 WS1 < -> Screen1 WS2 < -> Screen2 WS2 etc.

La fonction cycliste devrait être enveloppé dans une fonction de mise en page indépendante, je suppose. Comme je l'ai dit, c'est probablement très simple, mais je ne connais pas grand-chose à Haskell et je ne pouvais pas le comprendre.

Les deux extensions sont bien documentées, donc cela devrait être simple pour certains d'entre vous.

Merci de votre aide!

Répondre

0

Je suppose que l'astuce consiste à créer un WSType qui informe CycleWS que vous êtes uniquement intéressé par les espaces de travail physiques qui apparaissent sur le même écran que l'espace de travail physique actuel. Voici comment vous feriez cela.

isOnScreen :: ScreenId -> WindowSpace -> Bool 
isOnScreen s ws = s == unmarshallS (tag ws) 

currentScreen :: X ScreenId 
currentScreen = gets (screen . current . windowset) 

spacesOnCurrentScreen :: WSType 
spacesOnCurrentScreen = WSIs (isOnScreen <$> currentScreen) 

Ensuite, vous pouvez utiliser spacesOnCurrentScreen dans keybindings quelque chose comme ceci:

, ((modM, xK_whatever), moveTo Next spacesOnCurrentScreen) 
, ((modM, xK_whatever2), shiftTo Next spacesOnCurrentScreen) 

Je ne l'ai pas testé, mais il typable au moins. ;-)

+0

Salut Daniel, merci beaucoup! Cela semble prometteur. Pour l'instant, il me donne "pas dans la portée" -erreurs pour l'étiquette, l'écran, le courant, <$>. Est-ce dû à un module que je n'ai pas chargé? – mat

+0

@mat Peut-être. 'tag',' screen', et 'current' proviennent de' XMonad.StackSet' (certaines personnes importent ce qualifié comme 'W', donc peut-être' W.tag', etc. fonctionnera pour vous), et '(<$>) 'peut être remplacé par' \ 'fmap \' 'sans importer quoi que ce soit ou peut être importé depuis' Control.Applicative'. –

+0

Oui, cela semble bon. Je n'ai pas le temps de tester maintenant, peut-être ce soir. Mais cela semble fonctionner. Mauvais rapport. – mat