You are not logged in.

#1 2022-11-07 17:27:20

Gabachin
Member
Registered: 2022-05-06
Posts: 105

Make "extra" workspace clickable in Xmonad/Xmobar

I have a vanilla Arch setup with Xmonad/Xmobar, and have managed to add extra workspaces by doing this:

myWorkspaces = [" chrome ", " kitty ", " thunar ", " search ", " torrent ", " blueman ", " vlc ", " ranger ", " opera ", " tmux ", " meld "]
myWorkspaceIndices = M.fromList $ zipWith (,) myWorkspaces [1,2,3,4,5,6,7,8,9,0,10] -- (,) == \x y -> (x,y)
clickable ws = "<action=xdotool key super+"++show i++">"++ws++"</action>"
    where i = fromJust $ M.lookup ws myWorkspaceIndices 
myMeld :: String
myMeld = "meld"  -- Sets meld program
  ^++^ subKeys "My Keys"
  [   ("M-M1-1", addName "Google"    $spawn (myBrowser))
    , ("M-M1-3", addName "thunar"    $spawn (myFile))
    , ("M-M1-4", addName "catfish"   $spawn (mySearch))
    , ("M-M1-5", addName "torrent"   $spawn (myTorrent))
    , ("M-M1-6", addName "bluetooth" $spawn (myBlue))
    , ("M-M1-7", addName "vlc"       $spawn (myVideo))  
    , ("M-M1-8", addName "ranger"    $spawn ("kitty -e ranger")) 
    , ("M-M1-0", addName "tmux"      $spawn ("kitty -e tmux")) 
    , ("M-M1-9", addName "opera"     $spawn (myBrowser1)) 
    , ("M-M1--", addName "meld"      $spawn (myMeld))
    , ("M-d", addName "rofi"         $spawn ("rofi -show drun -dpi 1"))
    , ("M-M1-d", addName "rofi1"     $spawn ("rofi -show combi run,window"))
    , ("M-S-x", addName "logout"     $spawn ("~/.local/bin/logout.sh")) 
  ]

 ^++^ subKeys "Switch to workspace"
  [ ("M-1", addName "Switch to workspace 1"    $ (windows $ W.greedyView $ myWorkspaces !! 0))
  , ("M-2", addName "Switch to workspace 2"    $ (windows $ W.greedyView $ myWorkspaces !! 1))
  , ("M-3", addName "Switch to workspace 3"    $ (windows $ W.greedyView $ myWorkspaces !! 2))
  , ("M-4", addName "Switch to workspace 4"    $ (windows $ W.greedyView $ myWorkspaces !! 3))
  , ("M-5", addName "Switch to workspace 5"    $ (windows $ W.greedyView $ myWorkspaces !! 4))
  , ("M-6", addName "Switch to workspace 6"    $ (windows $ W.greedyView $ myWorkspaces !! 5))
  , ("M-7", addName "Switch to workspace 7"    $ (windows $ W.greedyView $ myWorkspaces !! 6))
  , ("M-8", addName "Switch to workspace 8"    $ (windows $ W.greedyView $ myWorkspaces !! 7))
  , ("M-0", addName "Switch to workspace 0"    $ (windows $ W.greedyView $ myWorkspaces !! 9))
  , ("M1-1", addName "Switch to workspace 10"    $ (windows $ W.greedyView $ myWorkspaces !! 10))
  , ("M-9", addName "Switch to workspace 9"    $ (windows $ W.greedyView $ myWorkspaces !! 8))]

  ^++^ subKeys "Send window to workspace"
  [ ("M-S-1", addName "Send to workspace 1"    $ (windows $ W.shift $ myWorkspaces !! 0))
  , ("M-S-2", addName "Send to workspace 2"    $ (windows $ W.shift $ myWorkspaces !! 1))
  , ("M-S-3", addName "Send to workspace 3"    $ (windows $ W.shift $ myWorkspaces !! 2))
  , ("M-S-4", addName "Send to workspace 4"    $ (windows $ W.shift $ myWorkspaces !! 3))
  , ("M-S-5", addName "Send to workspace 5"    $ (windows $ W.shift $ myWorkspaces !! 4))
  , ("M-S-6", addName "Send to workspace 6"    $ (windows $ W.shift $ myWorkspaces !! 5))
  , ("M-S-7", addName "Send to workspace 7"    $ (windows $ W.shift $ myWorkspaces !! 6))
  , ("M-S-8", addName "Send to workspace 8"    $ (windows $ W.shift $ myWorkspaces !! 7))
  , ("M-S-0", addName "Send to workspace 0"    $ (windows $ W.shift $ myWorkspaces !! 9))
  , ("M1-S-1", addName "Send to workspace 10"    $ (windows $ W.shift $ myWorkspaces !! 10))
  , ("M-S-9", addName "Send to workspace 9"    $ (windows $ W.shift $ myWorkspaces !! 8))]

I configured the workspaces to xmobar:


  , logHook = dynamicLogWithPP $  filterOutWsPP [scratchpadWorkspaceTag] $ xmobarPP
        { ppOutput = \x -> hPutStrLn xmproc0 x   -- xmobar on monitor 1
                        >> hPutStrLn xmproc1 x   -- xmobar on monitor 2
                        >> hPutStrLn xmproc2 x   -- xmobar on monitor 3
        , ppCurrent = xmobarColor color06 "" . wrap
                      ("<box type=Bottom width=2 mb=2 color=" ++ color06 ++ ">") "</box>"
          -- Visible but not current workspace
        , ppVisible = xmobarColor color06 "" . clickable
          -- Hidden workspace
        , ppHidden = xmobarColor color05 ""  . clickable
          -- Hidden workspaces (no windows)
--        , ppHiddenNoWindows = xmobarColor color05 ""  . clickable
          -- Title of active window
--        , ppTitle = xmobarColor color16 "" . shorten 60
          ,ppTitle = const ""
          -- Separator character
        , ppSep =  "<fc=" ++ color09 ++ "> <fn=1>|</fn> </fc>"
          -- Urgent workspace
        , ppUrgent = xmobarColor color02 "" . wrap "!" "!"
          -- Layout name format
        , ppLayout = xmobarColor color07 ""
          -- Adding # of windows on current workspace to the bar
        , ppExtras = [ (fmap . fmap) foobar $ windowCount ]
          -- order of things in xmobar
        , ppOrder  = \(ws:l:t:ex) -> [ws,l]++ex++[t]
        }
    }
    
   where
       foobar :: String -> String
       foobar = xmobarColor color07 color07

This works as expected except that the workspace "meld" is not clickable. How can I fix this?

Last edited by Gabachin (2022-11-07 17:29:01)

Offline

Board footer

Powered by FluxBB