Age | Commit message (Collapse) | Author |
|
darcs-hash:20070527062914-b9aa7-d28805de3a198f81ca54cb800250bb16f65ab036
|
|
The use of arrow keys for swapLeft/Right clash with firefox's back
button. Use the more intuitive mod-shift-jk for this. (It's a movement
operation, after all).
This clashes with IncMaster, so we use mod+comma and mod+period for
these (i.e. the keys mod < and mod > , to move windows to and from the
master area).
While we're here, replace the use of the terms 'left' and 'right' for
navigation, in comments and identifiers, with 'up' and 'down' instead.
Hence mod-j == focusDown. Far more intuitive for people (dons) who live
in fullscreen mode and have vim movement wired into their central
nervous system.
Principle of least VI surprise: movement down or up means using j and k.
darcs-hash:20070526111453-9c5c1-3242145ee5b51eb070a7dc3663f0d6cc01671d5c
|
|
darcs-hash:20070525214414-a5988-21fb1ba95dfae8f90cb98554bb85c6c31630aa86
|
|
darcs-hash:20070523191418-a5988-3b7c62f2e5d958b5c0e863c8ea048cf593995f2a
|
|
darcs-hash:20070522050008-ee4f8-6073519fac239b25e5e265ce3995ee75683fcb81
|
|
darcs-hash:20070521194653-a5988-b6725cc0d73fc6b726dc41284eef9303a7e59a1e
|
|
darcs-hash:20070521190749-a5988-1c95a0491806b06a32e7fe8bd6bcac31ebc7ad6b
|
|
darcs-hash:20070521030253-a5988-3e4e92d04f8a4459cfb692f73ad7bda11348f9ad
|
|
In order to give a better account of how focus and master interact, and
how each operation affects focus, we reimplement the StackSet type as a
two level nested 'Zipper'. To quote Oleg:
A Zipper is essentially an `updateable' and yet pure functional
cursor into a data structure. Zipper is also a delimited
continuation reified as a data structure.
That is, we use the Zipper as a cursor which encodes the window which is
in focus. Thus our data structure tracks focus correctly by
construction! We then get simple, obvious semantics for e.g. insert, in
terms of how it affects focus/master. Our transient-messes-with-focus
bug evaporates. 'swap' becomes trivial.
By moving focus directly into the stackset, we can toss some QC
properties about focus handling: it is simply impossible now for focus
to go wrong. As a benefit, we get a dozen new QC properties for free,
governing how master and focus operate.
The encoding of focus in the data type also simplifies the focus
handling in Operations: several operations affecting focus are now
simply wrappers over StackSet.
For the full story, please read the StackSet module, and the QC
properties.
Finally, we save ~40 lines with the simplified logic in Operations.hs
For more info, see the blog post on the implementation,
http://cgi.cse.unsw.edu.au/~dons/blog/2007/05/17#xmonad_part1b_zipper
darcs-hash:20070520070053-9c5c1-241f7ee7793f5db2b9e33d375965cdc21b26cbd7
|
|
darcs-hash:20070516031437-b9aa7-03d82cb2565a45fa0e17a34c4c20740b51ff625c
|
|
Using Typeables as the only constraint on layout messages is a bit
scary, as a user can send arbitrary values to layoutMsg, whether they
make sense or not: there's basically no type feedback on the values you
supply to layoutMsg.
Folloing Simon Marlow's dynamically extensible exceptions paper, we use
an existential type, and a Message type class, to constrain valid
arguments to layoutMsg to be valid members of Message.
That is, a user writes some data type for messages their layout
algorithm accepts:
data MyLayoutEvent = Zoom
| Explode
| Flaming3DGlassEffect
deriving (Typeable)
and they then add this to the set of valid message types:
instance Message MyLayoutEvent
Done. We also reimplement the dynamic type check while we're here, to
just directly use 'cast', rather than expose a raw fromDynamic/toDyn.
With this, I'm much happier about out dynamically extensible layout
event subsystem.
darcs-hash:20070504081649-9c5c1-954b406e8c21c2ca4428960e4fc1f9ffb17fb296
|
|
darcs-hash:20070503234607-a5988-3f9f46071263093707fdaba677899edc1a85edc1
|
|
darcs-hash:20070503233148-a5988-628ec9194db704513dd804fc7c72bb478689526e
|
|
darcs-hash:20070503144750-72aca-f44bca4573837e12fc1f89333b55e04abd52787c
|
|
darcs-hash:20070503074843-9c5c1-52a96686d7d6a1e260790db263c03799116b1202
|
|
darcs-hash:20070503002252-a5988-751a9563c3a2574a423367cdcba11e3e661f9d92
|
|
darcs-hash:20070430163515-a5988-9dea5188c30830fd8b3135f7cb5beffd7b90dcb9
|
|
darcs-hash:20070430162647-a5988-70420c2db283eb1585c96d977e5ac5ca3d0d1532
|
|
This also fixes a bug where xmonad was assuming a 24-bit display, and just
using, eg, 0xff0000 as an index into a colormap without querying the X server
to determine the proper pixel value for "red".
darcs-hash:20070430043859-b9aa7-9467ff583ec95144e5baa088e4b1536a725e7bc6
|
|
darcs-hash:20070426212257-a5988-dc5cc91918a152728de05a7f6c39d209d81c5b04
|
|
darcs-hash:20070426211407-a5988-e08784e64270523d8dac44d8249c335f029272fd
|
|
darcs-hash:20070424013357-b9aa7-aed2e5623aa5d0f804d131974fc9b6c21c7a2ce1
|
|
darcs-hash:20070415233635-b9aa7-a2b7e4d3fe21647c2389ea6be9378fd116b4c6f8
|
|
darcs-hash:20070415233244-b9aa7-ff6853261d57f8feab2ccda3a148eb2a1bf9c8af
|
|
darcs-hash:20070413233019-b9aa7-07490bd62af6357002a01b44ec10b805b831ee60
|
|
darcs-hash:20070413230706-a5988-5e095da766d7425f6099a7de1ac8171d4db7bfe4
|
|
darcs-hash:20070412132033-39448-2be6f5ab22fabd3c126cbba0bc81017477c1a083
|
|
darcs-hash:20070411081042-9c5c1-05a68bbf16969dbb8854b37ab9b72e042d7fac9a
|
|
darcs-hash:20070411073636-9c5c1-fbf217e9e05f7135897d59302445da5f9fcbbef1
|
|
Previously 'promote' would move the currently focused window into the
master position in tiled mode. This was *almost* a cycle of the windows,
but not quite (depending on where the focus was, it was in fact a
cycle).
Now we do the obvious generalisation, and just cycle the current window
stack. Simpler to understand, simpler to reason about.
darcs-hash:20070411073456-9c5c1-3ee88f9ac46e2301b4c803ec4fd66798e6fee91d
|
|
darcs-hash:20070411060456-9c5c1-a5642813cffe434e60310d21497217ef3704b296
|
|
darcs-hash:20070410064714-a5988-e9b1fac201a546d1722db41213efc81223007e43
|
|
darcs-hash:20070410062731-b9aa7-e1768a3fe6c0e3c749400dffc4a5a5e33e6a08c4
|
|
darcs-hash:20070404011441-9c5c1-7d2e61f6f51fbfa155f93512240f9caed286f6d6
|
|
darcs-hash:20070403050610-a5988-34a441f8eb299905ed28d415a9524121585d06d0
|
|
darcs-hash:20070402221948-39448-a27a073869e63b0e11c4cf4f3ae17d2b09d80550
|
|
darcs-hash:20070402045114-a5988-3fa15b1c4d8d79494bf430dcad921d22cdfa8d16
|
|
Error prevents compilation on 64-bit systems.
darcs-hash:20070401143416-39448-7ab8c797f9590cda9576767eddda6b7ceb5bf2ea
|
|
darcs-hash:20070401161027-39448-8fd61e1f1d369ebf4dd4073966833c18f535c269
|
|
darcs-hash:20070401055711-b9aa7-1bb53891b929b1c7311bad643f946b4305983dce
|
|
Changes mean:
* gmrun is like the dmenu key, but with shift set.
- , ((modMask .|. shiftMask, xK_F11 ), spawn "gmrun")
+ , ((modMask .|. shiftMask, xK_p ), spawn "gmrun")
If no one actually uses both gmrun and dmenu, we should consider only
using mod-p for this.
* restart is like quit, but with 'ctrl' set:
+ , ((modMask .|. shiftMask, xK_q ), io $ exitWith ExitSuccess)
+ , ((modMask .|. shiftMask .|. controlMask, xK_q ), io restart)
* revert to 'wer' ordering for xinerama screens:
- | (key, sc) <- zip [xK_e, xK_r, xK_t] [1..]
+ | (key, sc) <- zip [xK_w, xK_e, xK_r] [1..]
that's the only binding order that makes sense, since they're meant to
refer to screens 1 2 and 3, hence 'wer' (look at the keyboard to see why)
darcs-hash:20070401033522-9c5c1-612e23066ea1c2523b0b0be8d2ffdd2fe407c341
|
|
darcs-hash:20070401025433-9c5c1-79adc3fdb8db4cf7929dd6d121ec66c21f24a0e2
|
|
darcs-hash:20070401021846-3a569-083f7d441afc41bdeef843113c1de1d3a5e40ee3
|
|
darcs-hash:20070401015135-3a569-8db7ddadad8f5d3c6b16b14dda2a143644e01898
|
|
darcs-hash:20070401014706-3a569-26a764b57274f67057adf0b81eb71158b58f49de
|
|
darcs-hash:20070330144558-3a569-456564e43e14fbd17ffc1491c89dfc6ae71697ee
|
|
darcs-hash:20070401004726-9c5c1-ffe359da72bfe742bd6c6855e8451c0ea8a8938f
|
|
darcs-hash:20070327013350-b9aa7-7f4e73055e5b801b7f598cb62ce58a60a32d9dec
|
|
darcs-hash:20070326151243-3a569-7dfe6def26ee1722b13c21305646ac0121166e79
|
|
darcs-hash:20070326150213-3a569-64dd38c00558d58f27c3803ab15485892c24cfaa
|