Xmonad, wie richtet man ein Raster von Arbeitsbereichen ein?

Xmonad, wie richtet man ein Raster von Arbeitsbereichen ein?

Ich möchte 9 Arbeitsbereiche als Raster haben. Und darin mit den Pfeiltasten navigieren. Bisher kann ich mit den Pfeiltasten navigieren, aber ich möchte das „Umbrechen“ loswerden. Wenn beispielsweise Arbeitsbereich 9 der aktuelle Arbeitsbereich ist und ich die Pfeiltaste NACH OBEN drücke, lande ich bei Arbeitsbereich 1 (sollte bei Arbeitsbereich 9 bleiben). Dies sollte kein Problem bei der Implementierung sein, wenn es eine Möglichkeit gibt, den aktuellen Arbeitsbereich abzurufen.

Hier ist ein Teil meines bisherigen Codes:

 myKeys = [ 
      , ((myModMask , xK_Down), (switchWorkspace (-3)))  -- prevWS 
      , ((myModMask , xK_Up), (switchWorkspace 3))    -- nextWS
      , ((myModMask , xK_Left), prevWS)
      , ((myModMask , xK_Right), nextWS)
      ]

 switchWorkspace :: Int -> X ()
 switchWorkspace d = wsBy d >>= windows . W.greedyView

 wsBy :: Int -> X (WorkspaceId)
 wsBy = findWorkspace C.getSortByIndex Next AnyWS

Ich habe den folgenden Code gefunden, der nützlich sein könnte, weiß aber nicht, wie ich das Ergebnis „extrahieren“ kann oder ob das Ergebnis nützlich ist. Wie erhalte ich den aktuellen Arbeitsbereich? Danke.

   -- | Lookup the index of a workspace id in the user's config, return Nothing
  -- if that workspace does not exist in the config.
 getWsIndex :: X (WorkspaceId -> Maybe Int)
 getWsIndex = do
     spaces <- asks (workspaces . config)
     return $ flip elemIndex spaces 

Antwort1

Den aktuellen Arbeitsbereich erhalten Sie mitlogCurrent

https://hackage.haskell.org/package/xmonad-contrib-0.15/docs/XMonad-Util-Loggers.html#v:logCurrent

Anstatt also Folgendes zu nextWStun:

do
  x <- logCurrent
  if x /= "9" then nextWS else pure ()

verwandte Informationen