
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 I have just pushed the following patches to XMC. One just tidies up the haddocks in WindowGo, and one adds a convenience function to Utils.Run. The third one changes the internals of WindowGo to use safeSpawn instead of spawn/going via /bin/sh. I have made the last change because after looking through the config archive, it seems every use of the runOrRaise functions simply specifies a program name; so spawn is just unnecessary & cluttering up the process tree. As I said, this shouldn't adversely affect anyone who just does stuff like 'runOrRaise "emacs"' or 'runOrRaise "firefox"'; but it's possible that there's someone who is doing shell scripting in the argument and so whose binding would be broken by this. So this is a heads up for them. The 4th and fifth patches are because I discovered that when Emacs is passed "" as an argument, it either bombs out or opens a new file by that name. (I'm not clear how the latter is possible...) The problem is the old version of safeSpawn only took a String, and not a [String]. I could've added a check for "", but it's more principled to express the need directly. This, unfortunately, breaks 2 configs and a number of modules. The fifth patch fixes the modules, but I cannot do anything about Sean or 31d1's configs. (But at least it's easy to update callers.) Mon Jun 22 15:28:31 EDT 2009 gwern0@gmail.com * XMonad.Actions.WindowGo: improve haddocks { hunk ./XMonad/Actions/WindowGo.hs 72 - user. Currently, there are three such useful booleans defined in - "XMonad.ManageHook": title, resource, className. Each one tests based pretty + user. Currently, there are 3 such useful booleans defined in + "XMonad.ManageHook": 'title', 'resource', 'className'. Each one tests based pretty hunk ./XMonad/Actions/WindowGo.hs 75 - useful of which is (=?). So a useful test might be finding a Window whose + useful of which is (=?). So a useful test might be finding a @Window@ whose hunk ./XMonad/Actions/WindowGo.hs 138 - if your variables are simple and look like 'firefox' or 'emacs'. -} + if your variables are simple and look like \"firefox\" or \"emacs\". -} hunk ./XMonad/Actions/WindowGo.hs 143 -{- | if the window is found the window is focused and the third argument is called +{- | If the window is found the window is focused and the third argument is called hunk ./XMonad/Actions/WindowGo.hs 145 - See 'raiseMaster' for an example -} + See 'raiseMaster' for an example. -} hunk ./XMonad/Actions/WindowGo.hs 154 -{- | if the window is found the window is focused and the third argument is called - otherwise, raisef is called -} +{- | If a window matching the second arugment is found, the window is focused and the third argument is called; + otherwise, the first argument is called. -} hunk ./XMonad/Actions/WindowGo.hs 160 - otherwise, the first argument is called + otherwise, the first argument is called. hunk ./XMonad/Actions/WindowGo.hs 162 - raiseMaster (runInTerm \"-title ghci\" \"zsh -c \'ghci\'\") (title =? \"ghci\") -} + > raiseMaster (runInTerm \"-title ghci\" \"zsh -c \'ghci\'\") (title =? \"ghci\") -} hunk ./XMonad/Actions/WindowGo.hs 166 -{- | if the window is found the window is focused and set to master - otherwise, action is run +{- | If the window is found the window is focused and set to master + otherwise, action is run. hunk ./XMonad/Actions/WindowGo.hs 169 - runOrRaiseMaster \"firefox\" (className =? \"Firefox\")) $ + > runOrRaiseMaster \"firefox\" (className =? \"Firefox\")) $ } Shall I push this patch? (3/5) [ynWsfvplxdaqjk], or ? for help: y Mon Jun 22 15:30:18 EDT 2009 gwern0@gmail.com * XMonad.Util.Run: +convenience function for safeSpawn which drops args to the prog { hunk ./XMonad/Util/Run.hs 24 + safeSpawnProg, hunk ./XMonad/Util/Run.hs 113 +-- | Like 'safeSpawn', but only takes a program (and no arguments for it). eg. +-- +-- > safeSpawnProg "firefox" +safeSpawnProg :: MonadIO m => FilePath -> m () +safeSpawnProg = flip safeSpawn "" + } Shall I push this patch? (4/5) [ynWsfvplxdaqjk], or ? for help: y 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) { hunk ./XMonad/Actions/WindowGo.hs 37 -import XMonad (Query(), X(), withWindowSet, spawn, runQuery, liftIO) +import XMonad (Query(), X(), withWindowSet, runQuery, liftIO) hunk ./XMonad/Actions/WindowGo.hs 43 +import XMonad.Util.Run (safeSpawnProg) hunk ./XMonad/Actions/WindowGo.hs 63 --- | 'action' is an executable to be run via 'spawn' (of "XMonad.Core") if the Window cannot be found. +-- | 'action' is an executable to be run via 'safeSpawnProg' (of "XMonad.Util.Run") if the Window cannot be found. hunk ./XMonad/Actions/WindowGo.hs 66 -runOrRaise = raiseMaybe . spawn +runOrRaise = raiseMaybe . safeSpawnProg hunk ./XMonad/Actions/WindowGo.hs 107 -runOrRaiseNext = raiseNextMaybe . spawn +runOrRaiseNext = raiseNextMaybe . safeSpawnProg hunk ./XMonad/Actions/WindowGo.hs 158 -runOrRaiseAndDo = raiseAndDo . spawn +runOrRaiseAndDo = raiseAndDo . safeSpawnProg } - -- Mon Jun 22 16:14:01 EDT 2009 gwern0@gmail.com * XMonad.Util.Run: improve definition so this can be used with emacs { hunk ./XMonad/Util/Run.hs 110 -safeSpawn :: MonadIO m => FilePath -> String -> m () -safeSpawn prog arg = liftIO (try (forkProcess $ executeFile prog True [arg] Nothing) >> return ()) +safeSpawn :: MonadIO m => FilePath -> [String] -> m () +safeSpawn prog args = liftIO (try (forkProcess $ executeFile prog True args Nothing) >> return ()) hunk ./XMonad/Util/Run.hs 117 -safeSpawnProg = flip safeSpawn "" +safeSpawnProg = flip safeSpawn [] hunk ./XMonad/Util/Run.hs 130 -safeRunInTerm options command = asks (terminal . config) >>= \t - -> safeSpawn t (options ++ " -e " ++ command) +safeRunInTerm options command = asks (terminal . config) >>= \t - -> safeSpawn t [options, " -e " ++ command] } Shall I push this patch? (3/4) [ynWsfvplxdaqjk], or ? for help: y Mon Jun 22 16:14:23 EDT 2009 gwern0@gmail.com * update callers of safeSpawn { hunk ./XMonad/Actions/Search.hs 234 -search browser site query = safeSpawn browser $ site query +search browser site query = safeSpawn browser [site query] hunk ./XMonad/Prompt/Shell.hs 80 - where run = safeSpawn c . encodeOutput + where run = safeSpawn c . return . encodeOutput hunk ./XMonad/Util/XSelection.hs 132 -safePromptSelection app = join $ io $ liftM (safeSpawn app) getSelection +safePromptSelection app = join $ io $ liftM (safeSpawn app . return) getSelection hunk ./XMonad/Util/XSelection.hs 139 -transformPromptSelection f app = join $ io $ liftM (safeSpawn app) (fmap f getSelection) +transformPromptSelection f app = join $ io $ liftM (safeSpawn app . return) (fmap f getSelection) } - -- gwern -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) iEYEAREKAAYFAko/5xQACgkQvpDo5Pfl1oIpcgCfV41W93RDc/aOS7VjE2ZmFZ5y wfoAn0H5YlagUmFwNbnSGjyuYzRq4wXA =zeQZ -----END PGP SIGNATURE-----

On Mon, Jun 22, 2009 at 04:18:36PM -0400, Gwern Branwen wrote: ...
This, unfortunately, breaks 2 configs and a number of modules. The fifth patch fixes the modules, but I cannot do anything about Sean or 31d1's configs. (But at least it's easy to update callers.)
Simple enough to catch. Thanks for the notice though. -sme

On Jun 22, 2009, at 16:18 , Gwern Branwen wrote:
The 4th and fifth patches are because I discovered that when Emacs is passed "" as an argument, it either bombs out or opens a new file by that name. (I'm not clear how the latter is possible...) The problem
I've noticed that Emacs when given a bogus filename will take any open error as ENOENT and create a new file buffer, so you only find out if you pay close attention to the minibuffer during startup or you try to save the file later. Arguably this is a bug, although I think they justify it as "you might do something that makes the filename legal before saving". (Compare opening a file in a nonexistent directory. Admittedly modern Emacs prompts you to try M-x make-directory RET RET or similar in that case.) -- brandon s. allbery [solaris,freebsd,perl,pugs,haskell] allbery@kf8nh.com system administrator [openafs,heimdal,too many hats] allbery@ece.cmu.edu electrical and computer engineering, carnegie mellon university KF8NH
participants (3)
-
Brandon S. Allbery KF8NH
-
Gwern Branwen
-
Sean Escriva