Age | Commit message (Collapse) | Author |
|
darcs-hash:20070520090846-9c5c1-6b99085411c441a4d8217cb6b9d18edf198bfd4e
|
|
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:20070516054233-a5988-b71d4b13ec6dfafe367ea4a0dad0b32f0614b318
|
|
darcs-hash:20070510131637-72aca-2978a0234147fbb748962a27c68b797bd2e747d5
|
|
darcs-hash:20070508163822-a5988-cb12015569105b9e646a5c12fc8dc02099a4beed
|
|
darcs-hash:20070508124949-fbc8d-1d778c43323434b6f286af1505b2c0489eb09ac2
|
|
darcs-hash:20070508152116-a5988-16a82d62661a5ccd0a95f88ced57cd3e9df5fd67
|
|
darcs-hash:20070508151200-a5988-3da2bb925de6c610ed9b7a5ab5bccedb3483d032
|
|
darcs-hash:20070508150943-a5988-84c0ebc06bc745ecdacae2ced6863b63a9585756
|
|
darcs-hash:20070508143951-a5988-5b1aea6415436bc5cee632a60efc42300cfbf1e9
|
|
pattern-guards.
darcs-hash:20070508123158-fbc8d-1592375172ef513d85c5e0095c689abf9ac5fc9b
|
|
darcs-hash:20070505175415-72aca-2129b8432f6f2ddb9d1498b0503b86c401020194
|
|
darcs-hash:20070503214221-a5988-c596e80afe12a486f08901e853071d42dd2d9123
|
|
darcs-hash:20070502195917-a5988-6831029fae89604c06ae962aaffdf81bfdad3297
|
|
darcs-hash:20070430031151-9c5c1-7d66b13bc36af0e33af655f33ef287c8d4a379e7
|
|
darcs-hash:20070430025319-9c5c1-e9f7308996d1400c1abd42d2d5f6ef30b8f01c06
|
|
darcs-hash:20070430024813-9c5c1-28d697989294c4c5ce03e44553b75a8d7bc6c03e
|
|
darcs-hash:20070430024525-9c5c1-fd54666b06e2d896e023e7ae1c8f2b32fdb7a815
|
|
darcs-hash:20070430021758-9c5c1-f1ae3d5c2639b9c3ee91ccdebaefe0cf4a2c6df5
|
|
darcs-hash:20070430015927-9c5c1-9fdb237b91b517b77ab4a63c6675afa1ca759fe6
|
|
darcs-hash:20070429035804-9c5c1-6e23a1c166235085f34bda111b332b2ef7b50e01
|
|
darcs-hash:20070426005713-a5988-10ed3204d691050d7ce018072d3fcf03221f545e
|
|
darcs-hash:20070419040833-9c5c1-9d8965bf22113a8aec47244eab7c769affb75951
|
|
darcs-hash:20070419015239-a5988-c3be57b9f5a20b149c4873020fb4d91fb1ab349f
|
|
darcs-hash:20070419012705-9c5c1-3aa97e02123af08c3f4500c9e9c3bb7ab4121652
|
|
darcs-hash:20070418224725-9c5c1-e885b1392c8f6aaa1ccd5c5cbcdc9c41b29b6b6a
|
|
This means other windows are unaffected.
The change from the previous cycling behaviour was felt necessary, since
cycling isn't a terribly useful operation.
Some properties that hold:
focus is unchanged by promotion
promote is idempotent (promoting twice does nothing)
the focused and master window will swap their positions in the stack
darcs-hash:20070418224236-9c5c1-4539f9f397e181f91dc9743e3ffac4b5796c0fac
|
|
darcs-hash:20070411081500-9c5c1-de5c90255b488c617bee222ece8e4ff059a8a95a
|
|
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:20070411060947-9c5c1-88a2c630ec0bb669c5d34410fb546cc1ff538ded
|
|
darcs-hash:20070411060456-9c5c1-a5642813cffe434e60310d21497217ef3704b296
|
|
darcs-hash:20070411044215-b9aa7-e66ef93fac9102201bfd145ebb26c38bbecd25de
|
|
darcs-hash:20070411041615-b9aa7-fb18a7f93c7825f269844c0fcb1acb24ec494870
|
|
darcs-hash:20070410062731-b9aa7-e1768a3fe6c0e3c749400dffc4a5a5e33e6a08c4
|
|
darcs-hash:20070401144539-39448-1903870c5ef75cc918a8ea3153c5b154feb4e644
|
|
darcs-hash:20070401004726-9c5c1-ffe359da72bfe742bd6c6855e8451c0ea8a8938f
|
|
darcs-hash:20070328103435-c98ca-4d9fe6e66589e0bc9cbd79eabe41a559084ce37f
|
|
darcs-hash:20070322221547-a5988-e45624fd50539d7db13cf34d2b1e94612bdb06e9
|
|
darcs-hash:20070320160135-a5988-01f4a5df331fac6fbf00c209a40105da74b9b88d
|
|
darcs-hash:20070320051124-a5988-5127c4860ce23d6eb569f6145cd592fe26689061
|
|
darcs-hash:20070317234904-b9aa7-ef29cf597970298a24d770ec789f83638390d22a
|
|
darcs-hash:20070309091328-9c5c1-38188ec996d52e28a3c0a0926ea07944dc21b016
|
|
darcs-hash:20070309091045-9c5c1-4806d3d42d32c61490dc47ed6bc6af44c135b380
|
|
darcs-hash:20070309083706-9c5c1-44ca977b482a5da147e2375306985310f2fb8633
|
|
darcs-hash:20070309081621-9c5c1-d79ec8b6281b71238a32aff076d99c2926f48c8c
|
|
darcs-hash:20070309061255-9c5c1-77a4933e2d0a3af442eaf820bbff2469347f0a4c
|
|
darcs-hash:20070309043638-9c5c1-d943771821d71f87bae133c90d0d3f3a615f4010
|
|
darcs-hash:20070309043035-9c5c1-204ba4741c1d2ab784e986b48131517d33c34d3f
|
|
darcs-hash:20070309041707-9c5c1-3c9ef62c25f49b9025f137f73c8d25438a640ff4
|
|
darcs-hash:20070309035603-9c5c1-db366bd13e7423b1c8fb6cfaa90ed4947e3752c1
|