On Fri, Feb 15, 2008 at 11:02 PM, Braden Shepherdson <Braden.Shepherdson@gmail.com> wrote:
Don Stewart wrote:
> xmonad-bounces:
>> The attached message has been automatically discarded.
>> Date: Fri, 15 Feb 2008 08:45:01 +0200
>> From: Salvatore Iovene <salvatore.iovene@googlemail.com>
>> To: xmonad@haskell.org
>> Subject: Emergency terminal
>>
>> Hi all,
>> sometimes I need to open a terminal window just for a quick task (i.e.
>> quickly view an image). Using Mod+p and opening a dmenu is not really
>> good for that (lack of good completation support) and I don't want to
>> open a new terminal that will change the existing layout (not good on
>> the eye).
>>
>> The ideal solution would be having a special key that'd fire up a
>> floating terminal on the bottom of the screen, only, say, 5 lines
>> high, so you could quickly give your command without interfering with
>> the existing layout.
>>
>> Is there anything like this already around?
>> Thanks!
>>
>
> There's been much talk about a 'scratchpad' terminal.
> This doesn't exist, but would be easy to implement as
> an extension -- just open up a terminal with a
> property set on it, then write a manageHook rule that
> looks for that property, and positions the window as floating,
> and with particular geometry.
>
> This would be a great extension to have, if someone
> would like to write it.
>
> -- Don


This will find its way onto the wiki and/or into Contrib eventually, but
here's code and instructions for now.

This is great!  If you're up to it, please package this as a contrib module, probably in XMonad.Util.  If you're not sure how to do that, or need any help just send an e-mail or ask in the #xmonad channel on irc.freenode.net.  This should definitely go in the xmonad-contrib library as opposed to on the wiki.


Add the following manageHook entry:

title     =? "scratchpad"     --> doRectFloat scratchpadRect

You could give this rule a name like 'manageScratchpad' (maybe two versions, one with a default rectangle and one that takes the rectangle as a parameter) so users could just drop that into their manageHook.
 

and the following functions

doRectFloat :: W.RationalRect -> ManageHook
doRectFloat r = ask >>= \w -> doF (W.float w r)

scratchpadRect :: W.RationalRect
scratchpadRect = W.RationalRect 0.25 0.375 0.5 0.25

doRectFloat should perhaps eventually go into ManageHook in the core, but for now I think it's fine to put it in a contrib module.
 

and the following keys entry:

(( modMask, xK_s ), unsafeSpawn $ terminal conf ++ " -title scratchpad")

Again, you could define a function that performs this spawn and export it from the contrib module, so users can just drop it into their keybindings list with minimal effort.
 
I'm not sure how easily this could be bundled into a contrib package. It
seems like it might be better just as an example minimal config for
others to merge with their own.
I'm willing to package it up, but I don't have any experience sending
darcs patches or uploading to hackage yet.

No uploading to hackage necessary here! =)  Just make sure you have the latest darcs sources (instructions for getting them are on xmonad.org; to get the latest patches just do a 'darcs pull').  Once you've made the changes you'd like, do a 'darcs add' to add any new files you created to the repository, then do 'darcs record' to record your changes into a patch.  Finally, 'darcs send' will send your patch to the mailing list (if you have a mail agent configured correctly to do this; otherwise you can just do 'darcs send -o /path/to/some/file.dpatch' and then manually attach the generated file to a message to the list.  Again, if you need any help, don't hesitate to ask!

as are critiques of my code (it seems like my
doRectFloat should exist in contrib already somewhere, this can't be the
first time someone's wanted that feature).

The code looks great.  And you'd be surprised how many obvious, simple, yet really nice features there are that no one's thought of or wanted yet. =)

-Brent