
gwern0:
2008/1/30 Joseph Garvin
: I'm a former sawfish user, and I used to have this really awesome keyboard shortcut called "jump-or-exec". I would press for example Super+F, and if Firefox was not running, it would be executed, and if it was already running, then it would be given focus. I had similar shortcuts for emacs, terminals, etc.
I'm a bit of a haskell newb -- I can tell that I can simply use 'spawn' to launch a process, and if I had a list of current windows I would know how to iterate through them and find out whether one currently exists, but I don't know how to get such a list. Ideally I'd like to be able to match against window title or class. Is there a way to do this with xmonad?
A bit of a followup: With Spencer's help, I just 'darcs sent' a patch which adds a module - XMonad.Actions.WindowGo - to XMonadContrib. What would interest you is the 'runOrRaise' function in it (I come from a Ratpoison/StumpWM background, not Sawfish), which does basically what you want.
I right now have in my xmonad.hs's keybindings the line:
, ((modm, xK_a ), runOrRaise "firefox" (className =? "Firefox-bin"))
This does as you would expect, it matches any window with a class of Firefox-bin, jumping to it; or failing that, it executes through spawn "firefox".
In my limited testing, it seems to work fine. (The module also has two other functions in case you don't want to do anything on failure, or you want to do something else besides spawn.) I hope it works well for you too!
Awesome :) Let's keep the new ideas rolling. Anyone else got some dream extension/UI ideas? -- Don