
* On Sunday, July 11 2010, Joseph Garvin wrote:
I used to have the following line in my xmonad.hs to bind Win+F to either open a new firefox or switch to an existing one in a way that would work across multiple Ubuntu versions:
((modMask, xK_f), runOrRaiseNext "firefox-3.5 || firefox3 || firefox" (className =? "Firefox" <||> className =? "Shiretoko"))
The ||'s would be interpreted by the shell, first trying firefox-3.5, then if it didn't work firefox3, etc. This worked great. But upgrading to xmonad 0.9.1-2 (installed Lucid Lynx) this functionality broke. Now nothing happens when I press Win+F, and I receive no errors.
The change is intentional: Mon Jun 22 15:32:55 EDT 2009 gwern0@gmail.com * XMonad.Actions.WindowGo: switch to safeSpawn, since everyone just passes a prog name (no shell scripting)
If I just put "firefox" then it works, but "firefox || firefox" does not, leading me to believe the command is no longer executed through the shell. Is this intentional? If it is, is there a way that xmonad provides for me to query what's in $PATH so I can bind the right version of firefox?
You can call out to the shell to check with 'which' with the following expression you can put where you had runOrRaiseNext: do (_,paths,_) <- io $ readProcessWithExitCode "which" ["firefox-3.5","firefox3","firefox"] "" -- run the first one that exists case lines paths of firefox : _ -> runOrRaiseNext firefox ... _ -> return () -- or something else? -- Adam