[xmonad] Re: Issues adapting XMonad.Util.Scratchpad for Conkeror in 0.8.1

Braden Shepherdson Braden.Shepherdson at gmail.com
Mon Feb 2 22:53:14 EST 2009


aditya siram wrote:
> Hi all,
> Scratchpad is an XMonad extension that brings up or spawns a terminal 
> window on Alt-F2 (as I have it configured) and hides it in a hidden 
> workspace when I am done. 
> 
> The code looked pretty simple and I tried to adapt this script to do the 
> same thing with my Conkeror window. This script worked until I upgraded 
> to 0.8.1. Now it doesn't detect an existing Conkeror window and keeps 
> launching a new instance.
> 
> Xprop output shows the class name of Conkeror is: "Navigator", "Conkeror".
> 
> Since hpaste.org <http://hpaste.org> seems to be down, here it is my 
> hacked Scratchpad sans imports and header comment ( if the author of 
> Scratchpad is reading this, yes the code below is pretty much 
> cut-and-paste):
> 
> ---------------------------------------------------------------------------
> -- | Action to pop up the browser, for the user to bind to a custom key.
> scratchBrowserSpawn :: X ()
> scratchBrowserSpawn =
>     scratchpadAction $ spawn "conkeror"
> 
> scratchpadAction :: X () -> X ()
> scratchpadAction action = withWindowSet $ \s -> do
>   filterCurrent <- filterM (runQuery scratchpadQuery)
>                      ( (maybe [] W.integrate
>                         . W.stack
>                         . W.workspace
>                         . W.current) s)
>   case filterCurrent of
>     (x:_) -> do
>       if null (filter ( (== scratchpadWorkspaceTag) . W.tag) 
> (W.workspaces s))
>          then addHiddenWorkspace scratchpadWorkspaceTag
>          else return ()
>       windows (W.shiftWin scratchpadWorkspaceTag x)
>     []    -> do
>       filterAll <- filterM (runQuery scratchpadQuery) (W.allWindows s)
>       case filterAll of
>         (x:_) -> windows (W.shiftWin (W.currentTag s) x)
>         []    -> action -- run the provided action to spawn it.
> 
> 
> -- factored out since it appears in several places
> scratchpadWorkspaceTag :: String
> scratchpadWorkspaceTag = "BR"
> 
> -- factored out since this is common to both the ManageHook and the action
> scratchpadQuery :: Query Bool
> scratchpadQuery = (className =? "Conkeror") <||> (className =? "Navigator")
> 
> 
> -- | The ManageHook, with the default rectangle:
> -- Half the screen wide, a quarter of the screen tall, centered.
> scratchpadManageHookDefault :: ManageHook
> scratchpadManageHookDefault = scratchpadManageHook scratchpadDefaultRect
> 
> 
> -- | The ManageHook, with a user-specified StackSet.RationalRect,
> -- eg.
> --
> -- > scratchpadManageHook (W.RationalRect 0.25 0.375 0.5 0.25)
> scratchpadManageHook :: W.RationalRect -- ^ User-specified screen rectangle.
>                      -> ManageHook
> scratchpadManageHook rect = scratchpadQuery --> doRectFloat rect
> 
> 
> -- | Transforms a workspace list containing the SP workspace into one that
> -- doesn't contain it. Intended for use with logHooks.
> scratchpadFilterOutWorkspace :: [WindowSpace] -> [WindowSpace]
> scratchpadFilterOutWorkspace = filter (\(W.Workspace tag _ _) -> tag /= 
> scratchpadWorkspaceTag)
> 
> 
> scratchpadDefaultRect :: W.RationalRect
> scratchpadDefaultRect = W.RationalRect 0.25 0.375 0.5 0.25
> 
> -------------------------------------------------------------------------------------------------
> Thanks ...
> Deech
> 
> 
> 

I'm the author of Scratchpad, though the code is simple enough any dev 
would do.

First thing is about xprop's "WM_CLASS" line: the first value is 
actually the resource name (resource =? "..." in a query), the second is 
the real className. You shouldn't need the <||> part in your 
scratchpadQuery:

 > scratchpadQuery = className =? "Conkeror"

But that wasn't likely the problem in itself. Next thing to try is to 
make sure the query matches though, since that seems to be the problem: 
it doesn't think the app is already running, so it launches a new one.

I'm usually on #xmonad (during the day in North America) as shepheb, and 
anyone there should be able to help check that query works using a 
ManageHook.


Braden Shepherdson
shepheb



More information about the xmonad mailing list