From 6e84dc8312f2fdb5b8b7467a0279afd5b2df107f Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Sat, 24 Mar 2007 18:52:31 +0000 Subject: [PATCH 1/1] [svn-inject] Installing original source of ion3 --- ChangeLog | 667 +++++ LICENSE | 340 +++ Makefile | 136 + README | 23 + artikel3.perl | 12 + conf-bindings.tex | 269 ++ conf-menus.tex | 120 + conf-winprops.tex | 279 ++ conf.tex | 178 ++ confintro.tex | 52 + cstyle.tex | 118 + de.tex | 388 +++ designnotes.tex | 54 + exact-version | 5 + fnref.tex | 38 + fullhierarchy.tex | 43 + gpl.tex | 416 +++ hookref.tex | 241 ++ ionconf.dvi.gz | Bin 0 -> 117932 bytes ionconf.out | 82 + ionconf.ps.gz | Bin 0 -> 238432 bytes ionconf.tex | 73 + ionconf/WARNINGS | 8 + ionconf/contents.png | Bin 0 -> 278 bytes ionconf/images.aux | 19 + ionconf/images.idx | 0 ionconf/images.log | 396 +++ ionconf/images.out | 0 ionconf/images.pl | 6 + ionconf/images.tex | 371 +++ ionconf/img1.png | 0 ionconf/img2.png | 0 ionconf/img3.png | 0 ionconf/img4.png | 0 ionconf/img5.png | 0 ionconf/img6.png | 0 ionconf/index.html | 341 +++ ionconf/index.png | Bin 0 -> 246 bytes ionconf/internals.pl | 1306 +++++++++ ionconf/ionconf.css | 38 + ionconf/ionconf.html | 341 +++ ionconf/labels.pl | 2613 +++++++++++++++++ ionconf/next.png | Bin 0 -> 245 bytes ionconf/next_g.png | Bin 0 -> 272 bytes ionconf/node1.html | 276 ++ ionconf/node10.html | 377 +++ ionconf/node11.html | 1091 +++++++ ionconf/node12.html | 77 + ionconf/node2.html | 163 ++ ionconf/node3.html | 543 ++++ ionconf/node4.html | 1369 +++++++++ ionconf/node5.html | 720 +++++ ionconf/node6.html | 351 +++ ionconf/node7.html | 6232 ++++++++++++++++++++++++++++++++++++++++ ionconf/node8.html | 597 ++++ ionconf/node9.html | 103 + ionconf/prev.png | Bin 0 -> 279 bytes ionconf/prev_g.png | Bin 0 -> 327 bytes ionconf/up.png | Bin 0 -> 211 bytes ionnotes.dvi.gz | Bin 0 -> 27907 bytes ionnotes.out | 22 + ionnotes.ps.gz | Bin 0 -> 109113 bytes ionnotes.tex | 60 + ionnotes/WARNINGS | 8 + ionnotes/contents.png | Bin 0 -> 278 bytes ionnotes/crossref.png | Bin 0 -> 147 bytes ionnotes/index.html | 172 ++ ionnotes/index.png | Bin 0 -> 246 bytes ionnotes/internals.pl | 34 + ionnotes/ionnotes.css | 37 + ionnotes/ionnotes.html | 172 ++ ionnotes/labels.pl | 69 + ionnotes/next.png | Bin 0 -> 245 bytes ionnotes/next_g.png | Bin 0 -> 272 bytes ionnotes/node1.html | 123 + ionnotes/node2.html | 444 +++ ionnotes/node3.html | 121 + ionnotes/node4.html | 310 ++ ionnotes/node5.html | 188 ++ ionnotes/node6.html | 285 ++ ionnotes/node7.html | 597 ++++ ionnotes/node8.html | 139 + ionnotes/node9.html | 77 + ionnotes/prev.png | Bin 0 -> 279 bytes ionnotes/prev_g.png | Bin 0 -> 327 bytes ionnotes/up.png | Bin 0 -> 211 bytes luaif.tex | 148 + macros.tex | 151 + objects.tex | 246 ++ objectsimpl.tex | 20 + predist.sh | 39 + prelim.tex | 58 + rapport3.perl | 38 + statusd.tex | 81 + tricks.tex | 104 + 95 files changed, 24615 insertions(+) create mode 100644 ChangeLog create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 README create mode 100644 artikel3.perl create mode 100644 conf-bindings.tex create mode 100644 conf-menus.tex create mode 100644 conf-winprops.tex create mode 100644 conf.tex create mode 100644 confintro.tex create mode 100644 cstyle.tex create mode 100644 de.tex create mode 100644 designnotes.tex create mode 100644 exact-version create mode 100644 fnref.tex create mode 100644 fullhierarchy.tex create mode 100644 gpl.tex create mode 100644 hookref.tex create mode 100644 ionconf.dvi.gz create mode 100644 ionconf.out create mode 100644 ionconf.ps.gz create mode 100644 ionconf.tex create mode 100644 ionconf/WARNINGS create mode 100644 ionconf/contents.png create mode 100644 ionconf/images.aux create mode 100644 ionconf/images.idx create mode 100644 ionconf/images.log create mode 100644 ionconf/images.out create mode 100644 ionconf/images.pl create mode 100644 ionconf/images.tex create mode 100644 ionconf/img1.png create mode 100644 ionconf/img2.png create mode 100644 ionconf/img3.png create mode 100644 ionconf/img4.png create mode 100644 ionconf/img5.png create mode 100644 ionconf/img6.png create mode 100644 ionconf/index.html create mode 100644 ionconf/index.png create mode 100644 ionconf/internals.pl create mode 100644 ionconf/ionconf.css create mode 100644 ionconf/ionconf.html create mode 100644 ionconf/labels.pl create mode 100644 ionconf/next.png create mode 100644 ionconf/next_g.png create mode 100644 ionconf/node1.html create mode 100644 ionconf/node10.html create mode 100644 ionconf/node11.html create mode 100644 ionconf/node12.html create mode 100644 ionconf/node2.html create mode 100644 ionconf/node3.html create mode 100644 ionconf/node4.html create mode 100644 ionconf/node5.html create mode 100644 ionconf/node6.html create mode 100644 ionconf/node7.html create mode 100644 ionconf/node8.html create mode 100644 ionconf/node9.html create mode 100644 ionconf/prev.png create mode 100644 ionconf/prev_g.png create mode 100644 ionconf/up.png create mode 100644 ionnotes.dvi.gz create mode 100644 ionnotes.out create mode 100644 ionnotes.ps.gz create mode 100644 ionnotes.tex create mode 100644 ionnotes/WARNINGS create mode 100644 ionnotes/contents.png create mode 100644 ionnotes/crossref.png create mode 100644 ionnotes/index.html create mode 100644 ionnotes/index.png create mode 100644 ionnotes/internals.pl create mode 100644 ionnotes/ionnotes.css create mode 100644 ionnotes/ionnotes.html create mode 100644 ionnotes/labels.pl create mode 100644 ionnotes/next.png create mode 100644 ionnotes/next_g.png create mode 100644 ionnotes/node1.html create mode 100644 ionnotes/node2.html create mode 100644 ionnotes/node3.html create mode 100644 ionnotes/node4.html create mode 100644 ionnotes/node5.html create mode 100644 ionnotes/node6.html create mode 100644 ionnotes/node7.html create mode 100644 ionnotes/node8.html create mode 100644 ionnotes/node9.html create mode 100644 ionnotes/prev.png create mode 100644 ionnotes/prev_g.png create mode 100644 ionnotes/up.png create mode 100644 luaif.tex create mode 100644 macros.tex create mode 100644 objects.tex create mode 100644 objectsimpl.tex create mode 100644 predist.sh create mode 100644 prelim.tex create mode 100644 rapport3.perl create mode 100644 statusd.tex create mode 100644 tricks.tex diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..5e3a3d1 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,667 @@ +2006-12-23 15:00 UTC Tuomo Valkonen + tagged ion-doc-3ds-20061223 + +2006-10-30 21:08 UTC Tuomo Valkonen + * Updates + +2006-10-28 23:16 UTC Tuomo Valkonen + tagged ion-doc-3ds-20061029 + +2006-10-17 22:02 UTC Tuomo Valkonen + * Mention the 'float' winprop + +2006-10-15 17:53 UTC Tuomo Valkonen + tagged ion-doc-3ds-20061015 + +2006-10-15 14:36 UTC Tuomo Valkonen + * Documentation updates. + +2006-08-03 09:05 UTC Tuomo Valkonen + * much->match + +2006-06-20 18:16 UTC Tuomo Valkonen + tagged ion-doc-3ds-20060620 + +2006-06-08 17:58 UTC Tuomo Valkonen + * Moving usepackage{dvipdfm} before everything else seems to fix things. + +2006-02-12 15:19 UTC Tuomo Valkonen + * Added documentation for region_activity_hook. + +2006-01-25 23:23 UTC Tuomo Valkonen + * Updated bar_inside_border stuf. + +2006-01-07 21:03 UTC Tuomo Valkonen + tagged ion-doc-3ds-20060107 + +2005-12-10 20:46 UTC Tuomo Valkonen + tagged ion-doc-3ds-20051210 + +2005-12-10 00:39 UTC Tuomo Valkonen + * Added missing min_size winprop and changes in winprop listing. + +2005-11-10 20:22 UTC Tuomo Valkonen + * Updated frame style documentation. + +2005-10-23 22:40 UTC Tuomo Valkonen + tagged ion-doc-3ds-20051023 + +2005-08-26 17:37 UTC Tuomo Valkonen + * List oneshot winprop. + +2005-08-20 11:37 UTC Tuomo Valkonen + tagged ion-doc-3ds-20050820 + +2005-07-28 17:40 UTC Tuomo Valkonen + tagged ion-doc-3ds-20050728 + +2005-06-25 15:16 UTC Tuomo Valkonen + tagged ion-doc-3ds-20050625 + +2005-06-07 13:14 UTC Tuomo Valkonen + tagged ion-doc-3ds-20050607 + +2005-06-07 13:13 UTC Tuomo Valkonen + * predist.sh updates. + +2005-06-01 17:07 UTC Tuomo Valkonen + * Added a note on NoModifier. + +2005-05-02 14:56 UTC Tuomo Valkonen + tagged ion-doc-3ds-20050502 + +2005-03-25 17:41 UTC Tuomo Valkonen + * Added documentation on ion-statusd monitors. + +2005-03-25 17:41 UTC Tuomo Valkonen + * Fixed a typo, etc. + +2005-03-22 14:34 UTC Tuomo Valkonen + tagged ion-doc-3ds-20050322 + +2005-03-21 00:16 UTC Tuomo Valkonen + * Fixed typos. + +2005-03-19 13:55 UTC Tuomo Valkonen + * Added documentation on ioncore_sigchld_hook. + +2005-03-13 12:34 UTC Tuomo Valkonen + * Fixed typos etc. + +2005-03-13 12:27 UTC Tuomo Valkonen + * fnrefx macro was still wrong. + +2005-03-09 23:12 UTC Tuomo Valkonen + * Moved new layer documentation to scripting chapter. + +2005-03-09 22:23 UTC Matthieu.Moy@imag.fr + * More doc on layer 2 and placement hooks + + Be warned that: + + * I missed some LaTeX package, and therefore couldn't compile my + changes, + + * I don't know ion's internal well enough to be sure of what I write. + + +2005-03-07 09:35 UTC Tuomo Valkonen + * Fixed copy-paste error. + +2005-03-04 08:39 UTC Tuomo Valkonen + tagged ion-doc-3ds-20050304 + +2005-03-03 18:42 UTC Tuomo Valkonen + * Added a note on hooks being called in protected mode. + +2005-03-03 18:39 UTC Tuomo Valkonen + * Updated ionws_placement_alt documentation. + +2005-02-27 13:19 UTC Tuomo Valkonen + tagged ion-doc-3ds-20050227 + +2005-02-22 22:54 UTC Tuomo Valkonen + tagged ion-doc-3-svn2darcs + +2005-01-16 11:52 UTC tuomov + tagged ion-doc-3ds-20050116 + +2005-01-16 11:29 UTC tuomov + * trunk: changeset 1931 + fixed predist.sh + +2005-01-16 11:08 UTC tuomov + * trunk: changeset 1930 + Fixed undefined references. + +2005-01-15 21:33 UTC tuomov + * trunk: changeset 1928 + Updated some scripting docs. + +2005-01-15 21:20 UTC tuomov + * trunk: changeset 1926 + tabularx header changes. + +2005-01-15 21:03 UTC tuomov + * trunk: changeset 1924 + Tuning for latex2html etc. + +2005-01-15 17:29 UTC tuomov + * trunk: changeset 1923 + Added hook reference and updated hook documentation. + +2005-01-15 17:29 UTC tuomov + * trunk: changeset 1922 + Improved function reference macros to use lists instead of tables. + +2005-01-14 14:47 UTC tuomov + * trunk: changeset 1920 + Some minor fixes. + +2005-01-14 14:25 UTC tuomov + * trunk: changeset 1918 + - Improved menu documentation. + + - Other minor improvements. + +2005-01-13 16:49 UTC tuomov + * trunk: changeset 1917 + Updated graphical styles documentation. + +2005-01-13 14:40 UTC tuomov + * trunk: changeset 1915 + Updated winprop documentation. + +2005-01-13 14:27 UTC tuomov + * trunk: changeset 1914 + Updated binding and menu definition documentation. + +2005-01-11 20:18 UTC tuomov + * trunk: changeset 1913 + Brought config file intro up-to-date + +2005-01-11 15:31 UTC tuomov + * trunk: changeset 1912 + Updated class hierarchy documentation etc. + +2004-10-11 14:16 UTC tuomov + * trunk: changeset 1821 + Just testing some settings... + +2004-10-09 06:16 UTC tuomov + * trunk: changeset 1804 + libextl related changes. + +2004-10-09 05:56 UTC tuomov + * trunk: changeset 1801 + Added predist.sh + +2004-10-09 05:56 UTC tuomov + * trunk: changeset 1800 + Fixed a typo. + +2004-09-16 22:04 UTC tuomov + * trunk: changeset 1754 + Source file path updates. + +2004-07-31 22:25 UTC tuomov + * trunk: changeset 1697 + Updated Makefile to point to the new location of mkexports.lua. + +2004-07-26 21:57 UTC tuomov + * trunk: changeset 1646 + Function reference generation updates. + +2004-05-14 12:29 UTC tuomov + * trunk: changeset 1485 + Fixed punctuation. + +2004-03-15 16:32 UTC tuomov + * trunk: changeset 1402 + Changed makefile to account for changes in Ion module directories. + +2004-03-15 16:23 UTC tuomov + * trunk: changeset 1400 + Added install target to Makefile. + +2004-03-15 08:35 UTC tuomov + * trunk: changeset 1398 + Brought document generation up-to-date with module name changes. + +2004-03-10 21:57 UTC tuomov + * trunk: changeset 1383 + Merged omission and other fixes from stable branch. + +2004-03-05 23:49 UTC tuomov + * trunk: changeset 1346 + Some more minor documentation fixes. Just to test this new svn setup. + +2004-03-05 23:00 UTC tuomov + * trunk: changeset 1345 + Minor documentation fixes. + +2004-02-16 20:33 UTC tuomov + * trunk: changeset 1323 + Build process changed for Ion3. + +2004-02-07 01:55 UTC tuomov + * trunk: changeset 1255 + Added documentation on alternative get_winprop implementations. + +2004-02-07 01:42 UTC tuomov + * trunk: changeset 1254 + Removed unobfuscated email addresses. + +2004-01-28 22:04 UTC tuomov + * trunk: changeset 1239 + Removed extra word, added function reference. + +2004-01-27 22:30 UTC tuomov + * trunk: changeset 1235 + Added 'are' in 'that they are transient for' + +2004-01-27 22:26 UTC tuomov + * trunk: changeset 1234 + Improved xprop/transient help and winprop examples. + +2004-01-27 13:54 UTC tuomov + * trunk: changeset 1231 + Minor spelling mistake fix. + +2004-01-25 18:42 UTC tuomov + * trunk: changeset 1225 + Some minor clarifications in a few sentences and put URL:s on their + own lines. + +2004-01-25 18:05 UTC tuomov + * trunk: changeset 1222 + Typo and spelling fixes. + +2004-01-23 17:32 UTC tuomov + * trunk: changeset 1215 + Fixed a few typos and added an example. + +2004-01-22 21:25 UTC tuomov + * trunk: changeset 1213 + Added dock documentation. + +2004-01-14 22:29 UTC tuomov + * trunk: changeset 1193 + Minor cleanup. + +2004-01-08 22:32 UTC tuomov + * trunk: changeset 1183 + Updated winprop documentation. + +2003-12-22 23:58 UTC tuomov + * trunk: changeset 162 + Added discussion on modules and improved the main introduction and + object hierarchy introduction. + +2003-12-21 00:17 UTC tuomov + * trunk: changeset 161 + Removed duplicate label. + +2003-12-20 19:49 UTC tuomov + * trunk: changeset 160 + Added a list of functions. + +2003-12-20 15:18 UTC tuomov + * trunk: changeset 159 + Fixed a typo. + +2003-12-20 15:15 UTC tuomov + * trunk: changeset 158 + Oops. + +2003-12-20 15:14 UTC tuomov + * trunk: changeset 157 + Added a section on object references. + +2003-12-19 22:08 UTC tuomov + * trunk: changeset 156 + Mention stylemenu. + +2003-12-18 21:37 UTC tuomov + * trunk: changeset 155 + Added a section on special menus. + +2003-12-23 20:18 UTC unknown + tagged ion-doc-20031211 + +2003-12-11 17:29 UTC tuomov + * trunk: changeset 154 + Updates for 20031211 release. + +2003-12-23 20:18 UTC unknown + tagged ion-doc-20031119 + +2003-11-19 21:57 UTC tuomov + * trunk: changeset 153 + Removed 'executive' from summary. + +2003-11-19 21:57 UTC tuomov + * trunk: changeset 152 + Removed mplexfns reference. + +2003-11-17 00:42 UTC tuomov + * trunk: changeset 151 + Added an "executive summary" to the object hierarchy chapter. + +2003-11-14 18:15 UTC tuomov + * trunk: changeset 150 + Documented menus. Changes to reflect changes in configuration files. + +2003-10-30 10:04 UTC tuomov + * trunk: changeset 149 + Get documentation from luaextl/*.c as well. + +2003-10-29 12:05 UTC tuomov + * trunk: changeset 148 + LICENSE file changed to GPL. + +2003-10-29 11:55 UTC tuomov + * trunk: changeset 147 + Removed fdl.tex. + +2003-10-29 11:55 UTC tuomov + * trunk: changeset 146 + Changed license to GPL due to problems with the GFDL. + +2003-10-29 11:54 UTC tuomov + * trunk: changeset 145 + Changed \chapter->\xchapter, \section*->\xsectionstar + +2003-10-29 11:22 UTC tuomov + * trunk: changeset 144 + Added gpl.tex; GNU General Public License. + +2003-10-29 11:20 UTC tuomov + * trunk: changeset 143 + Added menu reference and updated drawing engine documentation to + reflect the change in style names. + +2003-12-23 20:18 UTC unknown + tagged ion-doc-20030811 + +2003-08-10 23:45 UTC tuomov + * trunk: changeset 142 + Fixed a few more typos and such. + +2003-08-10 23:37 UTC tuomov + * trunk: changeset 141 + Fixed a typo. + +2003-08-10 23:37 UTC tuomov + * trunk: changeset 140 + The files draw-DISPLAY.SCREEN.lua were still being referenced to. + +2003-12-23 20:18 UTC unknown + tagged ion-doc-20030810 + +2003-08-09 12:48 UTC tuomov + * trunk: changeset 139 + Added a quote. + +2003-08-09 12:45 UTC tuomov + * trunk: changeset 138 + Added a few spaces. + +2003-08-09 12:45 UTC tuomov + * trunk: changeset 137 + Added a walk-through of ioncore.lua. + +2003-08-08 21:56 UTC tuomov + * trunk: changeset 136 + Added an introduction and some design decision rationale. + +2003-08-07 21:45 UTC tuomov + * trunk: changeset 135 + Added information on winprop name field and improved winprop lookup + order explanation. + +2003-08-06 15:08 UTC tuomov + * trunk: changeset 134 + look-cleanviolet.lua was changed and so the example. + +2003-08-06 15:06 UTC tuomov + * trunk: changeset 133 + The 'urgent' attributes was renamed 'activity'. + +2003-08-01 05:54 UTC tuomov + * trunk: changeset 132 + Added mention of ignore_cfgrq. + +2003-07-31 21:24 UTC tuomov + * trunk: changeset 131 + Started a new chapter on assorted tricks. + +2003-07-31 15:21 UTC tuomov + * trunk: changeset 130 + A few fixes. + +2003-07-31 15:17 UTC tuomov + * trunk: changeset 129 + Improved drawing engine and style documentation. + +2003-07-30 22:47 UTC tuomov + * trunk: changeset 128 + Added a \docode kludge to have latex2html interpret figure + environments instead of generating images. + +2003-07-30 22:27 UTC tuomov + * trunk: changeset 127 + Started documenting drawing engines. + +2003-07-25 20:48 UTC tuomov + * trunk: changeset 126 + Moved WRootWin under WWindow in class hierarchy. + +2003-07-24 19:35 UTC tuomov + * trunk: changeset 125 + Some bindings setup documentation improvements. + +2003-07-13 22:16 UTC tuomov + * trunk: changeset 124 + Changes to accommodate for more OO bindings. + +2003-12-23 20:18 UTC unknown + tagged ion-doc-20030710 + +2003-07-10 17:18 UTC tuomov + * trunk: changeset 123 + Class explanations improved. + +2003-12-23 20:18 UTC unknown + tagged ion-doc-20030628 + +2003-06-27 22:58 UTC tuomov + * trunk: changeset 122 + Typos etc. + +2003-06-27 20:56 UTC tuomov + * trunk: changeset 121 + Fixed QueryLib introduction. + +2003-06-17 21:02 UTC tuomov + * trunk: changeset 120 + Removed mention of region_close and make_current_or_self_fn as this + binding does not work. + +2003-06-17 10:25 UTC tuomov + * trunk: changeset 119 + Added notes on C coding style. + +2003-12-23 20:18 UTC unknown + tagged ion-doc-20030614 + +2003-06-14 19:06 UTC tuomov + * trunk: changeset 118 + Fixed "or"->"are". + +2003-06-14 18:01 UTC tuomov + * trunk: changeset 117 + \date{} setting moved to distribution building script. + +2003-06-14 17:54 UTC tuomov + * trunk: changeset 116 + Minor bug was fixed. + +2003-06-14 17:53 UTC tuomov + * trunk: changeset 115 + Some clarifications were made in a few explanations and a note on + anonymous functions was added. + +2003-06-14 17:53 UTC tuomov + * trunk: changeset 114 + Redefined the itemize environment to look better. + +2003-06-14 15:10 UTC tuomov + * trunk: changeset 113 + Updated the documentation to use the new binding setting functions. + +2003-06-08 17:58 UTC tuomov + * trunk: changeset 112 + Added FDL as a plaintext file LICENSE. + +2003-06-08 17:56 UTC tuomov + * trunk: changeset 111 + Documentation updated to mention WMPlexes. + +2003-12-23 20:18 UTC unknown + tagged ion-doc-20030531 + +2003-05-31 15:39 UTC tuomov + * trunk: changeset 110 + Dates updated. + +2003-05-30 21:32 UTC tuomov + * trunk: changeset 109 + Updated the parts that refer to the files that were moved to SHAREDIR. + +2003-05-29 13:11 UTC tuomov + * trunk: changeset 108 + Added a note on char* and const char *. + +2003-05-29 12:51 UTC tuomov + * trunk: changeset 107 + Added one more note on deferred destroy. + +2003-05-29 12:47 UTC tuomov + * trunk: changeset 106 + Added a note on deferred destroy. + +2003-05-17 13:33 UTC tuomov + * trunk: changeset 105 + Updated the documentation to switch to using WRootWins for X screens + and WScreens for physical screens. + +2003-05-13 05:22 UTC tuomov + * trunk: changeset 104 + Some minor fixes. + +2003-12-23 20:18 UTC unknown + tagged ion-doc-20030510 + +2003-05-10 20:09 UTC tuomov + * trunk: changeset 103 + Removed repeated word. + +2003-05-10 20:02 UTC tuomov + * trunk: changeset 102 + Fixed some typos. + +2003-05-10 18:55 UTC tuomov + * trunk: changeset 101 + Oops. The all-ps rule was broken. + +2003-05-10 18:51 UTC tuomov + * trunk: changeset 100 + License notes changed to use \copyright instead of "(c)" + +2003-05-10 18:28 UTC tuomov + * trunk: changeset 99 + A README was added. + +2003-05-10 18:26 UTC tuomov + * trunk: changeset 98 + File removed. + +2003-05-10 18:26 UTC tuomov + * trunk: changeset 97 + Object system implementation was split out from the chapter/section on + object and class hierarchies. + +2003-05-10 18:25 UTC tuomov + * trunk: changeset 96 + Added implementation of artikel3 for latex2html. + +2003-05-10 18:24 UTC tuomov + * trunk: changeset 95 + Implementation of rapport3 for latex2html was added. + +2003-05-10 18:24 UTC tuomov + * trunk: changeset 94 + The macros were cleaned up + +2003-05-10 18:24 UTC tuomov + * trunk: changeset 93 + Better Makefile + +2003-05-10 18:23 UTC tuomov + * trunk: changeset 92 + FDL was modified to use the \xchapter etc. macros to enable embedding + it in articles. + +2003-05-10 18:23 UTC tuomov + * trunk: changeset 91 + Clarifications (hopefully) ein the explanation of the object and class + hierarchies. + +2003-05-10 18:22 UTC tuomov + * trunk: changeset 90 + The configuration files were documented. + +2003-05-10 18:22 UTC tuomov + * trunk: changeset 89 + The original document "Ion: Objects and extending" was split into + separate documents "Ion: Configuring and extending with Lua" and "Ion: + notes for the module and patch writer". + +2003-05-10 15:50 UTC tuomov + * trunk: changeset 88 + Added the GNU Free Documentation License. + +2003-05-08 18:31 UTC tuomov + * trunk: changeset 87 + Added more documentation on binding configuration. + +2003-05-07 18:43 UTC tuomov + * trunk: changeset 86 + Added QueryLib and Ioncorelib references. Moved function reference + .tex generation code here from ion. + +2003-05-06 19:46 UTC tuomov + * trunk: changeset 85 + Did some reorganization and added links to Lua documentation. + +2003-05-06 17:48 UTC tuomov + * trunk: changeset 84 + Added a \hline in the type table. + +2003-05-06 17:35 UTC tuomov + * trunk: changeset 83 + Added Makefile rules to generate postscript and pdf + +2003-05-06 17:33 UTC tuomov + * trunk: changeset 82 + Added a Makefile + +2005-02-16 07:18 UTC tailor@f281.ttorni.ton.tut.fi + * Tailorization of trunk + Import of the upstream sources from the repository + + http://tao.uab.es/ion/svn/ion-doc/trunk + + as of revision 80 + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d60c31a --- /dev/null +++ b/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..bd580ca --- /dev/null +++ b/Makefile @@ -0,0 +1,136 @@ +# Settings +###################################### + +TOPDIR=../ion-3 + +include $(TOPDIR)/build/system-inc.mk + +L2H=latex2html -show_section_numbers -short_index -local_icons -noaddress \ + -up_url http://iki.fi/tuomov/ion/ -up_title "Ion homepage" -nofootnode\ +## -style greyviolet.css + + +# Function documentation to build +###################################### + +DOCS=ionconf ionnotes + +FNTEXES=ioncore-fns.tex mod_tiling-fns.tex \ + mod_query-fns.tex de-fns.tex mod_menu-fns.tex \ + mod_dock-fns.tex mod_sp-fns.tex + +# Generic rules +###################################### + +nothing: + @ echo "Please read the README first." + +%.ps: %.dvi + dvips $< + +%.pdf: %.dvi + dvipdfm -p a4 $< + +%.dvi: %.tex + latex $< + +# Install +###################################### + +install: + $(INSTALLDIR) $(DOCDIR); \ + for d in $(DOCS); do \ + for e in ps pdf dvi; do \ + test -f $$d.$$e && $(INSTALL) -m $(DATA_MODE) $$d.$$e $(DOCDIR); \ + done; \ + $(INSTALLDIR) $(DOCDIR)/$$d; \ + for i in $$d/*; do \ + $(INSTALL) -m $(DATA_MODE) $$i $(DOCDIR)/$$i; \ + done; \ + done + +# ionconf rules +###################################### +ionconf-dvi-full: + latex ionconf + latex ionconf + latex ionconf + makeindex ionconf.idx + latex ionconf + +ionconf-html: + $(L2H) -split 3 ionconf + +fntexes: $(FNTEXES) + +ionconf-all: fntexes fnlist.tex ionconf-dvi-full ionconf-html + +# ionnotes rules +###################################### + +ionnotes-dvi-full: + latex ionnotes + latex ionnotes + latex ionnotes + makeindex ionnotes.idx + latex ionnotes + +ionnotes-html: + $(L2H) -split 4 ionnotes + +ionnotes-all: ionnotes-dvi-full ionnotes-html + +# More generic rules +###################################### + +all: ionconf-all ionnotes-all + +all-ps: ionconf.ps ionnotes.ps + +all-pdf: ionconf.pdf ionnotes.pdf + + +# Clean +###################################### + +clean: + rm -f $(FNTEXES) fnlist.tex + rm -f *.aux *.toc *.log + rm -f *.idx *.ild *.ilg *.ind + +realclean: clean + rm -f *.ps *.pdf *.dvi + rm -rf $(DOCS) + + +# Function reference rules +###################################### + +ioncore-fns.tex: $(TOPDIR)/ioncore/*.c $(TOPDIR)/ioncore/*.lua + $(MKEXPORTS) -module ioncore -mkdoc -o $@ $+ + +mod_tiling-fns.tex: $(TOPDIR)/mod_tiling/*.c + $(MKEXPORTS) -module mod_tiling -mkdoc -o $@ $+ + +mod_query-fns.tex: $(TOPDIR)/mod_query/*.c $(TOPDIR)/mod_query/mod_query.lua + $(MKEXPORTS) -module mod_query -mkdoc -o $@ $+ + +mod_menu-fns.tex: $(TOPDIR)/mod_menu/*.c $(TOPDIR)/mod_menu/mod_menu.lua + $(MKEXPORTS) -module mod_menu -mkdoc -o $@ $+ + +mod_dock-fns.tex: $(TOPDIR)/mod_dock/*.c + $(MKEXPORTS) -module mod_dock -mkdoc -o $@ $+ + +mod_sp-fns.tex: $(TOPDIR)/mod_sp/*.c + $(MKEXPORTS) -module mod_sp -mkdoc -o $@ $+ + +de-fns.tex: $(TOPDIR)/de/*.c + $(MKEXPORTS) -module de -mkdoc -o $@ $+ + +# Function list +###################################### + +fnlist.tex: $(FNTEXES) + grep hyperlabel $+ | \ + sed 's/.*fn:\([^}]*\).*/\\fnlisti{\1}/;'|sort -d -f \ + > $@ diff --git a/README b/README new file mode 100644 index 0000000..604bf85 --- /dev/null +++ b/README @@ -0,0 +1,23 @@ + +Ion-doc + +Tuomo Valkonen + + +This package contains some (advanced user and module writer) +documentation for the Ion window manager. + +You will need to install latex2html to build the HTML documents. + +How to build: + + 1. Modify TOPDIR in Makefile point to your top-level Ion source + directory, containing a working system.mk (or system-ac.mk). + + 3. After the above has been done, you may run 'make all' to build the + (hyperlinked) DVI and HTML versions of the documents. You may have + increase TeX pool size. + + 4. If you want Postcript versions of the documents, run 'make all-ps'. + For PDF you need to have dvipdfm installed. The PDF:s are obviously + built with 'make all-pdf'. diff --git a/artikel3.perl b/artikel3.perl new file mode 100644 index 0000000..110f32c --- /dev/null +++ b/artikel3.perl @@ -0,0 +1,12 @@ +# artikel3.perl by Tuomo Valkonen, , 2003-05-10 +# +# Implementation of the documentclass for latex2html. Just load +# article. +# + +package main; + +&do_require_package("article"); + +1; + diff --git a/conf-bindings.tex b/conf-bindings.tex new file mode 100644 index 0000000..9afb2b8 --- /dev/null +++ b/conf-bindings.tex @@ -0,0 +1,269 @@ +\section{Keys and rodents} +\label{sec:bindings} + +In the stock configuration file setup, most key and mouse bindings are set +from the file \file{cfg\_ioncore.lua} while module-specific bindings +are set from the modules' main configuration files (\file{cfg\_modname.lua}). +This, however, does not have to be so as long as the module has been +loaded prior to defining any module-specific bindings. + +Bindings are defined by calling the function +\fnrefx{ioncore}{defbindings} with the ''context'' of the +bindings and the a table of new bindings to make. The context is simply +string indicating one of the classes of regions (or modes such as +\type{WMoveresMode}) introduced in section \ref{sec:objects}, and fully +listed in appendix \ref{app:fullhierarchy}, although not all define +a binding map. For example, the following skeleton would be used to +define new bindings for all frames: + +\begin{verbatim} +defbindings("WFrame", { + -- List of bindings to make goes here. +}) +\end{verbatim} + +There has been some confusion among users about the need to define the +''context'' for each binding, so let me try to explain this design +decision here. The thing is that if there was a just a simple 'bind this +key to this action' method without knowledge of the context, some +limitations would have to be made on the available actions and writing +custom handlers would be more complicated. In addition one may want to +bind the same function to different key for different types of objects. +Indeed, the workspace and frame tab switching functions are the same both +classes being based on \type{WMPlex}, and in the stock configuration the +switch to $n$:th workspaces is bound to \key{Mod1+n} while the switch to +$n$:th tab is bound to the sequence \key{Mod1+k n}. + +Currently known ''contexts'' include: +\code{WScreen}, +\code{WMPlex}, +\code{WMPlex.toplevel}, +\code{WFrame}, +\code{WFrame.toplevel}, +\code{WFrame.floating}, +\code{WFrame.tiled}, +\code{WFrame.transient}, +\code{WMoveresMode}, +\code{WGroup}, +\code{WGroupCW}, +\code{WGroupWS}, +\code{WClientWin}, +\code{WTiling}, and +\code{WStatusBar}. +Most of these should be self-explanatory, corresponding to objects +of class with the same name. The ones with \code{.toplevel} suffix +refer to screens and ''toplevel'' frames, i.e. frames that are +not used for transient windows. Likewise \code{.transient} refers +to frames in transient mode, and \code{.tiled} and \code{.floating} +to frames in, respectively, tiled and floating modes. + + + +The following subsections describe how to construct elements of the +binding table. Note that \fnrefx{ioncore}{defbindings} adds +the the newly defined bindings to the previous bindings of the context, +overriding duplicates. To unbind an event, set the handler parameter +to \code{nil} for each of the functions to be described in the following +subsections. + +Also note that when multiple objects want to handle a binding, the +innermost (when the root window is considered the outermost) active object +in the parent--child hierarchy (see Figure \ref{fig:parentship}) of objects +gets to handle the action. + + +\subsection{Binding handlers and special variables} + +Unlike in Ion2, in Ion3 binding handlers are not normally passed as +''anonymous functions'', although this is still possible. The preferred +method now is to pass the code of the handler as a string. Two special +variables are available in this code. These are + +\begin{tabularx}{\linewidth}{lX} + \tabhead{Variable & Description} + \code{_} (underscore) & + Reference to the object on which the + binding was triggered. The object is of the same class as the the + context of the \fnrefx{ioncore}{defbindings} call + defining the binding. \\ + \code{_sub} & + Usually, the currently active \emph{managed object} of the + object referred to by \code{_}, but sometimes (e.g. mouse actions + on tabs of frames) something else relevant to the action triggering + the binding. \\ + \code{_chld} & + Object corresponding to the currently active child window of the + object referred to by \code{_}. +\end{tabularx} + +For example, supposing '\code{_}' is a \type{WFrame}, the following +handler should move the active window to the right, if possible: + +\begin{verbatim} +"_:inc_index(_sub)" +\end{verbatim} + +\subsection{Guards} + +To suppress error messages, each binding handler may also be accompanied +by a ''guard'' expression that blocks the handler from being called when +the guard condition is not met. Currently the following guard expressions +are supported (for both \code{_sub} and \code{_chld}): + +\begin{tabularx}{\linewidth}{lX} + \tabhead{Guard & Description} + \code{"_sub:non-nil"} & The \code{_sub} parameter must be set. \\ + \code{"_sub:SomeClass"} & The \code{_sub} parameter must be member + of class \type{SomeClass}. \\ +\end{tabularx} + + +\subsection{Defining the bindings} +\label{sec:binddef} + +The descriptions of the individual bindings in the binding table argument +to \fnrefx{ioncore}{defbindings} should be constructed with the following +functions. + +Key presses: +\begin{itemize} + \item \fnref{kpress}\code{(keyspec, handler [, guard])}, + \item \fnref{kpress_wait}\code{(keyspec, handler [, guard])} and + \item \fnref{submap}\code{(keyspec, \{ ... more key bindings ... \})}. +\end{itemize} +Mouse actions: +\begin{itemize} + \item \fnref{mclick}\code{(buttonspec, handler [, guard])}, + \item \fnref{mdblclick}\code{(buttonspec, handler [, guard])}, + \item \fnref{mpress}\code{(buttonspec, handler [, guard])} and + \item \fnref{mdrag}\code{(buttonspec, handler [, guard])}. +\end{itemize} + +The actions that most of these functions correspond to should be clear +and as explained in the reference, \fnref{kpress_wait} is simply +\fnref{kpress} with a flag set instructing Ioncore wait for all +modifiers to be released before processing any further actions. +This is to stop one from accidentally calling e.g. +\fnref{WRegion.rqclose} multiple times in a row. The \fnref{submap} +function is used to define submaps or ''prefix maps''. The second +argument to this function is table listing the key press actions +(\fnref{kpress}) in the submap + +The parameters \var{keyspec} and \var{buttonspec} are explained below +in detail. The parameter \var{handler} is the handler for the binding, +and the optional parameter \var{guard} its guard. These should normally +be strings as explained above. + +\subsection{Examples} + +For example, to just bind the key \key{Mod1+1} to switch to the first +workspace and \key{Mod1+Right} to the next workspace, you would make the +following call +\begin{verbatim} +defbindings("WScreen", { + kpress("Mod1+Right", "_:switch_next()"), + kpress("Mod1+1", "_:switch_nth(1)"), +}) +\end{verbatim} + +Note that \code{_:switch_nth(1)} is the same as calling +\fnref{WMPlex.switch_next}\code{(_, 1)} as \type{WScreen} inherits +\type{WMPlex} and this is where the function is actually defined. + +Similarly to the above example, to bind the key sequence \key{Mod1+k n} +switch to the next managed object within a frame, and \key{Mod1+k 1} to the +first, you would issue the following call: +\begin{verbatim} +defbindings("WFrame", { + submap("Mod1+K", { + kpress("Right", "_:switch_next()"), + kpress("1", "_:switch_nth(1)"), + }), +}) +\end{verbatim} + + +\subsection{Key specifications} + +As seen above, the functions that create key binding specifications require +a \var{keyspec} argument. This argument should be a string containing the +name of a key as listed in the X header file \file{keysymdef.h}% +\footnote{This file can usually be found in the directory +\file{/usr/X11R6/include/X11/}.} without the \code{XK_} prefix. +\index{keysymdef.h@\file{keysymdef.h}} +Most of the key names are quite intuitive while some are not. For example, +the \key{Enter} key on the main part of the keyboard has the less common +name \key{Return} while the one the numpad is called \key{KP\_Enter}. + +The \var{keyspec} string may optionally have multiple ''modifier'' names +followed by a plus sign (\code{+}) as a prefix. X defines the following +modifiers: +\begin{quotation} +\key{Shift}, \key{Control}, \key{Mod1} to \key{Mod5}, +\key{AnyModifier} and \key{Lock}. +\index{Shift@\key{Shift}} +\index{Control@\key{Control}} +\index{ModN@\key{ModN}} +\index{AnyModifier@\key{AnyModifier}} +\index{Lock@\key{Lock}} +\end{quotation} + +X allows binding all of these modifiers to almost any key and while this +list of modifiers does not explicitly list keys such as +\key{Alt}\index{Alt@\key{Alt}} that are common on modern keyboards, such +keys are bound to one of the \key{ModN}. On systems running XFree86 +\key{Alt} is usually \key{Mod1}. On Suns \key{Mod1} is the diamond key +and \key{Alt} something else. One of the ''flying window'' keys on so +called Windows-keyboards is probably mapped to \key{Mod3} if you have +such a key. Use the program \file{xmodmap}\index{xmodmap@\file{xmodmap}} +to find out what exactly is bound where. + +Ion defaults to \key{AnyModifier} in submaps. This can sometimes lead to +unwanted effects when the same key is used with and without explicitly +specified modifiers in nested regions. For this reason, Ion recognises +\key{NoModifier} as a special modifier that can be used to reset this +default. + +Ion ignores the \key{Lock} modifier and any \key{ModN} ($N=1{\ldots} 5$) +bound to \key{NumLock}\index{NumLock@\key{NumLock}} or +\key{ScrollLock}\index{ScrollLock@\key{ScrollLock}} +by default because such\footnote{Completely useless keys that should be +gotten rid of in the author's opinion.} locking keys may otherwise +cause confusion. + + +\subsection{Button specifications} + +Button specifications are similar to key definitions but now +instead of specifying modifiers and a key, you specify modifiers +and one of the button names \key{Button1} to +\key{Button5}\index{Button-n@\key{Button-n}}. Additionally the +specification may end with an optional area name following an @-sign. +Only frames currently support areas, and the supported values in this +case are +\code{"border"}, \code{"tab"}, \code{"empty_tab"}, \code{"client"} and +\code{nil} (for the whole frame). + +For example, the following code binds dragging a tab with the first +button pressed to initiate tab drag\&drop handling: + +\begin{verbatim} +defbindings("WFrame", { + mdrag("Button1@tab", "_:p_tabdrag()"), +}) +\end{verbatim} + + +\subsection{A further note on the default binding configuration} + +The default binding configuration contains references to the variables +\code{META} and \code{ALTMETA} instead of directly using the default +values of \code{"Mod1+"} and \code{""} (nothing). As explained in +section \ref{sec:walkthrough}, the definitions of these variables +appear in \file{cfg\_ion.lua}. This way you can easily change the the +modifiers used by all bindings in the default configuration without +changing the whole binding configuration. Quite a few people prefer +to use the Windows keys as modifiers because many applications already +use \key{Alt}. Nevertheless, \key{Mod1} is the default as a key bound +to it is available virtually everywhere. + diff --git a/conf-menus.tex b/conf-menus.tex new file mode 100644 index 0000000..3f9ee17 --- /dev/null +++ b/conf-menus.tex @@ -0,0 +1,120 @@ +\section{Menus} +\label{sec:menus} + +\subsection{Defining menus} + +\index{menus} +\index{defmenu@\code{defmenu}} +\index{menuentry@\code{menuentry}} +\index{submenu@\code{submenu}} +In the stock configuration file setup, menus are defined in the file +\file{cfg\_menus.lua} as previously mentioned. The \file{mod\_menu} module +must be loaded for one to be able to define menus, and this is done with +the function \fnrefx{mod_menu}{defmenu} provided by it. + +Here's an example of the definition of a rather simple menu with a submenu: + +\begin{verbatim} +defmenu("exitmenu", { + menuentry("Restart", "ioncore.restart()"), + menuentry("Exit", "ioncore.shutdown()"), +}) + +defmenu("mainmenu", { + menuentry("Lock screen", "ioncore.exec('xlock')"), + menuentry("Help", "mod_query.query_man(_)"), + submenu("Exit", "exitmenu"), +}) +\end{verbatim} + + +The \fnrefx{mod_menu}{menuentry} function is used to create an entry in the +menu with a title and an entry handler to be called when the menu entry +is activated. The parameters to the handler are similar to those of binding +handlers, and usually the same as those of the binding that opened the menu. + +The \fnrefx{mod_menu}{submenu} function is used to insert a submenu at that +point in the menu. (One could as well just pass a table with the menu +entries, but it is not encouraged.) + +\subsection{Special menus} + +The menu module predefines the following special menus. These can be used +just like the menus defined as above. + +\begin{tabularx}{\linewidth}{lX} + \tabhead{Menu name & Description} + \code{windowlist} & + List of all client windows. Activating an entry jumps to that window. \\ + \code{workspacelist} & + List of all workspaces. Activating an entry jumps to that workspaces. \\ + \code{stylemenu} & + List of available \file{look\_*.lua} style files. Activating an entry + loads that style and ask to save the selection. \\ + \code{ctxmenu} & + Context menu for given object. \\ +\end{tabularx} + + +\subsection{Defining context menus} + +The ''ctxmenu'' is a special menu that is assembled from a defined context +menu for the object for which the menu was opened for, but also includes +the context menus for the manager objects as submenus. + +Context menus for a given region class are defined with the +\fnrefx{mod_menu}{defctxmenu} function. This is other ways similar to +\fnrefx{mod_menu}{defmenu}, but the first argument instead being the name +of the menu, the name of the region class to define context menu for. +For example, here's part of the stock \type{WFrame} context menu +definition: + +\begin{verbatim} +defctxmenu("WFrame", { + menuentry("Close", "WRegion.rqclose_propagate(_, _sub)"), + menuentry("Kill", "WClientWin.kill(_sub)", "_sub:WClientWin"), +}) +\end{verbatim} + +Some of the same ''modes'' as were available for some bindings +may also be used: \code{WFrame.tiled}, \code{WFrame.floating}, +and \code{WFrame.transient}. + + +\subsection{Displaying menus} +\label{sec:menudisp} + +The following functions may be used to display menus from binding +handlers (and elsewhere): + +\begin{tabularx}{\linewidth}{lX} + \tabhead{Function & Description} + \fnref{mod_menu.menu} & + Keyboard (or mouse) operated menus that open in the bottom-left corner + of a screen or frame. \\ + \fnref{mod_menu.bigmenu} & + Same as previous, but uses another graphical style. \\ + \fnref{mod_menu.pmenu} & + Mouse-operated drop-down menus. This function can only be called from a + mouse press or drag handler. \\ + \fnref{mod_menu.grabmenu} & + A special version of \fnref{mod_menu.menu} that grabs the keyboard + and is scrolled with a given key until all modifiers have been released, + after which the selected entry is activated. This function is meant to + be used for implementing, for example, Win***s-style \key{Alt-Tab} + handling.\footnote{See the \file{wcirculate.lua} script in the Ion + scripts repository \url{http://iki.fi/tuomov/repos/ion-scripts-3/}.} \\ +\end{tabularx} + +The \fnrefx{mod_menu}{grabmenu} function takes the extra key parameter, but +aside from that each of these functions takes three arguments, which when +called from a binding handler, should be the parameters to the handler, and +the name of the menu. For example, the following snippet of of code binds +the both ways to open a context menu for a frame: + +\begin{verbatim} +defbindings("WFrame", { + kpress(MOD1.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"), + mpress("Button3", "mod_menu.pmenu(_, _sub, 'ctxmenu')"), +}) +\end{verbatim} diff --git a/conf-winprops.tex b/conf-winprops.tex new file mode 100644 index 0000000..10c1c10 --- /dev/null +++ b/conf-winprops.tex @@ -0,0 +1,279 @@ +\section{Winprops} +\label{sec:winprops} + +The so-called ''winprops''\index{Winprops} can be used to change how +specific windows are handled and to set up some kludges to deal with +badly behaving applications. They are defined by calling the function +\code{defwinprop} with a table containing the properties to set and the +necessary information to identify a window. The currently supported +winprops are listed below, and the subsequent subsections explain the +usual method of identifying windows, and how to obtain this information. + +%\begin{table} +%\begin{htmlonly} +%\docode % latex2html kludge +%\end{htmlonly} +%\caption{Supported winprops} +%\label{tab:winprops} + +\newenvironment{winprop}[2]{ + \begin{function}% + % Sigh. (La)TeX is a mess. + %\index{% + % \ifx\\#1\\% + % #2\else#1\fi% + % @\expandafter\var{#2}} + \item[Winprop:] \var{#1} (#2) + \item[Description:] +} +{ + \end{function} +} + + +\begin{winprop}{acrobatic}{boolean} + \index{acrobatic@\var{acrobatic}} + Set this to \code{true} for Acrobat Reader. It has an annoying + habit of trying to manage its dialogs instead of setting them as + transients and letting the window manager do its job, causing + Ion and acrobat go a window-switching loop when a dialog is + opened. +\end{winprop} + + +\begin{winprop}{aspect}{table} + \index{aspect@\var{aspect}} + The table should contain the entries \var{w} and \var{h} that + override application-supplied aspect ratio hint. +\end{winprop} + + +\begin{winprop}{float}{boolean} + \index{float@\var{float}} + Set this to open the window in a floating frame, when + in a group. +\end{winprop} + + +\begin{winprop}{fullscreen}{boolean} + \index{fullscreen@\var{fullscreen}} + Should the window be initially in full screen mode? +\end{winprop} + + +\begin{winprop}{ignore_cfgrq}{boolean} + \index{ignore-cfgrq@\var{ignore_cfgrq}} + Should configure requests on the window be ignored? + Only has effect on floating windows. +\end{winprop} + + +\begin{winprop}{ignore_net_active_window}{boolean} + \index{ignore-net-active-window@\var{ignore_net_active_window}} + Ignore extended WM hints \code{_NET_ACTIVE_WINDOW} request. +\end{winprop} + + +\begin{winprop}{ignore_resizeinc}{boolean} + \index{ignore-resizeinc@\var{ignore_resizeinc}} + Should application supplied size increments be ignored? +\end{winprop} + + +\begin{winprop}{jumpto}{boolean} + \index{jumpto@\var{jumpto}} + Should a newly created client window always be made + active, even if the allocated frame isn't. +\end{winprop} + + +\begin{winprop}{max_size}{table} + \index{max-size@\var{max_size}} + The table should contain the entries \var{w} and \var{h} that + override application-supplied maximum size hint. +\end{winprop} + + +\begin{winprop}{min_size}{table} + \index{min-size@\var{min_size}} + Similar to \var{max_size} but for the minimum size hint. +\end{winprop} + + +\begin{winprop}{oneshot}{boolean} + \index{oneshot@\var{oneshot}} + Discard this winprop after first use. +\end{winprop} + + +\begin{winprop}{switchto}{boolean} + \index{switchto@\var{switchto}} + Should a newly mapped client window be switched to within + its frame. +\end{winprop} + + +\begin{winprop}{target}{string} + \index{target@\var{target}} + The name of an object (workspace, frame) that should manage + windows of this type. +\end{winprop} + + +\begin{winprop}{transient_mode}{string} + \index{transient-mode@\var{transient_mode}} + "normal": No change in behaviour. "current": The window + should be thought of as a transient for the current active + client window (if any) even if it is not marked as a + transient by the application. "off": The window should be + handled as a normal window even if it is marked as a + transient by the application. +\end{winprop} + + +\begin{winprop}{transients_at_top}{boolean} + \index{transients-at-top@\var{transients_at_top}} + When transients are managed by the client window itself (as it + is the case on tiled workspaces), should the transients be + placed at the top of the window instead of bottom? +\end{winprop} + + +\begin{winprop}{transparent}{boolean} + \index{transparent@\var{transparent}} + Should frames be made transparent when this window is selected? \\ +\end{winprop} + + + +\subsection{Classes, roles and instances} +\label{sec:classesrolesinstances} + +The identification information in the winprop specification is usually the +\var{class}\index{class@\var{class}!winprop}, +\var{role}\index{role@\var{role}!winprop}, +\var{instance}\index{instance@\var{instance}!winprop} and +\var{name} +of the window. The \var{name} field is a Lua-style regular expression +matched against the window's title and the rest are strings that must +exactly match the corresponding window information. It is not necessary +to specify all of these fields. + +Ion looks for a matching winprop in the order listed by the following +table. An 'E' indicates that the field must be set in the winprop +and it must match the window's corresponding property exactly or, in +case of \var{name}, the regular expression must match the window +title. An asterisk '*' indicates that a winprop where the field is +not specified (or is itself an asterisk in case of the first three +fields) is tried. + +\begin{center} +\begin{tabular}{llll} + \tabhead{\var{class} & \var{role} & \var{instance} & \var{name}} + E & E & E & E \\ + E & E & E & * \\ + E & E & * & E \\ + E & E & * & * \\ + E & * & E & E \\ + E & * & E & * \\ + E & * & * & E \\ + \vdots & \vdots & \vdots & etc. \\ +\end{tabular} +\end{center} + +If there are multiple winprops with other identification information +the same but different \var{name}, the longest match is chosen. + +\subsection{Finding window identification} + +The 'Window info' context menu entry (\key{Mod1+M} or \key{Button3} on a tab) +can be used to list the identification information required to set winprops +for a window and all the transient windows managed within it. + +\index{xprop} +Another way to get the identification information is to use \command{xprop}. +Simply run To get class and instance, simply run \command{xprop WM_CLASS} +and click on the particular window of interest. The class is the latter of +the strings while the instance is the former. To get the role -- few +windows have this property -- use the command \command{xprop WM_ROLE}. +This method, however, will not work on transients. + +\index{transient} +So-called ''transient windows'' are usually short-lived dialogs (although +some programs abuse this property) that have a parent window that they are +''transient for''. On tiled workspaces Ion displays these windows +simulatenously with the parent window at the bottom of the same frame. +Unfortunately \command{xprop} is stupid and can't cope with this situation, +returning the parent window's properties when the transient is clicked on. +For this reason you'll have to do a little extra work to get the properties +for that window.\footnote{There's a patch to \command{xprop} to +fix this, but nothing seems to be happening with respect to including it in +XFree86.} + +Finally, it should be mentioned that too many authors these days +''forget'' to set this vital identification to anything meaningful: +everything except name is the same for all of the programs's +windows, for example. + +\subsection{Some common examples} + +\subsubsection{Acrobat Reader} + +The following is absolutely necessary for Acrobat reader: + +\begin{verbatim} +defwinprop{ + class = "AcroRead", + instance = "documentShell", + acrobatic = true, +} +\end{verbatim} + +\subsubsection{Fixing a Mozilla Firebird transient} + +Mozilla Firebird (0.7) incorrectly does not set the \code{WM_TRANSIENT_FOR} +property for the dialog that is used to ask the action to take for a file. +It, however, sets the the property point to the main window for the save +dialog. This can be annoying and confusing, as the first dialog is not +closed before the second is displayed. + +We'd like the first dialog to be transient to the main window. The closest +we can get to that is to consider it transient to the current window (if +there's one). Unfortunately Firebird does not set any meaningful classes, +instances or roles for the windows, so we'll have to rely on an ugly title +match. + +\begin{verbatim} +defwinprop{ + class = "MozillaFirebird-bin", + name = "Opening .*", + transient_mode = "current", +} +\end{verbatim} + +\subsubsection{Forcing newly created windows in named frames} + +The following winprop should place xterm started with command-line parameter +\mbox{\code{-name sysmon}} and running a system monitoring program in a +particular frame: +\begin{verbatim} +defwinprop{ + class = "XTerm", + instance = "sysmon", + target = "sysmonframe", +} +\end{verbatim} + +For this example to work, we have to somehow create a frame named +\code{sysmonframe}. One way to do this is to make the following +call in the \key{Mod1+F3} Lua code query: + +\begin{verbatim} +mod_query.query_renameframe(_) +\end{verbatim} + +Recall that \code{_} points to the multiplexer (frame or screen) in which +the query was opened. Running this code should open a new query prefilled +with the current name of the frame. In our example we would change the +name to \code{sysmonframe}, but we could just as well have used the +default name formed from the frame's class name and an instance number. diff --git a/conf.tex b/conf.tex new file mode 100644 index 0000000..109093b --- /dev/null +++ b/conf.tex @@ -0,0 +1,178 @@ + +\chapter{Basic configuration} +\label{chap:config} + +This chapter should help your configure Ion to your liking. As the your +probably already know, Ion uses Lua as a configuration and extension +language. If you're new to it, you might first want to read some Lua +documentation as already suggested and pointed to in the Introduction +before continuing with this chapter. + +Section \ref{sec:conffiles} is an overview of the multiple configuration +files Ion uses and as a perhaps more understandable introduction to the +general layout of the configuration files, a walk-through of the main +configuration file \file{ion.lua} is provided in section +\ref{sec:walkthrough}. +How keys and mouse action are bound to functions is described in detail +in \ref{sec:bindings} and in section \ref{sec:winprops} winprops are +explained. For a reference on exported functions, see section +\ref{sec:exports}. + +\section{The configuration files} +\label{sec:conffiles} + +Ion3, to which document applies, stores its stock configuration files in +\file{/usr/local/etc/ion3/} unless you, the OS package maintainer or +whoever installed the package on the system has modified the variables +\code{PREFIX}\index{PREFIX@\code{PREFIX}} or +\code{ETCDIR}\index{ETCDIR@\code{ETCDIR}} in +\file{system.mk}\index{system.mk@\file{system.mk}} before compiling Ion. +In the first case you probably know where to find the files and in +the other case the system administrator or the OS package maintainer +should have provided documentation to point to the correct location. +If these instructions are no help in locating the correct directory, +the command \code{locate cfg_ion.lua} might help provided \code{updatedb} +has been run recently. + +User configuration files go in \file{\~{}/.ion3/}. +Ion always searches the user configuration file directory before the stock +configuration file directory for files. Therefore, if you want to change +some setting, it is advised against that you modify the stock configuration +files in-place as subsequent installs of Ion will restore the stock +configuration files. Instead you should always make a copy of the stock +file in \file{\~{}/.ion3/} and modify this file. When searching +for a file, if no extension or path component is given, compiled \file{.lc} +files are attempted before \file{.lua} files. + +All the configuration files are named \file{cfg\_*.lua} with the ''\file{*}'' +part varying. The configuration file for each module \file{mod\_modname} is +\file{cfg\_modname.lua}, with \file{modname} varying by the module in +question. The following table summarises these and other configuration +files: + +\begin{tabularx}{\linewidth}{ + p{\widthof{cfg-bindings.lua}}% + X} + \hline + File & Description \\ + \hline + \file{cfg\_ion.lua} & + The main configuration file \\ + % + \file{cfg\_ioncore.lua} & + Configuration file for Ion's core library. + Most of the bindings and menus are configured here. Bindings that are + specific to some module are configured in the module's configuration + file. For details, see section \ref{sec:bindings}. \\ + % + \file{cfg\_kludges.lua} & + Settings to get some applications behave more nicely have been + collected here. See section \ref{sec:winprops}. \\ + % + \file{cfg\_tiling.lua} + \file{cfg\_query.lua} + \file{cfg\_menu.lua} + \file{cfg\_dock.lua} + \file{cfg\_statusbar.lua} + \dots & Configuration files for different modules. \\ +\end{tabularx} + +Additionally, there's the file \file{look.lua} that configures the +drawing engine, but it is covered in chapter \ref{chap:gr}. + +\section{A walk through \file{cfg\_ion.lua}} +\label{sec:walkthrough} + +As already mentioned \file{cfg\_ion.lua} is Ion's main configuration +file. Some basic 'feel' settings are usually configured there and +the necessary modules and other configuration files configuring some +more specific aspects of Ion are loaded there. In this section we +take a walk through the stock \file{cfg\_ion.lua}. +Notice that most of the settings are commented-out (\code{--} is a +line comment in Lua) in the actual file, as they're the defaults +nevertheless. + +The first thing one in the file is to set +\begin{verbatim} +META="Mod1+" +ALTMETA="" +\end{verbatim} +These settings cause most of Ion's key bindings to use \key{Mod1} as the +modifier key. If \code{ALTMETA} is set, it is used as modifier for the keys +that don't normally use a modifier. for details on modifiers and key +binding setup in general see section \ref{sec:bindings}. + +Next we do some basic feel configuration: + +\begin{verbatim} +ioncore.set{ + dblclick_delay=250, + kbresize_delay=1500, +} +\end{verbatim} + +These two will set the delay between button presses in a double click, and +the timeout to quit resize mode in milliseconds. + +\begin{verbatim} +ioncore.set{ + opaque_resize=true, + warp=true +} +\end{verbatim} + +The first of these two settings enables opaque resize mode: in move/resize +move frames and other objects mirror you actions immediately. If opaque +resize is disabled, a XOR rubber band is shown during the mode instead. +This will, unfortunately, cause Ion to also grab the X server and has some +side effects. + +Next we load the configuration for Ion's core, and some kludges: + +\begin{verbatim} +dopath("cfg_ioncore") +dopath("cfg_kludges") +\end{verbatim} + +Most bindings and menus are defined in \file{cfg\_ioncore.lua}. +Details on making such definitions follow in sections \ref{sec:bindings} +and \ref{sec:menus}, respectively. +some kludges or ''winprops'' to make some applications behave better +under Ion are colledted in \file{cfg\_kludges.lua}; see section +\ref{sec:winprops} for details. In addition to these, this file +lists quite a few statements of the form +\begin{verbatim} +ioncore.defshortening("[^:]+: (.*)(<[0-9]+>)", "$1$2$|$1$<...$2") +\end{verbatim} +These are used to configure how Ion attempts to shorten window titles +when they do not fit in a Tab. The first argument is a POSIX regular +expression that is used to match against the title and the next is +a rule to construct a new title of a match occurs. This particular +rule is used to shorten e.g. 'Foo: barbaz<3>' to 'barba{\ldots}<3>'; for +details see the function reference entry for \fnref{ioncore.defshortening}. + +To actually be able to do something besides display windows in full screen +mode, we must next load some modules: + +\begin{verbatim} +dopath("cfg_modules") +--dopath("mod_query") +--dopath("mod_menu") +--dopath("mod_tiling") +--dopath("mod_statusbar") +--dopath("mod_dock") +--dopath("mod_sp") +\end{verbatim} + +We actually load there another file listing the default selection of +modules. If you only want to load additional modules, just uncomment +the corresponding line. If you want to disable loading some modules, +comment out the the line loading \file{cfg\_modules}, and uncomment +the lines for the modules you want, or add more. + + +\input{conf-bindings.tex} + +\input{conf-menus.tex} + +\input{conf-winprops.tex} diff --git a/confintro.tex b/confintro.tex new file mode 100644 index 0000000..9331614 --- /dev/null +++ b/confintro.tex @@ -0,0 +1,52 @@ + +\chapter{Introduction} + +This document is an ''advanced user'' manual for Ion, the X11 window manager, +and version 3 specifically. It is an attempt attempt at documenting what is +in Ion's configuration files, how to configure Ion by simple modifications +to these files and how to write more complex extensions in Lua, the +lightweight configuration and scripting language used by Ion. + +Readers unfamiliar with Lua is advised to first glance at the Lua manual at + +\centerurl{http://www.lua.org/docs.html} + +and perhaps some tutorial pages at the lua-users wiki: + +\centerurl{http://lua-users.org/wiki/LuaTutorial} + +Back in this document, first in chapter \ref{chap:prelim} some key +concepts and relations are explained. These include the module system +and Ion's object and class hierarchies. While it might not at first +occur that knowing such things would be necessary to \emph{configure} +a program, this material is essential because of the object-oriented +nature of most of Ion's scripting interface. + +The new user, fed up with the default key bindings and eager to just +quickly configure Ion to his liking may question the reasons for +exposing the ''heavy'' internal OO structure in the scripting and +configuration interface. I'm not the one to blame him for that. +Sure it would be faster to configure Ion to everyone's liking +if a simpler binding configuration interface was provided. Such an +interface would, however, also be far more limited and make writing +extensions more complicated and the advantages from using a real +scripting language would be partly lost. One more advantage from +a rich scripting and configuration interface is that it allows +implementing scripts to read alternate configuration file formats, +ones that could be, for example, modified by external configuration tools. + +In chapter \ref{chap:config} the very basic Ion configuration know-how +is provided. All the different configuration files and their locations +are explained and instructions are given to allow the reader to +configure bindings and so-called ''winprops''. Chapter \ref{chap:gr} +explains the notion of drawing engines and graphical styles and how to +write new looks for Ion and more advanced aspects of Ion's scripting +interface are documented in chapter \ref{chap:tricks} (a work in +progress). + +Finally, most of the functions provided by Ion's scripting interface +are listed and documented in the Function reference in chapter +\ref{sec:exports}. At the end of the document is an alphabetical +listing of all these functions. + + diff --git a/cstyle.tex b/cstyle.tex new file mode 100644 index 0000000..328a7c3 --- /dev/null +++ b/cstyle.tex @@ -0,0 +1,118 @@ +\section{C coding style} + +If you want to submit patches to Ion, you MUST follow my coding +style, even if you think it is the root of all evil. We don't want +the code to be an incomprehensible mess of styles and I have better +things to do than fix other people's style to match mine. The style +should be obvious by studying the source, but here's a list of some +things to take note of. + +\subsection{Whitespace} + +\begin{itemize} + \item Indentations of 4 with \emph{tab size=4}. + + \item No extra spaces between operators, delimiters etc. except + \begin{itemize} + \item around logical and, or (\code{&&}, \code{||}) + \item around the conditional \code{a ? b : c} + \item after commas and semicolons + \end{itemize} + In my opinion this helps pointing out arithmetic or other + expressions within logical expressions or parameter lists. + + \item All kinds of labels are out-tended to the level of the higher + level block. For example: + +\begin{verbatim} +void foo() +{ +again: + switch(asdf){ + case 1: + ... + break; + default: + ... + break; + } +} +\end{verbatim} +\end{itemize} + +\subsection{Braces} + +\begin{itemize} +\item Opening brace is at the end of the line, except in function + bodies, where it is at the beginning of the line following + the definition. + +\item Never put the body of a control statement on the same line + with the statement (e.g. \verb!if(foo){ bar() }!). + +For example, the block +\begin{verbatim} +void foo(int a, int b) +{ + if(a==b && c+d==e){ + ... + } +} +\end{verbatim} + +has correct style while the block + +\begin{verbatim} +void foo(int a,int b) { + if (a == b && c + d == e) { + ... + } +} +\end{verbatim} + +does not. + + \item The \code{else} keyword follows immediately after the closing brace of + previous \code{if}, if any. (This might change so I don't care if you put + it on the next line.) + + \item I have used the convention that control statement bodies containing + a single statement do not need braces around the block if, in case of + the \code{if} all the blocks in \code{if ... else if ... else} + contain just one statement. If you want to, just use braces in every + case. +\end{itemize} + +\subsection{Names} + +\begin{itemize} + \item Function and variable names only have lower case letters. Type + names are in mixed case while constants and macros (\code{#define}s) + are in upper case letters. +\end{itemize} + +\subsection{Miscellaneous} + +\begin{itemize} + \item In the definition of a pointer variable, the asterisk is attached + to the variable name: \code{char *s;}. (One could claim this an + exception to the second rule.) + + \item You might optionally want to use Jed's foldings to group blocks + of related code in a file to keep it organized: + +\begin{verbatim} +/*{{{ Many related functions */ + +void code() +{ + ... +} + +... + +/*}}}*/ +\end{verbatim} +\end{itemize} + +I think that's mostly it. Study the source when in doubt. diff --git a/de.tex b/de.tex new file mode 100644 index 0000000..6c8c2b4 --- /dev/null +++ b/de.tex @@ -0,0 +1,388 @@ + +\chapter{Graphical styles} +\label{chap:gr} + +This chapter first gives in section \ref{sec:engines} a general outline +of how drawing engines are used, of style specifications and then +in section \ref{sec:defaultde} describes how to specify styles +for the default drawing engine. + +\section{Drawing engines, style specifications and sub-styles} +\label{sec:engines} +\index{style}\index{drawing engine} + +Ion's drawing routines are abstracted into so-called drawing engine +modules that can, again depending on the system, be dynamically +loaded as needed. The drawing engine modules provide ''brushes'' +that objects can use to draw some high-level primitives such +as borders and text boxes (in addition to simple text and rectangle +drawing) on their windows and configure e.g. the shape and +background of the window. While the drawing engines therefore +do not directly implement looks for each possible object (that +would hardly be maintainable), different brush styles can be +used to give a distinctive look to different objects and engines +could interpret some styles as special cases. Style specifications +are strings of the form + +\begin{verbatim} +element1-element2-...-elementn +\end{verbatim} + +An example of such a style specification is \code{tab-frame}; +see the table in subsection \ref{sec:styles} for more styles. + +When an object asks for a brush of certain style, the selected +drawing engine will attempt to find the closest match to this +specification. The styles/brushes defined by the drawing engines +may have asterisks (\verb!*!) as some of the elements indicating +a match to anything. Exact matches are preferred to asterisk +matches and longer matches to shorter. For example, let a brush +for style \code{foo-bar-baz} be queried, then the following +brushes are in order of preference: + +\begin{verbatim} +foo-bar-baz +foo-*-baz +foo-bar +* +foo-baz -- Doesn't match, not selected! +\end{verbatim} + +Some of the drawing primitives allow extra attributes to be +specified, also in the form +\begin{verbatim} +attr1-attr2-...-attrn +\end{verbatim} +These extra attributes are called \emph{substyles}\index{substyle} +and allow, for example, the state of the object to be indicated +by different colour sets while keeping the interface at an +abstract level and the drawing engine completely ignorant +of the semantics -- only the writer of the drawing engine +configuration file has to know them. However the drawing +engine can again interpret known substyles as special cases +and the default engine indeed does so with frame tab +tag and drag states.) + + +\subsection{Known styles and substyles} +\label{sec:styles} + +\subsubsection{Frames} + +\begin{tabularx}{\linewidth}{lX} +\tabhead{Style name & Description} +\code{frame} & Style for frames. + Substyles: \code{active}, \code{inactive}. \\ +\code{frame-tiled} & A more specific style for tiled frames. + Substyles as for \code{frame}. \\ +\code{frame-tiled-alt} & An alternative style for tiled frames. + Often used to disable the tab-bar. \\ +\code{frame-floating} & A more specific style for floating + frames. \\ +\code{frame-transient} & A more specific style for frames + containing transient windows. \\ +\end{tabularx} + +\subsubsection{Tabs and menu entries} + +\begin{tabularx}{\linewidth}{lX} +\tabhead{Style name & Description} +\code{tab} & Style for frames' tabs and menu entries. + Substyles: combinations of the form \code{a-s} where + \code{a} is one of \code{active}\nobreak/\code{inactive} and + \code{s} is one of \code{selected}\nobreak/\code{unselected} \\ +\code{tab-frame} & A more specific style for frames' tabs. + Substyles: combinations of the form \code{a-s-t-d-u} where + \code{a} and \code{s} are as above and + \code{t} is one of \code{tagged}\nobreak/\code{not_tagged}, + \code{d} is one of \code{dragged}\nobreak/\code{not_dragged} and + \code{u} is one of \code{activity}\nobreak/\code{no_activity}. \\ +\code{tab-frame-tiled}, & \\ +\code{tab-frame-tiled-alt}, & \\ +\code{tab-frame-floating}, & \\ +\code{tab-frame-transient} & More specific styles for frames in the + different modes. \\ +\code{tab-menuentry} & A more specific style for entries in \type{WMenu}s. \\ +\code{tab-menuentry-bigmenu} & An alternate style for entries in \type{WMenu}s. \\ +\end{tabularx} + +\subsubsection{The rest} + +\begin{tabularx}{\linewidth}{lX} +\tabhead{Style name & Description} +\code{input} & A style for \type{WInput}s. \\ +\code{input-edln} & A more specific style for \type{WEdln}s. + Substyles: \code{selection} for selected text and + \code{cursor} for the cursor indicating current editing point. \\ +\code{input-message} & A more specific style for \type{WMessage}s. \\ +\code{input-menu} & A more specific style for \type{WMenu}s. \\ +\code{input-menu-bigmenu} & An alternate style for \type{WMenu}s. \\ +\code{moveres_display} & The box displaying position/size when + moving or resizing frames. \\ +\code{dock} & The dock. \\ +\end{tabularx} + + +\section{Defining styles for the default drawing engine} +\label{sec:defaultde} + +Drawing engine style files are usually named +\file{look\_foo.lua} where \file{foo} is the name of the +style. The file that Ion loads on startup or when +\fnref{gr.read_config} is called, however, is \file{look.lua} +and should usually be symlinked to or a copy of of some +\file{look\_foo.lua}. + +\subsection{The structure of the configuration files} + +The first thing to do in a stylefile is to choose the drawing +engine, possibly loading the module as well. This is done +with the following chunk of code. + +\begin{verbatim} +if not gr.select_engine("de") then + return +end +\end{verbatim} + +The \fnref{gr.select_engine} function sees if the engine +given as argument is registered (the default drawing engine is +simply called ''de''). If the engine could not be found, it +tries to load a module of the same name. If the engine still +is not registered, \fnref{gr.select_engine} returns \code{false} +and in this case we also exit the style setup script. +If the engine was found, \fnref{gr.select_engine} sees that +further requests for brushes are forwarded to that engine +and returns \code{true}. + +Before defining new styles it may be a good idea to clear old +styles from memory so if the old configuration defines more +specific styles than the new, the old styles don't override +those specified by the new configuration. That can be done by +calling + +\begin{verbatim} +de.reset() +\end{verbatim} + +After this the new styles can be defined with \fnref{de.defstyle} +as explained in the next subsection. Finally, after the styles have +been defined we must ask objects on the screen to look up new brushes +to reflect the changes in configuration. This is done with + +\begin{verbatim} +gr.refresh() +\end{verbatim} + +\subsection{Defining the styles} + +Styles for the default drawing engine are defined with the +function \fnref{de.defstyle}. It has two arguments the first being +a style specification as explained in previous sections and the second +a table whose fields describe the style: + +\begin{verbatim} +de.defstyle("some-style", { + attribute = value, + ... +}) +\end{verbatim} + +The supported attributes are described in tables below. The different +border elements and styles referred to there are explained in Figure +\ref{fig:borders}. + +\begin{figure} +\begin{htmlonly} +\docode % Kludge to make latex2html interpret contents instead of + % creating an image. +\end{htmlonly} +\begin{verbatim} +Elevated: Inlaid: Ridge: Groove: + hhhhhhhhhhhs ............ hhhhhhhhhhhs sssssssssssh + h..........s .sssssssssh. h..........s s..........h + h. .s .s h. h.sssssssh.s s.hhhhhhhs.h + h. .s .s h. h.s h.s s.h s.h + h. .s .s h. h.shhhhhhh.s s.hsssssss.h + h..........s .shhhhhhhhh. h..........s s..........h + hsssssssssss ............ hsssssssssss shhhhhhhhhhh + +h = highlight, s = shadow, . = padding +\end{verbatim} +\caption{Sketch of different border styles and elements} +\label{fig:borders} +\end{figure} + +\subsubsection{Colours} + +Each of these fields a string of the form that can be +passed to \code{XAllocNamedColor}. Valid strings are e.g. +hexadecimal RGB specifications of the form +\code{#RRGGBB} and colour names as specified +in \file{/usr/X11R6/lib/X11/rgb.txt} (exact path varying). + +\begin{tabularx}{\linewidth}{lX} +\tabhead{Field & Description} +\var{highlight_colour} & + Colour for the ''highlight'' part of a border. \\ +\var{shadow_colour} & + Colour for the ''highlight'' part of a border. \\ +\var{foreground_colour} & + Colour for the normal drawing operations, e.g. text. \\ +\var{background_colour} & + Window background colour (unless transparency is enabled) and + background colour boxes. \\ +\var{padding_colour} & + Colour for the ''padding'' part of a border border. Set to + \var{background_colour} if unset. \\ +\end{tabularx} + + +\subsubsection{Borders and widths} + +All other fields below except \var{border_style} are non-negative integers +indicating a number of pixels. + +\begin{tabularx}{\linewidth}{lX} +\tabhead{Field & Description} +\var{border_style} & A string indicating the style of border; one of + elevated/inlaid/ridge/groove as seen in the + above sketch. \\ +\var{highlight_pixels} & + Width of the highlight part of the border in pixels. \\ +\var{shadow_pixels} & + Width of the shadow part of the border in pixels. \\ +\var{padding_pixels} & + Width of the padding part of the border in pixels. \\ +\var{spacing} & + Space to be left between all kinds of boxes. \\ +\end{tabularx} + + +\subsubsection{Text} + +\begin{tabularx}{\linewidth}{lX} +\tabhead{Field & Description} +\var{font} & Font to be used in text-drawing operations; standard X font + name. \\ +\var{text_align} & How text is to be aligned in text boxes/tabs; one of + the strings left\nobreak/right\nobreak/center. \\ +\end{tabularx} + + +\subsubsection{Miscellaneous} + + +\begin{tabularx}{\linewidth}{lX} +\tabhead{Field & Description} +\var{transparent_background} & Should windows' that use this style + background be transparent? true/false. \\ +\var{based_on} & The name of a previously defined style that this + style should be based on. \\ +\end{tabularx} + + +\subsubsection{Substyles} + +As discussed in previous sections, styles may have substyles to e.g. +indicate different states of the object being drawn. The ''de'' engine +limits what can be configured in substyles to the set of colours in the +first table above, but also specifically interprets for the main style +\code{tab-frame} the substyles \code{*-*-tagged} and \code{*-*-*-dragged} +by, respectively, drawing a right angle shape at the top right corner +of a tab and by shading the tab with a stipple pattern. Also for +menus the substyles \code{*-*-submenu} are handled as a special case. + +Substyles are defined with the function \fnref{de.substyle} within the +table defining the main style. The parameters to this function are +similar to those of \fnref{de.defstyle}. + +\begin{verbatim} +de.defstyle("some-style", { + ... + de.substyle("some-substyle", { + ... + }), + ... +}) +\end{verbatim} + + +\subsection{An example} + +The following shortened segment from \file{look\_cleanviolet.lua} +should help to clarify the matters discussed in the previous +subsection. + +\begin{verbatim} +de.defstyle("*", { + -- Gray background + highlight_colour = "#eeeeee", + shadow_colour = "#eeeeee", + background_colour = "#aaaaaa", + foreground_colour = "#000000", + + shadow_pixels = 1, + highlight_pixels = 1, + padding_pixels = 1, + spacing = 0, + border_style = "elevated", + + font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*", + text_align = "center", +}) + +de.defstyle("tab-frame", { + based_on = "*", + + de.substyle("active-selected", { + -- Violet tab + highlight_colour = "#aaaacc", + shadow_colour = "#aaaacc", + background_colour = "#666699", + foreground_colour = "#eeeeee", + }), + + -- More substyles would follow ... +}) +\end{verbatim} + + +\section{Miscellaneous settings} + +The following style fields are independent of the drawing engine used, +but are related to objects' styles and therefore configured in the drawing +engine configuration file. + +\subsection{Extra fields for style \code{frame}} + +\begin{tabularx}{\linewidth}{lX} +\tabhead{Field & Description} +\code{bar} & Controls the style of the tab-bar. Possible values + are the strings \code{"none"}, \code{"inside"}, \code{"outside"} + and \code{"shaped"}, with the last providing the PWM-style + tab-bars for floating frames. \\ +\code{floatframe_tab_min_w} & Minimum tab width in pixels for + the shaped style, given that this number times number of tabs + doesn't exceed frame width. \\ +\code{floatframe_bar_max_w_q} & Maximum tab-bar width quotient of + frame width for the shaped styles. A number in the + interval $(0, 1]$. +\end{tabularx} + +\subsection{Extra fields for style \code{dock}} + +\begin{tabularx}{\linewidth}{lX} +\tabhead{Field & Description} +\code{outline_style} & How borders are drawn: + \code{"none"} -- no border, + \code{"all"} -- border around whole dock, + \code{"each"} -- border around each dockapp. \\ +\code{tile_size} & A table with entries \code{width} and \code{height}, + indicating the width and height of tiles in pixels. +\end{tabularx} + + +Hopefully that's enough to get you started in writing new style +configuration files for Ion. When in doubt, study the existing +style configuration files. diff --git a/designnotes.tex b/designnotes.tex new file mode 100644 index 0000000..4bb6485 --- /dev/null +++ b/designnotes.tex @@ -0,0 +1,54 @@ +\section{Miscellaneous design notes} + +\subsection{Destroying \type{WObj}:s} + +To keep Ion's code as simple as possible yet safe, there are restrictions +when the \type{WObj} +\code{destroy_obj}\index{destroy-obj@\code{destroy_obj}} +function that calls watches, the deinit routine and frees memory may +be called directly. In all other cases the +\code{defer_destroy}\index{defer-destroy@\code{defer_destroy}} +function should be used to defer the call of \code{destroy_obj} until +Ioncore returns to its main event loop. + +Calling the \code{destroy_obj} function directly is allowed in the +following cases: +\begin{itemize} + \item In the deinit handler for another object. Usually managed objects + are destroyed this way. + \item The object was created during the current call to the function + that wants to get rid of the object. This is the case, for example, + when the function created a frame to manage some other object but for + some reason failed to reparent the object to this frame. + \item In a deferred action handler set with + \code{defer_action}\index{defer-action@\code{defer_action}}. + Like deferred destroys, other deferred actions are called when + Ioncore has returned to the main loop. + \item You are absolute sure that C code outside your code has no + references to the object. +\end{itemize} + +If there are no serious side effects from deferring destroying the +object or you're unsure whether it is safe to destroy the object +immediately, use \code{defer_destroy}. + +\subsection{The types \code{char*} and \code{const char*} as function + parameters and return values} + +The following rules should apply to using strings as return values and +parameters to functions. + +\begin{tabularx}{\linewidth}{lXX} + \tabhead{Type & Return value & Parameter} + \code{const char*} & The string is owned by the called function + and the caller is only quaranteed short-term read access to the + string. & + The called function may only read the string during its execution. + For further reference a copy must be made. \\ + \code{char*} & The string is the caller's responsibility and it + \emph{must} free it when no longer needed. & + The called function may modify the string but the ''owner'' of + the string is case-dependant. \\ +\end{tabularx} + + diff --git a/exact-version b/exact-version new file mode 100644 index 0000000..0413a6b --- /dev/null +++ b/exact-version @@ -0,0 +1,5 @@ + +Context: + +[TAG ion-doc-3ds-20061223 +Tuomo Valkonen **20061223150012] diff --git a/fnref.tex b/fnref.tex new file mode 100644 index 0000000..c270a5a --- /dev/null +++ b/fnref.tex @@ -0,0 +1,38 @@ +\chapter{Function reference} +\label{sec:exports} + +\section{Functions defined in \file{ioncore}} +\label{sec:ioncoreref} +\input{ioncore-fns.tex} + +\section{Functions defined in \file{mod\_tiling}} +\label{sec:tilingref} +\input{mod_tiling-fns.tex} + +%\section{Functions defined in \file{mod\_panews}} +%\label{sec:panewsref} +%\input{mod_panews-fns.tex} + +\section{Functions defined in \file{mod\_query}} +\label{sec:queryref} +\input{mod_query-fns.tex} + +\section{Functions defined in \file{mod\_menu}} +\label{sec:menuref} +\input{mod_menu-fns.tex} + +\section{Functions defined in \file{mod\_dock}} +\label{sec:dockref} +\input{mod_dock-fns.tex} + +\section{Functions defined in \file{mod\_sp}} +\label{sec:spref} +\input{mod_sp-fns.tex} + +\section{Functions defined in \file{de}} +\label{sec:deref} +\input{de-fns.tex} + +\section{Hooks} +\label{sec:hookref} +\input{hookref} diff --git a/fullhierarchy.tex b/fullhierarchy.tex new file mode 100644 index 0000000..d5d5a39 --- /dev/null +++ b/fullhierarchy.tex @@ -0,0 +1,43 @@ +\chapter{Full class hierarchy visible to Lua-side} +\label{app:fullhierarchy} + +%\begin{figure} +%\begin{htmlonly} +%\docode % latex2html kludge +%\end{htmlonly} +{\small +\begin{verbatim} + Obj + |-->WHook + |-->WTimer + |-->WMoveresMode + |-->WMgmtMode (mod_mgmtmode) + |-->WRegion + | |-->WClientWin + | |-->WWindow + | | |-->WRootWin + | | |-->WMPlex + | | | |-->WScreen + | | | |-->WFrame + | | |-->WInfoWin + | | | |-->WStatusBar (mod_statusbar) + | | |-->WMenu (mod_menu) + | | |-->WInput (mod_query) + | | |-->WEdln (mod_query) + | | |-->WMessage (mod_query) + | |-->WGroup + | | |-->WGroupWS + | | |-->WGroupCW + | |-->WTiling (mod_tiling) + |-->WSplit (mod_tiling) + |-->WSplitInner (mod_tiling) + | |-->WSplitSplit (mod_tiling) + | |-->WSplitFloat (mod_tiling) + |-->WSplitRegion (mod_tiling) + |-->WSplitST (mod_tiling) +\end{verbatim} +} +%\caption{Full Ioncore and most common modules' class hierarchy +% visible to Lua side.} +%\label{fig:fullclasshierarchy} +%\end{figure} diff --git a/gpl.tex b/gpl.tex new file mode 100644 index 0000000..d4de1de --- /dev/null +++ b/gpl.tex @@ -0,0 +1,416 @@ +\xchapter{The GNU General Public License} + +\begin{center} +{\parindent 0in + +Version 2, June 1991 + +Copyright \copyright\ 1989, 1991 Free Software Foundation, Inc. + +\bigskip + +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + +\bigskip + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. +} +\end{center} + +\begin{center} +{\bf\large Preamble} +\end{center} + + +The licenses for most software are designed to take away your freedom to +share and change it. By contrast, the GNU General Public License is +intended to guarantee your freedom to share and change free software---to +make sure the software is free for all its users. This General Public +License applies to most of the Free Software Foundation's software and to +any other program whose authors commit to using it. (Some other Free +Software Foundation software is covered by the GNU Library General Public +License instead.) You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. +Our General Public Licenses are designed to make sure that you have the +freedom to distribute copies of free software (and charge for this service +if you wish), that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free programs; +and that you know you can do these things. + +To protect your rights, we need to make restrictions that forbid anyone to +deny you these rights or to ask you to surrender the rights. These +restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or +for a fee, you must give the recipients all the rights that you have. You +must make sure that they, too, receive or can get the source code. And +you must show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) +offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + +Also, for each author's protection and ours, we want to make certain that +everyone understands that there is no warranty for this free software. If +the software is modified by someone else and passed on, we want its +recipients to know that what they have is not the original, so that any +problems introduced by others will not reflect on the original authors' +reputations. + +Finally, any free program is threatened constantly by software patents. +We wish to avoid the danger that redistributors of a free program will +individually obtain patent licenses, in effect making the program +proprietary. To prevent this, we have made it clear that any patent must +be licensed for everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and +modification follow. + +\begin{center} +{\Large \sc Terms and Conditions For Copying, Distribution and + Modification} +\end{center} + + +%\renewcommand{\theenumi}{\alpha{enumi}} +\begin{enumerate} + +\addtocounter{enumi}{-1} + +\item + +This License applies to any program or other work which contains a notice +placed by the copyright holder saying it may be distributed under the +terms of this General Public License. The ``Program'', below, refers to +any such program or work, and a ``work based on the Program'' means either +the Program or any derivative work under copyright law: that is to say, a +work containing the Program or a portion of it, either verbatim or with +modifications and/or translated into another language. (Hereinafter, +translation is included without limitation in the term ``modification''.) +Each licensee is addressed as ``you''. + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + +\item You may copy and distribute verbatim copies of the Program's source + code as you receive it, in any medium, provided that you conspicuously + and appropriately publish on each copy an appropriate copyright notice + and disclaimer of warranty; keep intact all the notices that refer to + this License and to the absence of any warranty; and give any other + recipients of the Program a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you +may at your option offer warranty protection in exchange for a fee. + +\item + +You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + +\begin{enumerate} + +\item + +You must cause the modified files to carry prominent notices stating that +you changed the files and the date of any change. + +\item + +You must cause any work that you distribute or publish, that in +whole or in part contains or is derived from the Program or any +part thereof, to be licensed as a whole at no charge to all third +parties under the terms of this License. + +\item +If the modified program normally reads commands interactively +when run, you must cause it, when started running for such +interactive use in the most ordinary way, to print or display an +announcement including an appropriate copyright notice and a +notice that there is no warranty (or else, saying that you provide +a warranty) and that users may redistribute the program under +these conditions, and telling the user how to view a copy of this +License. (Exception: if the Program itself is interactive but +does not normally print such an announcement, your work based on +the Program is not required to print an announcement.) + +\end{enumerate} + + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + +\item +You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + +\begin{enumerate} + +\item + +Accompany it with the complete corresponding machine-readable +source code, which must be distributed under the terms of Sections +1 and 2 above on a medium customarily used for software interchange; or, + +\item + +Accompany it with a written offer, valid for at least three +years, to give any third party, for a charge no more than your +cost of physically performing source distribution, a complete +machine-readable copy of the corresponding source code, to be +distributed under the terms of Sections 1 and 2 above on a medium +customarily used for software interchange; or, + +\item + +Accompany it with the information you received as to the offer +to distribute corresponding source code. (This alternative is +allowed only for noncommercial distribution and only if you +received the program in object code or executable form with such +an offer, in accord with Subsection b above.) + +\end{enumerate} + + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + +\item +You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + +\item +You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + +\item +Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + +\item +If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + +\item +If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + +\item +The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and ``any +later version'', you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + +\item +If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + +\begin{center} +{\Large\sc +No Warranty +} +\end{center} + +\item +{\sc Because the program is licensed free of charge, there is no warranty +for the program, to the extent permitted by applicable law. Except when +otherwise stated in writing the copyright holders and/or other parties +provide the program ``as is'' without warranty of any kind, either expressed +or implied, including, but not limited to, the implied warranties of +merchantability and fitness for a particular purpose. The entire risk as +to the quality and performance of the program is with you. Should the +program prove defective, you assume the cost of all necessary servicing, +repair or correction.} + +\item +{\sc In no event unless required by applicable law or agreed to in writing +will any copyright holder, or any other party who may modify and/or +redistribute the program as permitted above, be liable to you for damages, +including any general, special, incidental or consequential damages arising +out of the use or inability to use the program (including but not limited +to loss of data or data being rendered inaccurate or losses sustained by +you or third parties or a failure of the program to operate with any other +programs), even if such holder or other party has been advised of the +possibility of such damages.} + +\end{enumerate} + + +\begin{center} +{\Large\sc End of Terms and Conditions} +\end{center} + + +\pagebreak[2] + +\xsectionstar{Appendix: How to Apply These Terms to Your New Programs} + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to + attach them to the start of each source file to most effectively convey + the exclusion of warranty; and each file should have at least the + ``copyright'' line and a pointer to where the full notice is found. + +\begin{quote} +one line to give the program's name and a brief idea of what it does. \\ +Copyright (C) yyyy name of author \\ + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +\end{quote} + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + +\begin{quote} +Gnomovision version 69, Copyright (C) yyyy name of author \\ +Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. \\ +This is free software, and you are welcome to redistribute it +under certain conditions; type `show c' for details. +\end{quote} + + +The hypothetical commands {\tt show w} and {\tt show c} should show the +appropriate parts of the General Public License. Of course, the commands +you use may be called something other than {\tt show w} and {\tt show c}; +they could even be mouse-clicks or menu items---whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a ``copyright disclaimer'' for the program, if +necessary. Here is a sample; alter the names: + +\begin{quote} +Yoyodyne, Inc., hereby disclaims all copyright interest in the program \\ +`Gnomovision' (which makes passes at compilers) written by James Hacker. \\ + +signature of Ty Coon, 1 April 1989 \\ +Ty Coon, President of Vice +\end{quote} + + +This General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications +with the library. If this is what you want to do, use the GNU Library +General Public License instead of this License. diff --git a/hookref.tex b/hookref.tex new file mode 100644 index 0000000..f4f2a9e --- /dev/null +++ b/hookref.tex @@ -0,0 +1,241 @@ + +\begin{function} + \index{clientwin-do-manage-alt@\code{clientwin_do_manage_alt}} + \hookname{clientwin_do_manage_alt} + \hookparams{(WClientWin, table)} + \begin{funcdesc} + Called when we want to manage a new client window. + The table argument contains the following fields: + + \begin{tabularx}{\linewidth}{llX} + \tabhead{Field & Type & Description} + \var{switchto} & bool & Do we want to switch to the client window. \\ + \var{jumpto} & bool & Do we want to jump to the client window. \\ + \var{userpos} & bool & Geometry set by user. \\ + \var{dockapp} & bool & Client window is a dockapp. \\ + \var{maprq} & bool & Map request (and not initialisation scan). \\ + \var{gravity} & number & Window gravity. \\ + \var{geom} & table & Requested geometry; \var{x}, \var{y}, \var{w}, \var{h}.\\ + \var{tfor} & WClientWin & Transient for window. + \end{tabularx} + + This hook is not called in protected mode and can be used for + arbitrary placement policies (deciding in which workspace a new + \type{WClientWin} should go). In this case, you can call +\begin{verbatim} +reg:attach(cwin) +\end{verbatim} + where \var{reg} is the region where the window should go, and + \var{cwin} is the first argument of the function added to the + hook. + \end{funcdesc} +\end{function} + + +\begin{function} + \index{clientwin-mapped-hook@\code{clientwin_mapped_hook}} + \hookname{clientwin_mapped_hook} + \hookparams{WClientWin} + \begin{funcdesc} + Called when we have started to manage a client window. + \end{funcdesc} +\end{function} + + +\begin{function} + \index{clientwin-unmapped-hook@\code{clientwin_unmapped_hook}} + \hookname{clientwin_unmapped_hook} + \hookparams{number} + \begin{funcdesc} + Called when we no longer manage a client window. The parameter + is the X ID of the window; see \fnref{WClientWin.xid}. + \end{funcdesc} +\end{function} + + +\begin{function} + \index{frame-managed-changed-hook@\code{frame_managed_changed_hook}} + \hookname{frame_managed_changed_hook} + \hookparams{table} + \begin{funcdesc} + Called when there are changes in the objects managed by a frame + or their order. The table parameter has the following fields: + + \begin{tabularx}{\linewidth}{llX} + \tabhead{Field & Type & Description} + \var{reg} & WFrame & The frame in question \\ + \var{mode} & string & \var{"switchonly"}, \var{"reorder"}, + \var{"add"} or \var{"remove"} \\ + \var{sw} & bool & Switch occured \\ + \var{sub} & WRegion & The managed region (primarily) affected \\ + \end{tabularx} + \end{funcdesc} +\end{function} + + +\begin{function} + \index{ioncore-sigchld-hook@\code{ioncore_sigchld_hook}} + \hookname{ioncore_sigchld_hook} + \hookparams{integer} + \begin{funcdesc} + Called when a child process has exited. The parameter + is the PID of the process. + \end{funcdesc} +\end{function} + +\begin{function} + \index{ioncore-deinit-hook@\code{ioncore_deinit_hook}} + \hookname{ioncore_deinit_hook} + \hookparams{()} + \begin{funcdesc} + Called when Ion is deinitialising and about to quit. + \end{funcdesc} +\end{function} + +%ioncore_handle_event_alt -- not available to lua side + +\begin{function} + \index{ioncore-post-layout-setup-hook@\code{ioncore_post_layout_setup_hook}} + \hookname{ioncore_post_layout_setup_hook} + \hookparams{()} + \begin{funcdesc} + Called when Ion has done all initialisation and is almost ready to + enter the mainloop, except no windows are yet being managed. + \end{funcdesc} +\end{function} + + +\begin{function} + \index{ioncore-snapshot-hook@\code{ioncore_snapshot_hook}} + \hookname{ioncore_snapshot_hook} + \hookparams{()} + \begin{funcdesc} + Called to signal scripts and modules to save their state (if any). + \end{funcdesc} +\end{function} + + +\begin{function} + \index{tiling-placement-alt@\code{tiling_placement_alt}} + \hookname{tiling_placement_alt} + \hookparams{table} + \begin{funcdesc} + Called when a client window is about to be managed by a \type{WTiling} + to allow for alternative placement policies. The table has the + following fields: + \begin{tabularx}{\linewidth}{llX} + \tabhead{Field & Type & Description} + \var{tiling} & \type{WTiling} & The tiling \\ + \var{reg} & \type{WRegion} & The region (always a WClientWin at + the moment) to be placed \\ + \var{mp} & \type{table} & This table contains the same fields as + the parameter of \fnref{clientwin_do_manage_alt} \\ + \var{res_frame} & \type{WFrame} & A succesfull handler should + return the target frame here. \\ + \end{tabularx} + This hook is just for placing within a given workspace after the + workspace has been decided by the default workspace selection + policy. It is called in protected mode. For arbitrary placement + policies, \fnref{clientwin_do_manage_alt} should be used; it + isn't called in protected mode, + \end{funcdesc} +\end{function} + + +%\begin{function} +% \index{panews-init-layout-alt@\code{panews_init_layout_alt}} +% \hookname{panews_init_layout_alt} +% \hookparams{table} +% \begin{funcdesc} +% Called to initialise panews layout. The table parameter has +% initially a single field \var{ws} pointing to the workspace, +% but the succesfull handler should set the field \var{layout} +% to a proper layout (as those saved in the layout savefiles). +% \end{funcdesc} +%\end{function} + + +\begin{function} + \index{panews-make-placement-alt@\code{panews_make_placement_alt}} + \hookname{panews_make_placement_alt} + \hookparams{table} + \begin{funcdesc} + Called to make a placement on panews. The parameter table has + the following fields: + + \begin{tabularx}{\linewidth}{llX} + \tabhead{Field & Type & Description} + \var{ws} & \type{WPaneWS} & The workspace \\ + \var{frame} & \type{WFrame} & A frame initially allocated for the + region to be placed \\ + \var{reg} & \type{WRegion} & The region to be placed \\ + \var{specifier} & \type{WRegion} & For drag\&drop on handling empty areas\\ + \end{tabularx} + + The handler should set some of these fields on success: + + \begin{tabularx}{\linewidth}{llX} + \tabhead{Field & Type & Description} + \var{res_node} & \type{WSplit} & Target split \\ + \var{res_config} & \type{WFrame} & New configuration for it, unless + \type{WSplitRegion} \\ + \var{res_w} & integer & New width for target split (optional) \\ + \var{res_h} & integer & New height for target split (optional) \\ + \end{tabularx} + \end{funcdesc} +\end{function} + + +\begin{function} + \index{region-activated-hook@\code{region_activated_hook}} + \hookname{region_activated_hook} + \hookparams{WRegion} + \begin{funcdesc} + Signalled when a region or one of its children has received the focus. + \end{funcdesc} +\end{function} + + +\begin{function} + \index{region-activity-hook@\code{region_activity_hook}} + \hookname{region_activity_hook} + \hookparams{WRegion} + \begin{funcdesc} + This hook is triggered when the activity flag of the parameter + region has been changed. + \end{funcdesc} +\end{function} + + +\begin{function} + \index{region-do-warp-alt@\code{region_do_warp_alt}} + \hookname{region_do_warp_alt} + \hookparams{WRegion} + \begin{funcdesc} + This alt-hook exist to allow for alternative pointer warping + implementations. + \end{funcdesc} +\end{function} + + +\begin{function} + \index{region-inactivated-hook@\code{region_inactivated_hook}} + \hookname{region_inactivated_hook} + \hookparams{WRegion} + \begin{funcdesc} + Signalled when the focus has moved from the parameter region or + one of its children to a non-child region of the parameter region. + \end{funcdesc} +\end{function} + + +\begin{function} + \index{screen-managed-changed-hook@\code{screen_managed_changed_hook}} + \hookname{screen_managed_changed_hook} + \hookparams{table} + \begin{funcdesc} + Called when there are changes in the objects managed by a screen + or their order. The table parameter is similar to that of + \fnref{frame_managed_changed_hook}. + \end{funcdesc} +\end{function} diff --git a/ionconf.dvi.gz b/ionconf.dvi.gz new file mode 100644 index 0000000000000000000000000000000000000000..905ef666b25cfeb7fbaac77cf9b89c76d8c7697b GIT binary patch literal 117932 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 z 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 Q&~H-v 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 %Eh1Rv;&|(+h*X~L6h-!!QniAq$u4iM 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

    +AjzZ|wzLRdixkb_Jm5T{02`Q~ey3>3Vx-_R* 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

    oCqPAWu&t%L9 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 literal 0 HcmV?d00001 diff --git a/ionconf.tex b/ionconf.tex new file mode 100644 index 0000000..9dd71c8 --- /dev/null +++ b/ionconf.tex @@ -0,0 +1,73 @@ +\documentclass[english,a4paper,11pt,oldtoc,mctitle]{rapport3} +\input{macros} + +% For including some files from articles +\newcommand{\xchapter}[1]{\chapter{#1}} +\newcommand{\xsection}[1]{\section{#1}} +\newcommand{\xsectionstar}[1]{\section*{#1}} +\newcommand{\xsubsection}[1]{\subsection{#1}} + + +\title{Configuring and extending Ion3 with Lua} +\author{Tuomo Valkonen \\ tuomov at iki.fi} +\date{2006-12-23} + +\makeindex + + +\begin{document} + +\maketitle + +Configuring and extending Ion3 with Lua\\ +Copyright \copyright\ 2003--2005 Tuomo Valkonen. + +This document is free; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This document is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +chapter entitled ''GNU General Public License'' for more details. + +\tableofcontents + +\input{confintro} + +\input{prelim} + +\input{conf} + +\input{de} + +\input{tricks} + +\input{fnref} + +\appendix + +\input{gpl} + +\input{fullhierarchy} + +\chapter*{List of functions} +\markboth{\MakeUppercase{List of functions}}% + {\MakeUppercase{List of functions}}% + +%begin{latexonly} +\makeatletter +\def\fnlisti#1{\@dottedtocline{1}{0em}{1.5em}{\lstinline!#1!}{\pageref{fn:#1}}} +{\parskip\z@\input{fnlist}} +\makeatother +%end{latexonly} + +\begin{htmlonly} +\newcommand{\fnlisti}[1]{\fnref{#1}\\} +\input{fnlist} +\end{htmlonly} + +\printindex + +\end{document} diff --git a/ionconf/WARNINGS b/ionconf/WARNINGS new file mode 100644 index 0000000..726c0ef --- /dev/null +++ b/ionconf/WARNINGS @@ -0,0 +1,8 @@ +No implementation found for style `hyperref' +No implementation found for style `ae' +No implementation found for style `url' +No implementation found for style `tocbibind' +No implementation found for style `geometry' +No implementation found for style `calc' + +Substitution of arg to newlabelxx delayed. diff --git a/ionconf/contents.png b/ionconf/contents.png new file mode 100644 index 0000000000000000000000000000000000000000..0c752c66c876acaa2131d43788a7406f5979f746 GIT binary patch literal 278 zcmV+x0qOpUP)n_8B^;cn$O_g|3BG{!1Fj&^JiWpJWLeA$WK=+#U`gfB`ZJpvc?v;;IiS zWN}RlBW%jSmz3^2R|i?JM0KMv+9z;7ee +Babel and hyphenation patterns for american, french, german, ngerman, b +ahasa, basque, bulgarian, catalan, croatian, czech, danish, dutch, esperanto, e +stonian, finnish, greek, icelandic, irish, italian, latin, magyar, norsk, polis +h, portuges, romanian, russian, serbian, slovak, slovene, spanish, swedish, tur +kish, ukrainian, nohyphenation, loaded. + +(/usr/share/texmf-tetex/tex/latex/ntgclass/rapport3.cls +Document Class: rapport3 2004/06/07 v2.1a NTG LaTeX document class +(/usr/share/texmf-tetex/tex/latex/ntgclass/ntg11.clo +File: ntg11.clo 2004/06/07 v2.1a NTG LaTeX file (size option) +) +\unitindent=\dimen102 +\othermargin=\dimen103 +\c@part=\count79 +\c@chapter=\count80 +\c@section=\count81 +\c@subsection=\count82 +\c@subsubsection=\count83 +\c@paragraph=\count84 +\c@subparagraph=\count85 +\c@figure=\count86 +\c@table=\count87 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +LaTeX Info: Redefining \em on input line 826. +\bibindent=\dimen104 +) (/usr/share/texmf-tetex/tex/latex/base/ifthen.sty +Package: ifthen 2001/05/26 v1.1c Standard LaTeX ifthen package (DPC) +) (/usr/share/texmf-tetex/tex/generic/babel/babel.sty +Package: babel 2004/11/20 v3.8d The Babel package +(/usr/share/texmf-tetex/tex/generic/babel/english.ldf +Language: english 2004/06/14 v3.3o English support from the babel system +(/usr/share/texmf-tetex/tex/generic/babel/babel.def +File: babel.def 2004/11/20 v3.8d Babel common definitions +\babel@savecnt=\count88 +\U@D=\dimen105 +) +\l@british = a dialect from \language\l@english +\l@UKenglish = a dialect from \language\l@english +\l@canadian = a dialect from \language\l@american +\l@australian = a dialect from \language\l@british +\l@newzealand = a dialect from \language\l@british +)) (/usr/share/texmf-tetex/tex/latex/base/inputenc.sty +Package: inputenc 2004/02/05 v1.0d Input encoding file +(/usr/share/texmf-tetex/tex/latex/base/latin1.def +File: latin1.def 2004/02/05 v1.0d Input encoding file +)) (/usr/share/texmf-tetex/tex/latex/hyperref/hyperref.sty +Package: hyperref 2003/11/30 v6.74m Hypertext links for LaTeX +(/usr/share/texmf-tetex/tex/latex/graphics/keyval.sty +Package: keyval 1999/03/16 v1.13 key=value parser (DPC) +\KV@toks@=\toks14 +) +\@linkdim=\dimen106 +\Hy@linkcounter=\count89 +\Hy@pagecounter=\count90 +(/usr/share/texmf-tetex/tex/latex/hyperref/pd1enc.def +File: pd1enc.def 2003/11/30 v6.74m Hyperref: PDFDocEncoding definition (HO) +) (/usr/share/texmf-tetex/tex/latex/hyperref/hyperref.cfg +File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive and teTeX +) +Package hyperref Info: Hyper figures OFF on input line 1880. +Package hyperref Info: Link nesting OFF on input line 1885. +Package hyperref Info: Hyper index ON on input line 1888. +Package hyperref Info: Plain pages ON on input line 1893. +Package hyperref Info: Backreferencing OFF on input line 1900. +Implicit mode ON; LaTeX internals redefined +Package hyperref Info: Bookmarks ON on input line 2004. +(/usr/share/texmf/tex/latex/latex2html/url.sty +Package: url 1999/03/02 ver 1.4 Verb mode for urls, email addresses, and file + names +) +LaTeX Info: Redefining \url on input line 2143. +\Fld@menulength=\count91 +\Field@Width=\dimen107 +\Fld@charsize=\dimen108 +\Choice@toks=\toks15 +\Field@toks=\toks16 +Package hyperref Info: Hyper figures OFF on input line 2618. +Package hyperref Info: Link nesting OFF on input line 2623. +Package hyperref Info: Hyper index ON on input line 2626. +Package hyperref Info: backreferencing OFF on input line 2633. +Package hyperref Info: Link coloring OFF on input line 2638. +\c@Item=\count92 +\c@Hfootnote=\count93 +) +*hyperref using driver hdvipdfm* +(/usr/share/texmf-tetex/tex/latex/hyperref/hdvipdfm.def +File: hdvipdfm.def 2003/11/30 v6.74m Hyperref driver for dvipdfm +\pdfm@box=\box26 +\Fld@listcount=\count94 +\@outlinefile=\write3 +) (/usr/share/texmf-tetex/tex/latex/ae/ae.sty +Package: ae 2001/02/12 1.3 Almost European Computer Modern +(/usr/share/texmf-tetex/tex/latex/base/fontenc.sty +Package: fontenc 2004/02/22 v1.99f Standard LaTeX package +(/usr/share/texmf-tetex/tex/latex/base/t1enc.def +File: t1enc.def 2004/02/22 v1.99f Standard LaTeX file +LaTeX Font Info: Redeclaring font encoding T1 on input line 43. +) +LaTeX Font Info: Try loading font information for T1+aer on input line 100. +(/usr/share/texmf-tetex/tex/latex/ae/t1aer.fd +File: t1aer.fd 1997/11/16 Font definitions for T1/aer. +))) (/usr/share/texmf/tex/latex/html/html.sty +Package: html 1999/07/19 v1.38 hypertext commands for latex2html (nd, hws, rrm) + +\c@lpart=\count95 +\c@lchapter=\count96 +\c@lsection=\count97 +\c@lsubsection=\count98 +\c@lsubsubsection=\count99 +\c@lparagraph=\count100 +\c@lsubparagraph=\count101 +\c@lsubsubparagraph=\count102 +\ptrfile=\write4 +) (/usr/share/texmf-tetex/tex/latex/base/makeidx.sty +Package: makeidx 2000/03/29 v1.0m Standard LaTeX package +) (/usr/share/texmf-tetex/tex/latex/tools/tabularx.sty +Package: tabularx 1999/01/07 v2.07 `tabularx' package (DPC) +(/usr/share/texmf-tetex/tex/latex/tools/array.sty +Package: array 2003/12/17 v2.4a Tabular extension package (FMi) +\col@sep=\dimen109 +\extrarowheight=\dimen110 +\NC@list=\toks17 +\extratabsurround=\skip43 +\backup@length=\skip44 +) +\TX@col@width=\dimen111 +\TX@old@table=\dimen112 +\TX@old@col=\dimen113 +\TX@target=\dimen114 +\TX@delta=\dimen115 +\TX@cols=\count103 +\TX@ftn=\toks18 +) (/usr/share/texmf-tetex/tex/latex/base/textcomp.sty +Package: textcomp 2004/02/22 v1.99f Standard LaTeX package +Package textcomp Info: Sub-encoding information: +(textcomp) 5 = only ISO-Adobe without \textcurrency +(textcomp) 4 = 5 + \texteuro +(textcomp) 3 = 4 + \textohm +(textcomp) 2 = 3 + \textestimated + \textcurrency +(textcomp) 1 = TS1 - \textcircled - \t +(textcomp) 0 = TS1 (full) +(textcomp) Font families with sub-encoding setting implement +(textcomp) only a restricted character set as indicated. +(textcomp) Family '?' is the default used for unknown fonts. +(textcomp) See the documentation for details. +Package textcomp Info: Setting ? sub-encoding to TS1/1 on input line 71. +(/usr/share/texmf-tetex/tex/latex/base/ts1enc.def +File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file +) +LaTeX Info: Redefining \oldstylenums on input line 266. +Package textcomp Info: Setting cmr sub-encoding to TS1/0 on input line 281. +Package textcomp Info: Setting cmss sub-encoding to TS1/0 on input line 282. +Package textcomp Info: Setting cmtt sub-encoding to TS1/0 on input line 283. +Package textcomp Info: Setting cmvtt sub-encoding to TS1/0 on input line 284. +Package textcomp Info: Setting cmbr sub-encoding to TS1/0 on input line 285. +Package textcomp Info: Setting cmtl sub-encoding to TS1/0 on input line 286. +Package textcomp Info: Setting ccr sub-encoding to TS1/0 on input line 287. +Package textcomp Info: Setting ptm sub-encoding to TS1/4 on input line 288. +Package textcomp Info: Setting pcr sub-encoding to TS1/4 on input line 289. +Package textcomp Info: Setting phv sub-encoding to TS1/4 on input line 290. +Package textcomp Info: Setting ppl sub-encoding to TS1/3 on input line 291. +Package textcomp Info: Setting pag sub-encoding to TS1/4 on input line 292. +Package textcomp Info: Setting pbk sub-encoding to TS1/4 on input line 293. +Package textcomp Info: Setting pnc sub-encoding to TS1/4 on input line 294. +Package textcomp Info: Setting pzc sub-encoding to TS1/4 on input line 295. +Package textcomp Info: Setting bch sub-encoding to TS1/4 on input line 296. +Package textcomp Info: Setting put sub-encoding to TS1/5 on input line 297. +Package textcomp Info: Setting uag sub-encoding to TS1/5 on input line 298. +Package textcomp Info: Setting ugq sub-encoding to TS1/5 on input line 299. +Package textcomp Info: Setting ul8 sub-encoding to TS1/4 on input line 300. +Package textcomp Info: Setting ul9 sub-encoding to TS1/4 on input line 301. +Package textcomp Info: Setting augie sub-encoding to TS1/5 on input line 302. +Package textcomp Info: Setting dayrom sub-encoding to TS1/3 on input line 303. +Package textcomp Info: Setting dayroms sub-encoding to TS1/3 on input line 304. + +Package textcomp Info: Setting pxr sub-encoding to TS1/0 on input line 305. +Package textcomp Info: Setting pxss sub-encoding to TS1/0 on input line 306. +Package textcomp Info: Setting pxtt sub-encoding to TS1/0 on input line 307. +Package textcomp Info: Setting txr sub-encoding to TS1/0 on input line 308. +Package textcomp Info: Setting txss sub-encoding to TS1/0 on input line 309. +Package textcomp Info: Setting txtt sub-encoding to TS1/0 on input line 310. +Package textcomp Info: Setting futs sub-encoding to TS1/4 on input line 311. +Package textcomp Info: Setting futx sub-encoding to TS1/4 on input line 312. +Package textcomp Info: Setting futj sub-encoding to TS1/4 on input line 313. +Package textcomp Info: Setting hlh sub-encoding to TS1/3 on input line 314. +Package textcomp Info: Setting hls sub-encoding to TS1/3 on input line 315. +Package textcomp Info: Setting hlst sub-encoding to TS1/3 on input line 316. +Package textcomp Info: Setting hlct sub-encoding to TS1/5 on input line 317. +Package textcomp Info: Setting hlx sub-encoding to TS1/5 on input line 318. +Package textcomp Info: Setting hlce sub-encoding to TS1/5 on input line 319. +Package textcomp Info: Setting hlcn sub-encoding to TS1/5 on input line 320. +Package textcomp Info: Setting hlcw sub-encoding to TS1/5 on input line 321. +Package textcomp Info: Setting hlcf sub-encoding to TS1/5 on input line 322. +Package textcomp Info: Setting pplx sub-encoding to TS1/3 on input line 323. +Package textcomp Info: Setting pplj sub-encoding to TS1/3 on input line 324. +Package textcomp Info: Setting ptmx sub-encoding to TS1/4 on input line 325. +Package textcomp Info: Setting ptmj sub-encoding to TS1/4 on input line 326. +) (/usr/share/texmf-tetex/tex/latex/tocbibind/tocbibind.sty +Package: tocbibind 2003/03/13 v1.5g extra ToC listings + +Package tocbibind Note: The document has chapter divisions. + + +Package tocbibind Note: Using chapter style headings, unless overridden. + +) (/usr/share/texmf-tetex/tex/latex/tools/enumerate.sty +Package: enumerate 1999/03/05 v3.00 enumerate extensions (DPC) +\@enLab=\toks19 +) (/usr/share/texmf-tetex/tex/latex/geometry/geometry.sty +Package: geometry 2002/07/08 v3.2 Page Geometry +\Gm@cnth=\count104 +\Gm@cntv=\count105 +\c@Gm@tempcnt=\count106 +\Gm@bindingoffset=\dimen116 +\Gm@wd@mp=\dimen117 +\Gm@odd@mp=\dimen118 +\Gm@even@mp=\dimen119 +\Gm@dimlist=\toks20 +(/usr/share/texmf-tetex/tex/latex/geometry/geometry.cfg)) (/usr/share/texmf-tet +ex/tex/latex/tools/calc.sty +Package: calc 1998/07/07 v4.1b Infix arithmetic (KKT,FJ) +\calc@Acount=\count107 +\calc@Bcount=\count108 +\calc@Adimen=\dimen120 +\calc@Bdimen=\dimen121 +\calc@Askip=\skip45 +\calc@Bskip=\skip46 +LaTeX Info: Redefining \setlength on input line 59. +LaTeX Info: Redefining \addtolength on input line 60. +\calc@denominator=\count109 +) +\@indexfile=\write5 +\openout5 = `images.idx'. + +Writing index file images.idx +(/usr/share/texmf-tetex/tex/latex/graphics/color.sty +Package: color 1999/02/16 v1.0i Standard LaTeX Color (DPC) +(/usr/share/texmf-tetex/tex/latex/graphics/color.cfg +File: color.cfg 2005/02/03 v1.3 color configuration of teTeX/TeXLive +) +Package color Info: Driver file: dvips.def on input line 125. +(/usr/share/texmf-tetex/tex/latex/graphics/dvips.def +File: dvips.def 1999/02/16 v3.0i Driver-dependant file (DPC,SPQR) +) (/usr/share/texmf-tetex/tex/latex/graphics/dvipsnam.def +File: dvipsnam.def 1999/02/16 v3.0i Driver-dependant file (DPC,SPQR) +)) +\sizebox=\box27 +\lthtmlwrite=\write6 +(./images.aux) +\openout1 = `images.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 198. +LaTeX Font Info: ... okay on input line 198. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 198. +LaTeX Font Info: ... okay on input line 198. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 198. +LaTeX Font Info: ... okay on input line 198. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 198. +LaTeX Font Info: ... okay on input line 198. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 198. +LaTeX Font Info: ... okay on input line 198. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 198. +LaTeX Font Info: ... okay on input line 198. +LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 198. +LaTeX Font Info: ... okay on input line 198. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 198. +LaTeX Font Info: Try loading font information for TS1+cmr on input line 198. + +(/usr/share/texmf-tetex/tex/latex/base/ts1cmr.fd +File: ts1cmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: ... okay on input line 198. +Package hyperref Info: Link coloring OFF on input line 198. +(/usr/share/texmf-tetex/tex/latex/hyperref/nameref.sty +Package: nameref 2003/12/03 v2.21 Cross-referencing by name of section +\c@section@level=\count110 +) +LaTeX Info: Redefining \ref on input line 198. +LaTeX Info: Redefining \pageref on input line 198. +\openout3 = `images.out'. + +-------------------- Geometry parameters +paper: a4paper +landscape: -- +twocolumn: -- +twoside: -- +asymmetric: -- +h-parts: 89.62709pt, 0.7\paperwidth , 89.6271pt (default) +v-parts: 101.40665pt, 0.7\paperheight , 152.11pt (default) +hmarginratio: 1:1 +vmarginratio: 2:3 +lines: -- +heightrounded: -- +bindingoffset: 0.0pt +truedimen: -- +includehead: -- +includefoot: -- +includemp: -- +driver: +-------------------- Page layout dimensions and switches +\paperwidth 597.50787pt +\paperheight 845.04684pt +\textwidth 349.0pt +\textheight 650.66685pt +\oddsidemargin 17.3571pt +\evensidemargin 17.3571pt +\topmargin 0.0pt +\headheight 0.0pt +\headsep 0.0pt +\footskip 0.0pt +\marginparwidth 71.0pt +\marginparsep 10.0pt +\columnsep 10.0pt +\skip\footins 10.0pt plus 4.0pt minus 2.0pt +\hoffset 0.0pt +\voffset 0.0pt +\mag 1000 + +(1in=72.27pt, 1cm=28.45pt) +----------------------- + +latex2htmlLength hsize=349.0pt + +latex2htmlLength vsize=650.66685pt + +latex2htmlLength hoffset=0.0pt + +latex2htmlLength voffset=0.0pt + +latex2htmlLength topmargin=0.0pt + +latex2htmlLength topskip=0.00003pt + +latex2htmlLength headheight=0.0pt + +latex2htmlLength headsep=0.0pt + +latex2htmlLength parskip=6.8pt plus 1.36008pt minus 1.36008pt + +latex2htmlLength oddsidemargin=17.3571pt + +latex2htmlLength evensidemargin=17.3571pt + +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <10.95> on input line 235. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <8> on input line 235. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <6> on input line 235. +l2hSize :tex2html_wrap_inline1028:7.0626pt::0.0pt::7.1201pt. +[1 + + + +] +l2hSize :tex2html_wrap_inline1032:7.48248pt::0.0pt::48.86426pt. +[2 + + +] +l2hSize :tex2html_wrap_inline1981:8.7125pt::8.7125pt::23.6642pt. +[3 + + +] +l2hSize :tex2html_wrap_inline6076:7.5626pt::7.5626pt::14.53923pt. +[4 + + +] +l2hSize :tex2html_wrap_inline6080:7.5626pt::7.5626pt::14.53923pt. +[5 + + +] +l2hSize :tex2html_wrap_inline9064:8.7125pt::8.7125pt::86.9574pt. +[6 + + +] (./images.aux) ) +Here is how much of TeX's memory you used: + 4428 strings out of 94501 + 62627 string characters out of 1175793 + 121207 words of memory out of 1000000 + 7572 multiletter control sequences out of 10000+50000 + 7874 words of font info for 24 fonts, out of 500000 for 2000 + 580 hyphenation exceptions out of 8191 + 28i,5n,21p,200b,182s stack positions out of 1500i,500n,5000p,200000b,5000s + +Output written on images.dvi (6 pages, 3608 bytes). diff --git a/ionconf/images.out b/ionconf/images.out new file mode 100644 index 0000000..e69de29 diff --git a/ionconf/images.pl b/ionconf/images.pl new file mode 100644 index 0000000..6d0ccb4 --- /dev/null +++ b/ionconf/images.pl @@ -0,0 +1,6 @@ +# LaTeX2HTML 2002-2-1 (1.71) +# Associate images original text with physical files. + + +1; + diff --git a/ionconf/images.tex b/ionconf/images.tex new file mode 100644 index 0000000..d950261 --- /dev/null +++ b/ionconf/images.tex @@ -0,0 +1,371 @@ +\batchmode +\documentclass[english,a4paper,11pt,oldtoc,mctitle]{rapport3} +\RequirePackage{ifthen} + + +\usepackage{babel} +\usepackage[latin1]{inputenc} +\usepackage[dvipdfm]{hyperref} +\usepackage{ae} +\usepackage{url} +\usepackage{html} +\usepackage{makeidx} +\usepackage{tabularx} +\usepackage{textcomp} +\usepackage[nottoc]{tocbibind} +\usepackage{enumerate} +\usepackage[a4paper]{geometry} +\usepackage{calc} + + +\urlstyle{rm}% +\providecommand{\centerurl}[1]{\begin{center}\url{#1}\end{center}} + +% +\providecommand{\note}[1]{\color{red}**#1**}% +\providecommand{\file}[1]{\emph{#1}}% +\providecommand{\type}[1]{#1}% +\providecommand{\spec}[1]{#1}% +\providecommand{\indextype}[1]{\index{#1@#1}} + +% +\providecommand{\key}[1]{\textbf{#1}}% +\providecommand{\code}[1]{\texttt{#1}}% +\providecommand{\var}[1]{\texttt{#1}}% +\providecommand{\command}[1]{\texttt{#1}} + +% +\providecommand{\hyperlabel}[1]{\label{#1}}% +\providecommand{\fnref}[1]{\htmlref{\texttt{#1}}{fn:#1}}% +\providecommand{\fnrefx}[2]{\htmlref{\texttt{#2}}{fn:#1.#2}}% +\providecommand{\myhref}[2]{\htmlref{#2}{#1}} + +% +\providecommand{\tabhead}[1]{\hline #1 \\\hline} + + + +% +\newenvironment{function}{ + \begin{description} +}{ + \end{description} +} + +% +\providecommand{\synopsis}[1]{ + \item[Synopsis:] \texttt{#1} +}% +\providecommand{\funcname}[1]{ + \item[Function:] \texttt{#1} +}% +\providecommand{\hookname}[1]{ + \item[Hook name:] \label{#1}\texttt{#1} +}% +\providecommand{\hookparams}[1]{ + \item[Parameters:] \texttt{#1} +} + +% +\newenvironment{funcdesc}{ + \item[Description:] +}{} + + + +% +\providecommand{\xchapter}[1]{\chapter{#1}}% +\providecommand{\xsection}[1]{\section{#1}}% +\providecommand{\xsectionstar}[1]{\section*{#1}}% +\providecommand{\xsubsection}[1]{\subsection{#1}} + + +\title{Configuring and extending Ion3 with Lua} +\author{Tuomo Valkonen \\tuomov at iki.fi} +\date{2006-12-23} + + +\makeindex + + + + +\usepackage[dvips]{color} + + +\pagecolor[gray]{.7} + +\usepackage[latin1]{inputenc} + + + +\makeatletter + +\makeatletter +\count@=\the\catcode`\_ \catcode`\_=8 +\newenvironment{tex2html_wrap}{}{}% +\catcode`\<=12\catcode`\_=\count@ +\newcommand{\providedcommand}[1]{\expandafter\providecommand\csname #1\endcsname}% +\newcommand{\renewedcommand}[1]{\expandafter\providecommand\csname #1\endcsname{}% + \expandafter\renewcommand\csname #1\endcsname}% +\newcommand{\newedenvironment}[1]{\newenvironment{#1}{}{}\renewenvironment{#1}}% +\let\newedcommand\renewedcommand +\let\renewedenvironment\newedenvironment +\makeatother +\let\mathon=$ +\let\mathoff=$ +\ifx\AtBeginDocument\undefined \newcommand{\AtBeginDocument}[1]{}\fi +\newbox\sizebox +\setlength{\hoffset}{0pt}\setlength{\voffset}{0pt} +\addtolength{\textheight}{\footskip}\setlength{\footskip}{0pt} +\addtolength{\textheight}{\topmargin}\setlength{\topmargin}{0pt} +\addtolength{\textheight}{\headheight}\setlength{\headheight}{0pt} +\addtolength{\textheight}{\headsep}\setlength{\headsep}{0pt} +\setlength{\textwidth}{349pt} +\newwrite\lthtmlwrite +\makeatletter +\let\realnormalsize=\normalsize +\global\topskip=2sp +\def\preveqno{}\let\real@float=\@float \let\realend@float=\end@float +\def\@float{\let\@savefreelist\@freelist\real@float} +\def\liih@math{\ifmmode$\else\bad@math\fi} +\def\end@float{\realend@float\global\let\@freelist\@savefreelist} +\let\real@dbflt=\@dbflt \let\end@dblfloat=\end@float +\let\@largefloatcheck=\relax +\let\if@boxedmulticols=\iftrue +\def\@dbflt{\let\@savefreelist\@freelist\real@dbflt} +\def\adjustnormalsize{\def\normalsize{\mathsurround=0pt \realnormalsize + \parindent=0pt\abovedisplayskip=0pt\belowdisplayskip=0pt}% + \def\phantompar{\csname par\endcsname}\normalsize}% +\def\lthtmltypeout#1{{\let\protect\string \immediate\write\lthtmlwrite{#1}}}% +\newcommand\lthtmlhboxmathA{\adjustnormalsize\setbox\sizebox=\hbox\bgroup\kern.05em }% +\newcommand\lthtmlhboxmathB{\adjustnormalsize\setbox\sizebox=\hbox to\hsize\bgroup\hfill }% +\newcommand\lthtmlvboxmathA{\adjustnormalsize\setbox\sizebox=\vbox\bgroup % + \let\ifinner=\iffalse \let\)\liih@math }% +\newcommand\lthtmlboxmathZ{\@next\next\@currlist{}{\def\next{\voidb@x}}% + \expandafter\box\next\egroup}% +\newcommand\lthtmlmathtype[1]{\gdef\lthtmlmathenv{#1}}% +\newcommand\lthtmllogmath{\dimen0\ht\sizebox \advance\dimen0\dp\sizebox + \ifdim\dimen0>.95\vsize + \lthtmltypeout{% +*** image for \lthtmlmathenv\space is too tall at \the\dimen0, reducing to .95 vsize ***}% + \ht\sizebox.95\vsize \dp\sizebox\z@ \fi + \lthtmltypeout{l2hSize % +:\lthtmlmathenv:\the\ht\sizebox::\the\dp\sizebox::\the\wd\sizebox.\preveqno}}% +\newcommand\lthtmlfigureA[1]{\let\@savefreelist\@freelist + \lthtmlmathtype{#1}\lthtmlvboxmathA}% +\newcommand\lthtmlpictureA{\bgroup\catcode`\_=8 \lthtmlpictureB}% +\newcommand\lthtmlpictureB[1]{\lthtmlmathtype{#1}\egroup + \let\@savefreelist\@freelist \lthtmlhboxmathB}% +\newcommand\lthtmlpictureZ[1]{\hfill\lthtmlfigureZ}% +\newcommand\lthtmlfigureZ{\lthtmlboxmathZ\lthtmllogmath\copy\sizebox + \global\let\@freelist\@savefreelist}% +\newcommand\lthtmldisplayA{\bgroup\catcode`\_=8 \lthtmldisplayAi}% +\newcommand\lthtmldisplayAi[1]{\lthtmlmathtype{#1}\egroup\lthtmlvboxmathA}% +\newcommand\lthtmldisplayB[1]{\edef\preveqno{(\theequation)}% + \lthtmldisplayA{#1}\let\@eqnnum\relax}% +\newcommand\lthtmldisplayZ{\lthtmlboxmathZ\lthtmllogmath\lthtmlsetmath}% +\newcommand\lthtmlinlinemathA{\bgroup\catcode`\_=8 \lthtmlinlinemathB} +\newcommand\lthtmlinlinemathB[1]{\lthtmlmathtype{#1}\egroup\lthtmlhboxmathA + \vrule height1.5ex width0pt }% +\newcommand\lthtmlinlineA{\bgroup\catcode`\_=8 \lthtmlinlineB}% +\newcommand\lthtmlinlineB[1]{\lthtmlmathtype{#1}\egroup\lthtmlhboxmathA}% +\newcommand\lthtmlinlineZ{\egroup\expandafter\ifdim\dp\sizebox>0pt % + \expandafter\centerinlinemath\fi\lthtmllogmath\lthtmlsetinline} +\newcommand\lthtmlinlinemathZ{\egroup\expandafter\ifdim\dp\sizebox>0pt % + \expandafter\centerinlinemath\fi\lthtmllogmath\lthtmlsetmath} +\newcommand\lthtmlindisplaymathZ{\egroup % + \centerinlinemath\lthtmllogmath\lthtmlsetmath} +\def\lthtmlsetinline{\hbox{\vrule width.1em \vtop{\vbox{% + \kern.1em\copy\sizebox}\ifdim\dp\sizebox>0pt\kern.1em\else\kern.3pt\fi + \ifdim\hsize>\wd\sizebox \hrule depth1pt\fi}}} +\def\lthtmlsetmath{\hbox{\vrule width.1em\kern-.05em\vtop{\vbox{% + \kern.1em\kern0.8 pt\hbox{\hglue.17em\copy\sizebox\hglue0.8 pt}}\kern.3pt% + \ifdim\dp\sizebox>0pt\kern.1em\fi \kern0.8 pt% + \ifdim\hsize>\wd\sizebox \hrule depth1pt\fi}}} +\def\centerinlinemath{% + \dimen1=\ifdim\ht\sizebox<\dp\sizebox \dp\sizebox\else\ht\sizebox\fi + \advance\dimen1by.5pt \vrule width0pt height\dimen1 depth\dimen1 + \dp\sizebox=\dimen1\ht\sizebox=\dimen1\relax} + +\def\lthtmlcheckvsize{\ifdim\ht\sizebox<\vsize + \ifdim\wd\sizebox<\hsize\expandafter\hfill\fi \expandafter\vfill + \else\expandafter\vss\fi}% +\providecommand{\selectlanguage}[1]{}% +\makeatletter \tracingstats = 1 + + +\begin{document} +\pagestyle{empty}\thispagestyle{empty}\lthtmltypeout{}% +\lthtmltypeout{latex2htmlLength hsize=\the\hsize}\lthtmltypeout{}% +\lthtmltypeout{latex2htmlLength vsize=\the\vsize}\lthtmltypeout{}% +\lthtmltypeout{latex2htmlLength hoffset=\the\hoffset}\lthtmltypeout{}% +\lthtmltypeout{latex2htmlLength voffset=\the\voffset}\lthtmltypeout{}% +\lthtmltypeout{latex2htmlLength topmargin=\the\topmargin}\lthtmltypeout{}% +\lthtmltypeout{latex2htmlLength topskip=\the\topskip}\lthtmltypeout{}% +\lthtmltypeout{latex2htmlLength headheight=\the\headheight}\lthtmltypeout{}% +\lthtmltypeout{latex2htmlLength headsep=\the\headsep}\lthtmltypeout{}% +\lthtmltypeout{latex2htmlLength parskip=\the\parskip}\lthtmltypeout{}% +\lthtmltypeout{latex2htmlLength oddsidemargin=\the\oddsidemargin}\lthtmltypeout{}% +\makeatletter +\if@twoside\lthtmltypeout{latex2htmlLength evensidemargin=\the\evensidemargin}% +\else\lthtmltypeout{latex2htmlLength evensidemargin=\the\oddsidemargin}\fi% +\lthtmltypeout{}% +\makeatother +\setcounter{page}{1} +\onecolumn + +% !!! IMAGES START HERE !!! + +\stepcounter{chapter} +\stepcounter{chapter} +\stepcounter{section} +\stepcounter{section} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsubsection} +\stepcounter{subsubsection} +\stepcounter{subsection} +\stepcounter{chapter} +\stepcounter{section} +\stepcounter{section} +\stepcounter{section} +{\newpage\clearpage +\lthtmlinlinemathA{tex2html_wrap_inline1028}% +$n$% +\lthtmlinlinemathZ +\lthtmlcheckvsize\clearpage} + +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +{\newpage\clearpage +\lthtmlinlinemathA{tex2html_wrap_inline1032}% +$N=1{\ldots} 5$% +\lthtmlinlinemathZ +\lthtmlcheckvsize\clearpage} + +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{section} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{section} + + +\newedenvironment{winprop}[2]{ + + \begin{description} +% + \item[Winprop:] \texttt{#1} (#2) + \item[Description:] +} +{ + + \end{description} +}% + +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsubsection} +\stepcounter{subsubsection} +\stepcounter{subsubsection} +\stepcounter{chapter} +\stepcounter{section} +\stepcounter{subsection} +\stepcounter{subsubsection} +\stepcounter{subsubsection} +\stepcounter{subsubsection} +\stepcounter{section} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsubsection} +\stepcounter{subsubsection} +\stepcounter{subsubsection} +\stepcounter{subsubsection} +\stepcounter{subsubsection} +\stepcounter{subsection} +\stepcounter{section} +\stepcounter{subsection} +{\newpage\clearpage +\lthtmlinlinemathA{tex2html_wrap_inline1981}% +$(0, 1]$% +\lthtmlinlinemathZ +\lthtmlcheckvsize\clearpage} + +\stepcounter{subsection} +\stepcounter{chapter} +\stepcounter{section} +\stepcounter{section} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{section} +\stepcounter{section} +\stepcounter{chapter} +\stepcounter{section} +{\newpage\clearpage +\lthtmlinlinemathA{tex2html_wrap_inline6076}% +$-1$% +\lthtmlinlinemathZ +\lthtmlcheckvsize\clearpage} + +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +{\newpage\clearpage +\lthtmlinlinemathA{tex2html_wrap_inline6080}% +$-2$% +\lthtmlinlinemathZ +\lthtmlcheckvsize\clearpage} + +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{section} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{section} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{section} +\stepcounter{subsection} +\stepcounter{section} +\stepcounter{subsection} +{\newpage\clearpage +\lthtmlinlinemathA{tex2html_wrap_inline9064}% +$\{t,m,b\}\times\{t,c,b\}$% +\lthtmlinlinemathZ +\lthtmlcheckvsize\clearpage} + +\stepcounter{section} +\stepcounter{section} +\stepcounter{section} +\appendix +\stepcounter{chapter} +\addtocounter{enumi}{-1} +\stepcounter{chapter} + +% +\providecommand{\fnlisti}[1]{\htmlref{\texttt{#1}}{fn:#1}\\}% + + +\end{document} diff --git a/ionconf/img1.png b/ionconf/img1.png new file mode 100644 index 0000000..e69de29 diff --git a/ionconf/img2.png b/ionconf/img2.png new file mode 100644 index 0000000..e69de29 diff --git a/ionconf/img3.png b/ionconf/img3.png new file mode 100644 index 0000000..e69de29 diff --git a/ionconf/img4.png b/ionconf/img4.png new file mode 100644 index 0000000..e69de29 diff --git a/ionconf/img5.png b/ionconf/img5.png new file mode 100644 index 0000000..e69de29 diff --git a/ionconf/img6.png b/ionconf/img6.png new file mode 100644 index 0000000..e69de29 diff --git a/ionconf/index.html b/ionconf/index.html new file mode 100644 index 0000000..7a0a20d --- /dev/null +++ b/ionconf/index.html @@ -0,0 +1,341 @@ + + + + + +Configuring and extending Ion3 with Lua + + + + + + + + + + + + + + + + +

    + + +

    +

    Configuring and extending Ion3 with Lua

    +
    + +

    Tuomo Valkonen

    +

    tuomov at iki.fi

    +

    2006-12-23

    +
    + +

    +Configuring and extending Ion3 with Lua +
    +Copyright © 2003-2005 Tuomo Valkonen. + +

    +This document is free; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +

    +This document is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +chapter entitled ''GNU General Public License'' for more details. + +

    +


    + + + + + +

    + + + diff --git a/ionconf/index.png b/ionconf/index.png new file mode 100644 index 0000000000000000000000000000000000000000..698f09cae4df23447bf608d2a585bd4d5972c27d GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^+CVJ9#LU3Jn0f2YF(8L0z$e6Y|Ni~?`T5VEKaXZ$ zILr2UCs3TRB*-tA!Qt7BG$3b&r;B4q#hlW9TP`L;fmV5yrw%$cCme3Ee&-OYn%|JV z;eHbLNzG*&z8F|Gv`(HGd$F~)u_nK+LS=<8R{%>WqskW{Rg3J}7qSOsCi?q75nH?M zE^{77+Z<+1r-r1Nch|4lthS=d{J1PfXUU1#ym22LZu_2=vAt}Pd}!6<{pzf1?Y4jM u^4(GWO*wx3{4#&$%6k3J$8QJwOy|GN;;5Q**1ZVmMg~t;KbLh*2~7aKlwD!~ literal 0 HcmV?d00001 diff --git a/ionconf/internals.pl b/ionconf/internals.pl new file mode 100644 index 0000000..d2d476e --- /dev/null +++ b/ionconf/internals.pl @@ -0,0 +1,1306 @@ +# LaTeX2HTML 2002-2-1 (1.71) +# Associate internals original text with physical files. + + +$key = q/sec:queryref/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.version/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.mx_nth/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:gr.select_engine/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_get_window_property/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.context/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_exec/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_first/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.insstr/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.quote_next/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_renameworkspace/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.is_shaded/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.mx_list/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_activity/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.farthest/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.create_ws/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.finish/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.bskip_word/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.mark/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.switch_prev/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.unsplit_at/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.dec_index/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.current/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:hookref/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/chap:config/; +$ref_files{$key} = "$dir".q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.split/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.kpress/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.is_mapped/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.is_fullscreen/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_prev_screen/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.transpose_words/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:ioncoreref/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.defbindings/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.get/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WWindow.p_resize/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WComplProxy.set_completions/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.shutdown/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.getbindings/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:styles/; +$ref_files{$key} = "$dir".q|node5.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.get_stdisp/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.defmenu/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.set_get_winprop_fn/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fig:borders/; +$ref_files{$key} = "$dir".q|node5.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.navi_next/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:de.reset/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.history_get/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.lookup_script/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WScreen.id/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.set_mode/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMoveresMode.resize/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMenu.select_nth/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.mode/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.warn_traced/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMenu.select_next/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:modules/; +$ref_files{$key} = "$dir".q|node3.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplitSplit.tl/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_tiling.mkbottom/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.defctxmenu/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.set_selection/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WInput.scrollup/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.set_name_exact/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.switch_nth/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.prev_completion/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.exec_on/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.menuentry/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.forward/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_menu.menu/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WDock.set/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_sp.set_shown/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.find_screen_id/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:bindings/; +$ref_files{$key} = "$dir".q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WInfoWin.set_text/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.snapshot/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/region_do_warp_alt/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.resign/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/clientwin_unmapped_hook/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.write_savefile/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/panews_make_placement_alt/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:exports/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:hooks/; +$ref_files{$key} = "$dir".q|node6.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WWindow.xid/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.activity_list/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.get_ident/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fig:classhierarchy/; +$ref_files{$key} = "$dir".q|node3.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_sp.set_shown_on/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.set_floating/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.history_prev/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:binddef/; +$ref_files{$key} = "$dir".q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.kill_to_eol/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_editfile/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:gr.read_config/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.split_at/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.p_tabdrag/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.screen_of/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.switch_next/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WGroup.bottom/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.history_search/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.node_of/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRootWin.current_scr/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.navi_first/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.kill_to_bol/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.load_module/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:menuref/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:menudisp/; +$ref_files{$key} = "$dir".q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.maximize_vert/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplitInner.current/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WDock.attach/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.set_tagged/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/app:fullhierarchy/; +$ref_files{$key} = "$dir".q|node9.html|; +$noresave{$key} = "$nosave"; + +$key = q/frame_managed_changed_hook/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/chap:tricks/; +$ref_files{$key} = "$dir".q|node6.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.get_savefile/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.history_push/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.get/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.lookup_clientwin/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.restart/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_set_text_property/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:winprops/; +$ref_files{$key} = "$dir".q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplit.parent/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.getctxmenu/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/region_inactivated_hook/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.maximize_horiz/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WWindow.p_move/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:objects/; +$ref_files{$key} = "$dir".q|node3.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WScreen.set_managed_offset/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.set/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.get_dir_for/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.point/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMenu.select_prev/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_next/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:engines/; +$ref_files{$key} = "$dir".q|node5.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_menu.pmenu/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_dock.set_floating_shown_on/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_ssh/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_get_atom_name/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_workspace/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMenu.typeahead_clear/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:table.copy/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplit.rqgeom/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.tags_first/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.set_mark/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/screen_managed_changed_hook/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.mx_count/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.attach/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fig:managership/; +$ref_files{$key} = "$dir".q|node3.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_menu/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMoveresMode.move/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_tiling.get/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.flip_at/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.lookup_region/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.defshortening/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.refresh_stylelist/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.show_about_ion/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.inc_index/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_delete_property/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.rqclose/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.set_activity/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_runfile/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.set_context/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.show_tree/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.contents/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.exec/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.region_list/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.mx_current/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.message/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.compile_cmd/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:deref/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.bol/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.submenu/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.attach_tagged/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplitSplit.br/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.managed_list/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:string.shell_safe/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_restart/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.managed_list/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_tiling.set/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.backspace/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:de.defstyle/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WGroupWS.attach_framed/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:dockref/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.set_floating_at/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.warn/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.current/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.rqclose_propagate/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.clear_mark/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/tiling_placement_alt/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.warn/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.begin_kbresize/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:classesrolesinstances/; +$ref_files{$key} = "$dir".q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.is_tagged/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.next_completion/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.set_hidden/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMenu.cancel/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.nudge/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_nth_screen/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/clientwin_mapped_hook/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.set_fullscreen/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.paste/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.xid/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.name/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_get_text_property/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_attachclient/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:table.append/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.mclick/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.set_index/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.history_clear/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.p_switch_tab/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_intern_atom/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMoveresMode.finish/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_gotoclient/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/ioncore_deinit_hook/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplit.geom/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_previous/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.find_manager/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.get_paths/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:walkthrough/; +$ref_files{$key} = "$dir".q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.set_numbers/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMoveresMode.cancel/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.submap/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.is_active/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.bkill_word/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.attach_new/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WGroup.attach/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.mdblclick/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplitSplit.flip/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.split_top/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/region_activity_hook/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.progname/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.popen_completions/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.defwinprop/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.popen_bgread/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.mdrag/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.kill/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplit.transpose/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/ioncore_snapshot_hook/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.clear_tags/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:table.map/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplitSplit.dir/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.set_shaded/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.set_stdisp/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.manager/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_change_property/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WInput.cancel/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.parent/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMenu.finish/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.back/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.TR/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:menus/; +$ref_files{$key} = "$dir".q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_renameframe/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.geom/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.kpress_wait/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/clientwin_do_manage_alt/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.rootwin_of/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.transpose_at/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/ioncore_sigchld_hook/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.match_winprop_name/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.nextto/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WDock.get/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:de.substyle/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.copy/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.is_histcompl/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.getmenu/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.is_i18n/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:gr.refresh/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.rqorder/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_menu.grabmenu/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplitRegion.reg/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.size_hints/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.delete/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.getwinprop/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.tagged_list/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.request_selection/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_man/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.cut/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.goto/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_next_screen/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.set_paths/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:conffiles/; +$ref_files{$key} = "$dir".q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.clientwin_list/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.aboutmsg/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/chap:prelim/; +$ref_files{$key} = "$dir".q|node3.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WGroup.managed_list/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fig:parentship/; +$ref_files{$key} = "$dir".q|node3.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.read_savefile/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.restart_other/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.is_activity/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.rqgeom/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WInput.scrolldown/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/region_activated_hook/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.history_table/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:defaultde/; +$ref_files{$key} = "$dir".q|node5.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.set/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.mpress/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:tilingref/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_tiling.detach/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.set_name/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:table.join/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.activity_first/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:spref/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.is_hidden/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_menu.get/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_yesno/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.history_next/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.eol/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.defcmd/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.bdoc/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.chdir_for/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_lua/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:export/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/chap:gr/; +$ref_files{$key} = "$dir".q|node5.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_menu.set/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.kill_word/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:de.defstyle_rootwin/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/ioncore_post_layout_setup_hook/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:table.icat/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.kill_line/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WDock.resize/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_shutdown/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.get_index/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.skip_word/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.complete/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WGroup.attach_new/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.transpose_chars/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.split_tree/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +1; + diff --git a/ionconf/ionconf.css b/ionconf/ionconf.css new file mode 100644 index 0000000..f0cd026 --- /dev/null +++ b/ionconf/ionconf.css @@ -0,0 +1,38 @@ +/* Century Schoolbook font is very similar to Computer Modern Math: cmmi */ +.MATH { font-family: "Century Schoolbook", serif; } +.MATH I { font-family: "Century Schoolbook", serif; font-style: italic } +.BOLDMATH { font-family: "Century Schoolbook", serif; font-weight: bold } + +/* implement both fixed-size and relative sizes */ +SMALL.XTINY { font-size : xx-small } +SMALL.TINY { font-size : x-small } +SMALL.SCRIPTSIZE { font-size : smaller } +SMALL.FOOTNOTESIZE { font-size : small } +SMALL.SMALL { } +BIG.LARGE { } +BIG.XLARGE { font-size : large } +BIG.XXLARGE { font-size : x-large } +BIG.HUGE { font-size : larger } +BIG.XHUGE { font-size : xx-large } + +/* heading styles */ +H1 { } +H2 { } +H3 { } +H4 { } +H5 { } + +/* mathematics styles */ +DIV.displaymath { } /* math displays */ +TD.eqno { } /* equation-number cells */ + + +/* document-specific styles come next */ +DIV.navigation { } +DIV.center { } +SPAN.sc { } +DIV.quote { } +PRE.preform { } +SPAN.textit { font-style: italic } +SPAN.arabic { } +SPAN.textbf { font-weight: bold } diff --git a/ionconf/ionconf.html b/ionconf/ionconf.html new file mode 100644 index 0000000..7a0a20d --- /dev/null +++ b/ionconf/ionconf.html @@ -0,0 +1,341 @@ + + + + + +Configuring and extending Ion3 with Lua + + + + + + + + + + + + + + + + + + + +

    +

    Configuring and extending Ion3 with Lua

    +
    + +

    Tuomo Valkonen

    +

    tuomov at iki.fi

    +

    2006-12-23

    +
    + +

    +Configuring and extending Ion3 with Lua +
    +Copyright © 2003-2005 Tuomo Valkonen. + +

    +This document is free; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +

    +This document is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +chapter entitled ''GNU General Public License'' for more details. + +

    +


    + + + + + +

    + + + diff --git a/ionconf/labels.pl b/ionconf/labels.pl new file mode 100644 index 0000000..cbfa297 --- /dev/null +++ b/ionconf/labels.pl @@ -0,0 +1,2613 @@ +# LaTeX2HTML 2002-2-1 (1.71) +# Associate labels original text with physical files. + + +$key = q/sec:queryref/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.version/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.mx_nth/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:gr.select_engine/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_get_window_property/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.context/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_exec/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_first/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.insstr/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.quote_next/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_renameworkspace/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.is_shaded/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.mx_list/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_activity/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.farthest/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.create_ws/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.finish/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.bskip_word/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.mark/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.switch_prev/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.unsplit_at/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.dec_index/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.current/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:hookref/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/chap:config/; +$external_labels{$key} = "$URL/" . q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.split/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.kpress/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.is_mapped/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.is_fullscreen/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_prev_screen/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.transpose_words/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:ioncoreref/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.defbindings/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.get/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WWindow.p_resize/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WComplProxy.set_completions/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.shutdown/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.getbindings/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:styles/; +$external_labels{$key} = "$URL/" . q|node5.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.get_stdisp/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.defmenu/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.set_get_winprop_fn/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fig:borders/; +$external_labels{$key} = "$URL/" . q|node5.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.navi_next/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:de.reset/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.history_get/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.lookup_script/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WScreen.id/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.set_mode/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMoveresMode.resize/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMenu.select_nth/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.mode/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.warn_traced/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMenu.select_next/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:modules/; +$external_labels{$key} = "$URL/" . q|node3.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplitSplit.tl/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_tiling.mkbottom/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.defctxmenu/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.set_selection/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WInput.scrollup/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.set_name_exact/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.switch_nth/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.prev_completion/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.exec_on/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.menuentry/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.forward/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_menu.menu/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WDock.set/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_sp.set_shown/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.find_screen_id/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:bindings/; +$external_labels{$key} = "$URL/" . q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WInfoWin.set_text/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.snapshot/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/region_do_warp_alt/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.resign/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/clientwin_unmapped_hook/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.write_savefile/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/panews_make_placement_alt/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:exports/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:hooks/; +$external_labels{$key} = "$URL/" . q|node6.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WWindow.xid/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.activity_list/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.get_ident/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fig:classhierarchy/; +$external_labels{$key} = "$URL/" . q|node3.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_sp.set_shown_on/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.set_floating/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.history_prev/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:binddef/; +$external_labels{$key} = "$URL/" . q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.kill_to_eol/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_editfile/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:gr.read_config/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.split_at/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.p_tabdrag/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.screen_of/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.switch_next/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WGroup.bottom/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.history_search/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.node_of/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRootWin.current_scr/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.navi_first/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.kill_to_bol/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.load_module/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:menuref/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:menudisp/; +$external_labels{$key} = "$URL/" . q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.maximize_vert/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplitInner.current/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WDock.attach/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.set_tagged/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/app:fullhierarchy/; +$external_labels{$key} = "$URL/" . q|node9.html|; +$noresave{$key} = "$nosave"; + +$key = q/frame_managed_changed_hook/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/chap:tricks/; +$external_labels{$key} = "$URL/" . q|node6.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.get_savefile/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.history_push/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.get/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.lookup_clientwin/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.restart/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_set_text_property/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:winprops/; +$external_labels{$key} = "$URL/" . q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplit.parent/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.getctxmenu/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/region_inactivated_hook/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.maximize_horiz/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WWindow.p_move/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:objects/; +$external_labels{$key} = "$URL/" . q|node3.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WScreen.set_managed_offset/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.set/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.get_dir_for/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.point/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMenu.select_prev/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_next/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:engines/; +$external_labels{$key} = "$URL/" . q|node5.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_menu.pmenu/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_dock.set_floating_shown_on/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_ssh/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_get_atom_name/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_workspace/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMenu.typeahead_clear/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:table.copy/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplit.rqgeom/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.tags_first/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.set_mark/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/screen_managed_changed_hook/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.mx_count/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.attach/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fig:managership/; +$external_labels{$key} = "$URL/" . q|node3.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_menu/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMoveresMode.move/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_tiling.get/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.flip_at/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.lookup_region/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.defshortening/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.refresh_stylelist/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.show_about_ion/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.inc_index/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_delete_property/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.rqclose/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.set_activity/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_runfile/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.set_context/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.show_tree/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.contents/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.exec/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.region_list/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.mx_current/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.message/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.compile_cmd/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:deref/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.bol/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.submenu/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.attach_tagged/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplitSplit.br/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.managed_list/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:string.shell_safe/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_restart/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.managed_list/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_tiling.set/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.backspace/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:de.defstyle/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WGroupWS.attach_framed/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:dockref/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.set_floating_at/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.warn/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.current/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.rqclose_propagate/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.clear_mark/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/tiling_placement_alt/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.warn/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.begin_kbresize/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:classesrolesinstances/; +$external_labels{$key} = "$URL/" . q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.is_tagged/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.next_completion/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.set_hidden/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMenu.cancel/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.nudge/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_nth_screen/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/clientwin_mapped_hook/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.set_fullscreen/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.paste/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.xid/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.name/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_get_text_property/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_attachclient/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:table.append/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.mclick/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.set_index/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.history_clear/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.p_switch_tab/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_intern_atom/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMoveresMode.finish/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_gotoclient/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/ioncore_deinit_hook/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplit.geom/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_previous/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.find_manager/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.get_paths/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:walkthrough/; +$external_labels{$key} = "$URL/" . q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.set_numbers/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMoveresMode.cancel/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.submap/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.is_active/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.bkill_word/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.attach_new/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WGroup.attach/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.mdblclick/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplitSplit.flip/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.split_top/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/region_activity_hook/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.progname/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.popen_completions/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.defwinprop/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.popen_bgread/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.mdrag/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.kill/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplit.transpose/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/ioncore_snapshot_hook/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.clear_tags/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:table.map/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplitSplit.dir/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.set_shaded/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.set_stdisp/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.manager/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_change_property/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WInput.cancel/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.parent/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMenu.finish/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.back/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.TR/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:menus/; +$external_labels{$key} = "$URL/" . q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_renameframe/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.geom/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.kpress_wait/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/clientwin_do_manage_alt/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.rootwin_of/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.transpose_at/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/ioncore_sigchld_hook/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.match_winprop_name/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.nextto/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WDock.get/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:de.substyle/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.copy/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.is_histcompl/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.getmenu/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.is_i18n/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:gr.refresh/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.rqorder/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_menu.grabmenu/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplitRegion.reg/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.size_hints/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.delete/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.getwinprop/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.tagged_list/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.request_selection/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_man/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.cut/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.goto/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_next_screen/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.set_paths/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:conffiles/; +$external_labels{$key} = "$URL/" . q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.clientwin_list/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.aboutmsg/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/chap:prelim/; +$external_labels{$key} = "$URL/" . q|node3.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WGroup.managed_list/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fig:parentship/; +$external_labels{$key} = "$URL/" . q|node3.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.read_savefile/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.restart_other/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.is_activity/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.rqgeom/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WInput.scrolldown/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/region_activated_hook/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.history_table/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:defaultde/; +$external_labels{$key} = "$URL/" . q|node5.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.set/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.mpress/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:tilingref/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_tiling.detach/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.set_name/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:table.join/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.activity_first/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:spref/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.is_hidden/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_menu.get/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_yesno/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.history_next/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.eol/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.defcmd/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.bdoc/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.chdir_for/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_lua/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:export/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/chap:gr/; +$external_labels{$key} = "$URL/" . q|node5.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_menu.set/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.kill_word/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:de.defstyle_rootwin/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/ioncore_post_layout_setup_hook/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:table.icat/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.kill_line/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WDock.resize/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_shutdown/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.get_index/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.skip_word/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.complete/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WGroup.attach_new/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.transpose_chars/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.split_tree/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +1; + + +# LaTeX2HTML 2002-2-1 (1.71) +# labels from external_latex_labels array. + + +$key = q/sec:queryref/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.version/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.mx_nth/; +$external_latex_labels{$key} = q|6.1.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:gr.select_engine/; +$external_latex_labels{$key} = q|6.1.14|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_get_window_property/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.context/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_exec/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_first/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.insstr/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.quote_next/; +$external_latex_labels{$key} = q|6.1.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_renameworkspace/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.is_shaded/; +$external_latex_labels{$key} = q|6.1.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.mx_list/; +$external_latex_labels{$key} = q|6.1.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_activity/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.farthest/; +$external_latex_labels{$key} = q|6.2.5|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.create_ws/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.finish/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.bskip_word/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.mark/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.switch_prev/; +$external_latex_labels{$key} = q|6.1.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.unsplit_at/; +$external_latex_labels{$key} = q|6.2.5|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.dec_index/; +$external_latex_labels{$key} = q|6.1.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.current/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/sec:hookref/; +$external_latex_labels{$key} = q|6.8|; +$noresave{$key} = "$nosave"; + +$key = q/chap:config/; +$external_latex_labels{$key} = q|3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.split/; +$external_latex_labels{$key} = q|6.2.5|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.kpress/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.is_mapped/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.is_fullscreen/; +$external_latex_labels{$key} = q|6.1.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_prev_screen/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.transpose_words/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/sec:ioncoreref/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.defbindings/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.get/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WWindow.p_resize/; +$external_latex_labels{$key} = q|6.1.12|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WComplProxy.set_completions/; +$external_latex_labels{$key} = q|6.3.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.shutdown/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.getbindings/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/sec:styles/; +$external_latex_labels{$key} = q|4.1.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.get_stdisp/; +$external_latex_labels{$key} = q|6.1.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.defmenu/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.set_get_winprop_fn/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fig:borders/; +$external_latex_labels{$key} = q|4.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.navi_next/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:de.reset/; +$external_latex_labels{$key} = q|6.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.history_get/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.lookup_script/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WScreen.id/; +$external_latex_labels{$key} = q|6.1.11|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.set_mode/; +$external_latex_labels{$key} = q|6.1.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMoveresMode.resize/; +$external_latex_labels{$key} = q|6.1.8|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMenu.select_nth/; +$external_latex_labels{$key} = q|6.4.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.mode/; +$external_latex_labels{$key} = q|6.1.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.warn_traced/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMenu.select_next/; +$external_latex_labels{$key} = q|6.4.1|; +$noresave{$key} = "$nosave"; + +$key = q/sec:modules/; +$external_latex_labels{$key} = q|2.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplitSplit.tl/; +$external_latex_labels{$key} = q|6.2.4|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_tiling.mkbottom/; +$external_latex_labels{$key} = q|6.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.defctxmenu/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.set_selection/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WInput.scrollup/; +$external_latex_labels{$key} = q|6.3.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.set_name_exact/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.switch_nth/; +$external_latex_labels{$key} = q|6.1.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.prev_completion/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.exec_on/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.menuentry/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.forward/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_menu.menu/; +$external_latex_labels{$key} = q|6.4|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WDock.set/; +$external_latex_labels{$key} = q|6.5.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_sp.set_shown/; +$external_latex_labels{$key} = q|6.6|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.find_screen_id/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/sec:bindings/; +$external_latex_labels{$key} = q|3.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WInfoWin.set_text/; +$external_latex_labels{$key} = q|6.1.6|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.snapshot/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/region_do_warp_alt/; +$external_latex_labels{$key} = q|6.8|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.resign/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/clientwin_unmapped_hook/; +$external_latex_labels{$key} = q|6.8|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.write_savefile/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/panews_make_placement_alt/; +$external_latex_labels{$key} = q|6.8|; +$noresave{$key} = "$nosave"; + +$key = q/sec:exports/; +$external_latex_labels{$key} = q|6|; +$noresave{$key} = "$nosave"; + +$key = q/sec:hooks/; +$external_latex_labels{$key} = q|5.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WWindow.xid/; +$external_latex_labels{$key} = q|6.1.12|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.activity_list/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.get_ident/; +$external_latex_labels{$key} = q|6.1.1|; +$noresave{$key} = "$nosave"; + +$key = q/fig:classhierarchy/; +$external_latex_labels{$key} = q|2.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_sp.set_shown_on/; +$external_latex_labels{$key} = q|6.6|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.set_floating/; +$external_latex_labels{$key} = q|6.2.5|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.history_prev/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/sec:binddef/; +$external_latex_labels{$key} = q|3.3.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.kill_to_eol/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_editfile/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:gr.read_config/; +$external_latex_labels{$key} = q|6.1.14|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.split_at/; +$external_latex_labels{$key} = q|6.2.5|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.p_tabdrag/; +$external_latex_labels{$key} = q|6.1.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.screen_of/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.switch_next/; +$external_latex_labels{$key} = q|6.1.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WGroup.bottom/; +$external_latex_labels{$key} = q|6.1.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.history_search/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.node_of/; +$external_latex_labels{$key} = q|6.2.5|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRootWin.current_scr/; +$external_latex_labels{$key} = q|6.1.10|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.navi_first/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.kill_to_bol/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.load_module/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/sec:menuref/; +$external_latex_labels{$key} = q|6.4|; +$noresave{$key} = "$nosave"; + +$key = q/sec:menudisp/; +$external_latex_labels{$key} = q|3.4.4|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.maximize_vert/; +$external_latex_labels{$key} = q|6.1.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplitInner.current/; +$external_latex_labels{$key} = q|6.2.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WDock.attach/; +$external_latex_labels{$key} = q|6.5.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.set_tagged/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/app:fullhierarchy/; +$external_latex_labels{$key} = q|B|; +$noresave{$key} = "$nosave"; + +$key = q/frame_managed_changed_hook/; +$external_latex_labels{$key} = q|6.8|; +$noresave{$key} = "$nosave"; + +$key = q/chap:tricks/; +$external_latex_labels{$key} = q|5|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.get_savefile/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.history_push/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.get/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.lookup_clientwin/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.restart/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_set_text_property/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/sec:winprops/; +$external_latex_labels{$key} = q|3.5|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplit.parent/; +$external_latex_labels{$key} = q|6.2.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.getctxmenu/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/region_inactivated_hook/; +$external_latex_labels{$key} = q|6.8|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.maximize_horiz/; +$external_latex_labels{$key} = q|6.1.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WWindow.p_move/; +$external_latex_labels{$key} = q|6.1.12|; +$noresave{$key} = "$nosave"; + +$key = q/sec:objects/; +$external_latex_labels{$key} = q|2.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WScreen.set_managed_offset/; +$external_latex_labels{$key} = q|6.1.11|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.set/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.get_dir_for/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.point/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMenu.select_prev/; +$external_latex_labels{$key} = q|6.4.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_next/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/sec:engines/; +$external_latex_labels{$key} = q|4.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_menu.pmenu/; +$external_latex_labels{$key} = q|6.4|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_dock.set_floating_shown_on/; +$external_latex_labels{$key} = q|6.5|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_ssh/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_get_atom_name/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_workspace/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMenu.typeahead_clear/; +$external_latex_labels{$key} = q|6.4.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:table.copy/; +$external_latex_labels{$key} = q|6.1.16|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplit.rqgeom/; +$external_latex_labels{$key} = q|6.2.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.tags_first/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.set_mark/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/screen_managed_changed_hook/; +$external_latex_labels{$key} = q|6.8|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.mx_count/; +$external_latex_labels{$key} = q|6.1.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.attach/; +$external_latex_labels{$key} = q|6.1.7|; +$noresave{$key} = "$nosave"; + +$key = q/fig:managership/; +$external_latex_labels{$key} = q|2.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_menu/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMoveresMode.move/; +$external_latex_labels{$key} = q|6.1.8|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_tiling.get/; +$external_latex_labels{$key} = q|6.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.flip_at/; +$external_latex_labels{$key} = q|6.2.5|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.lookup_region/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.defshortening/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.refresh_stylelist/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.show_about_ion/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.inc_index/; +$external_latex_labels{$key} = q|6.1.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_delete_property/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.rqclose/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.set_activity/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_runfile/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.set_context/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.show_tree/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.contents/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.exec/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.region_list/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.mx_current/; +$external_latex_labels{$key} = q|6.1.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.message/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.compile_cmd/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/sec:deref/; +$external_latex_labels{$key} = q|6.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.bol/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.submenu/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.attach_tagged/; +$external_latex_labels{$key} = q|6.1.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplitSplit.br/; +$external_latex_labels{$key} = q|6.2.4|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.managed_list/; +$external_latex_labels{$key} = q|6.1.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:string.shell_safe/; +$external_latex_labels{$key} = q|6.1.15|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_restart/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.managed_list/; +$external_latex_labels{$key} = q|6.2.5|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_tiling.set/; +$external_latex_labels{$key} = q|6.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.backspace/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:de.defstyle/; +$external_latex_labels{$key} = q|6.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WGroupWS.attach_framed/; +$external_latex_labels{$key} = q|6.1.5|; +$noresave{$key} = "$nosave"; + +$key = q/sec:dockref/; +$external_latex_labels{$key} = q|6.5|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.set_floating_at/; +$external_latex_labels{$key} = q|6.2.5|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.warn/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.current/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.rqclose_propagate/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.clear_mark/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/tiling_placement_alt/; +$external_latex_labels{$key} = q|6.8|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.warn/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.begin_kbresize/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/sec:classesrolesinstances/; +$external_latex_labels{$key} = q|3.5.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.is_tagged/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.next_completion/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.set_hidden/; +$external_latex_labels{$key} = q|6.1.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMenu.cancel/; +$external_latex_labels{$key} = q|6.4.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.nudge/; +$external_latex_labels{$key} = q|6.1.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_nth_screen/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/clientwin_mapped_hook/; +$external_latex_labels{$key} = q|6.8|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.set_fullscreen/; +$external_latex_labels{$key} = q|6.1.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.paste/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.xid/; +$external_latex_labels{$key} = q|6.1.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.name/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_get_text_property/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_attachclient/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:table.append/; +$external_latex_labels{$key} = q|6.1.16|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.mclick/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.set_index/; +$external_latex_labels{$key} = q|6.1.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.history_clear/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.p_switch_tab/; +$external_latex_labels{$key} = q|6.1.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_intern_atom/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMoveresMode.finish/; +$external_latex_labels{$key} = q|6.1.8|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_gotoclient/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/ioncore_deinit_hook/; +$external_latex_labels{$key} = q|6.8|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplit.geom/; +$external_latex_labels{$key} = q|6.2.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_previous/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.find_manager/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.get_paths/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/sec:walkthrough/; +$external_latex_labels{$key} = q|3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.set_numbers/; +$external_latex_labels{$key} = q|6.1.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMoveresMode.cancel/; +$external_latex_labels{$key} = q|6.1.8|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.submap/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.is_active/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.bkill_word/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.attach_new/; +$external_latex_labels{$key} = q|6.1.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WGroup.attach/; +$external_latex_labels{$key} = q|6.1.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.mdblclick/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplitSplit.flip/; +$external_latex_labels{$key} = q|6.2.4|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.split_top/; +$external_latex_labels{$key} = q|6.2.5|; +$noresave{$key} = "$nosave"; + +$key = q/region_activity_hook/; +$external_latex_labels{$key} = q|6.8|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.progname/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.popen_completions/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.defwinprop/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.popen_bgread/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.mdrag/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WClientWin.kill/; +$external_latex_labels{$key} = q|6.1.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplit.transpose/; +$external_latex_labels{$key} = q|6.2.1|; +$noresave{$key} = "$nosave"; + +$key = q/ioncore_snapshot_hook/; +$external_latex_labels{$key} = q|6.8|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.clear_tags/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:table.map/; +$external_latex_labels{$key} = q|6.1.16|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplitSplit.dir/; +$external_latex_labels{$key} = q|6.2.4|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WFrame.set_shaded/; +$external_latex_labels{$key} = q|6.1.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.set_stdisp/; +$external_latex_labels{$key} = q|6.1.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.manager/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.x_change_property/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WInput.cancel/; +$external_latex_labels{$key} = q|6.3.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.parent/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMenu.finish/; +$external_latex_labels{$key} = q|6.4.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.back/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.TR/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/sec:menus/; +$external_latex_labels{$key} = q|3.4|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_renameframe/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.geom/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.kpress_wait/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/clientwin_do_manage_alt/; +$external_latex_labels{$key} = q|6.8|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.rootwin_of/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.transpose_at/; +$external_latex_labels{$key} = q|6.2.5|; +$noresave{$key} = "$nosave"; + +$key = q/ioncore_sigchld_hook/; +$external_latex_labels{$key} = q|6.8|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.match_winprop_name/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.nextto/; +$external_latex_labels{$key} = q|6.2.5|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WDock.get/; +$external_latex_labels{$key} = q|6.5.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:de.substyle/; +$external_latex_labels{$key} = q|6.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.copy/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.is_histcompl/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.getmenu/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.is_i18n/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:gr.refresh/; +$external_latex_labels{$key} = q|6.1.14|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.rqorder/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_menu.grabmenu/; +$external_latex_labels{$key} = q|6.4|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WSplitRegion.reg/; +$external_latex_labels{$key} = q|6.2.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.size_hints/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.delete/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.getwinprop/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.tagged_list/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.request_selection/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_man/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.cut/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.goto/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.goto_next_screen/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.set_paths/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/sec:conffiles/; +$external_latex_labels{$key} = q|3.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.clientwin_list/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.aboutmsg/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/chap:prelim/; +$external_latex_labels{$key} = q|2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WGroup.managed_list/; +$external_latex_labels{$key} = q|6.1.3|; +$noresave{$key} = "$nosave"; + +$key = q/fig:parentship/; +$external_latex_labels{$key} = q|2.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.read_savefile/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.restart_other/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.is_activity/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.rqgeom/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WInput.scrolldown/; +$external_latex_labels{$key} = q|6.3.3|; +$noresave{$key} = "$nosave"; + +$key = q/region_activated_hook/; +$external_latex_labels{$key} = q|6.8|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.history_table/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/sec:defaultde/; +$external_latex_labels{$key} = q|4.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.set/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.mpress/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/sec:tilingref/; +$external_latex_labels{$key} = q|6.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_tiling.detach/; +$external_latex_labels{$key} = q|6.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WRegion.set_name/; +$external_latex_labels{$key} = q|6.1.9|; +$noresave{$key} = "$nosave"; + +$key = q/fn:table.join/; +$external_latex_labels{$key} = q|6.1.16|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.activity_first/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/sec:spref/; +$external_latex_labels{$key} = q|6.6|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.is_hidden/; +$external_latex_labels{$key} = q|6.1.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_menu.get/; +$external_latex_labels{$key} = q|6.4|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_yesno/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.history_next/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.eol/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.defcmd/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.bdoc/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.chdir_for/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_lua/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:export/; +$external_latex_labels{$key} = q|6.1.13|; +$noresave{$key} = "$nosave"; + +$key = q/chap:gr/; +$external_latex_labels{$key} = q|4|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_menu.set/; +$external_latex_labels{$key} = q|6.4|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.kill_word/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:de.defstyle_rootwin/; +$external_latex_labels{$key} = q|6.7|; +$noresave{$key} = "$nosave"; + +$key = q/ioncore_post_layout_setup_hook/; +$external_latex_labels{$key} = q|6.8|; +$noresave{$key} = "$nosave"; + +$key = q/fn:table.icat/; +$external_latex_labels{$key} = q|6.1.16|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.kill_line/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WDock.resize/; +$external_latex_labels{$key} = q|6.5.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_query.query_shutdown/; +$external_latex_labels{$key} = q|6.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WMPlex.get_index/; +$external_latex_labels{$key} = q|6.1.7|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.skip_word/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.complete/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WGroup.attach_new/; +$external_latex_labels{$key} = q|6.1.3|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WEdln.transpose_chars/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTiling.split_tree/; +$external_latex_labels{$key} = q|6.2.5|; +$noresave{$key} = "$nosave"; + +1; + diff --git a/ionconf/next.png b/ionconf/next.png new file mode 100644 index 0000000000000000000000000000000000000000..1628652aac7cff4b24228abd9908c320c6026a7c GIT binary patch literal 245 zcmVQ2aP`rsfsL)H8>rF50IrEKQ7U2mrM!9=R9*Dw1X+@W9RTx^a-#5T6$bi^4|h!q3s vo9V3RdqZP$JTTh9!JZ)`voZLAB<&|;0_>J~#QNZkD16SAR=O4@7anKqmC5&ngT;#rH1+qK z20S~FlZynq-MY=T{~%>KNs884sExd44P^%bf!zNDPxW#x21^f><@$FgzM-=J5cLN5 WGDyh~oC>l40000 + + + + +Contents + + + + + + + + + + + + + + + + + + + + + +
    + +

    +Contents +

    + + + + +

    + +

    +


    + + + diff --git a/ionconf/node10.html b/ionconf/node10.html new file mode 100644 index 0000000..f33c3b7 --- /dev/null +++ b/ionconf/node10.html @@ -0,0 +1,377 @@ + + + + + +List of functions + + + + + + + + + + + + + + + + + + + + + + +

    +List of functions +

    + +

    + +de.defstyle +
    de.defstyle_rootwin +
    de.reset +
    de.substyle +
    export +
    gr.read_config +
    gr.refresh +
    gr.select_engine +
    ioncore.aboutmsg +
    ioncore.activity_first +
    ioncore.activity_list +
    ioncore.bdoc +
    ioncore.chdir_for +
    ioncore.clear_tags +
    ioncore.clientwin_list +
    ioncore.compile_cmd +
    ioncore.create_ws +
    ioncore.current +
    ioncore.defbindings +
    ioncore.defctxmenu +
    ioncore.defmenu +
    ioncore.defshortening +
    ioncore.defwinprop +
    ioncore.exec +
    ioncore.exec_on +
    ioncore.find_manager +
    ioncore.find_screen_id +
    ioncore.get +
    ioncore.getbindings +
    ioncore.getctxmenu +
    ioncore.get_dir_for +
    ioncore.getmenu +
    ioncore.get_paths +
    ioncore.get_savefile +
    ioncore.getwinprop +
    ioncore.goto_activity +
    ioncore.goto_first +
    ioncore.goto_next +
    ioncore.goto_next_screen +
    ioncore.goto_nth_screen +
    ioncore.goto_previous +
    ioncore.goto_prev_screen +
    ioncore.is_i18n +
    ioncore.kpress +
    ioncore.kpress_wait +
    ioncore.load_module +
    ioncore.lookup_clientwin +
    ioncore.lookup_region +
    ioncore.lookup_script +
    ioncore.match_winprop_name +
    ioncore.mclick +
    ioncore.mdblclick +
    ioncore.mdrag +
    ioncore.menuentry +
    ioncore.mpress +
    ioncore.navi_first +
    ioncore.navi_next +
    ioncore.popen_bgread +
    ioncore.progname +
    ioncore.read_savefile +
    ioncore.refresh_stylelist +
    ioncore.region_list +
    ioncore.request_selection +
    ioncore.resign +
    ioncore.restart +
    ioncore.restart_other +
    ioncore.set +
    ioncore.set_get_winprop_fn +
    ioncore.set_paths +
    ioncore.set_selection +
    ioncore.shutdown +
    ioncore.snapshot +
    ioncore.submap +
    ioncore.submenu +
    ioncore.tagged_list +
    ioncore.tags_first +
    ioncore.TR +
    ioncore.version +
    ioncore.warn +
    ioncore.warn_traced +
    ioncore.write_savefile +
    ioncore.x_change_property +
    ioncore.x_delete_property +
    ioncore.x_get_atom_name +
    ioncore.x_get_text_property +
    ioncore.x_get_window_property +
    ioncore.x_intern_atom +
    ioncore.x_set_text_property +
    mod_dock.set_floating_shown_on +
    mod_menu.get +
    mod_menu.grabmenu +
    mod_menu.menu +
    mod_menu.pmenu +
    mod_menu.set +
    mod_query.defcmd +
    mod_query.get +
    mod_query.history_clear +
    mod_query.history_get +
    mod_query.history_push +
    mod_query.history_search +
    mod_query.history_table +
    mod_query.message +
    mod_query.popen_completions +
    mod_query.query +
    mod_query.query_attachclient +
    mod_query.query_editfile +
    mod_query.query_exec +
    mod_query.query_gotoclient +
    mod_query.query_lua +
    mod_query.query_man +
    mod_query.query_menu +
    mod_query.query_renameframe +
    mod_query.query_renameworkspace +
    mod_query.query_restart +
    mod_query.query_runfile +
    mod_query.query_shutdown +
    mod_query.query_ssh +
    mod_query.query_workspace +
    mod_query.query_yesno +
    mod_query.set +
    mod_query.show_about_ion +
    mod_query.show_tree +
    mod_query.warn +
    mod_sp.set_shown +
    mod_sp.set_shown_on +
    mod_tiling.detach +
    mod_tiling.get +
    mod_tiling.mkbottom +
    mod_tiling.set +
    string.shell_safe +
    table.append +
    table.copy +
    table.icat +
    table.join +
    table.map +
    WClientWin.get_ident +
    WClientWin.is_fullscreen +
    WClientWin.kill +
    WClientWin.nudge +
    WClientWin.quote_next +
    WClientWin.set_fullscreen +
    WClientWin.xid +
    WComplProxy.set_completions +
    WDock.attach +
    WDock.get +
    WDock.resize +
    WDock.set +
    WEdln.back +
    WEdln.backspace +
    WEdln.bkill_word +
    WEdln.bol +
    WEdln.bskip_word +
    WEdln.clear_mark +
    WEdln.complete +
    WEdln.contents +
    WEdln.context +
    WEdln.copy +
    WEdln.cut +
    WEdln.delete +
    WEdln.eol +
    WEdln.finish +
    WEdln.forward +
    WEdln.history_next +
    WEdln.history_prev +
    WEdln.insstr +
    WEdln.is_histcompl +
    WEdln.kill_line +
    WEdln.kill_to_bol +
    WEdln.kill_to_eol +
    WEdln.kill_word +
    WEdln.mark +
    WEdln.next_completion +
    WEdln.paste +
    WEdln.point +
    WEdln.prev_completion +
    WEdln.set_context +
    WEdln.set_mark +
    WEdln.skip_word +
    WEdln.transpose_chars +
    WEdln.transpose_words +
    WFrame.is_shaded +
    WFrame.maximize_horiz +
    WFrame.maximize_vert +
    WFrame.mode +
    WFrame.p_switch_tab +
    WFrame.p_tabdrag +
    WFrame.set_mode +
    WFrame.set_numbers +
    WFrame.set_shaded +
    WGroup.attach +
    WGroup.attach_new +
    WGroup.bottom +
    WGroup.managed_list +
    WGroupWS.attach_framed +
    WInfoWin.set_text +
    WInput.cancel +
    WInput.scrolldown +
    WInput.scrollup +
    WMenu.cancel +
    WMenu.finish +
    WMenu.select_next +
    WMenu.select_nth +
    WMenu.select_prev +
    WMenu.typeahead_clear +
    WMoveresMode.cancel +
    WMoveresMode.finish +
    WMoveresMode.move +
    WMoveresMode.resize +
    WMPlex.attach +
    WMPlex.attach_new +
    WMPlex.attach_tagged +
    WMPlex.dec_index +
    WMPlex.get_index +
    WMPlex.get_stdisp +
    WMPlex.inc_index +
    WMPlex.is_hidden +
    WMPlex.managed_list +
    WMPlex.mx_count +
    WMPlex.mx_current +
    WMPlex.mx_list +
    WMPlex.mx_nth +
    WMPlex.set_hidden +
    WMPlex.set_index +
    WMPlex.set_stdisp +
    WMPlex.switch_next +
    WMPlex.switch_nth +
    WMPlex.switch_prev +
    WRegion.begin_kbresize +
    WRegion.current +
    WRegion.geom +
    WRegion.goto +
    WRegion.is_active +
    WRegion.is_activity +
    WRegion.is_mapped +
    WRegion.is_tagged +
    WRegion.manager +
    WRegion.name +
    WRegion.parent +
    WRegion.rootwin_of +
    WRegion.rqclose +
    WRegion.rqclose_propagate +
    WRegion.rqgeom +
    WRegion.rqorder +
    WRegion.screen_of +
    WRegion.set_activity +
    WRegion.set_name +
    WRegion.set_name_exact +
    WRegion.set_tagged +
    WRegion.size_hints +
    WRootWin.current_scr +
    WScreen.id +
    WScreen.set_managed_offset +
    WSplit.geom +
    WSplitInner.current +
    WSplit.parent +
    WSplitRegion.reg +
    WSplit.rqgeom +
    WSplitSplit.br +
    WSplitSplit.dir +
    WSplitSplit.flip +
    WSplitSplit.tl +
    WSplit.transpose +
    WTiling.farthest +
    WTiling.flip_at +
    WTiling.managed_list +
    WTiling.nextto +
    WTiling.node_of +
    WTiling.set_floating +
    WTiling.set_floating_at +
    WTiling.split +
    WTiling.split_at +
    WTiling.split_top +
    WTiling.split_tree +
    WTiling.transpose_at +
    WTiling.unsplit_at +
    WWindow.p_move +
    WWindow.p_resize +
    WWindow.xid +
    +

    + + + + diff --git a/ionconf/node11.html b/ionconf/node11.html new file mode 100644 index 0000000..2c12ab2 --- /dev/null +++ b/ionconf/node11.html @@ -0,0 +1,1091 @@ + + + + + +Index + + + + + + + + + + + + + + + + + + + + + +
    + +

    +Index +


    +
    aboutmsg + : 6.1 +
    acrobatic + : 3.5 +
    activity_first + : 6.1 +
    activity_list + : 6.1 +
    Alt + : 3.3.5 +
    AnyModifier + : 3.3.5 +
    append + : 6.1.16 +
    aspect + : 3.5 +
    attach + : 6.1.3 + | 6.1.7 + | 6.5.1 +
    attach_framed + : 6.1.5 +
    attach_new + : 6.1.3 + | 6.1.7 +
    attach_tagged + : 6.1.7 +
    back + : 6.3.2 +
    backspace + : 6.3.2 +
    bdoc + : 6.1 +
    begin_kbresize + : 6.1.9 +
    bkill_word + : 6.3.2 +
    bol + : 6.3.2 +
    bottom + : 6.1.3 +
    br + : 6.2.4 +
    bskip_word + : 6.3.2 +
    Button-n + : 3.3.6 +
    cancel + : 6.1.8 + | 6.3.3 + | 6.4.1 +
    chdir_for + : 6.1 +
    class
    +
    winprop : 3.5.1 +
    +
    clear_mark + : 6.3.2 +
    clear_tags + : 6.1 +
    clientwin_do_manage_alt + : 6.8 +
    clientwin_list + : 6.1 +
    clientwin_mapped_hook + : 6.8 +
    clientwin_unmapped_hook + : 6.8 +
    compile_cmd + : 6.1 +
    complete + : 6.3.2 +
    contents + : 6.3.2 +
    context + : 6.3.2 +
    Control + : 3.3.5 +
    copy + : 6.1.16 + | 6.3.2 +
    create_ws + : 6.1 +
    current + : 6.1 + | 6.1.9 + | 6.2.2 +
    current_scr + : 6.1.10 +
    cut + : 6.3.2 +
    de
    +
    defstyle : 6.7 +
    defstyle_rootwin : 6.7 +
    reset : 6.7 +
    substyle : 6.7 +
    +
    dec_index + : 6.1.7 +
    defbindings + : 6.1 +
    defcmd + : 6.3 +
    defctxmenu + : 6.1 +
    defmenu + : 3.4.1 + | 6.1 +
    defshortening + : 6.1 +
    defstyle + : 6.7 +
    defstyle_rootwin + : 6.7 +
    defwinprop + : 6.1 +
    delete + : 6.3.2 +
    detach + : 6.2 +
    dir + : 6.2.4 +
    drawing engine + : 4.1 +
    eol + : 6.3.2 +
    ETCDIR + : 3.1 +
    exec + : 6.1 +
    exec_on + : 6.1 +
    export + : 6.1.13 +
    farthest + : 6.2.5 +
    find_manager + : 6.1 +
    find_screen_id + : 6.1 +
    finish + : 6.1.8 + | 6.3.2 + | 6.4.1 +
    flip + : 6.2.4 +
    flip_at + : 6.2.5 +
    float + : 3.5 +
    forward + : 6.3.2 +
    frame_managed_changed_hook + : 6.8 +
    fullscreen + : 3.5 +
    geom + : 6.1.9 + | 6.2.1 +
    get + : 6.1 + | 6.2 + | 6.3 + | 6.4 + | 6.5.1 +
    get_dir_for + : 6.1 +
    get_ident + : 6.1.1 +
    get_index + : 6.1.7 +
    get_paths + : 6.1 +
    get_savefile + : 6.1 +
    get_stdisp + : 6.1.7 +
    getbindings + : 6.1 +
    getctxmenu + : 6.1 +
    getmenu + : 6.1 +
    getwinprop + : 6.1 +
    goto + : 6.1.9 +
    goto_activity + : 6.1 +
    goto_first + : 6.1 +
    goto_next + : 6.1 +
    goto_next_screen + : 6.1 +
    goto_nth_screen + : 6.1 +
    goto_prev_screen + : 6.1 +
    goto_previous + : 6.1 +
    gr
    +
    read_config : 6.1.14 +
    refresh : 6.1.14 +
    select_engine : 6.1.14 +
    +
    grabmenu + : 6.4 +
    history_clear + : 6.3 +
    history_get + : 6.3 +
    history_next + : 6.3.2 +
    history_prev + : 6.3.2 +
    history_push + : 6.3 +
    history_search + : 6.3 +
    history_table + : 6.3 +
    icat + : 6.1.16 +
    id + : 6.1.11 +
    ignore_cfgrq + : 3.5 +
    ignore_net_active_window + : 3.5 +
    ignore_resizeinc + : 3.5 +
    inc_index + : 6.1.7 +
    insstr + : 6.3.2 +
    instance
    +
    winprop : 3.5.1 +
    +
    ioncore
    +
    aboutmsg : 6.1 +
    activity_first : 6.1 +
    activity_list : 6.1 +
    bdoc : 6.1 +
    chdir_for : 6.1 +
    clear_tags : 6.1 +
    clientwin_list : 6.1 +
    compile_cmd : 6.1 +
    create_ws : 6.1 +
    current : 6.1 +
    defbindings : 6.1 +
    defctxmenu : 6.1 +
    defmenu : 6.1 +
    defshortening : 6.1 +
    defwinprop : 6.1 +
    exec : 6.1 +
    exec_on : 6.1 +
    find_manager : 6.1 +
    find_screen_id : 6.1 +
    get : 6.1 +
    get_dir_for : 6.1 +
    get_paths : 6.1 +
    get_savefile : 6.1 +
    getbindings : 6.1 +
    getctxmenu : 6.1 +
    getmenu : 6.1 +
    getwinprop : 6.1 +
    goto_activity : 6.1 +
    goto_first : 6.1 +
    goto_next : 6.1 +
    goto_next_screen : 6.1 +
    goto_nth_screen : 6.1 +
    goto_prev_screen : 6.1 +
    goto_previous : 6.1 +
    is_i18n : 6.1 +
    kpress : 6.1 +
    kpress_wait : 6.1 +
    load_module : 6.1 +
    lookup_clientwin : 6.1 +
    lookup_region : 6.1 +
    lookup_script : 6.1 +
    match_winprop_name : 6.1 +
    mclick : 6.1 +
    mdblclick : 6.1 +
    mdrag : 6.1 +
    menuentry : 6.1 +
    mpress : 6.1 +
    navi_first : 6.1 +
    navi_next : 6.1 +
    popen_bgread : 6.1 +
    progname : 6.1 +
    read_savefile : 6.1 +
    refresh_stylelist : 6.1 +
    region_list : 6.1 +
    request_selection : 6.1 +
    resign : 6.1 +
    restart : 6.1 +
    restart_other : 6.1 +
    set : 6.1 +
    set_get_winprop_fn : 6.1 +
    set_paths : 6.1 +
    set_selection : 6.1 +
    shutdown : 6.1 +
    snapshot : 6.1 +
    submap : 6.1 +
    submenu : 6.1 +
    tagged_list : 6.1 +
    tags_first : 6.1 +
    TR : 6.1 +
    version : 6.1 +
    warn : 6.1 +
    warn_traced : 6.1 +
    write_savefile : 6.1 +
    x_change_property : 6.1 +
    x_delete_property : 6.1 +
    x_get_atom_name : 6.1 +
    x_get_text_property : 6.1 +
    x_get_window_property : 6.1 +
    x_intern_atom : 6.1 +
    x_set_text_property : 6.1 +
    +
    ioncore_deinit_hook + : 6.8 +
    ioncore_post_layout_setup_hook + : 6.8 +
    ioncore_sigchld_hook + : 6.8 +
    ioncore_snapshot_hook + : 6.8 +
    is_active + : 6.1.9 +
    is_activity + : 6.1.9 +
    is_fullscreen + : 6.1.1 +
    is_hidden + : 6.1.7 +
    is_histcompl + : 6.3.2 +
    is_i18n + : 6.1 +
    is_mapped + : 6.1.9 +
    is_shaded + : 6.1.2 +
    is_tagged + : 6.1.9 +
    join + : 6.1.16 +
    jumpto + : 3.5 +
    keysymdef.h + : 3.3.5 +
    kill + : 6.1.1 +
    kill_line + : 6.3.2 +
    kill_to_bol + : 6.3.2 +
    kill_to_eol + : 6.3.2 +
    kill_word + : 6.3.2 +
    kpress + : 6.1 +
    kpress_wait + : 6.1 +
    load_module + : 6.1 +
    Lock + : 3.3.5 +
    lookup_clientwin + : 6.1 +
    lookup_region + : 6.1 +
    lookup_script + : 6.1 +
    managed_list + : 6.1.3 + | 6.1.7 + | 6.2.5 +
    manager + : 2.2.2.1 + | 6.1.9 +
    map + : 6.1.16 +
    mark + : 6.3.2 +
    match_winprop_name + : 6.1 +
    max_size + : 3.5 +
    maximize_horiz + : 6.1.2 +
    maximize_vert + : 6.1.2 +
    mclick + : 6.1 +
    mdblclick + : 6.1 +
    mdrag + : 6.1 +
    menu + : 6.4 +
    menuentry + : 3.4.1 + | 6.1 +
    menus + : 3.4.1 +
    message + : 6.3 +
    min_size + : 3.5 +
    mkbottom + : 6.2 +
    mod_dock
    +
    set_floating_shown_on : 6.5 +
    +
    mod_menu
    +
    get : 6.4 +
    grabmenu : 6.4 +
    menu : 6.4 +
    pmenu : 6.4 +
    set : 6.4 +
    +
    mod_query
    +
    defcmd : 6.3 +
    get : 6.3 +
    history_clear : 6.3 +
    history_get : 6.3 +
    history_push : 6.3 +
    history_search : 6.3 +
    history_table : 6.3 +
    message : 6.3 +
    popen_completions : 6.3 +
    query : 6.3 +
    query_attachclient : 6.3 +
    query_editfile : 6.3 +
    query_exec : 6.3 +
    query_gotoclient : 6.3 +
    query_lua : 6.3 +
    query_man : 6.3 +
    query_menu : 6.3 +
    query_renameframe : 6.3 +
    query_renameworkspace : 6.3 +
    query_restart : 6.3 +
    query_runfile : 6.3 +
    query_shutdown : 6.3 +
    query_ssh : 6.3 +
    query_workspace : 6.3 +
    query_yesno : 6.3 +
    set : 6.3 +
    show_about_ion : 6.3 +
    show_tree : 6.3 +
    warn : 6.3 +
    +
    mod_sp
    +
    set_shown : 6.6 +
    set_shown_on : 6.6 +
    +
    mod_tiling
    +
    detach : 6.2 +
    get : 6.2 +
    mkbottom : 6.2 +
    set : 6.2 +
    +
    mode + : 6.1.2 +
    ModN + : 3.3.5 +
    move + : 6.1.8 +
    mpress + : 6.1 +
    mx_count + : 6.1.7 +
    mx_current + : 6.1.7 +
    mx_list + : 6.1.7 +
    mx_nth + : 6.1.7 +
    name + : 6.1.9 +
    navi_first + : 6.1 +
    navi_next + : 6.1 +
    next_completion + : 6.3.2 +
    nextto + : 6.2.5 +
    node_of + : 6.2.5 +
    nudge + : 6.1.1 +
    NumLock + : 3.3.5 +
    Obj + : 2.2.1 +
    oneshot + : 3.5 +
    p_move + : 6.1.12 +
    p_resize + : 6.1.12 +
    p_switch_tab + : 6.1.2 +
    p_tabdrag + : 6.1.2 +
    panews_make_placement_alt + : 6.8 +
    parent + : 2.2.2.1 + | 6.1.9 + | 6.2.1 +
    paste + : 6.3.2 +
    pmenu + : 6.4 +
    point + : 6.3.2 +
    popen_bgread + : 6.1 +
    popen_completions + : 6.3 +
    PREFIX + : 3.1 +
    prev_completion + : 6.3.2 +
    progname + : 6.1 +
    query + : 6.3 +
    query_attachclient + : 6.3 +
    query_editfile + : 6.3 +
    query_exec + : 6.3 +
    query_gotoclient + : 6.3 +
    query_lua + : 6.3 +
    query_man + : 6.3 +
    query_menu + : 6.3 +
    query_renameframe + : 6.3 +
    query_renameworkspace + : 6.3 +
    query_restart + : 6.3 +
    query_runfile + : 6.3 +
    query_shutdown + : 6.3 +
    query_ssh + : 6.3 +
    query_workspace + : 6.3 +
    query_yesno + : 6.3 +
    quote_next + : 6.1.1 +
    read_config + : 6.1.14 +
    read_savefile + : 6.1 +
    refresh + : 6.1.14 +
    refresh_stylelist + : 6.1 +
    reg + : 6.2.3 +
    region_activated_hook + : 6.8 +
    region_activity_hook + : 6.8 +
    region_do_warp_alt + : 6.8 +
    region_inactivated_hook + : 6.8 +
    region_list + : 6.1 +
    request_selection + : 6.1 +
    reset + : 6.7 +
    resign + : 6.1 +
    resize + : 6.1.8 + | 6.5.1 +
    restart + : 6.1 +
    restart_other + : 6.1 +
    role
    +
    winprop : 3.5.1 +
    +
    root window + : 2.2.1 +
    rootwin_of + : 6.1.9 +
    rqclose + : 6.1.9 +
    rqclose_propagate + : 6.1.9 +
    rqgeom + : 6.1.9 + | 6.2.1 +
    rqorder + : 6.1.9 +
    screen
    +
    physical : 2.2.1 +
    X : 2.2.1 +
    +
    screen_managed_changed_hook + : 6.8 +
    screen_of + : 6.1.9 +
    scrolldown + : 6.3.3 +
    ScrollLock + : 3.3.5 +
    scrollup + : 6.3.3 +
    select_engine + : 6.1.14 +
    select_next + : 6.4.1 +
    select_nth + : 6.4.1 +
    select_prev + : 6.4.1 +
    set + : 6.1 + | 6.2 + | 6.3 + | 6.4 + | 6.5.1 +
    set_activity + : 6.1.9 +
    set_completions + : 6.3.1 +
    set_context + : 6.3.2 +
    set_floating + : 6.2.5 +
    set_floating_at + : 6.2.5 +
    set_floating_shown_on + : 6.5 +
    set_fullscreen + : 6.1.1 +
    set_get_winprop_fn + : 6.1 +
    set_hidden + : 6.1.7 +
    set_index + : 6.1.7 +
    set_managed_offset + : 6.1.11 +
    set_mark + : 6.3.2 +
    set_mode + : 6.1.2 +
    set_name + : 6.1.9 +
    set_name_exact + : 6.1.9 +
    set_numbers + : 6.1.2 +
    set_paths + : 6.1 +
    set_selection + : 6.1 +
    set_shaded + : 6.1.2 +
    set_shown + : 6.6 +
    set_shown_on + : 6.6 +
    set_stdisp + : 6.1.7 +
    set_tagged + : 6.1.9 +
    set_text + : 6.1.6 +
    shell_safe + : 6.1.15 +
    Shift + : 3.3.5 +
    show_about_ion + : 6.3 +
    show_tree + : 6.3 +
    shutdown + : 6.1 +
    size_hints + : 6.1.9 +
    skip_word + : 6.3.2 +
    snapshot + : 6.1 +
    split + : 6.2.5 +
    split_at + : 6.2.5 +
    split_top + : 6.2.5 +
    split_tree + : 6.2.5 +
    string
    +
    shell_safe : 6.1.15 +
    +
    style + : 4.1 +
    submap + : 6.1 +
    submenu + : 3.4.1 + | 6.1 +
    substyle + : 4.1 + | 6.7 +
    switch_next + : 6.1.7 +
    switch_nth + : 6.1.7 +
    switch_prev + : 6.1.7 +
    switchto + : 3.5 +
    system.mk + : 3.1 +
    table
    +
    append : 6.1.16 +
    copy : 6.1.16 +
    icat : 6.1.16 +
    join : 6.1.16 +
    map : 6.1.16 +
    +
    tagged_list + : 6.1 +
    tags_first + : 6.1 +
    target + : 3.5 +
    tiling_placement_alt + : 6.8 +
    tl + : 6.2.4 +
    TR + : 6.1 +
    transient + : 3.5.2 +
    transient_mode + : 3.5 +
    transients_at_top + : 3.5 +
    transparent + : 3.5 +
    transpose + : 6.2.1 +
    transpose_at + : 6.2.5 +
    transpose_chars + : 6.3.2 +
    transpose_words + : 6.3.2 +
    typeahead_clear + : 6.4.1 +
    unsplit_at + : 6.2.5 +
    version + : 6.1 +
    warn + : 6.1 + | 6.3 +
    warn_traced + : 6.1 +
    WClientWin + : 2.2.1 +
    +
    get_ident : 6.1.1 +
    is_fullscreen : 6.1.1 +
    kill : 6.1.1 +
    nudge : 6.1.1 +
    quote_next : 6.1.1 +
    set_fullscreen : 6.1.1 +
    xid : 6.1.1 +
    +
    WComplProxy
    +
    set_completions : 6.3.1 +
    +
    WDock
    +
    attach : 6.5.1 +
    get : 6.5.1 +
    resize : 6.5.1 +
    set : 6.5.1 +
    +
    WEdln + : 2.2.1 +
    +
    back : 6.3.2 +
    backspace : 6.3.2 +
    bkill_word : 6.3.2 +
    bol : 6.3.2 +
    bskip_word : 6.3.2 +
    clear_mark : 6.3.2 +
    complete : 6.3.2 +
    contents : 6.3.2 +
    context : 6.3.2 +
    copy : 6.3.2 +
    cut : 6.3.2 +
    delete : 6.3.2 +
    eol : 6.3.2 +
    finish : 6.3.2 +
    forward : 6.3.2 +
    history_next : 6.3.2 +
    history_prev : 6.3.2 +
    insstr : 6.3.2 +
    is_histcompl : 6.3.2 +
    kill_line : 6.3.2 +
    kill_to_bol : 6.3.2 +
    kill_to_eol : 6.3.2 +
    kill_word : 6.3.2 +
    mark : 6.3.2 +
    next_completion : 6.3.2 +
    paste : 6.3.2 +
    point : 6.3.2 +
    prev_completion : 6.3.2 +
    set_context : 6.3.2 +
    set_mark : 6.3.2 +
    skip_word : 6.3.2 +
    transpose_chars : 6.3.2 +
    transpose_words : 6.3.2 +
    +
    WFrame + : 2.2.1 +
    +
    is_shaded : 6.1.2 +
    maximize_horiz : 6.1.2 +
    maximize_vert : 6.1.2 +
    mode : 6.1.2 +
    p_switch_tab : 6.1.2 +
    p_tabdrag : 6.1.2 +
    set_mode : 6.1.2 +
    set_numbers : 6.1.2 +
    set_shaded : 6.1.2 +
    +
    WGroup + : 2.2.1 +
    +
    attach : 6.1.3 +
    attach_new : 6.1.3 +
    bottom : 6.1.3 +
    managed_list : 6.1.3 +
    +
    WGroupCW + : 2.2.1 +
    WGroupWS + : 2.2.1 +
    +
    attach_framed : 6.1.5 +
    +
    WInfoWin
    +
    set_text : 6.1.6 +
    +
    Winprops + : 3.5 +
    WInput + : 2.2.1 +
    +
    cancel : 6.3.3 +
    scrolldown : 6.3.3 +
    scrollup : 6.3.3 +
    +
    WMenu
    +
    cancel : 6.4.1 +
    finish : 6.4.1 +
    select_next : 6.4.1 +
    select_nth : 6.4.1 +
    select_prev : 6.4.1 +
    typeahead_clear : 6.4.1 +
    +
    WMessage + : 2.2.1 +
    WMoveresMode
    +
    cancel : 6.1.8 +
    finish : 6.1.8 +
    move : 6.1.8 +
    resize : 6.1.8 +
    +
    WMPlex
    +
    attach : 6.1.7 +
    attach_new : 6.1.7 +
    attach_tagged : 6.1.7 +
    dec_index : 6.1.7 +
    get_index : 6.1.7 +
    get_stdisp : 6.1.7 +
    inc_index : 6.1.7 +
    is_hidden : 6.1.7 +
    managed_list : 6.1.7 +
    mx_count : 6.1.7 +
    mx_current : 6.1.7 +
    mx_list : 6.1.7 +
    mx_nth : 6.1.7 +
    set_hidden : 6.1.7 +
    set_index : 6.1.7 +
    set_stdisp : 6.1.7 +
    switch_next : 6.1.7 +
    switch_nth : 6.1.7 +
    switch_prev : 6.1.7 +
    +
    WRegion + : 2.2.1 +
    +
    begin_kbresize : 6.1.9 +
    current : 6.1.9 +
    geom : 6.1.9 +
    goto : 6.1.9 +
    is_active : 6.1.9 +
    is_activity : 6.1.9 +
    is_mapped : 6.1.9 +
    is_tagged : 6.1.9 +
    manager : 6.1.9 +
    name : 6.1.9 +
    parent : 6.1.9 +
    rootwin_of : 6.1.9 +
    rqclose : 6.1.9 +
    rqclose_propagate : 6.1.9 +
    rqgeom : 6.1.9 +
    rqorder : 6.1.9 +
    screen_of : 6.1.9 +
    set_activity : 6.1.9 +
    set_name : 6.1.9 +
    set_name_exact : 6.1.9 +
    set_tagged : 6.1.9 +
    size_hints : 6.1.9 +
    +
    write_savefile + : 6.1 +
    WRootWin + : 2.2.1 +
    +
    current_scr : 6.1.10 +
    +
    WScreen + : 2.2.1 +
    +
    id : 6.1.11 +
    set_managed_offset : 6.1.11 +
    +
    WSplit + : 2.2.1 +
    +
    geom : 6.2.1 +
    parent : 6.2.1 +
    rqgeom : 6.2.1 +
    transpose : 6.2.1 +
    +
    WSplitInner
    +
    current : 6.2.2 +
    +
    WSplitRegion
    +
    reg : 6.2.3 +
    +
    WSplitSplit
    +
    br : 6.2.4 +
    dir : 6.2.4 +
    flip : 6.2.4 +
    tl : 6.2.4 +
    +
    WTiling + : 2.2.1 +
    +
    farthest : 6.2.5 +
    flip_at : 6.2.5 +
    managed_list : 6.2.5 +
    nextto : 6.2.5 +
    node_of : 6.2.5 +
    set_floating : 6.2.5 +
    set_floating_at : 6.2.5 +
    split : 6.2.5 +
    split_at : 6.2.5 +
    split_top : 6.2.5 +
    split_tree : 6.2.5 +
    transpose_at : 6.2.5 +
    unsplit_at : 6.2.5 +
    +
    WWindow + : 2.2.1 +
    +
    p_move : 6.1.12 +
    p_resize : 6.1.12 +
    xid : 6.1.12 +
    +
    x_change_property + : 6.1 +
    x_delete_property + : 6.1 +
    x_get_atom_name + : 6.1 +
    x_get_text_property + : 6.1 +
    x_get_window_property + : 6.1 +
    x_intern_atom + : 6.1 +
    x_set_text_property + : 6.1 +
    xid + : 6.1.1 + | 6.1.12 +
    Xinerama + : 2.2.1 +
    xmodmap + : 3.3.5 +
    xprop + : 3.5.2 + +
    + +

    +


    + + + diff --git a/ionconf/node12.html b/ionconf/node12.html new file mode 100644 index 0000000..90201d6 --- /dev/null +++ b/ionconf/node12.html @@ -0,0 +1,77 @@ + + + + + +About this document ... + + + + + + + + + + + + + + + + + + + + +

    +About this document ... +

    + Configuring and extending Ion3 with Lua

    +This document was generated using the +LaTeX2HTML translator Version 2002-2-1 (1.71) +

    +Copyright © 1993, 1994, 1995, 1996, +Nikos Drakos, +Computer Based Learning Unit, University of Leeds. +
    +Copyright © 1997, 1998, 1999, +Ross Moore, +Mathematics Department, Macquarie University, Sydney. +

    +The command line arguments were:
    + latex2html -show_section_numbers -short_index -local_icons -noaddress -up_url http://iki.fi/tuomov/ion/ -up_title 'Ion homepage' -nofootnode -split 3 ionconf +

    +The translation was initiated by tuomov on 2006-12-23 +


    + + + diff --git a/ionconf/node2.html b/ionconf/node2.html new file mode 100644 index 0000000..9d85352 --- /dev/null +++ b/ionconf/node2.html @@ -0,0 +1,163 @@ + + + + + +1. Introduction + + + + + + + + + + + + + + + + + + + + + + +

    +1. Introduction +

    + +

    +This document is an ''advanced user'' manual for Ion, the X11 window manager, +and version 3 specifically. It is an attempt attempt at documenting what is +in Ion's configuration files, how to configure Ion by simple modifications +to these files and how to write more complex extensions in Lua, the +lightweight configuration and scripting language used by Ion. + +

    +Readers unfamiliar with Lua is advised to first glance at the Lua manual at + +

    +

    + +

    +and perhaps some tutorial pages at the lua-users wiki: + +

    +

    + +

    +Back in this document, first in chapter 2 some key +concepts and relations are explained. These include the module system +and Ion's object and class hierarchies. While it might not at first +occur that knowing such things would be necessary to configure +a program, this material is essential because of the object-oriented +nature of most of Ion's scripting interface. + +

    +The new user, fed up with the default key bindings and eager to just +quickly configure Ion to his liking may question the reasons for +exposing the ''heavy'' internal OO structure in the scripting and +configuration interface. I'm not the one to blame him for that. +Sure it would be faster to configure Ion to everyone's liking +if a simpler binding configuration interface was provided. Such an +interface would, however, also be far more limited and make writing +extensions more complicated and the advantages from using a real +scripting language would be partly lost. One more advantage from +a rich scripting and configuration interface is that it allows +implementing scripts to read alternate configuration file formats, +ones that could be, for example, modified by external configuration tools. + +

    +In chapter 3 the very basic Ion configuration know-how +is provided. All the different configuration files and their locations +are explained and instructions are given to allow the reader to +configure bindings and so-called ''winprops''. Chapter 4 +explains the notion of drawing engines and graphical styles and how to +write new looks for Ion and more advanced aspects of Ion's scripting +interface are documented in chapter 5 (a work in +progress). + +

    +Finally, most of the functions provided by Ion's scripting interface +are listed and documented in the Function reference in chapter +6. At the end of the document is an alphabetical +listing of all these functions. + +

    + +

    + +

    + + + + diff --git a/ionconf/node3.html b/ionconf/node3.html new file mode 100644 index 0000000..f3dbd29 --- /dev/null +++ b/ionconf/node3.html @@ -0,0 +1,543 @@ + + + + + +2. Preliminaries: Key concepts and relations + + + + + + + + + + + + + + + + + + + + + + +Subsections + + + +
    + +

    + +
    +2. Preliminaries: Key concepts and relations +

    + +

    +The purpose of this chapter to explain some of key concepts and +relations you need to understand before reading the following +chapters. These include modules explained in section 2.1 +and the Ion class and object hierarchies, section 2.2. + +

    + +

    + +
    +2.1 Modules +

    + +

    +Ion has been designed so that the 'ion' executable only implements some +basic services on top of which very different kinds of window managers +could be build by loading the appropriate 'modules'. On modern system +these modules are simply dynamically loaded .so libraries. On +more primitive systems, or if you want to squeeze total size of the +executable and libraries, the modules can optionally be statically +linked to the main binary, but must nevertheless be loaded with the +dopath function. Modules may also include Lua code. + +

    +If no modules are loaded, all client windows appear in full screen mode. +To get better window management support, one or more workspace modules +should be loaded. Currently Ion provides the following modules: + +

    +

    +
    mod_tiling
    +
    Tilings for workspaces of the original tiled + Ion kind. + +
    +
    mod_query
    +
    Queries (for starting programs and so on) + and message boxes. + +
    +
    mod_menu
    +
    Support for menus, both pull-down and + keyboard-operated in-frame menus. + +
    +
    mod_statusbar
    +
    Module that implements a statusbar that + can be adaptively embedded in each workspace's layout. + +
    +
    mod_dock
    +
    Module for docking Window Maker dockapps. + The dock can both float and be embedded as the statusbar. + +
    +
    mod_sp
    +
    This module implements a scratchpad frame that can + be toggled on/off everywhere. Think of the 'console' in some + first-person shooters. + +
    +
    mod_mgmtmode
    +
    Support module for implementing ''management + modes'' with a XOR-frame similar to move/resize mode around selected + region. + +
    +
    mod_sm
    +
    Session management support module. + Loaded automatically when needed! +
    +
    + +

    +So-called drawing engines are also implemented as a modules, +but they are not discussed here; see chapter 4. + +

    +The stock configuration for the 'ion3' executable loads all of the modules +mentioned above except mod_dock and filemod_mgmtmode. +The stock configuration for the 'pwm3' executable (which differs from the +'ion3' executable in a few configuration details, such as Xinerama usage) +loads another set of modules. + +

    + +

    + +

    + +
    +2.2 Class and object hierarchies +

    + +

    +While Ion does not not have a truly object-oriented design +2.1, +things that appear on the computer screen are, however, quite +naturally expressed as such ''objects''. Therefore Ion implements +a rather primitive OO system for these screen objects and some +other things. + +

    +It is essential for the module writer to learn this object +system, but also people who write their own binding configuration files +necessarily come into contact with the class and object hierarchies +- you need to know which binding setup routines apply where, +and what functions can be used as handlers in which bindings. +It is the purpose of this section to attempt to explain these +hierarchies. If you do not wish the read the full section, at least +read the summary at the end of it, so that you understand the very +basic relations. + +

    +For simplicity we consider only the essential-for-basic-configuration +Ioncore, mod_tiling and mod_query classes. +See Appendix B for the full class hierachy visible +to Lua side. + +

    + +

    +2.2.1 Class hierarchy +

    + +

    +One of the most important principles of object-oriented design methodology +is inheritance; roughly how classes (objects are instances of classes) +extend on others' features. Inheritance gives rise to class hierarchy. +In the case of single-inheritance this hierarchy can be expressed as a +tree where the class at the root is inherited by all others below it +and so on. Figure 2.1 lists out the Ion class +hierarchy and below we explain what features of Ion the classes +implement. + +

    + +

    + + + +
    Figure 2.1: +Partial Ioncore, mod_tiling and mod_query + class hierarchy.
    +    Obj
    +     |-->WRegion
    +     |    |-->WClientWin
    +     |    |-->WWindow
    +     |    |    |-->WRootWin
    +     |    |    |-->WMPlex
    +     |    |    |    |-->WScreen
    +     |    |    |    |-->WFrame
    +     |    |    |-->WInput (mod_query)
    +     |    |         |-->WEdln (mod_query)
    +     |    |         |-->WMessage (mod_query)
    +     |    |-->WGroup
    +     |    |    |-->WGroupWS
    +     |    |    |-->WGroupCW
    +     |    |-->WTiling (mod_tiling)
    +     |-->WSplit (mod_tiling)
    +
    +
    + +

    +The core classes: + +

    +

    +
    Obj
    +
    + Is the base of Ion's object system. + +

    +

    +
    WRegion
    +
    + is the base class for everything corresponding to something on the + screen. Each object of type WRegion has a size and position + relative to the parent WRegion. While a big part of Ion + operates on these instead of more specialised classes, WRegion + is a ''virtual'' base class in that there are no objects of ''pure'' + type WRegion; all concrete regions are objects of some class + that inherits WRegion. + +

    +

    +
    WClientWin
    +
    is a class for + client window objects, the objects that window managers are + supposed to manage. + +

    +

    +
    WWindow
    +
    is the base class for all + internal objects having an X window associated to them + (WClientWins also have X windows associated to them). + +

    +

    +
    WRootWin
    +
    is the class for + root windows of X screens. + Note that an ''X screen'' or root window is not necessarily a + single physical screen as a root window + may be split over multiple screens when multi-head extensions + such as Xinerama are used. (Actually there + can be only one WRootWin when Xinerama is used.) + +

    +

    +
    WMPlex
    +
    is a base class for all regions that''multiplex'' + other regions. This means that of the regions managed by the multiplexer, + only one can be displayed at a time. Classes that inhereit WMPlex + include screens and frames. + +

    +

    +
    WScreen
    +
    is the class for objects + corresponding to physical screens. Screens may share a root + window when Xinerama multihead extensions are used as explained + above. + +

    +

    +
    WFrame
    +
    is the class for frames. + While most Ion's objects have no graphical presentation, frames basically + add to WMPlexes the decorations around client windows + (borders, tabs). + +

    +

    +
    WGroup
    +
    is the base class for groups. + Particular types of groups are workspaces + (WGroupWS) + and groups of client windows + (WGroupCW). +
    +
    + +

    +Classes implemented by the mod_tiling module: + +

    +

    +
    WTiling
    +
    is the class for tilings + of frames. + +
    +
    WSplit
    +
    (or, more specifically, classes + that inherit it) encode the WTiling tree structure. +
    +
    + +

    +Classes implemented by the mod_query module: + +

    +

    +
    WInput
    +
    is a virtual base class for the + two classes below. + +
    +
    WEdln
    +
    is the class for the ''queries'', + the text inputs that usually appear at bottoms of frames and sometimes + screens. Queries are the functional equivalent of ''mini buffers'' in + many text editors. + +
    +
    WMessage
    +
    implements the boxes for + warning and other messages that Ion may wish to display to the user. + These also usually appear at bottoms of frames. +
    +
    + +

    +There are also some other ''proxy'' classes that do not refer +to objects on the screen. The only important one of these for +basic configuration is WMoveresMode that is used for +binding callbacks in the move and resize mode. + +

    + +

    +2.2.2 Object hierarchies: WRegion parents and managers +

    + +

    + +

    +2.2.2.1 Parent-child relations +

    +Each object of type WRegion has a parent and possibly a manager +associated to it. The parent for an object is always a +WWindow and for WRegion with an X window (WClientWin, +WWindow) the parent WWindow is given by the same relation of +the X windows. For other WRegions the relation is not as clear. +There is generally very few restrictions other than the above on the +parent--child relation but the most common is as described in +Figure 2.2. + +

    + +

    + + + +
    Figure 2.2: +Most common parent-child relations
    +    WRootWins
    +     |-->WScreens
    +          |-->WGroupWSs
    +          |-->WTilings
    +          |-->WClientWins in full screen mode
    +          |-->WFrames
    +               |-->WGroupCWs
    +               |-->WClientWins
    +               |-->WFrames for transients
    +               |-->a possible WEdln or WMessage
    +
    +
    + +

    +WRegions have very little control over their children as a parent. +The manager WRegion has much more control over its +managed WRegions. Managers, for example, handle resize requests, +focusing and displaying of the managed regions. Indeed the manager--managed +relationship gives a better picture of the logical ordering of objects on +the screen. Again, there are generally few limits, but the most common +hierarchy is given in Figure 2.3. Note that sometimes +the parent and manager are the same object and not all objects may have +a manager (e.g. the dock in the dock module at the time of writing this) +but all have a parent-a screen if not anything else. + +

    + +

    +2.2.2.2 Manager-managed relations +

    + +

    + +

    + + + +
    Figure 2.3: +Most common manager-managed relations
    +    WRootWins
    +     |-->WScreens
    +          |-->WGroupCWs for full screen WClientWins
    +          |    |-->WClientWins
    +          |    |-->WFrames for transients (dialogs)
    +          |         |--> WClientWin
    +          |-->WGroupWSs for workspaces
    +          |    |-->WTiling
    +          |    |    |-->possibly a WEdln, WMessage or WMenu
    +          |    |    |-->WFrames
    +          |    |         |-->WGroupCWs (with contents as above)
    +          |    |-->WFrames for floating content
    +          |-->WFrames for sticky stuff, such as the scratchpad
    +
    +
    + +

    +Note that a workspace can manage another workspace. This can be +achieved with the attach_new function, and allows you to nest +workspaces as deep as you want. + +

    + +

    +2.2.3 Summary +

    + +

    +In the standard setup, keeping queries, messages and menus out of +consideration: + +

    + +

      +
    • The top-level objects that matter are screens and they correspond + to physical screens. The class for screens is WScreen. +
    • +
    • Screens contain (multiplex) groups (WGroup) and other + objects, such as WFrames. Some of these are mutually exclusive + to be viewed at a time. +
    • +
    • Groups of the specific kind WGroupWS often contain a + WTiling tiling for tiling frames (WFrame), but + groups may also directly contain floating frames. +
    • +
    • Frames are the objects with decorations such as tabs and borders. + Frames contain (multiplex) among others (groups of) client windows, + to each of which corresponds a tab in the frame's decoration. Only + one client window (or other object) can be shown at a time in each + frame. The class for client windows is WClientWin. +
    • +
    + +

    +


    Footnotes

    +
    +
    ... design2.1
    +
    the author doesn't like such artificial designs + +
    +
    + + + + + diff --git a/ionconf/node4.html b/ionconf/node4.html new file mode 100644 index 0000000..60acef3 --- /dev/null +++ b/ionconf/node4.html @@ -0,0 +1,1369 @@ + + + + + +3. Basic configuration + + + + + + + + + + + + + + + + + + + + + + +Subsections + + + +
    + +

    + +
    +3. Basic configuration +

    + +

    +This chapter should help your configure Ion to your liking. As the your +probably already know, Ion uses Lua as a configuration and extension +language. If you're new to it, you might first want to read some Lua +documentation as already suggested and pointed to in the Introduction +before continuing with this chapter. + +

    +Section 3.1 is an overview of the multiple configuration +files Ion uses and as a perhaps more understandable introduction to the +general layout of the configuration files, a walk-through of the main +configuration file ion.lua is provided in section +3.2. +How keys and mouse action are bound to functions is described in detail +in 3.3 and in section 3.5 winprops are +explained. For a reference on exported functions, see section +6. + +

    + +

    + +
    +3.1 The configuration files +

    + +

    +Ion3, to which document applies, stores its stock configuration files in +/usr/local/etc/ion3/ unless you, the OS package maintainer or +whoever installed the package on the system has modified the variables +PREFIX or +ETCDIR in +system.mk before compiling Ion. +In the first case you probably know where to find the files and in +the other case the system administrator or the OS package maintainer +should have provided documentation to point to the correct location. +If these instructions are no help in locating the correct directory, +the command locate cfg_ion.lua might help provided updatedb +has been run recently. + +

    +User configuration files go in ~/.ion3/. +Ion always searches the user configuration file directory before the stock +configuration file directory for files. Therefore, if you want to change +some setting, it is advised against that you modify the stock configuration +files in-place as subsequent installs of Ion will restore the stock +configuration files. Instead you should always make a copy of the stock +file in ~/.ion3/ and modify this file. When searching +for a file, if no extension or path component is given, compiled .lc +files are attempted before .lua files. + +

    +All the configuration files are named cfg_*.lua with the ''*'' +part varying. The configuration file for each module mod_modname is +cfg_modname.lua, with modname varying by the module in +question. The following table summarises these and other configuration +files: + +

    + + + + + + + + + + + + + + + + +
    FileDescription
    cfg_ion.luaThe main configuration file
    cfg_ioncore.luaConfiguration file for Ion's core library. + Most of the bindings and menus are configured here. Bindings that are + specific to some module are configured in the module's configuration + file. For details, see section 3.3.
    cfg_kludges.luaSettings to get some applications behave more nicely have been + collected here. See section 3.5.
    cfg_tiling.lua + cfg_query.lua + cfg_menu.lua + cfg_dock.lua + cfg_statusbar.lua + ...Configuration files for different modules.
    + +

    +Additionally, there's the file look.lua that configures the +drawing engine, but it is covered in chapter 4. + +

    + +

    + +
    +3.2 A walk through cfg_ion.lua +

    + +

    +As already mentioned cfg_ion.lua is Ion's main configuration +file. Some basic 'feel' settings are usually configured there and +the necessary modules and other configuration files configuring some +more specific aspects of Ion are loaded there. In this section we +take a walk through the stock cfg_ion.lua. +Notice that most of the settings are commented-out (- is a +line comment in Lua) in the actual file, as they're the defaults +nevertheless. + +

    +The first thing one in the file is to set +

    +META="Mod1+"
    +ALTMETA=""
    +
    +These settings cause most of Ion's key bindings to use Mod1 as the +modifier key. If ALTMETA is set, it is used as modifier for the keys +that don't normally use a modifier. for details on modifiers and key +binding setup in general see section 3.3. + +

    +Next we do some basic feel configuration: + +

    +

    +ioncore.set{
    +    dblclick_delay=250,
    +    kbresize_delay=1500,
    +}
    +
    + +

    +These two will set the delay between button presses in a double click, and +the timeout to quit resize mode in milliseconds. + +

    +

    +ioncore.set{
    +    opaque_resize=true,
    +    warp=true
    +}
    +
    + +

    +The first of these two settings enables opaque resize mode: in move/resize +move frames and other objects mirror you actions immediately. If opaque +resize is disabled, a XOR rubber band is shown during the mode instead. +This will, unfortunately, cause Ion to also grab the X server and has some +side effects. + +

    +Next we load the configuration for Ion's core, and some kludges: + +

    +

    +dopath("cfg_ioncore")
    +dopath("cfg_kludges")
    +
    + +

    +Most bindings and menus are defined in cfg_ioncore.lua. +Details on making such definitions follow in sections 3.3 +and 3.4, respectively. +some kludges or ''winprops'' to make some applications behave better +under Ion are colledted in cfg_kludges.lua; see section +3.5 for details. In addition to these, this file +lists quite a few statements of the form +

    +ioncore.defshortening("[^:]+: (.*)(<[0-9]+>)", "$1$2$|$1$<...$2")
    +
    +These are used to configure how Ion attempts to shorten window titles +when they do not fit in a Tab. The first argument is a POSIX regular +expression that is used to match against the title and the next is +a rule to construct a new title of a match occurs. This particular +rule is used to shorten e.g. 'Foo: barbaz<3>' to 'barba...<3>'; for +details see the function reference entry for ioncore.defshortening. + +

    +To actually be able to do something besides display windows in full screen +mode, we must next load some modules: + +

    +

    +dopath("cfg_modules")
    +--dopath("mod_query")
    +--dopath("mod_menu")
    +--dopath("mod_tiling")
    +--dopath("mod_statusbar")
    +--dopath("mod_dock")
    +--dopath("mod_sp")
    +
    + +

    +We actually load there another file listing the default selection of +modules. If you only want to load additional modules, just uncomment +the corresponding line. If you want to disable loading some modules, +comment out the the line loading cfg_modules, and uncomment +the lines for the modules you want, or add more. + +

    + +

    + +
    +3.3 Keys and rodents +

    + +

    +In the stock configuration file setup, most key and mouse bindings are set +from the file cfg_ioncore.lua while module-specific bindings +are set from the modules' main configuration files (cfg_modname.lua). +This, however, does not have to be so as long as the module has been +loaded prior to defining any module-specific bindings. + +

    +Bindings are defined by calling the function +defbindings with the ''context'' of the +bindings and the a table of new bindings to make. The context is simply +string indicating one of the classes of regions (or modes such as +WMoveresMode) introduced in section 2.2, and fully +listed in appendix B, although not all define +a binding map. For example, the following skeleton would be used to +define new bindings for all frames: + +

    +

    +defbindings("WFrame", {
    +    -- List of bindings to make goes here.
    +})
    +
    + +

    +There has been some confusion among users about the need to define the +''context'' for each binding, so let me try to explain this design +decision here. The thing is that if there was a just a simple 'bind this +key to this action' method without knowledge of the context, some +limitations would have to be made on the available actions and writing +custom handlers would be more complicated. In addition one may want to +bind the same function to different key for different types of objects. +Indeed, the workspace and frame tab switching functions are the same both +classes being based on WMPlex, and in the stock configuration the +switch to :th workspaces is bound to Mod1+n while the switch to +:th tab is bound to the sequence Mod1+k n. + +

    +Currently known ''contexts'' include: +WScreen, +WMPlex, +WMPlex.toplevel, +WFrame, +WFrame.toplevel, +WFrame.floating, +WFrame.tiled, +WFrame.transient, +WMoveresMode, +WGroup, +WGroupCW, +WGroupWS, +WClientWin, +WTiling, and +WStatusBar. +Most of these should be self-explanatory, corresponding to objects +of class with the same name. The ones with .toplevel suffix +refer to screens and ''toplevel'' frames, i.e. frames that are +not used for transient windows. Likewise .transient refers +to frames in transient mode, and .tiled and .floating +to frames in, respectively, tiled and floating modes. + +

    +The following subsections describe how to construct elements of the +binding table. Note that defbindings adds +the the newly defined bindings to the previous bindings of the context, +overriding duplicates. To unbind an event, set the handler parameter +to nil for each of the functions to be described in the following +subsections. + +

    +Also note that when multiple objects want to handle a binding, the +innermost (when the root window is considered the outermost) active object +in the parent-child hierarchy (see Figure 2.2) of objects +gets to handle the action. + +

    + +

    +3.3.1 Binding handlers and special variables +

    + +

    +Unlike in Ion2, in Ion3 binding handlers are not normally passed as +''anonymous functions'', although this is still possible. The preferred +method now is to pass the code of the handler as a string. Two special +variables are available in this code. These are + +

    + + + + + + + + + + + + + +
    VariableDescription
    _ (underscore)Reference to the object on which the + binding was triggered. The object is of the same class as the the + context of the defbindings call + defining the binding.
    _subUsually, the currently active managed object of the + object referred to by _, but sometimes (e.g. mouse actions + on tabs of frames) something else relevant to the action triggering + the binding.
    _chldObject corresponding to the currently active child window of the + object referred to by _.
    + +

    +For example, supposing '_' is a WFrame, the following +handler should move the active window to the right, if possible: + +

    +

    +"_:inc_index(_sub)"
    +
    + +

    + +

    +3.3.2 Guards +

    + +

    +To suppress error messages, each binding handler may also be accompanied +by a ''guard'' expression that blocks the handler from being called when +the guard condition is not met. Currently the following guard expressions +are supported (for both _sub and _chld): + +

    + + + + + + + + + + +
    GuardDescription
    "_sub:non-nil"The _sub parameter must be set.
    "_sub:SomeClass"The _sub parameter must be member + of class SomeClass.
    + +

    + +

    + +
    +3.3.3 Defining the bindings +

    + +

    +The descriptions of the individual bindings in the binding table argument +to defbindings should be constructed with the following +functions. + +

    +Key presses: + +

      +
    • kpress(keyspec, handler [, guard]), +
    • +
    • kpress_wait(keyspec, handler [, guard]) and +
    • +
    • submap(keyspec, { ... more key bindings ... }). +
    • +
    +Mouse actions: + +
      +
    • mclick(buttonspec, handler [, guard]), +
    • +
    • mdblclick(buttonspec, handler [, guard]), +
    • +
    • mpress(buttonspec, handler [, guard]) and +
    • +
    • mdrag(buttonspec, handler [, guard]). +
    • +
    + +

    +The actions that most of these functions correspond to should be clear +and as explained in the reference, kpress_wait is simply +kpress with a flag set instructing Ioncore wait for all +modifiers to be released before processing any further actions. +This is to stop one from accidentally calling e.g. +WRegion.rqclose multiple times in a row. The submap +function is used to define submaps or ''prefix maps''. The second +argument to this function is table listing the key press actions +(kpress) in the submap + +

    +The parameters keyspec and buttonspec are explained below +in detail. The parameter handler is the handler for the binding, +and the optional parameter guard its guard. These should normally +be strings as explained above. + +

    + +

    +3.3.4 Examples +

    + +

    +For example, to just bind the key Mod1+1 to switch to the first +workspace and Mod1+Right to the next workspace, you would make the +following call +

    +defbindings("WScreen", {
    +    kpress("Mod1+Right", "_:switch_next()"),
    +    kpress("Mod1+1", "_:switch_nth(1)"),
    +})
    +
    + +

    +Note that _:switch_nth(1) is the same as calling +WMPlex.switch_next(_, 1) as WScreen inherits +WMPlex and this is where the function is actually defined. + +

    +Similarly to the above example, to bind the key sequence Mod1+k n +switch to the next managed object within a frame, and Mod1+k 1 to the +first, you would issue the following call: +

    +defbindings("WFrame", {
    +    submap("Mod1+K", {
    +        kpress("Right", "_:switch_next()"),
    +        kpress("1", "_:switch_nth(1)"),
    +   }),
    +})
    +
    + +

    + +

    +3.3.5 Key specifications +

    + +

    +As seen above, the functions that create key binding specifications require +a keyspec argument. This argument should be a string containing the +name of a key as listed in the X header file keysymdef.h3.1 without the XK_ prefix. + +Most of the key names are quite intuitive while some are not. For example, +the Enter key on the main part of the keyboard has the less common +name Return while the one the numpad is called KP_Enter. + +

    +The keyspec string may optionally have multiple ''modifier'' names +followed by a plus sign (+) as a prefix. X defines the following +modifiers: +

    +Shift, Control, Mod1 to Mod5, +AnyModifier and Lock. + + + + + + +
    + +

    +X allows binding all of these modifiers to almost any key and while this +list of modifiers does not explicitly list keys such as +Alt that are common on modern keyboards, such +keys are bound to one of the ModN. On systems running XFree86 +Alt is usually Mod1. On Suns Mod1 is the diamond key +and Alt something else. One of the ''flying window'' keys on so +called Windows-keyboards is probably mapped to Mod3 if you have +such a key. Use the program xmodmap +to find out what exactly is bound where. + +

    +Ion defaults to AnyModifier in submaps. This can sometimes lead to +unwanted effects when the same key is used with and without explicitly +specified modifiers in nested regions. For this reason, Ion recognises +NoModifier as a special modifier that can be used to reset this +default. + +

    +Ion ignores the Lock modifier and any ModN () +bound to NumLock or +ScrollLock +by default because such3.2 locking keys may otherwise +cause confusion. + +

    + +

    +3.3.6 Button specifications +

    + +

    +Button specifications are similar to key definitions but now +instead of specifying modifiers and a key, you specify modifiers +and one of the button names Button1 to +Button5. Additionally the +specification may end with an optional area name following an @-sign. +Only frames currently support areas, and the supported values in this +case are +"border", "tab", "empty_tab", "client" and +nil (for the whole frame). + +

    +For example, the following code binds dragging a tab with the first +button pressed to initiate tab drag&drop handling: + +

    +

    +defbindings("WFrame", {
    +    mdrag("Button1@tab", "_:p_tabdrag()"),
    +})
    +
    + +

    + +

    +3.3.7 A further note on the default binding configuration +

    + +

    +The default binding configuration contains references to the variables +META and ALTMETA instead of directly using the default +values of "Mod1+" and "" (nothing). As explained in +section 3.2, the definitions of these variables +appear in cfg_ion.lua. This way you can easily change the the +modifiers used by all bindings in the default configuration without +changing the whole binding configuration. Quite a few people prefer +to use the Windows keys as modifiers because many applications already +use Alt. Nevertheless, Mod1 is the default as a key bound +to it is available virtually everywhere. + +

    + +

    + +
    +3.4 Menus +

    + +

    + +

    +3.4.1 Defining menus +

    + +

    + + + + +In the stock configuration file setup, menus are defined in the file +cfg_menus.lua as previously mentioned. The mod_menu module +must be loaded for one to be able to define menus, and this is done with +the function defmenu provided by it. + +

    +Here's an example of the definition of a rather simple menu with a submenu: + +

    +

    +defmenu("exitmenu", {
    +    menuentry("Restart", "ioncore.restart()"),
    +    menuentry("Exit", "ioncore.shutdown()"),
    +})
    +
    +defmenu("mainmenu", {
    +    menuentry("Lock screen", "ioncore.exec('xlock')"),
    +    menuentry("Help", "mod_query.query_man(_)"),
    +    submenu("Exit", "exitmenu"),
    +})
    +
    + +

    +The menuentry function is used to create an entry in the +menu with a title and an entry handler to be called when the menu entry +is activated. The parameters to the handler are similar to those of binding +handlers, and usually the same as those of the binding that opened the menu. + +

    +The submenu function is used to insert a submenu at that +point in the menu. (One could as well just pass a table with the menu +entries, but it is not encouraged.) + +

    + +

    +3.4.2 Special menus +

    + +

    +The menu module predefines the following special menus. These can be used +just like the menus defined as above. + +

    + + + + + + + + + + + + + + + + +
    Menu nameDescription
    windowlistList of all client windows. Activating an entry jumps to that window.
    workspacelistList of all workspaces. Activating an entry jumps to that workspaces.
    stylemenuList of available look_*.lua style files. Activating an entry + loads that style and ask to save the selection.
    ctxmenuContext menu for given object.
    + +

    + +

    +3.4.3 Defining context menus +

    + +

    +The ''ctxmenu'' is a special menu that is assembled from a defined context +menu for the object for which the menu was opened for, but also includes +the context menus for the manager objects as submenus. + +

    +Context menus for a given region class are defined with the +defctxmenu function. This is other ways similar to +defmenu, but the first argument instead being the name +of the menu, the name of the region class to define context menu for. +For example, here's part of the stock WFrame context menu +definition: + +

    +

    +defctxmenu("WFrame", {
    +    menuentry("Close", "WRegion.rqclose_propagate(_, _sub)"),
    +    menuentry("Kill",  "WClientWin.kill(_sub)", "_sub:WClientWin"),
    +})
    +
    + +

    +Some of the same ''modes'' as were available for some bindings +may also be used: WFrame.tiled, WFrame.floating, +and WFrame.transient. + +

    + +

    + +
    +3.4.4 Displaying menus +

    + +

    +The following functions may be used to display menus from binding +handlers (and elsewhere): + +

    + + + + + + + + + + + + + + + + +
    FunctionDescription
    mod_menu.menuKeyboard (or mouse) operated menus that open in the bottom-left corner + of a screen or frame.
    mod_menu.bigmenuSame as previous, but uses another graphical style.
    mod_menu.pmenuMouse-operated drop-down menus. This function can only be called from a + mouse press or drag handler.
    mod_menu.grabmenuA special version of mod_menu.menu that grabs the keyboard + and is scrolled with a given key until all modifiers have been released, + after which the selected entry is activated. This function is meant to + be used for implementing, for example, Win***s-style Alt-Tab + handling.3.3
    + +

    +The grabmenu function takes the extra key parameter, but +aside from that each of these functions takes three arguments, which when +called from a binding handler, should be the parameters to the handler, and +the name of the menu. For example, the following snippet of of code binds +the both ways to open a context menu for a frame: + +

    +

    +defbindings("WFrame", {
    +    kpress(MOD1.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"),
    +    mpress("Button3", "mod_menu.pmenu(_, _sub, 'ctxmenu')"),
    +})
    +
    + +

    + +

    + +
    +3.5 Winprops +

    + +

    +The so-called ''winprops'' can be used to change how +specific windows are handled and to set up some kludges to deal with +badly behaving applications. They are defined by calling the function +defwinprop with a table containing the properties to set and the +necessary information to identify a window. The currently supported +winprops are listed below, and the subsequent subsections explain the +usual method of identifying windows, and how to obtain this information. + +

    + +

    + +

    +
    Winprop:
    +
    acrobatic (boolean) + +
    +
    Description:
    +
    + Set this to true for Acrobat Reader. It has an annoying + habit of trying to manage its dialogs instead of setting them as + transients and letting the window manager do its job, causing + Ion and acrobat go a window-switching loop when a dialog is + opened. + +
    +
    + +

    + +

    +
    Winprop:
    +
    aspect (table) + +
    +
    Description:
    +
    + The table should contain the entries w and h that + override application-supplied aspect ratio hint. + +
    +
    + +

    + +

    +
    Winprop:
    +
    float (boolean) + +
    +
    Description:
    +
    + Set this to open the window in a floating frame, when + in a group. + +
    +
    + +

    + +

    +
    Winprop:
    +
    fullscreen (boolean) + +
    +
    Description:
    +
    + Should the window be initially in full screen mode? + +
    +
    + +

    + +

    +
    Winprop:
    +
    ignore_cfgrq (boolean) + +
    +
    Description:
    +
    + Should configure requests on the window be ignored? + Only has effect on floating windows. + +
    +
    + +

    + +

    +
    Winprop:
    +
    ignore_net_active_window (boolean) + +
    +
    Description:
    +
    + Ignore extended WM hints _NET_ACTIVE_WINDOW request. + +
    +
    + +

    + +

    +
    Winprop:
    +
    ignore_resizeinc (boolean) + +
    +
    Description:
    +
    + Should application supplied size increments be ignored? + +
    +
    + +

    + +

    +
    Winprop:
    +
    jumpto (boolean) + +
    +
    Description:
    +
    + Should a newly created client window always be made + active, even if the allocated frame isn't. + +
    +
    + +

    + +

    +
    Winprop:
    +
    max_size (table) + +
    +
    Description:
    +
    + The table should contain the entries w and h that + override application-supplied maximum size hint. + +
    +
    + +

    + +

    +
    Winprop:
    +
    min_size (table) + +
    +
    Description:
    +
    + Similar to max_size but for the minimum size hint. + +
    +
    + +

    + +

    +
    Winprop:
    +
    oneshot (boolean) + +
    +
    Description:
    +
    + Discard this winprop after first use. + +
    +
    + +

    + +

    +
    Winprop:
    +
    switchto (boolean) + +
    +
    Description:
    +
    + Should a newly mapped client window be switched to within + its frame. + +
    +
    + +

    + +

    +
    Winprop:
    +
    target (string) + +
    +
    Description:
    +
    + The name of an object (workspace, frame) that should manage + windows of this type. + +
    +
    + +

    + +

    +
    Winprop:
    +
    transient_mode (string) + +
    +
    Description:
    +
    + "normal": No change in behaviour. "current": The window + should be thought of as a transient for the current active + client window (if any) even if it is not marked as a + transient by the application. "off": The window should be + handled as a normal window even if it is marked as a + transient by the application. + +
    +
    + +

    + +

    +
    Winprop:
    +
    transients_at_top (boolean) + +
    +
    Description:
    +
    + When transients are managed by the client window itself (as it + is the case on tiled workspaces), should the transients be + placed at the top of the window instead of bottom? + +
    +
    + +

    + +

    +
    Winprop:
    +
    transparent (boolean) + +
    +
    Description:
    +
    + Should frames be made transparent when this window is selected? +
    + +
    +
    + +

    + +

    + +
    +3.5.1 Classes, roles and instances +

    + +

    +The identification information in the winprop specification is usually the +class, +role, +instance and +name +of the window. The name field is a Lua-style regular expression +matched against the window's title and the rest are strings that must +exactly match the corresponding window information. It is not necessary +to specify all of these fields. + +

    +Ion looks for a matching winprop in the order listed by the following +table. An 'E' indicates that the field must be set in the winprop +and it must match the window's corresponding property exactly or, in +case of name, the regular expression must match the window +title. An asterisk '*' indicates that a winprop where the field is +not specified (or is itself an asterisk in case of the first three +fields) is tried. + +

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    classroleinstancename
    EEEE
    EEE*
    EE*E
    EE**
    E*EE
    E*E*
    E**E
       etc.
    +
    + +

    +If there are multiple winprops with other identification information +the same but different name, the longest match is chosen. + +

    + +

    +3.5.2 Finding window identification +

    + +

    +The 'Window info' context menu entry (Mod1+M or Button3 on a tab) +can be used to list the identification information required to set winprops +for a window and all the transient windows managed within it. + +

    + +Another way to get the identification information is to use xprop. +Simply run To get class and instance, simply run xprop WM_CLASS +and click on the particular window of interest. The class is the latter of +the strings while the instance is the former. To get the role - few +windows have this property - use the command xprop WM_ROLE. +This method, however, will not work on transients. + +

    + +So-called ''transient windows'' are usually short-lived dialogs (although +some programs abuse this property) that have a parent window that they are +''transient for''. On tiled workspaces Ion displays these windows +simulatenously with the parent window at the bottom of the same frame. +Unfortunately xprop is stupid and can't cope with this situation, +returning the parent window's properties when the transient is clicked on. +For this reason you'll have to do a little extra work to get the properties +for that window.3.4 +

    +Finally, it should be mentioned that too many authors these days +''forget'' to set this vital identification to anything meaningful: +everything except name is the same for all of the programs's +windows, for example. + +

    + +

    +3.5.3 Some common examples +

    + +

    + +

    +3.5.3.1 Acrobat Reader +

    + +

    +The following is absolutely necessary for Acrobat reader: + +

    +

    +defwinprop{
    +    class = "AcroRead",
    +    instance = "documentShell",
    +    acrobatic = true,
    +}
    +
    + +

    + +

    +3.5.3.2 Fixing a Mozilla Firebird transient +

    + +

    +Mozilla Firebird (0.7) incorrectly does not set the WM_TRANSIENT_FOR +property for the dialog that is used to ask the action to take for a file. +It, however, sets the the property point to the main window for the save +dialog. This can be annoying and confusing, as the first dialog is not +closed before the second is displayed. + +

    +We'd like the first dialog to be transient to the main window. The closest +we can get to that is to consider it transient to the current window (if +there's one). Unfortunately Firebird does not set any meaningful classes, +instances or roles for the windows, so we'll have to rely on an ugly title +match. + +

    +

    +defwinprop{
    +    class = "MozillaFirebird-bin",
    +    name = "Opening .*",
    +    transient_mode = "current",
    +}
    +
    + +

    + +

    +3.5.3.3 Forcing newly created windows in named frames +

    + +

    +The following winprop should place xterm started with command-line parameter +-name sysmon and running a system monitoring program in a +particular frame: +

    +defwinprop{
    +    class = "XTerm",
    +    instance = "sysmon",
    +    target = "sysmonframe",
    +}
    +
    + +

    +For this example to work, we have to somehow create a frame named +sysmonframe. One way to do this is to make the following +call in the Mod1+F3 Lua code query: + +

    +

    +mod_query.query_renameframe(_)
    +
    + +

    +Recall that _ points to the multiplexer (frame or screen) in which +the query was opened. Running this code should open a new query prefilled +with the current name of the frame. In our example we would change the +name to sysmonframe, but we could just as well have used the +default name formed from the frame's class name and an instance number. + +

    + +

    +


    Footnotes

    +
    +
    ...keysymdef.h3.1
    +
    This file can usually be found in the directory +/usr/X11R6/include/X11/. + +
    +
    ... such3.2
    +
    Completely useless keys that should be +gotten rid of in the author's opinion. + +
    +
    ... handling.3.3
    +
    See the wcirculate.lua script in the Ion + scripts repository http://iki.fi/tuomov/repos/ion-scripts-3/. + +
    +
    ... window.3.4
    +
    There's a patch to xprop to +fix this, but nothing seems to be happening with respect to including it in +XFree86. + +
    +
    + + + + + diff --git a/ionconf/node5.html b/ionconf/node5.html new file mode 100644 index 0000000..b6951d4 --- /dev/null +++ b/ionconf/node5.html @@ -0,0 +1,720 @@ + + + + + +4. Graphical styles + + + + + + + + + + + + + + + + + + + + + + +Subsections + + + +
    + +

    + +
    +4. Graphical styles +

    + +

    +This chapter first gives in section 4.1 a general outline +of how drawing engines are used, of style specifications and then +in section 4.2 describes how to specify styles +for the default drawing engine. + +

    + +

    + +
    +4.1 Drawing engines, style specifications and sub-styles +

    + +

    +Ion's drawing routines are abstracted into so-called drawing engine +modules that can, again depending on the system, be dynamically +loaded as needed. The drawing engine modules provide ''brushes'' +that objects can use to draw some high-level primitives such +as borders and text boxes (in addition to simple text and rectangle +drawing) on their windows and configure e.g. the shape and +background of the window. While the drawing engines therefore +do not directly implement looks for each possible object (that +would hardly be maintainable), different brush styles can be +used to give a distinctive look to different objects and engines +could interpret some styles as special cases. Style specifications +are strings of the form + +

    +

    +element1-element2-...-elementn
    +
    + +

    +An example of such a style specification is tab-frame; +see the table in subsection 4.1.1 for more styles. + +

    +When an object asks for a brush of certain style, the selected +drawing engine will attempt to find the closest match to this +specification. The styles/brushes defined by the drawing engines +may have asterisks (*) as some of the elements indicating +a match to anything. Exact matches are preferred to asterisk +matches and longer matches to shorter. For example, let a brush +for style foo-bar-baz be queried, then the following +brushes are in order of preference: + +

    +

    +foo-bar-baz
    +foo-*-baz
    +foo-bar
    +*
    +foo-baz   -- Doesn't match, not selected!
    +
    + +

    +Some of the drawing primitives allow extra attributes to be +specified, also in the form +

    +attr1-attr2-...-attrn
    +
    +These extra attributes are called substyles +and allow, for example, the state of the object to be indicated +by different colour sets while keeping the interface at an +abstract level and the drawing engine completely ignorant +of the semantics - only the writer of the drawing engine +configuration file has to know them. However the drawing +engine can again interpret known substyles as special cases +and the default engine indeed does so with frame tab +tag and drag states.) + +

    + +

    + +
    +4.1.1 Known styles and substyles +

    + +

    + +

    +4.1.1.1 Frames +

    + +

    + + + + + + + + + + + + + + + + + + + +
    Style nameDescription
    frameStyle for frames. + Substyles: active, inactive.
    frame-tiledA more specific style for tiled frames. + Substyles as for frame.
    frame-tiled-altAn alternative style for tiled frames. + Often used to disable the tab-bar.
    frame-floatingA more specific style for floating + frames.
    frame-transientA more specific style for frames + containing transient windows.
    + +

    + +

    +4.1.1.2 Tabs and menu entries +

    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Style nameDescription
    tabStyle for frames' tabs and menu entries. + Substyles: combinations of the form a-s where + a is one of active/inactive and + s is one of selected/unselected
    tab-frameA more specific style for frames' tabs. + Substyles: combinations of the form a-s-t-d-u where + a and s are as above and + t is one of tagged/not_tagged, + d is one of dragged/not_dragged and + u is one of activity/no_activity.
    tab-frame-tiled, 
    tab-frame-tiled-alt, 
    tab-frame-floating, 
    tab-frame-transientMore specific styles for frames in the + different modes.
    tab-menuentryA more specific style for entries in WMenus.
    tab-menuentry-bigmenuAn alternate style for entries in WMenus.
    + +

    + +

    +4.1.1.3 The rest +

    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Style nameDescription
    inputA style for WInputs.
    input-edlnA more specific style for WEdlns. + Substyles: selection for selected text and + cursor for the cursor indicating current editing point.
    input-messageA more specific style for WMessages.
    input-menuA more specific style for WMenus.
    input-menu-bigmenuAn alternate style for WMenus.
    moveres_displayThe box displaying position/size when + moving or resizing frames.
    dockThe dock.
    + +

    + +

    + +
    +4.2 Defining styles for the default drawing engine +

    + +

    +Drawing engine style files are usually named +look_foo.lua where foo is the name of the +style. The file that Ion loads on startup or when +gr.read_config is called, however, is look.lua +and should usually be symlinked to or a copy of of some +look_foo.lua. + +

    + +

    +4.2.1 The structure of the configuration files +

    + +

    +The first thing to do in a stylefile is to choose the drawing +engine, possibly loading the module as well. This is done +with the following chunk of code. + +

    +

    +if not gr.select_engine("de") then 
    +    return 
    +end
    +
    + +

    +The gr.select_engine function sees if the engine +given as argument is registered (the default drawing engine is +simply called ''de''). If the engine could not be found, it +tries to load a module of the same name. If the engine still +is not registered, gr.select_engine returns false +and in this case we also exit the style setup script. +If the engine was found, gr.select_engine sees that +further requests for brushes are forwarded to that engine +and returns true. + +

    +Before defining new styles it may be a good idea to clear old +styles from memory so if the old configuration defines more +specific styles than the new, the old styles don't override +those specified by the new configuration. That can be done by +calling + +

    +

    +de.reset()
    +
    + +

    +After this the new styles can be defined with de.defstyle +as explained in the next subsection. Finally, after the styles have +been defined we must ask objects on the screen to look up new brushes +to reflect the changes in configuration. This is done with + +

    +

    +gr.refresh()
    +
    + +

    + +

    +4.2.2 Defining the styles +

    + +

    +Styles for the default drawing engine are defined with the +function de.defstyle. It has two arguments the first being +a style specification as explained in previous sections and the second +a table whose fields describe the style: + +

    +

    +de.defstyle("some-style", {
    +    attribute = value,
    +    ...
    +})
    +
    + +

    +The supported attributes are described in tables below. The different +border elements and styles referred to there are explained in Figure +4.1. + +

    + +

    + + + +
    Figure 4.1: +Sketch of different border styles and elements
    +Elevated:        Inlaid:         Ridge:            Groove:        
    +  hhhhhhhhhhhs     ............	   hhhhhhhhhhhs      sssssssssssh
    +  h..........s     .sssssssssh.	   h..........s      s..........h
    +  h.        .s     .s        h.	   h.sssssssh.s      s.hhhhhhhs.h
    +  h.        .s     .s        h.	   h.s      h.s      s.h      s.h
    +  h.        .s     .s        h.	   h.shhhhhhh.s      s.hsssssss.h
    +  h..........s     .shhhhhhhhh.	   h..........s      s..........h
    +  hsssssssssss     ............	   hsssssssssss      shhhhhhhhhhh
    +
    +h = highlight, s = shadow, . = padding
    +
    +
    + +

    + +

    +4.2.2.1 Colours +

    + +

    +Each of these fields a string of the form that can be +passed to XAllocNamedColor. Valid strings are e.g. +hexadecimal RGB specifications of the form +#RRGGBB and colour names as specified +in /usr/X11R6/lib/X11/rgb.txt (exact path varying). + +

    + + + + + + + + + + + + + + + + + + + +
    FieldDescription
    highlight_colourColour for the ''highlight'' part of a border.
    shadow_colourColour for the ''highlight'' part of a border.
    foreground_colourColour for the normal drawing operations, e.g. text.
    background_colourWindow background colour (unless transparency is enabled) and + background colour boxes.
    padding_colourColour for the ''padding'' part of a border border. Set to + background_colour if unset.
    + +

    + +

    +4.2.2.2 Borders and widths +

    + +

    +All other fields below except border_style are non-negative integers +indicating a number of pixels. + +

    + + + + + + + + + + + + + + + + + + + +
    FieldDescription
    border_styleA string indicating the style of border; one of + elevated/inlaid/ridge/groove as seen in the + above sketch.
    highlight_pixelsWidth of the highlight part of the border in pixels.
    shadow_pixelsWidth of the shadow part of the border in pixels.
    padding_pixelsWidth of the padding part of the border in pixels.
    spacingSpace to be left between all kinds of boxes.
    + +

    + +

    +4.2.2.3 Text +

    + +

    + + + + + + + + + + +
    FieldDescription
    fontFont to be used in text-drawing operations; standard X font + name.
    text_alignHow text is to be aligned in text boxes/tabs; one of + the strings left/right/center.
    + +

    + +

    +4.2.2.4 Miscellaneous +

    + +

    + + + + + + + + + + +
    FieldDescription
    transparent_backgroundShould windows' that use this style + background be transparent? true/false.
    based_onThe name of a previously defined style that this + style should be based on.
    + +

    + +

    +4.2.2.5 Substyles +

    + +

    +As discussed in previous sections, styles may have substyles to e.g. +indicate different states of the object being drawn. The ''de'' engine +limits what can be configured in substyles to the set of colours in the +first table above, but also specifically interprets for the main style +tab-frame the substyles *-*-tagged and *-*-*-dragged +by, respectively, drawing a right angle shape at the top right corner +of a tab and by shading the tab with a stipple pattern. Also for +menus the substyles *-*-submenu are handled as a special case. + +

    +Substyles are defined with the function de.substyle within the +table defining the main style. The parameters to this function are +similar to those of de.defstyle. + +

    +

    +de.defstyle("some-style", {
    +   ...
    +   de.substyle("some-substyle", {
    +      ...
    +   }),
    +   ...
    +})
    +
    + +

    + +

    +4.2.3 An example +

    + +

    +The following shortened segment from look_cleanviolet.lua +should help to clarify the matters discussed in the previous +subsection. + +

    +

    +de.defstyle("*", {
    +    -- Gray background
    +    highlight_colour = "#eeeeee",
    +    shadow_colour = "#eeeeee",
    +    background_colour = "#aaaaaa",
    +    foreground_colour = "#000000",
    +    
    +    shadow_pixels = 1,
    +    highlight_pixels = 1,
    +    padding_pixels = 1,
    +    spacing = 0,
    +    border_style = "elevated",
    +    
    +    font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*",
    +    text_align = "center",
    +})
    +
    +de.defstyle("tab-frame", {
    +    based_on = "*",
    +    
    +    de.substyle("active-selected", {
    +        -- Violet tab
    +        highlight_colour = "#aaaacc",
    +        shadow_colour = "#aaaacc",
    +        background_colour = "#666699",
    +        foreground_colour = "#eeeeee",
    +    }),
    +
    +    --  More substyles would follow ...
    +})
    +
    + +

    + +

    +4.3 Miscellaneous settings +

    + +

    +The following style fields are independent of the drawing engine used, +but are related to objects' styles and therefore configured in the drawing +engine configuration file. + +

    + +

    +4.3.1 Extra fields for style frame +

    + +

    + + + + + + + + + + + + + +
    FieldDescription
    barControls the style of the tab-bar. Possible values + are the strings "none", "inside", "outside" + and "shaped", with the last providing the PWM-style + tab-bars for floating frames.
    floatframe_tab_min_wMinimum tab width in pixels for + the shaped style, given that this number times number of tabs + doesn't exceed frame width.
    floatframe_bar_max_w_qMaximum tab-bar width quotient of + frame width for the shaped styles. A number in the + interval .
    + +

    + +

    +4.3.2 Extra fields for style dock +

    + +

    + + + + + + + + + + +
    FieldDescription
    outline_styleHow borders are drawn: + "none" - no border, + "all" - border around whole dock, + "each" - border around each dockapp.
    tile_sizeA table with entries width and height, + indicating the width and height of tiles in pixels.
    + +

    +Hopefully that's enough to get you started in writing new style +configuration files for Ion. When in doubt, study the existing +style configuration files. + +

    + +

    + + + + diff --git a/ionconf/node6.html b/ionconf/node6.html new file mode 100644 index 0000000..b1bbe8b --- /dev/null +++ b/ionconf/node6.html @@ -0,0 +1,351 @@ + + + + + +5. Scripting + + + + + + + + + + + + + + + + + + + + + + +Subsections + + + +
    + +

    + +
    +5. Scripting +

    + +

    +This chapter documents some additional features of the Ion configuration +and scripting interface that can be used for more advanced scripting than +the basic configuration exlained in chapter 3. + +

    + +

    + +
    +5.1 Hooks +

    + +

    +Hooks are lists of functions to be called when a certain event occurs. +There are two types of them; normal and ''alternative'' hooks. Normal +hooks do not return anything, but alt-hooks should return a boolean +indicating whether it handled its assigned task succesfully. In the case +that true is returned, remaining handlers are not called. + +

    +Hook handlers are registered by first finding the hook +with ioncore.get_hook and then calling WHook.add +on the (succesfull) result with the handler as parameter. Similarly +handlers are unregistered with WHook.remove. For example: + +

    +

    +ioncore.get_hook("ioncore_snapshot_hook"):add(
    +    function() print("Snapshot hook called.") end
    +)
    +
    + +

    +In this example the hook handler has no parameters, but many hook +handlers do. The types of parameters for each hook are listed in +the hook reference, section 6.8. + +

    +Note that many of the hooks are called in ''protected mode'' and can not +use any functions that modify Ion's internal state. TODO: More detailed +documentation when this is final. + +

    + +

    +5.2 Referring to regions +

    + +

    + +

    +5.2.1 Direct object references +

    + +

    +All Ion objects are passed to Lua scriptss as 'userdatas', and you may +safely store such object references for future use. The C-side object +may be destroyed while Lua still refers to the object. All exported +functions gracefully fail in such a case, but if you need to explicitly +test that the C-side object still exists, use obj_exists. + +

    +As an example, the following short piece of code implements +bookmarking: + +

    +

    +local bookmarks={}
    +
    +-- Set bookmark bm point to the region reg
    +function set_bookmark(bm, reg)
    +    bookmarks[bm]=reg
    +end
    +
    +-- Go to bookmark bm
    +function goto_bookmark(bm)
    +    if bookmarks[bm] then
    +        -- We could check that bookmarks[bm] still exists, if we
    +        -- wanted to avoid an error message.
    +        bookmarks[bm]:goto()
    +    end
    +end
    +
    + +

    + +

    +5.2.2 Name-based lookups +

    + +

    +If you want to a single non-WClientWin region with an exact known +name, use ioncore.lookup_region. If you want a list of all regions, +use ioncore.region_list. Both functions accept an optional argument +that can be used to specify that the returned region(s) must be of a more +specific type. Client windows live in a different namespace and for them +you should use the equivalent functions ioncore.lookup_clientwin +and ioncore.clientwin_list. + +

    +To get the name of an object, use WRegion.name. Please be +aware, that the names of client windows reflect their titles and +are subject to changes. To change the name of a non-client window +region, use WRegion.set_name. + +

    + +

    +5.3 Alternative winprop selection criteria +

    + +

    +It is possible to write more complex winprop selection routines than +those described in section 3.5. To match a particular +winprop using whatever way you want to, just set the match +field of the winprop to a function that receives the client window +as its sole parameter, and that returns true if the winprop +matches, and false otherwise. + +

    +The class, instance and role properties can be obtained with +WClientWin.get_ident, and the title with WRegion.name. +If you want to match against (almost) arbitrary window properties, +have a look at the documentation for the following functions, and +their standard Xlib counterparts: ioncore.x_intern_atom +(XInternAtom), ioncore.x_get_window_property (XGetWindowProperty), +and ioncore.x_get_text_property (XGetTextProperty). + +

    + +

    + +

    +5.4 Writing ion-statusd monitors +

    + +

    +All statusbar meters that do not monitor the internal state of Ion should +go in the separate ion-statusd program. + +

    +Whenever the user requests a meter %foo or %foo_bar to be +inserted in a statusbar, mod_statusbar asks ion-statusd to +load statusd_foo.lua on its search path (same as that for Ion-side +scripts). This script should then supply all meters with the initial part +'foo'. + +

    +To provide this value, the script should simply call statusd.inform +with the name of the meter and the value as a string. +Additionally the script should provide a 'template' for the meter to +facilitate expected width calculation by mod_statusbar, and +may provide a 'hint' for colour-coding the value. The interpretation +of hints depends on the graphical style in use, and currently the +stock styles support the normal, important and +critical hints. + +

    +In our example of the 'foo monitor', at script init we might broadcast +the template as follows: + +

    +

    +statusd.inform("foo_template", "000")
    +
    + +

    +To inform mod_statusbar of the actual value of the meter and +indicate that the value is critical if above 100, we might write the +following function: + +

    +

    +local function inform_foo(foo)
    +    statusd.inform("foo", tostring(foo))
    +    if foo>100 then
    +        statusd.inform("foo_hint", "critical")
    +    else
    +        statusd.inform("foo_hint", "normal")
    +    end
    +end
    +
    + +

    +To periodically update the value of the meter, we must use timers. +First we must create one: + +

    +

    +local foo_timer=statusd.create_timer()
    +
    + +

    +Then we write a function to be called whenever the timer expires. +This function must also restart the timer. + +

    +

    +local function update_foo()
    +    local foo= ... measure foo somehow ...
    +    inform_foo(foo)
    +    foo_timer:set(settings.update_interval, update_foo)
    +end
    +
    + +

    +Finally, at the end of our script we want to do the initial +measurement, and set up timer for further measurements: + +

    +

    +update_foo()
    +
    + +

    +If our scripts supports configurable parameters, the following code +(at the beginning of the script) will allow them to be configured in +cfg_statusbar.lua and passed to the status daemon and our script: + +

    +

    +local defaults={
    +    update_interval=10*1000, -- 10 seconds
    +}
    +                
    +local settings=table.join(statusd.get_config("foo"), defaults)
    +
    + +

    + +

    + + + + diff --git a/ionconf/node7.html b/ionconf/node7.html new file mode 100644 index 0000000..5a3e390 --- /dev/null +++ b/ionconf/node7.html @@ -0,0 +1,6232 @@ + + + + + +6. Function reference + + + + + + + + + + + + + + + + + + + + + + +Subsections + + + +
    + +

    + +
    +6. Function reference +

    + +

    + +

    + +
    +6.1 Functions defined in ioncore +

    + +
    +
    + + +
    +
    Synopsis:
    +
    ioncore.TR(s, ...) + +
    +
    Description:
    +
    gettext+string.format + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.bdoc(text) + +
    +
    Description:
    +
    Used to enter documentation among bindings so that other programs + can read it. Does nothing. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.chdir_for(reg, dir) + +
    +
    Description:
    +
    Change default working directory for new programs started in reg. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.compile_cmd(cmd, guard) + +
    +
    Description:
    +
    Compile string cmd into a bindable function. Within cmd, the + variable ''_'' (underscore) can be used to refer to the object + that was selecting for the bound action and chosen to handle it. + The variable ''_sub'' refers to a ''currently active'' sub-object + of _, or a sub-object where the action loading to the binding + being called actually occured. + +

    +The string guard maybe set to pose limits on _sub. Currently + supported guards are _sub:non-nil and _sub:WFoobar, where + WFoobar is a class. + +

    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.create_ws(scr, tmpl, no_default) + +
    +
    Description:
    +
    Create new workspace on screen scr. The table tmpl + may be used to override parts of default_ws_params, + and no_default may be set to true to complete ignore it. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.defbindings(context, bindings) + +
    +
    Description:
    +
    Define bindings for context context. Here binding is + a table composed of entries created with ioncore.kpress, + etc.; see section 3.3 for details. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.defctxmenu(ctx, ...) + +
    +
    Description:
    +
    Define context menu for context ctx, tab being a table + of menu entries. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.defmenu(name, tab) + +
    +
    Description:
    +
    Define a new menu with name being the menu's name and tab + being a table of menu entries. If tab.append is set, the entries + are appended to previously-defined ones, if possible. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.defwinprop(list) + +
    +
    Description:
    +
    Define a winprop. For more information, see section 3.5. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.exec_on(reg, cmd, merr_internal) + +
    +
    Description:
    +
    Run cmd with the environment variable DISPLAY set to point to the + root window of the X screen reg is on. If cmd is prefixed + by a colon (:), the following command is executed in an xterm + (or other terminal emulator) with the help of the ion-runinxterm + script. If the command is prefixed by two colons, ion-runinxterm + will ask you to press enter after the command is finished, even if it + returns succesfully. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table ioncore.read_savefile(string basename) + +
    +
    Description:
    +
    Read a savefile. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    string ioncore.get_savefile(string basename) + +
    +
    Description:
    +
    Get a file name to save (session) data in. The string basename + should contain no path or extension components. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    string ioncore.lookup_script(string file, string sp) + +
    +
    Description:
    +
    Lookup script file. If try_in_dir is set, it is tried + before the standard search path. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool ioncore.write_savefile(string basename, table tab) + +
    +
    Description:
    +
    Write tab in file with basename basename in the + session directory. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.find_manager(obj, t) + +
    +
    Description:
    +
    Find an object with type name t managing obj or one of + its managers. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.get_dir_for(reg) + +
    +
    Description:
    +
    Get default working directory for new programs started in reg. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.getbindings(maybe_context) + +
    +
    Description:
    +
    Get a table of all bindings. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.getctxmenu(name) + +
    +
    Description:
    +
    Returns a context menu defined with ioncore.defctxmenu. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.getmenu(name) + +
    +
    Description:
    +
    Returns a menu defined with ioncore.defmenu. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.getwinprop(cwin) + +
    +
    Description:
    +
    Find winprop table for cwin. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    string ioncore.aboutmsg() + +
    +
    Description:
    +
    Returns an about message (version, author, copyright notice). + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion ioncore.activity_first() + +
    +
    Description:
    +
    Return first regio non activity list. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table ioncore.activity_list() + +
    +
    Description:
    +
    Return list of regions with activity/urgency bit set. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void ioncore.clear_tags() + +
    +
    Description:
    +
    Untag all regions. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table ioncore.clientwin_list() + +
    +
    Description:
    +
    Return a list of all client windows. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion ioncore.current() + +
    +
    Description:
    +
    Returns the currently focused region, if any. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool ioncore.defshortening(string rx, string rule, bool always) + +
    +
    Description:
    +
    Add a rule describing how too long titles should be shortened to fit in tabs. + The regular expression rx (POSIX, not Lua!) is used to match titles + and when rx matches, rule is attempted to use as a replacement + for title. If always is set, the rule is used even if no shortening + is necessary. + +

    +Similarly to sed's 's' command, rule may contain characters that are + inserted in the resulting string and specials as follows: + +

    + + + + + + + + + + + + + + + + + + + +
    SpecialDescription
    $0Place the original string here.
    $1 to $9Insert n:th capture here (as usual,captures are surrounded + by parentheses in the regex).
    $|Alternative shortening separator. The shortening described + before the first this kind of separator is tried first and + if it fails to make the string short enough, the next is + tried, and so on.
    $<Remove characters on the left of this marker to shorten the + string.
    $>Remove characters on the right of this marker to shorten the + string. Only the first $< or $> within an alternative + shortening is used.
    + +

    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    integer ioncore.exec(string cmd) + +
    +
    Description:
    +
    Run cmd with the environment variable DISPLAY set to point to the + X display the WM is running on. No specific screen is set unlike with + WRootWin.exec_on. The PID of the (shell executing the) new + process is returned. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WScreen ioncore.find_screen_id(integer id) + +
    +
    Description:
    +
    Find the screen with numerical id id. If Xinerama is + not present, id corresponds to X screen numbers. Otherwise + the ids are some arbitrary ordering of Xinerama rootwins. + If id is , the screen with the highest id is returned. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table ioncore.get() + +
    +
    Description:
    +
    Get ioncore basic settings. For details see ioncore.set. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table ioncore.get_paths(table tab) + +
    +
    Description:
    +
    Get important directories (userdir, sessiondir, searchpath). + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool ioncore.goto_activity() + +
    +
    Description:
    +
    Go to first region on activity list. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion ioncore.goto_first(WRegion reg, string dirstr, table param) + +
    +
    Description:
    +
    Go to first region within reg in direction dirstr + (up/down/left/right/beg/end/any). For information on param, + see ioncore.navi_next. Additionally this function supports + the boolean nofront field, for not bringing the object to + front. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion ioncore.goto_next(WRegion reg, string dirstr, table param) + +
    +
    Description:
    +
    Go to region next from reg in direction dirstr + (up/down/left/right/next/prev/any). For information on param, + see ioncore.navi_next. Additionally this function supports + the boolean nofront field, for not bringing the object to + front. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WScreen ioncore.goto_next_screen() + +
    +
    Description:
    +
    Switch focus to the next screen and return it. + +

    +Note that this function is asynchronous; the screen will not + actually have received the focus when this function returns. + +

    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WScreen ioncore.goto_nth_screen(integer id) + +
    +
    Description:
    +
    Switch focus to the screen with id id and return it. + +

    +Note that this function is asynchronous; the screen will not + actually have received the focus when this function returns. + +

    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WScreen ioncore.goto_prev_screen() + +
    +
    Description:
    +
    Switch focus to the previous screen and return it. + +

    +Note that this function is asynchronous; the screen will not + actually have received the focus when this function returns. + +

    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion ioncore.goto_previous() + +
    +
    Description:
    +
    Go to and return to a previously active region (if any). + +

    +Note that this function is asynchronous; the region will not + actually have received the focus when this function returns. + +

    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool ioncore.is_i18n() + +
    +
    Description:
    +
    Is Ion supporting locale-specifically multibyte-encoded strings? + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool ioncore.load_module(string modname) + +
    +
    Description:
    +
    Attempt to load a C-side module. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WClientWin ioncore.lookup_clientwin(string name) + +
    +
    Description:
    +
    Attempt to find a client window with name name. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion ioncore.lookup_region(string name, string typenam) + +
    +
    Description:
    +
    Attempt to find a non-client window region with name name and type + inheriting typenam. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion ioncore.navi_first(WRegion reg, string dirstr, table param) + +
    +
    Description:
    +
    Find first region within reg in direction dirstr + (up/down/left/right/beg/end/any). For information on param, + see ioncore.navi_next. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion ioncore.navi_next(WRegion reg, string dirstr, table param) + +
    +
    Description:
    +
    Find region next from reg in direction dirstr + (up/down/left/right/next/prev/any). The table param may + contain the boolean field nowrap, instructing not to wrap + around, and the WRegions no_ascend and no_descend, + and functions ascend_filter and descend_filter from + WRegions (to, from), used to decide when to descend + or ascend into another region. (TODO: more detailed explanation.) + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    integer ioncore.popen_bgread(string cmd, function h, function errh) + +
    +
    Description:
    +
    Run cmd with a read pipe connected to its stdout. + When data is received through the pipe, handler is called + with that data. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    string ioncore.progname() + +
    +
    Description:
    +
    Returns the name of program using Ioncore. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table ioncore.region_list(string typenam) + +
    +
    Description:
    +
    Find all non-client window regions inheriting typenam. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void ioncore.request_selection(function fn) + +
    +
    Description:
    +
    Request (string) selection. The function fn will be called + with the selection when and if it is received. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void ioncore.resign() + +
    +
    Description:
    +
    Causes the window manager to simply exit without saving + state/session. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void ioncore.restart() + +
    +
    Description:
    +
    Restart, saving session first. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void ioncore.restart_other(string cmd) + +
    +
    Description:
    +
    Attempt to restart another window manager cmd. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void ioncore.set(table tab) + +
    +
    Description:
    +
    Set ioncore basic settings. The table tab may contain the + following fields. + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldDescription
    opaque_resize(boolean) Controls whether interactive move and + resize operations simply draw a rubberband during + the operation (false) or immediately affect the + object in question at every step (true).
    warp(boolean) Should focusing operations move the + pointer to the object to be focused?
    switchto(boolean) Should a managing WMPlex switch + to a newly mapped client window?
    screen_notify(boolean) Should notification tooltips be displayed + for hidden workspaces with activity?
    frame_default_index(string) Specifies where to add new regions + on the mutually exclusive list of a frame. One of + ''last'', ''next'' (for after current), ''next-act'' + (for after current and anything with activity right + after it).
    dblclick_delay(integer) Delay between clicks of a double click.
    kbresize_delay(integer) Delay in milliseconds for ending keyboard + resize mode after inactivity.
    kbresize_t_max(integer) Controls keyboard resize acceleration. + See description below for details.
    kbresize_t_min(integer) See below.
    kbresize_step(floating point) See below.
    kbresize_maxacc(floating point) See below.
    framed_transients(boolean) Put transients in nested frames.
    float_placement_method(string) How to place floating frames. + One of ''udlr'' (up-down, then left-right), + ''lrud'' (left-right, then up-down) or ''random''.
    default_ws_params(table) Default workspace layout; the + attach/creation parameters for a WGroup.
    + +

    +When a keyboard resize function is called, and at most kbresize_t_max + milliseconds has passed from a previous call, acceleration factor is reset + to 1.0. Otherwise, if at least kbresize_t_min milliseconds have + passed from the from previous acceleration update or reset the squere root + of the acceleration factor is incremented by kbresize_step. The + maximum acceleration factor (pixels/call modulo size hints) is given by + kbresize_maxacc. The default values are (200, 50, 30, 100). + +

    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void ioncore.set_get_winprop_fn(function fn) + +
    +
    Description:
    +
    Set function used to look up winprops. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool ioncore.set_paths(table tab) + +
    +
    Description:
    +
    Set important directories (sessiondir, searchpath). + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void ioncore.set_selection(string p) + +
    +
    Description:
    +
    Set primary selection and cutbuffer0 to p. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void ioncore.shutdown() + +
    +
    Description:
    +
    End session saving it first. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void ioncore.snapshot() + +
    +
    Description:
    +
    Save session. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table ioncore.tagged_list() + +
    +
    Description:
    +
    Returns a list of tagged regions. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion ioncore.tags_first() + +
    +
    Description:
    +
    Returns first tagged object. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    string ioncore.version() + +
    +
    Description:
    +
    Returns Ioncore version string. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void ioncore.warn(string str) + +
    +
    Description:
    +
    Issue a warning. How the message is displayed depends on the current + warning handler. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void ioncore.warn_traced(string str) + +
    +
    Description:
    +
    Similar to ioncore.warn, but also print Lua stack trace. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void ioncore.x_change_property(integer win, integer atom, integer atom_type, integer format, string mode, table tab) + +
    +
    Description:
    +
    Modify a window property. The mode is one of + "replace", "prepend" or "append", and format + is either 8, 16 or 32. Also see ioncore.x_get_window_property + and the XChangeProperty(3) manual page. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void ioncore.x_delete_property(integer win, integer atom) + +
    +
    Description:
    +
    Delete a window property. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    string ioncore.x_get_atom_name(integer atom) + +
    +
    Description:
    +
    Get the name of an atom. See XGetAtomName(3) manual page for + details. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table ioncore.x_get_text_property(integer win, integer atom) + +
    +
    Description:
    +
    Get a text property for a window (STRING, COMPOUND_TEXT, + or UTF8_STRING property converted). The fields in the returned + table (starting from 1) are the null-separated parts of the property. + See the XGetTextProperty(3) manual page for more information. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table ioncore.x_get_window_property(integer win, integer atom, integer atom_type, integer n32expected, bool more) + +
    +
    Description:
    +
    Get a property atom of type atom_type for window win. + The n32expected parameter indicates the expected number of 32bit + words, and more indicates whether all or just this amount of data + should be fetched. Each 8, 16 or 32bit element of the property, as + deciphered from atom_type is a field in the returned table. + See XGetWindowProperty(3) manual page for more information. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    integer ioncore.x_intern_atom(string name, bool only_if_exists) + +
    +
    Description:
    +
    Create a new atom. See XInternAtom(3) manual page for details. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void ioncore.x_set_text_property(integer win, integer atom, table tab) + +
    +
    Description:
    +
    Set a text property for a window. The fields of tab starting from + 1 should be the different null-separated parts of the property. + See the XSetTextProperty(3) manual page for more information. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.kpress(keyspec, cmd, guard) + +
    +
    Description:
    +
    Creates a binding description table for the action of pressing a key given + by keyspec (with possible modifiers) to the function func. + For more information on bindings, see section 3.3. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.kpress_wait(keyspec, cmd, guard) + +
    +
    Description:
    +
    This is similar to kpress but after calling cmd, + Ioncore waits for all modifiers to be released before processing + any further actions. + For more information on bindings, see section 3.3. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.match_winprop_name(prop, cwin) + +
    +
    Description:
    +
    The basic name-based winprop matching criteria. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.mclick(buttonspec, cmd, guard) + +
    +
    Description:
    +
    Creates a binding description table for the action of clicking a mouse + button while possible modifier keys are pressed, + both given by buttonspec, to the function func. + For more information, see section 3.3. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.mdblclick(buttonspec, cmd, guard) + +
    +
    Description:
    +
    Similar to mclick but for double-click. + Also see section 3.3. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.mdrag(buttonspec, cmd, guard) + +
    +
    Description:
    +
    Creates a binding description table for the action of moving the mouse + (or other pointing device) while the button given by buttonspec + is held pressed and the modifiers given by buttonspec were pressed + when the button was initially pressed. + Also see section 3.3. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.menuentry(name, cmd, guard) + +
    +
    Description:
    +
    Use this function to define normal menu entries. The string name + is the string shown in the visual representation of menu, and the + parameter cmd and guard are similar to those of + ioncore.defbindings. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.mpress(buttonspec, cmd, guard) + +
    +
    Description:
    +
    Similar to mclick but for just pressing the mouse button. + Also see section 3.3. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.refresh_stylelist() + +
    +
    Description:
    +
    Refresh list of known style files. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.submap(kcb_, list) + +
    +
    Description:
    +
    Returns a function that creates a submap binding description table. + When the key press action keyspec occurs, Ioncore will wait for + a further key presse and act according to the submap. + For details, see section 3.3. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    ioncore.submenu(name, sub_or_name, options) + +
    +
    Description:
    +
    Use this function to define menu entries for submenus. The parameter + sub_or_name is either a table of menu entries or the name + of an already defined menu. The initial menu entry to highlight can be + specified by options.initial as either an integer starting from 1, + or a function that returns such a number. Another option supported is + options.noautoexpand that will cause mod_query.query_menu + to not automatically expand this submenu. + +
    +
    + +

    + +

    +6.1.1 WClientWin functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table WClientWin.get_ident(WClientWin cwin) + +
    +
    Description:
    +
    Returns a table containing the properties WM_CLASS (table entries + instance and class) and WM_WINDOW_ROLE (role) + properties for cwin. If a property is not set, the corresponding + field(s) are unset in the table. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WClientWin.is_fullscreen(WClientWin cwin) + +
    +
    Description:
    +
    Is cwin in full screen mode? + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WClientWin.kill(WClientWin cwin) + +
    +
    Description:
    +
    Attempt to kill (with XKillWindow) the client that owns the X + window correspoding to cwin. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WClientWin.nudge(WClientWin cwin) + +
    +
    Description:
    +
    Attempts to fix window size problems with non-ICCCM compliant + programs. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WClientWin.quote_next(WClientWin cwin) + +
    +
    Description:
    +
    Send next key press directly to cwin. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WClientWin.set_fullscreen(WClientWin cwin, string how) + +
    +
    Description:
    +
    Set client window cwin full screen state according to the + parameter how (set/unset/toggle). Resulting state is returned, + which may not be what was requested. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    double WClientWin.xid(WClientWin cwin) + +
    +
    Description:
    +
    Return the X window id for the client window. + +
    +
    + +

    + +

    +6.1.2 WFrame functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WFrame.is_shaded(WFrame frame) + +
    +
    Description:
    +
    Is frame shaded? + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WFrame.maximize_horiz(WFrame frame) + +
    +
    Description:
    +
    Attempt to toggle horizontal maximisation of frame. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WFrame.maximize_vert(WFrame frame) + +
    +
    Description:
    +
    Attempt to toggle vertical maximisation of frame. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    string WFrame.mode(WFrame frame) + +
    +
    Description:
    +
    Get frame mode. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WFrame.p_switch_tab(WFrame frame) + +
    +
    Description:
    +
    Display the region corresponding to the tab that the user pressed on. + This function should only be used by binding it to a mouse action. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WFrame.p_tabdrag(WFrame frame) + +
    +
    Description:
    +
    Start dragging the tab that the user pressed on with the pointing device. + This function should only be used by binding it to mpress or + mdrag action with area ''tab''. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WFrame.set_mode(WFrame frame, string modestr) + +
    +
    Description:
    +
    Set frame mode. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WFrame.set_numbers(WFrame frame, string how) + +
    +
    Description:
    +
    Control whether tabs show numbers (set/unset/toggle). + Resulting state is returned, which may not be what was + requested. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WFrame.set_shaded(WFrame frame, string how) + +
    +
    Description:
    +
    Set shading state according to the parameter how + (set/unset/toggle). Resulting state is returned, which may not be + what was requested. + +
    +
    + +

    + +

    +6.1.3 WGroup functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion WGroup.attach(WGroup ws, WRegion reg, table param) + +
    +
    Description:
    +
    Attach and reparent existing region reg to ws. + The table param may contain the fields index and + switchto that are interpreted as for WMPlex.attach_new. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion WGroup.attach_new(WGroup ws, table param) + +
    +
    Description:
    +
    Create a new region to be managed by ws. At least the following + fields in param are understood: + +

    + + + + + + + + + + + + + + + + + + + + + + +
    FieldDescription
    typeClass name (a string) of the object to be created. Mandatory.
    nameName of the object to be created (a string). Optional.
    switchtoShould the region be switched to (boolean)? Optional.
    levelStacking level; default is 1.
    modalMake object modal; ignored if level is set.
    sizepolicySize policy.
    + +

    +In addition parameters to the region to be created are passed in this + same table. + +

    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion WGroup.bottom(WGroup ws) + +
    +
    Description:
    +
    Returns the 'bottom' of ws. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table WGroup.managed_list(WGroup ws) + +
    +
    Description:
    +
    Returns a list of regions managed by the workspace (frames, mostly). + +
    +
    + +

    + +

    +6.1.4 WGroupCW functions +

    + +

    + +

    +6.1.5 WGroupWS functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WGroupWS.attach_framed(WGroupWS ws, WRegion reg, table t) + +
    +
    Description:
    +
    Attach region reg on ws. + At least the following fields in t are supported: + +

    + + + + + + + + + + +
    FieldDescription
    switchtoShould the region be switched to (boolean)? Optional.
    geomGeometry; x and y, if set, indicates top-left of + the frame to be created while width and height, if set, indicate + the size of the client window within that frame. Optional.
    + +

    +
    + +

    + +

    +6.1.6 WInfoWin functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WInfoWin.set_text(WInfoWin p, string str) + +
    +
    Description:
    +
    Set contents of the info window. + +
    +
    + +

    + +

    +6.1.7 WMPlex functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion WMPlex.attach(WMPlex mplex, WRegion reg, table param) + +
    +
    Description:
    +
    Attach and reparent existing region reg to mplex. + The table param may contain the fields index and + switchto that are interpreted as for WMPlex.attach_new. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion WMPlex.attach_new(WMPlex mplex, table param) + +
    +
    Description:
    +
    Create a new region to be managed by mplex. At least the following + fields in param are understood (all but type are optional). + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldDescription
    type(string) Class name (a string) of the object to be created.
    name(string) Name of the object to be created (a string).
    switchto(boolean) Should the region be switched to (boolean)?
    unnumbered(boolean) Do not put on the numbered mutually + exclusive list.
    index(integer) Index on this list, same as for + WMPlex.set_index.
    level(integer) Stacking level.
    modal(boolean) Shortcut for modal stacking level.
    hidden(boolean) Attach hidden, if not prevented + by e.g. the mutually exclusive list being empty. + This option overrides switchto.
    sizepolicy(integer) Size policy. + (TODO: document them somewhere.)
    geom(table) Geometry specification.
    + +

    +In addition parameters to the region to be created are passed in this + same table. + +

    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WMPlex.attach_tagged(WMPlex mplex) + +
    +
    Description:
    +
    Attach all tagged regions to mplex. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WMPlex.dec_index(WMPlex mplex, WRegion r) + +
    +
    Description:
    +
    Move r ''right'' within objects managed by mplex on list 1. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    integer WMPlex.get_index(WMPlex mplex, WRegion reg) + +
    +
    Description:
    +
    Get index of reg within the multiplexer on list 1. The first region + managed by mplex has index zero. If reg is not managed by + mplex, -1 is returned. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table WMPlex.get_stdisp(WMPlex mplex) + +
    +
    Description:
    +
    Get status display information. See WMPlex.get_stdisp for + information on the fields. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WMPlex.inc_index(WMPlex mplex, WRegion r) + +
    +
    Description:
    +
    Move r ''right'' within objects managed by mplex on list 1. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WMPlex.is_hidden(WMPlex mplex, WRegion reg) + +
    +
    Description:
    +
    Is reg on within mplex and hidden? + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table WMPlex.managed_list(WMPlex mplex) + +
    +
    Description:
    +
    Returns a list of all regions managed by mplex. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    integer WMPlex.mx_count(WMPlex mplex) + +
    +
    Description:
    +
    Returns the number of objects on the mutually exclusive list of mplex. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion WMPlex.mx_current(WMPlex mplex) + +
    +
    Description:
    +
    Returns the managed object currently active within the mutually exclusive + list of mplex. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table WMPlex.mx_list(WMPlex mplex) + +
    +
    Description:
    +
    Returns a list of regions on the numbered/mutually exclusive list of + mplex. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion WMPlex.mx_nth(WMPlex mplex, integer n) + +
    +
    Description:
    +
    Returns the n:th object managed by mplex on the + l:th layer. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WMPlex.set_hidden(WMPlex mplex, WRegion reg, string how) + +
    +
    Description:
    +
    Set the visibility of the region reg on mplex + as specified with the parameter how (set/unset/toggle). + The resulting state is returned. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WMPlex.set_index(WMPlex mplex, WRegion reg, integer index) + +
    +
    Description:
    +
    Set index of reg within the multiplexer to index within + the mutually exclusive list. Special values for index are: + + + + + + + +
    After WMPlex.mx_current.
    Last.
    + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion WMPlex.set_stdisp(WMPlex mplex, table t) + +
    +
    Description:
    +
    Set/create status display for mplex. Table is a standard + description of the object to be created (as passed to e.g. + WMPlex.attach_new). In addition, the following fields are + recognised: + +

    + + + + + + + + + + +
    FieldDescription
    posThe corner of the screen to place the status display + in. One of tl, tr, bl or br.
    actionIf this field is set to keep, corner + and orientation are changed for the existing + status display. If this field is set to remove, + the existing status display is removed. If this + field is not set or is set to replace, a + new status display is created and the old, if any, + removed.
    + +

    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WMPlex.switch_next(WMPlex mplex) + +
    +
    Description:
    +
    Have mplex display next (wrt. currently selected) object managed + by it. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WMPlex.switch_nth(WMPlex mplex, integer n) + +
    +
    Description:
    +
    Have mplex display the n:th object managed by it. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WMPlex.switch_prev(WMPlex mplex) + +
    +
    Description:
    +
    Have mplex display previous (wrt. currently selected) object + managed by it. + +
    +
    + +

    + +

    +6.1.8 WMoveresMode functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WMoveresMode.cancel(WMoveresMode mode) + +
    +
    Description:
    +
    Return from move/resize cancelling changes if opaque + move/resize has not been enabled. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WMoveresMode.finish(WMoveresMode mode) + +
    +
    Description:
    +
    Return from move/resize mode and apply changes unless opaque + move/resize is enabled. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WMoveresMode.move(WMoveresMode mode, integer horizmul, integer vertmul) + +
    +
    Description:
    +
    Move resize mode target one step: + +

    + + + + + + + + + + + + + +
    horizmul/vertmuleffect
    -1Move left/up
    0No effect
    1Move right/down
    + +

    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WMoveresMode.resize(WMoveresMode mode, integer left, integer right, integer top, integer bottom) + +
    +
    Description:
    +
    Shrink or grow resize mode target one step in each direction. + Acceptable values for the parameters left, right, top + and bottom are as follows: -1: shrink along, + 0: do not change, 1: grow along corresponding border. + +
    +
    + +

    + +

    +6.1.9 WRegion functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WMoveresMode WRegion.begin_kbresize(WRegion reg) + +
    +
    Description:
    +
    Enter move/resize mode for reg. The bindings set with + ioncore.set_bindings for WMoveresMode are used in + this mode. Of the functions exported by the Ion C core, only + WMoveresMode.resize, WMoveresMode.move, + WMoveresMode.cancel and WMoveresMode.end are + allowed to be called while in this mode. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion WRegion.current(WRegion mgr) + +
    +
    Description:
    +
    Return the object, if any, that is considered ''currently active'' + within the objects managed by mplex. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table WRegion.geom(WRegion reg) + +
    +
    Description:
    +
    Returns the geometry of reg within its parent; a table with fields + x, y, w and h. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WRegion.goto(WRegion reg) + +
    +
    Description:
    +
    Attempt to display reg, save region activity status and then + warp to (or simply set focus to if warping is disabled) reg. + +

    +Note that this function is asynchronous; the region will not + actually have received the focus when this function returns. + +

    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WRegion.is_active(WRegion reg) + +
    +
    Description:
    +
    Is reg active/does it or one of it's children of focus? + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WRegion.is_activity(WRegion reg) + +
    +
    Description:
    +
    Is activity notification set on reg. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WRegion.is_mapped(WRegion reg) + +
    +
    Description:
    +
    Is reg visible/is it and all it's ancestors mapped? + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WRegion.is_tagged(WRegion reg) + +
    +
    Description:
    +
    Is reg tagged? + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion WRegion.manager(WRegion reg) + +
    +
    Description:
    +
    Returns the region that manages reg. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    string WRegion.name(WRegion reg) + +
    +
    Description:
    +
    Returns the name for reg. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WWindow WRegion.parent(WRegion reg) + +
    +
    Description:
    +
    Returns the parent region of reg. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRootWin WRegion.rootwin_of(WRegion reg) + +
    +
    Description:
    +
    Returns the root window reg is on. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WRegion.rqclose(WRegion reg, bool relocate) + +
    +
    Description:
    +
    Attempt to close/destroy reg. Whether this operation works + depends on whether the particular type of region in question has + implemented the feature and, in case of client windows, whether + the client supports the WM_DELETE protocol (see also + WClientWin.kill). If the operation is likely to succeed, + true is returned, otherwise false. In most cases the + region will not have been actually destroyed when this function returns. + If relocate is not set, and reg manages other regions, it + will not be closed. Otherwise the managed regions will be attempted + to be relocated. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion WRegion.rqclose_propagate(WRegion reg, WRegion maybe_sub) + +
    +
    Description:
    +
    Recursively attempt to close a region or one of the regions managed by + it. If sub is set, it will be used as the managed region, otherwise + WRegion.current(reg). The object to be closed is + returned or NULL if nothing can be closed. Also see notes for + WRegion.rqclose. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table WRegion.rqgeom(WRegion reg, table g) + +
    +
    Description:
    +
    Attempt to resize and/or move reg. The table g is a usual + geometry specification (fields x, y, w and h), + but may contain missing fields, in which case, reg's manager may + attempt to leave that attribute unchanged. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WRegion.rqorder(WRegion reg, string ord) + +
    +
    Description:
    +
    Request ordering. Currently supported values for ord + are 'front' and 'back'. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WScreen WRegion.screen_of(WRegion reg) + +
    +
    Description:
    +
    Returns the screen reg is on. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WRegion.set_activity(WRegion reg, string how) + +
    +
    Description:
    +
    Set activity flag of reg. The how parameter most be + one of (set/unset/toggle). + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WRegion.set_name(WRegion reg, string p) + +
    +
    Description:
    +
    Set the name of reg to p. If the name is already in use, + an instance number suffix <n> will be attempted. If p has + such a suffix, it will be modified, otherwise such a suffix will be + added. Setting p to nil will cause current name to be removed. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WRegion.set_name_exact(WRegion reg, string p) + +
    +
    Description:
    +
    Similar to WRegion.set_name except if the name is already in use, + other instance numbers will not be attempted. The string p should + not contain a <n> suffix or this function will fail. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WRegion.set_tagged(WRegion reg, string how) + +
    +
    Description:
    +
    Change tagging state of reg as defined by how + (set/unset/toggle). Resulting state is returned. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table WRegion.size_hints(WRegion reg) + +
    +
    Description:
    +
    Returns size hints for reg. The returned table always contains the + fields min_?, base_? and sometimes the fields max_?, + base_? and inc_?, where ?=w, h. + +
    +
    + +

    + +

    +6.1.10 WRootWin functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WScreen WRootWin.current_scr(WRootWin rootwin) + +
    +
    Description:
    +
    Returns previously active screen on root window rootwin. + +
    +
    + +

    + +

    +6.1.11 WScreen functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    integer WScreen.id(WScreen scr) + +
    +
    Description:
    +
    Return the numerical id for screen scr. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WScreen.set_managed_offset(WScreen scr, table offset) + +
    +
    Description:
    +
    Set offset of objects managed by the screen from actual screen geometry. + The table offset should contain the entries x, y, + w and h indicating offsets of that component of screen + geometry. + +
    +
    + +

    + +

    +6.1.12 WWindow functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WWindow.p_move(WWindow wwin) + +
    +
    Description:
    +
    Start moving wwin with the mouse or other pointing device. + This function should only be used by binding it to mpress or + mdrag action. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WWindow.p_resize(WWindow wwin) + +
    +
    Description:
    +
    Start resizing wwin with the mouse or other pointing device. + This function should only be used by binding it to mpress or + mdrag action. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    double WWindow.xid(WWindow wwin) + +
    +
    Description:
    +
    Return the X window id for wwin. + +
    +
    + +

    + +

    +6.1.13 global functions +

    + +

    + +

    +
    + +
    +
    Synopsis:
    +
    export(lib, ...) + +
    +
    Description:
    +
    Export a list of functions from lib into global namespace. + +
    +
    + +

    + +

    +6.1.14 gr functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void gr.read_config() + +
    +
    Description:
    +
    Read drawing engine configuration file draw.lua. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void gr.refresh() + +
    +
    Description:
    +
    Refresh objects' brushes to update them to use newly loaded style. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool gr.select_engine(string engine) + +
    +
    Description:
    +
    Future requests for ''brushes'' are to be forwarded to the drawing engine + engine. If no engine of such name is known, a module with that name + is attempted to be loaded. This function is only intended to be called from + colour scheme etc. configuration files and can not be used to change the + look of existing objects; for that use gr.read_config. + +
    +
    + +

    + +

    +6.1.15 string functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    string.shell_safe(str) + +
    +
    Description:
    +
    Make str shell-safe. + +
    +
    + +

    + +

    +6.1.16 table functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table.append(t1, t2) + +
    +
    Description:
    +
    Add entries that do not exist in t1 from t2 to t1. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table.copy(t, deep) + +
    +
    Description:
    +
    Make copy of table. If deep is unset, shallow one-level + copy is made, otherwise a deep copy is made. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table.icat(t1, t2) + +
    +
    Description:
    +
    Insert all positive integer entries from t2 into t1. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table.join(t1, t2) + +
    +
    Description:
    +
    Create a table containing all entries from t1 and those from + t2 that are missing from t1. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table.map(f, t) + +
    +
    Description:
    +
    Map all entries of t by f. + +
    +
    + +

    + +

    + +
    +6.2 Functions defined in mod_tiling +

    + +
    +
    + + +
    +
    Synopsis:
    +
    bool mod_tiling.detach(WRegion reg) + +
    +
    Description:
    +
    Detach reg, i.e. make it managed by its nearest ancestor + WGroup, framed if reg is not itself WFrame. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table mod_tiling.get() + +
    +
    Description:
    +
    Get parameters. For details see mod_tiling.set. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool mod_tiling.mkbottom(WRegion reg) + +
    +
    Description:
    +
    Create a new WTiling 'bottom' for the group of reg, + consisting of reg. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void mod_tiling.set(table tab) + +
    +
    Description:
    +
    Set parameters. Currently only raise_delay (in milliseconds) + is supported. + +
    +
    + +

    + +

    +6.2.1 WSplit functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table WSplit.geom(WSplit split) + +
    +
    Description:
    +
    Returns the area of workspace used by the regions under split. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WSplitInner WSplit.parent(WSplit split) + +
    +
    Description:
    +
    Return parent split for split. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table WSplit.rqgeom(WSplit node, table g) + +
    +
    Description:
    +
    Attempt to resize and/or move the split tree starting at node. + Behaviour and the g parameter are as for WRegion.rqgeom + operating on node (if it were a WRegion). + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WSplit.transpose(WSplit node) + +
    +
    Description:
    +
    Transpose contents of node. + +
    +
    + +

    + +

    +6.2.2 WSplitInner functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WSplit WSplitInner.current(WSplitInner node) + +
    +
    Description:
    +
    Returns the most previously active child node of split. + +
    +
    + +

    + +

    +6.2.3 WSplitRegion functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion WSplitRegion.reg(WSplitRegion node) + +
    +
    Description:
    +
    Returns the region contained in node. + +
    +
    + +

    + +

    +6.2.4 WSplitSplit functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WSplit WSplitSplit.br(WSplitSplit split) + +
    +
    Description:
    +
    Returns the bottom or right child node of split depending + on the direction of the split. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    string WSplitSplit.dir(WSplitSplit split) + +
    +
    Description:
    +
    Returns the direction of split; either ''vertical'' or + ''horizontal''. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WSplitSplit.flip(WSplitSplit split) + +
    +
    Description:
    +
    Flip contents of node. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WSplit WSplitSplit.tl(WSplitSplit split) + +
    +
    Description:
    +
    Returns the top or left child node of split depending + on the direction of the split. + +
    +
    + +

    + +

    +6.2.5 WTiling functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WTiling.flip_at(WTiling ws, WRegion reg) + +
    +
    Description:
    +
    Flip ws at reg or root if nil. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WTiling.transpose_at(WTiling ws, WRegion reg) + +
    +
    Description:
    +
    Transpose ws at reg or root if nil. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion WTiling.farthest(WTiling ws, string dirstr, bool any) + +
    +
    Description:
    +
    Return the most previously active region on ws with no + other regions next to it in direction dirstr + (left/right/up/down). If any is not set, the status + display is not considered. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table WTiling.managed_list(WTiling ws) + +
    +
    Description:
    +
    Returns a list of regions managed by the workspace (frames, mostly). + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WRegion WTiling.nextto(WTiling ws, WRegion reg, string dirstr, bool any) + +
    +
    Description:
    +
    Return the most previously active region next to reg in + direction dirstr (left/right/up/down). The region reg + must be managed by ws. If any is not set, the status display + is not considered. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WSplitRegion WTiling.node_of(WTiling ws, WRegion reg) + +
    +
    Description:
    +
    For region reg managed by ws return the WSplit + a leaf of which reg is. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WTiling.set_floating_at(WTiling ws, WRegion reg, string how, string dirstr) + +
    +
    Description:
    +
    Toggle floating of the sides of a split containin reg as indicated + by the parameters how (set/unset/toggle) and dirstr + (left/right/up/down/any). The new status is returned (and false + also on error). + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WSplitSplit WTiling.set_floating(WTiling ws, WSplitSplit split, string how) + +
    +
    Description:
    +
    Toggle floating of a split's sides at split as indicated by the + parameter how (set/unset/toggle). A split of the appropriate is + returned, if there was a change. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WFrame WTiling.split(WTiling ws, WSplit node, string dirstr) + +
    +
    Description:
    +
    Create a new frame on ws above/below/left of/right of + node as indicated by dirstr. If dirstr is + prefixed with ''floating:'' a floating split is created. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WFrame WTiling.split_at(WTiling ws, WFrame frame, string dirstr, bool attach_current) + +
    +
    Description:
    +
    Split frame creating a new frame to direction dirstr + (one of ''left'', ''right'', ''top'' or ''bottom'') of frame. + If attach_current is set, the region currently displayed in + frame, if any, is moved to thenew frame. + If dirstr is prefixed with ''floating:'' a floating split is + created. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WFrame WTiling.split_top(WTiling ws, string dirstr) + +
    +
    Description:
    +
    Same as WTiling.split at the root of the split tree. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WSplit WTiling.split_tree(WTiling ws) + +
    +
    Description:
    +
    Returns the root of the split tree. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WTiling.unsplit_at(WTiling ws, WFrame frame) + +
    +
    Description:
    +
    Try to relocate regions managed by frame to another frame + and, if possible, destroy the frame. + +
    +
    + +

    + +

    + +
    +6.3 Functions defined in mod_query +

    + +
    +
    + + +
    +
    Synopsis:
    +
    mod_query.defcmd(cmd, fn) + +
    +
    Description:
    +
    Define a command override for the query_exec query. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table mod_query.get() + +
    +
    Description:
    +
    Get module configuration. For more information see + mod_query.set. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void mod_query.history_clear() + +
    +
    Description:
    +
    Clear line editor history. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    string mod_query.history_get(integer n) + +
    +
    Description:
    +
    Get entry at index n in line editor history, 0 being the latest. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool mod_query.history_push(string str) + +
    +
    Description:
    +
    Push an entry into line editor history. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    integer mod_query.history_search(string s, integer from, bool bwd) + +
    +
    Description:
    +
    Try to find matching history entry. Returns -1 if none was + found. The parameter from specifies where to start + searching from, and bwd causes backward search from + that point. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table mod_query.history_table() + +
    +
    Description:
    +
    Return table of history entries. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WMessage mod_query.message(WMPlex mplex, string p) + +
    +
    Description:
    +
    Display a message in the mplex. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void mod_query.set(table tab) + +
    +
    Description:
    +
    Set module configuration. The following are supported: + +

    + + + + + + + + + + +
    FieldDescription
    autoshowcompl(boolean) Is auto-show-completions enabled? + (default: true).
    autoshowcompl_delay(integer) auto-show-completions delay + in milliseconds (default: 250).
    + +

    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    WMessage mod_query.warn(WMPlex mplex, string p) + +
    +
    Description:
    +
    Display an error message box in the multiplexer mplex. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_query.popen_completions(cp, cmd, fn, reshnd) + +
    +
    Description:
    +
    This function can be used to read completions from an external source. + The parameter cp is the completion proxy to be used, + and the string cmd the shell command to be executed. To its stdout, + the command should on the first line write the common_beg + parameter of WComplProxy.set_completions (which fn maybe used + to override) and a single actual completion on each of the successive lines. + The function reshnd may be used to override a result table + building routine. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_query.query(mplex, prompt, initvalue, handler, completor, + context) + +
    +
    Description:
    +
    Low-level query routine. mplex is the WMPlex to display + the query in, prompt the prompt string, and initvalue + the initial contents of the query box. handler is a function + that receives (mplex, result string) as parameter when the + query has been succesfully completed, completor the completor + routine which receives a (cp, str, point) as parameters. + The parameter str is the string to be completed and point + cursor's location within it. Completions should be eventually, + possibly asynchronously, set with WComplProxy.set_completions + on cp. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_query.query_attachclient(mplex) + +
    +
    Description:
    +
    This query asks for the name of a client window and switches + focus to the one entered. It uses the completion function + ioncore.complete_clientwin. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_query.query_editfile(mplex, script, prompt) + +
    +
    Description:
    +
    Asks for a file to be edited. This script uses + run-mailcap -mode=edit by default, but you may provide an + alternative script to use. The default prompt is "Edit file:" (translated). + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_query.query_exec(mplex) + +
    +
    Description:
    +
    This function asks for a command to execute with /bin/sh. + If the command is prefixed with a colon (':'), the command will + be run in an XTerm (or other terminal emulator) using the script + ion-runinxterm. Two colons ('::') will ask you to press + enter after the command has finished. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_query.query_gotoclient(mplex) + +
    +
    Description:
    +
    This query asks for the name of a client window and attaches + it to the frame the query was opened in. It uses the completion + function ioncore.complete_clientwin. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_query.query_lua(mplex) + +
    +
    Description:
    +
    This query asks for Lua code to execute. It sets the variable '_' + in the local environment of the string to point to the mplex where the + query was created. It also sets the table arg in the local + environment to {_, _:current()}. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_query.query_man(mplex, prog) + +
    +
    Description:
    +
    This query asks for a manual page to display. By default it runs the + man command in an xterm using ion-runinxterm, + but it is possible to pass another program as the prog argument. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_query.query_menu(mplex, themenu, prompt) + +
    +
    Description:
    +
    This query can be used to create a query of a defined menu. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_query.query_renameframe(frame) + +
    +
    Description:
    +
    This function asks for a name new for the frame where the query + was created. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_query.query_renameworkspace(mplex) + +
    +
    Description:
    +
    This function asks for a name new for the workspace on which the + query resides. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_query.query_restart(mplex) + +
    +
    Description:
    +
    This query asks whether the user wants restart Ioncore. + If the answer is 'y', 'Y' or 'yes', so will happen. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_query.query_runfile(mplex, script, prompt) + +
    +
    Description:
    +
    Asks for a file to be viewed. This script uses + run-mailcap -action=view by default, but you may provide an + alternative script to use. The default prompt is "View file:" (translated). + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_query.query_shutdown(mplex) + +
    +
    Description:
    +
    This query asks whether the user wants to exit Ion (no session manager) + or close the session (running under a session manager that supports such + requests). If the answer is 'y', 'Y' or 'yes', so will happen. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_query.query_ssh(mplex, ssh) + +
    +
    Description:
    +
    This query asks for a host to connect to with SSH. + Hosts to tab-complete are read from ~/.ssh/known_hosts. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_query.query_workspace(mplex) + +
    +
    Description:
    +
    This query asks for the name of a workspace. If a workspace + (an object inheriting WGroupWS) with such a name exists, + it will be switched to. Otherwise a new workspace with the + entered name will be created and the user will be queried for + the type of the workspace. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_query.query_yesno(mplex, prompt, handler) + +
    +
    Description:
    +
    This function query will display a query with prompt prompt in + mplex and if the user answers affirmately, call handler + with mplex as parameter. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_query.show_about_ion(mplex) + +
    +
    Description:
    +
    Display an "About Ion" message in mplex. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_query.show_tree(mplex, reg, max_depth) + +
    +
    Description:
    +
    Show information about a region tree + +
    +
    + +

    + +

    +6.3.1 WComplProxy functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WComplProxy.set_completions(WComplProxy proxy, table compls) + +
    +
    Description:
    +
    Set completion list of the WEdln that proxy refers to to + compls, if it is still waiting for this completion run. The + numerical indexes of compls list the found completions. If the + entry common_beg (common_end) exists, it gives an extra + common prefix (suffix) of all found completions. + +
    +
    + +

    + +

    +6.3.2 WEdln functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.back(WEdln wedln) + +
    +
    Description:
    +
    Move backward one character. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.backspace(WEdln wedln) + +
    +
    Description:
    +
    Delete previous character. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.bkill_word(WEdln wedln) + +
    +
    Description:
    +
    Starting from the previous characters, delete possible whitespace and + preceding alphanumeric characters until previous non-alphanumeric character. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.bol(WEdln wedln) + +
    +
    Description:
    +
    Go to the beginning of line. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.bskip_word(WEdln wedln) + +
    +
    Description:
    +
    Go to to beginning of current sequence of alphanumeric characters + followed by whitespace. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.clear_mark(WEdln wedln) + +
    +
    Description:
    +
    Clear mark. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.complete(WEdln wedln, string cycle, string mode) + +
    +
    Description:
    +
    Call completion handler with the text between the beginning of line and + current cursor position, or select next/previous completion from list if in + auto-show-completions mode and cycle is set to ``next'' or ``prev'', + respectively. The mode may be ``history'' or ``normal''. If it is + not set, the previous mode is used. Normally next entry is not cycled to + despite the setting of cycle if mode switch occurs. To override + this, use ``next-always'' and ``prev-always'' for cycle. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    string WEdln.contents(WEdln wedln) + +
    +
    Description:
    +
    Get line editor contents. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    string WEdln.context(WEdln wedln) + +
    +
    Description:
    +
    Get history context for wedln. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.copy(WEdln wedln) + +
    +
    Description:
    +
    Copy text between mark and current cursor position to clipboard. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.cut(WEdln wedln) + +
    +
    Description:
    +
    Copy text between mark and current cursor position to clipboard + and then delete that sequence. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.delete(WEdln wedln) + +
    +
    Description:
    +
    Delete current character. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.eol(WEdln wedln) + +
    +
    Description:
    +
    Go to the end of line. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.finish(WEdln wedln) + +
    +
    Description:
    +
    Close wedln and call any handlers. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.forward(WEdln wedln) + +
    +
    Description:
    +
    Move forward one character. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.history_next(WEdln wedln, bool match) + +
    +
    Description:
    +
    Replace line editor contents with next entry in history if one exists. + If match is true, the initial part of the history entry + must match the current line from beginning to point. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.history_prev(WEdln wedln, bool match) + +
    +
    Description:
    +
    Replace line editor contents with previous in history if one exists. + If match is true, the initial part of the history entry + must match the current line from beginning to point. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.insstr(WEdln wedln, string str) + +
    +
    Description:
    +
    Input str in wedln at current editing point. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WEdln.is_histcompl(WEdln wedln) + +
    +
    Description:
    +
    Get history completion mode. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.kill_line(WEdln wedln) + +
    +
    Description:
    +
    Delete the whole line. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.kill_to_bol(WEdln wedln) + +
    +
    Description:
    +
    Delete all characters from previous to beginning of line. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.kill_to_eol(WEdln wedln) + +
    +
    Description:
    +
    Delete all characters from current to end of line. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.kill_word(WEdln wedln) + +
    +
    Description:
    +
    Starting from the current point, delete possible whitespace and + following alphanumeric characters until next non-alphanumeric character. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    integer WEdln.mark(WEdln wedln) + +
    +
    Description:
    +
    Get current mark (start of selection) for wedln. + Return value of -1 indicates that there is no mark, and + 0 is the beginning of the line. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WEdln.next_completion(WEdln wedln) + +
    +
    Description:
    +
    Select next completion. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.paste(WEdln wedln) + +
    +
    Description:
    +
    Request selection from application holding such. + +

    +Note that this function is asynchronous; the selection will not + actually be inserted before Ion receives it. This will be no + earlier than Ion return to its main loop. + +

    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    integer WEdln.point(WEdln wedln) + +
    +
    Description:
    +
    Get current editing point. + Beginning of the edited line is point 0. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WEdln.prev_completion(WEdln wedln) + +
    +
    Description:
    +
    Select previous completion. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.set_context(WEdln wedln, string context) + +
    +
    Description:
    +
    Set history context for wedln. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.set_mark(WEdln wedln) + +
    +
    Description:
    +
    Set mark to current cursor position. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.skip_word(WEdln wedln) + +
    +
    Description:
    +
    Go to to end of current sequence of whitespace followed by alphanumeric + characters.. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.transpose_chars(WEdln wedln) + +
    +
    Description:
    +
    Transpose characters. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WEdln.transpose_words(WEdln wedln) + +
    +
    Description:
    +
    Transpose words. + +
    +
    + +

    + +

    +6.3.3 WInput functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WInput.cancel(WInput input) + +
    +
    Description:
    +
    Close input not calling any possible finish handlers. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WInput.scrolldown(WInput input) + +
    +
    Description:
    +
    Scroll input input text contents down. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WInput.scrollup(WInput input) + +
    +
    Description:
    +
    Scroll input input text contents up. + +
    +
    + +

    + +

    + +
    +6.4 Functions defined in mod_menu +

    + +
    +
    + + +
    +
    Synopsis:
    +
    mod_menu.grabmenu(mplex, sub, menu_or_name, param) + +
    +
    Description:
    +
    This function is similar to mod_menu.menu, but input + is grabbed and the key used to active the menu can be used to + cycle through menu entries. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_menu.menu(mplex, sub, menu_or_name, param) + +
    +
    Description:
    +
    Display a menu in the lower-left corner of mplex. + The variable menu_or_name is either the name of a menu + defined with mod_menu.defmenu or directly a table similar + to ones passesd to this function. When this function is + called from a binding handler, sub should be set to + the second argument of to the binding handler (_sub) + so that the menu handler will get the same parameters as the + binding handler. Extra options can be passed in the table + param. The initial entry can be specified as the field + initial as an integer starting from 1. Menus can be made + to use a bigger style by setting the field big to true. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table mod_menu.get() + +
    +
    Description:
    +
    Get module basic settings. For details, see mod_menu.set. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void mod_menu.set(table tab) + +
    +
    Description:
    +
    Set module basic settings. The parameter table may contain the + following fields: + +

    + + + + + + + + + + +
    FieldDescription
    scroll_amountNumber of pixels to scroll at a time + pointer-controlled menus when one extends + beyond a border of the screen and the pointer + touches that border.
    scroll_delayTime between such scrolling events in + milliseconds.
    + +

    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    mod_menu.pmenu(win, sub, menu_or_name) + +
    +
    Description:
    +
    This function displays a drop-down menu and should only + be called from a mouse press handler. The parameters are + similar to those of mod_menu.menu. + +
    +
    + +

    + +

    +6.4.1 WMenu functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WMenu.cancel(WMenu menu) + +
    +
    Description:
    +
    Close menu not calling any possible finish handlers. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WMenu.finish(WMenu menu) + +
    +
    Description:
    +
    If selected entry is a submenu, display that. + Otherwise destroy the menu and call handler for selected entry. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WMenu.select_next(WMenu menu) + +
    +
    Description:
    +
    Select next entry in menu. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WMenu.select_nth(WMenu menu, integer n) + +
    +
    Description:
    +
    Select n:th entry in menu. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WMenu.select_prev(WMenu menu) + +
    +
    Description:
    +
    Select previous entry in menu. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WMenu.typeahead_clear(WMenu menu) + +
    +
    Description:
    +
    Clear typeahead buffer. + +
    +
    + +

    + +

    + +
    +6.5 Functions defined in mod_dock +

    + +
    +
    + + +
    +
    Synopsis:
    +
    void mod_dock.set_floating_shown_on(WMPlex mplex, string how) + +
    +
    Description:
    +
    Toggle floating docks on mplex. + +
    +
    + +

    + +

    +6.5.1 WDock functions +

    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool WDock.attach(WDock dock, WRegion reg) + +
    +
    Description:
    +
    Attach reg to dock. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table WDock.get(WDock dock) + +
    +
    Description:
    +
    Get dock's configuration table. See WDock.set for a + description of the table. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WDock.resize(WDock dock) + +
    +
    Description:
    +
    Resizes and refreshes dock. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void WDock.set(WDock dock, table conftab) + +
    +
    Description:
    +
    Configure dock. conftab is a table of key/value pairs: + +

    + + + + + + + + + + + + + + + + + + + + + +
    KeyValuesDescription
    namestringName of dock
    posstring in +Dock position. + Can only be used in floating mode.
    growup/down/left/rightGrowth direction where new dockapps are added. Also + sets orientation for dock when working as WMPlex status + display (see WMPlex.set_stdisp).
    is_autoboolShould dock automatically manage new dockapps?
    + +

    +Any parameters not explicitly set in conftab will be left unchanged. + +

    +
    + +

    + +

    + +
    +6.6 Functions defined in mod_sp +

    + +
    +
    + + +
    +
    Synopsis:
    +
    bool mod_sp.set_shown(WFrame sp, string how) + +
    +
    Description:
    +
    Toggle displayed status of sp. + The parameter how is one of (set/unset/toggle). + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool mod_sp.set_shown_on(WMPlex mplex, string how) + +
    +
    Description:
    +
    Change displayed status of some scratchpad on mplex if one is + found. The parameter how is one of (set/unset/toggle). + +
    +
    + +

    + +

    + +
    +6.7 Functions defined in de +

    + +
    +
    + + +
    +
    Synopsis:
    +
    bool de.defstyle(string name, table tab) + +
    +
    Description:
    +
    Define a style. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    bool de.defstyle_rootwin(WRootWin rootwin, string name, table tab) + +
    +
    Description:
    +
    Define a style for the root window rootwin. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    void de.reset() + +
    +
    Description:
    +
    Clear all styles from drawing engine memory. + +
    +
    + +

    + +

    +
    + + +
    +
    Synopsis:
    +
    table de.substyle(string pattern, table tab) + +
    +
    Description:
    +
    Define a substyle. + +
    +
    + +

    + +

    + +
    +6.8 Hooks +

    + +

    + +

    +
    + +
    +
    Hook name:
    +
    clientwin_do_manage_alt + +
    +
    Parameters:
    +
    (WClientWin, table) + +
    +
    Description:
    +
    Called when we want to manage a new client window. + The table argument contains the following fields: + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeDescription
    switchtoboolDo we want to switch to the client window.
    jumptoboolDo we want to jump to the client window.
    userposboolGeometry set by user.
    dockappboolClient window is a dockapp.
    maprqboolMap request (and not initialisation scan).
    gravitynumberWindow gravity.
    geomtableRequested geometry; x, y, w, h.
    tforWClientWinTransient for window.
    + +

    +This hook is not called in protected mode and can be used for + arbitrary placement policies (deciding in which workspace a new + WClientWin should go). In this case, you can call +

    +reg:attach(cwin)
    +
    + where reg is the region where the window should go, and + cwin is the first argument of the function added to the + hook. + +
    +
    + +

    + +

    +
    + +
    +
    Hook name:
    +
    clientwin_mapped_hook + +
    +
    Parameters:
    +
    WClientWin + +
    +
    Description:
    +
    Called when we have started to manage a client window. + +
    +
    + +

    + +

    +
    + +
    +
    Hook name:
    +
    clientwin_unmapped_hook + +
    +
    Parameters:
    +
    number + +
    +
    Description:
    +
    Called when we no longer manage a client window. The parameter + is the X ID of the window; see WClientWin.xid. + +
    +
    + +

    + +

    +
    + +
    +
    Hook name:
    +
    frame_managed_changed_hook + +
    +
    Parameters:
    +
    table + +
    +
    Description:
    +
    Called when there are changes in the objects managed by a frame + or their order. The table parameter has the following fields: + +

    + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeDescription
    regWFrameThe frame in question
    modestring"switchonly", "reorder", + "add" or "remove"
    swboolSwitch occured
    subWRegionThe managed region (primarily) affected
    + +

    +
    + +

    + +

    +
    + +
    +
    Hook name:
    +
    ioncore_sigchld_hook + +
    +
    Parameters:
    +
    integer + +
    +
    Description:
    +
    Called when a child process has exited. The parameter + is the PID of the process. + +
    +
    + +

    + +

    +
    + +
    +
    Hook name:
    +
    ioncore_deinit_hook + +
    +
    Parameters:
    +
    () + +
    +
    Description:
    +
    Called when Ion is deinitialising and about to quit. + +
    +
    + +

    + +

    +
    + +
    +
    Hook name:
    +
    ioncore_post_layout_setup_hook + +
    +
    Parameters:
    +
    () + +
    +
    Description:
    +
    Called when Ion has done all initialisation and is almost ready to + enter the mainloop, except no windows are yet being managed. + +
    +
    + +

    + +

    +
    + +
    +
    Hook name:
    +
    ioncore_snapshot_hook + +
    +
    Parameters:
    +
    () + +
    +
    Description:
    +
    Called to signal scripts and modules to save their state (if any). + +
    +
    + +

    + +

    +
    + +
    +
    Hook name:
    +
    tiling_placement_alt + +
    +
    Parameters:
    +
    table + +
    +
    Description:
    +
    Called when a client window is about to be managed by a WTiling + to allow for alternative placement policies. The table has the + following fields: + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeDescription
    tilingWTilingThe tiling
    regWRegionThe region (always a WClientWin at + the moment) to be placed
    mptableThis table contains the same fields as + the parameter of clientwin_do_manage_alt
    res_frameWFrameA succesfull handler should + return the target frame here.
    + This hook is just for placing within a given workspace after the + workspace has been decided by the default workspace selection + policy. It is called in protected mode. For arbitrary placement + policies, clientwin_do_manage_alt should be used; it + isn't called in protected mode, + +
    +
    + +

    + +

    +
    + +
    +
    Hook name:
    +
    panews_make_placement_alt + +
    +
    Parameters:
    +
    table + +
    +
    Description:
    +
    Called to make a placement on panews. The parameter table has + the following fields: + +

    + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeDescription
    wsWPaneWSThe workspace
    frameWFrameA frame initially allocated for the + region to be placed
    regWRegionThe region to be placed
    specifierWRegionFor drag&drop on handling empty areas
    + +

    +The handler should set some of these fields on success: + +

    + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeDescription
    res_nodeWSplitTarget split
    res_configWFrameNew configuration for it, unless + WSplitRegion
    res_wintegerNew width for target split (optional)
    res_hintegerNew height for target split (optional)
    + +

    +
    + +

    + +

    +
    + +
    +
    Hook name:
    +
    region_activated_hook + +
    +
    Parameters:
    +
    WRegion + +
    +
    Description:
    +
    Signalled when a region or one of its children has received the focus. + +
    +
    + +

    + +

    +
    + +
    +
    Hook name:
    +
    region_activity_hook + +
    +
    Parameters:
    +
    WRegion + +
    +
    Description:
    +
    This hook is triggered when the activity flag of the parameter + region has been changed. + +
    +
    + +

    + +

    +
    + +
    +
    Hook name:
    +
    region_do_warp_alt + +
    +
    Parameters:
    +
    WRegion + +
    +
    Description:
    +
    This alt-hook exist to allow for alternative pointer warping + implementations. + +
    +
    + +

    + +

    +
    + +
    +
    Hook name:
    +
    region_inactivated_hook + +
    +
    Parameters:
    +
    WRegion + +
    +
    Description:
    +
    Signalled when the focus has moved from the parameter region or + one of its children to a non-child region of the parameter region. + +
    +
    + +

    + +

    +
    + +
    +
    Hook name:
    +
    screen_managed_changed_hook + +
    +
    Parameters:
    +
    table + +
    +
    Description:
    +
    Called when there are changes in the objects managed by a screen + or their order. The table parameter is similar to that of + frame_managed_changed_hook. + +
    +
    + +

    + +

    + +

    + + + + diff --git a/ionconf/node8.html b/ionconf/node8.html new file mode 100644 index 0000000..7b79bc0 --- /dev/null +++ b/ionconf/node8.html @@ -0,0 +1,597 @@ + + + + + +A. The GNU General Public License + + + + + + + + + + + + + + + + + + + + + + +Subsections + + + +
    + +

    +A. The GNU General Public License +

    + +

    +

    +
    +

    +

    Version 2, June 1991 +
    +

    +

    Copyright © 1989, 1991 Free Software Foundation, Inc. +
    +

    +

    +

    +
    +

    +

    +

    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA +
    +

    +

    +

    +
    +

    +

    +

    Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + + +
    + +

    +

    +Preamble + +
    + +

    +The licenses for most software are designed to take away your freedom to +share and change it. By contrast, the GNU General Public License is +intended to guarantee your freedom to share and change free software--to +make sure the software is free for all its users. This General Public +License applies to most of the Free Software Foundation's software and to +any other program whose authors commit to using it. (Some other Free +Software Foundation software is covered by the GNU Library General Public +License instead.) You can apply it to your programs, too. + +

    +When we speak of free software, we are referring to freedom, not price. +Our General Public Licenses are designed to make sure that you have the +freedom to distribute copies of free software (and charge for this service +if you wish), that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free programs; +and that you know you can do these things. + +

    +To protect your rights, we need to make restrictions that forbid anyone to +deny you these rights or to ask you to surrender the rights. These +restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + +

    +For example, if you distribute copies of such a program, whether gratis or +for a fee, you must give the recipients all the rights that you have. You +must make sure that they, too, receive or can get the source code. And +you must show them these terms so they know their rights. + +

    +We protect your rights with two steps: (1) copyright the software, and (2) +offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + +

    +Also, for each author's protection and ours, we want to make certain that +everyone understands that there is no warranty for this free software. If +the software is modified by someone else and passed on, we want its +recipients to know that what they have is not the original, so that any +problems introduced by others will not reflect on the original authors' +reputations. + +

    +Finally, any free program is threatened constantly by software patents. +We wish to avoid the danger that redistributors of a free program will +individually obtain patent licenses, in effect making the program +proprietary. To prevent this, we have made it clear that any patent must +be licensed for everyone's free use or not licensed at all. + +

    +The precise terms and conditions for copying, distribution and +modification follow. + +

    +

    +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND + MODIFICATION + +
    + +

    + +

      +
    1. +This License applies to any program or other work which contains a notice +placed by the copyright holder saying it may be distributed under the +terms of this General Public License. The ``Program'', below, refers to +any such program or work, and a ``work based on the Program'' means either +the Program or any derivative work under copyright law: that is to say, a +work containing the Program or a portion of it, either verbatim or with +modifications and/or translated into another language. (Hereinafter, +translation is included without limitation in the term ``modification''.) +Each licensee is addressed as ``you''. + +

      +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + +

      +

    2. +
    3. You may copy and distribute verbatim copies of the Program's source + code as you receive it, in any medium, provided that you conspicuously + and appropriately publish on each copy an appropriate copyright notice + and disclaimer of warranty; keep intact all the notices that refer to + this License and to the absence of any warranty; and give any other + recipients of the Program a copy of this License along with the Program. + +

      +You may charge a fee for the physical act of transferring a copy, and you +may at your option offer warranty protection in exchange for a fee. + +

      +

    4. +
    5. +You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + +

      + +

        +
      1. +You must cause the modified files to carry prominent notices stating that +you changed the files and the date of any change. + +

        +

      2. +
      3. +You must cause any work that you distribute or publish, that in +whole or in part contains or is derived from the Program or any +part thereof, to be licensed as a whole at no charge to all third +parties under the terms of this License. + +

        +

      4. +
      5. If the modified program normally reads commands interactively +when run, you must cause it, when started running for such +interactive use in the most ordinary way, to print or display an +announcement including an appropriate copyright notice and a +notice that there is no warranty (or else, saying that you provide +a warranty) and that users may redistribute the program under +these conditions, and telling the user how to view a copy of this +License. (Exception: if the Program itself is interactive but +does not normally print such an announcement, your work based on +the Program is not required to print an announcement.) + +

        +

      6. +
      + +

      +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +

      +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +

      +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + +

      +

    6. +
    7. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + +

      + +

        +
      1. +Accompany it with the complete corresponding machine-readable +source code, which must be distributed under the terms of Sections +1 and 2 above on a medium customarily used for software interchange; or, + +

        +

      2. +
      3. +Accompany it with a written offer, valid for at least three +years, to give any third party, for a charge no more than your +cost of physically performing source distribution, a complete +machine-readable copy of the corresponding source code, to be +distributed under the terms of Sections 1 and 2 above on a medium +customarily used for software interchange; or, + +

        +

      4. +
      5. +Accompany it with the information you received as to the offer +to distribute corresponding source code. (This alternative is +allowed only for noncommercial distribution and only if you +received the program in object code or executable form with such +an offer, in accord with Subsection b above.) + +

        +

      6. +
      + +

      +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +

      +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + +

      +

    8. +
    9. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + +

      +

    10. +
    11. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + +

      +

    12. +
    13. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + +

      +

    14. +
    15. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +

      +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +

      +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +

      +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + +

      +

    16. +
    17. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + +

      +

    18. +
    19. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +

      +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and ``any +later version'', you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + +

      +

    20. +
    21. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + +

      +

      + +NO WARRANTY + + +
      + +

      +

    22. +
    23. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + +

      +

    24. +
    25. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +

      +

    26. +
    + +

    +

    +END OF TERMS AND CONDITIONS + +
    + +

    + +

    + +

    +Appendix: How to Apply These Terms to Your New Programs +

    + +

    +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + +

    +To do so, attach the following notices to the program. It is safest to + attach them to the start of each source file to most effectively convey + the exclusion of warranty; and each file should have at least the + ``copyright'' line and a pointer to where the full notice is found. + +

    +

    +one line to give the program's name and a brief idea of what it does. +
    +Copyright (C) yyyy name of author +
    +

    +

    This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. +
    +

    +

    This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +
    +

    +

    You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +
    + +

    +Also add information on how to contact you by electronic and paper mail. + +

    +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + +

    +

    +Gnomovision version 69, Copyright (C) yyyy name of author +
    +Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. +
    +This is free software, and you are welcome to redistribute it +under certain conditions; type `show c' for details. + +
    + +

    +The hypothetical commands show w and show c should show the +appropriate parts of the General Public License. Of course, the commands +you use may be called something other than show w and show c; +they could even be mouse-clicks or menu items--whatever suits your +program. + +

    +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a ``copyright disclaimer'' for the program, if +necessary. Here is a sample; alter the names: + +

    +

    +Yoyodyne, Inc., hereby disclaims all copyright interest in the program +
    `Gnomovision' (which makes passes at compilers) written by James Hacker. +
    +

    +

    signature of Ty Coon, 1 April 1989 +
    +Ty Coon, President of Vice + +
    + +

    +This General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications +with the library. If this is what you want to do, use the GNU Library +General Public License instead of this License. + +

    + +

    + + + + diff --git a/ionconf/node9.html b/ionconf/node9.html new file mode 100644 index 0000000..69a5aff --- /dev/null +++ b/ionconf/node9.html @@ -0,0 +1,103 @@ + + + + + +B. Full class hierarchy visible to Lua-side + + + + + + + + + + + + + + + + + + + + + + +

    + +
    +B. Full class hierarchy visible to Lua-side +

    + +

    +

    +    Obj
    +     |-->WHook
    +     |-->WTimer
    +     |-->WMoveresMode
    +     |-->WMgmtMode (mod_mgmtmode)
    +     |-->WRegion
    +     |    |-->WClientWin
    +     |    |-->WWindow
    +     |    |    |-->WRootWin
    +     |    |    |-->WMPlex
    +     |    |    |    |-->WScreen
    +     |    |    |    |-->WFrame
    +     |    |    |-->WInfoWin
    +     |    |    |    |-->WStatusBar (mod_statusbar)
    +     |    |    |-->WMenu (mod_menu)
    +     |    |    |-->WInput (mod_query)
    +     |    |         |-->WEdln (mod_query)
    +     |    |         |-->WMessage (mod_query)
    +     |    |-->WGroup
    +     |    |    |-->WGroupWS
    +     |    |    |-->WGroupCW
    +     |    |-->WTiling (mod_tiling)
    +     |-->WSplit (mod_tiling)
    +          |-->WSplitInner (mod_tiling)
    +          |    |-->WSplitSplit (mod_tiling)
    +          |         |-->WSplitFloat (mod_tiling)
    +          |-->WSplitRegion (mod_tiling)
    +               |-->WSplitST (mod_tiling)
    +
    + +

    +


    + + + diff --git a/ionconf/prev.png b/ionconf/prev.png new file mode 100644 index 0000000000000000000000000000000000000000..e60b8b4073572dcd83b07c60b082ea6e2ba394c9 GIT binary patch literal 279 zcmV+y0qFjTP)fWJ4@hJr9=)Yx5|PDs2VC9?nk002ovPDHLkV1i^Ya=-up literal 0 HcmV?d00001 diff --git a/ionconf/prev_g.png b/ionconf/prev_g.png new file mode 100644 index 0000000000000000000000000000000000000000..476d9568c900e2ada6c2019b67eeee166a5f1288 GIT binary patch literal 327 zcmV-N0l5B&P)18~ zIpil5yY|hg&aw;rvXQ~olHp&x|G5Aw{ug* Z|8M28X+2RX!WaMm002ovPDHLkV1gF^iYx#C literal 0 HcmV?d00001 diff --git a/ionconf/up.png b/ionconf/up.png new file mode 100644 index 0000000000000000000000000000000000000000..3937e168f44bc997766dbe3b9383bd1db44f094d GIT binary patch literal 211 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

    M*2O$dK+?e6&efHyC?NN(9x6jl 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 literal 0 HcmV?d00001 diff --git a/ionnotes.out b/ionnotes.out new file mode 100644 index 0000000..f29e5e3 --- /dev/null +++ b/ionnotes.out @@ -0,0 +1,22 @@ +\BOOKMARK [1][-]{section.1}{ Class and object hierarchies}{} +\BOOKMARK [2][-]{subsection.1.1}{ Class hierarchy}{section.1} +\BOOKMARK [2][-]{subsection.1.2}{ Object hierarchies: WRegion parents and managers}{section.1} +\BOOKMARK [3][-]{subsubsection.1.2.1}{ Parent--child relations}{subsection.1.2} +\BOOKMARK [3][-]{subsubsection.1.2.2}{ Manager--managed relations}{subsection.1.2} +\BOOKMARK [2][-]{subsection.1.3}{ Summary}{section.1} +\BOOKMARK [1][-]{section.2}{ Object system implementation}{} +\BOOKMARK [1][-]{section.3}{ The Lua interface}{} +\BOOKMARK [2][-]{subsection.3.1}{ Supported types}{section.3} +\BOOKMARK [2][-]{subsection.3.2}{ Exporting functions}{section.3} +\BOOKMARK [2][-]{subsection.3.3}{ Calling Lua functions and code}{section.3} +\BOOKMARK [2][-]{subsection.3.4}{ Miscellaneous notes}{section.3} +\BOOKMARK [1][-]{section.4}{ Miscellaneous design notes}{} +\BOOKMARK [2][-]{subsection.4.1}{ Destroying WObj:s}{section.4} +\BOOKMARK [2][-]{lstlisting.-36}{ The types !char*! and !const char*! as function parameters and return values}{section.4} +\BOOKMARK [1][-]{section.5}{ C coding style}{} +\BOOKMARK [2][-]{subsection.5.1}{ Whitespace}{section.5} +\BOOKMARK [2][-]{subsection.5.2}{ Braces}{section.5} +\BOOKMARK [2][-]{subsection.5.3}{ Names}{section.5} +\BOOKMARK [2][-]{subsection.5.4}{ Miscellaneous}{section.5} +\BOOKMARK [1][-]{section.A}{ The GNU General Public License}{} +\BOOKMARK [1][-]{section*.4}{Index}{} diff --git a/ionnotes.ps.gz b/ionnotes.ps.gz new file mode 100644 index 0000000000000000000000000000000000000000..d432ffb83576a7cfdbc9e77265d89c84b6d008ad GIT binary patch literal 109113 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

    >*a)QS~+crC1H9RHpv0iGLtk8nc{@(PN~>7fv& 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 literal 0 HcmV?d00001 diff --git a/ionnotes/index.html b/ionnotes/index.html new file mode 100644 index 0000000..27c31f2 --- /dev/null +++ b/ionnotes/index.html @@ -0,0 +1,172 @@ + + + + + +Ion: Notes for the module and patch writer + + + + + + + + + + + + + + + + +

    + + +

    +

    Ion: Notes for the module and patch writer

    +
    + +

    Tuomo Valkonen

    +

    tuomov at iki.fi

    +
    + +

    +Ion: Notes for the module and patch writer +
    +Copyright © 2003-2004 Tuomo Valkonen. + +

    +This document is free; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +

    +This document is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +section entitled ''GNU General Public License'' for more details. + +

    + +

    +
    + +

    + +

    Abstract:

    +
    + This document is an unorganized collection of notes for + those who want to write modules or patches to Ion. +
    +

    + +

    +


    + + + + + +

    + + + diff --git a/ionnotes/index.png b/ionnotes/index.png new file mode 100644 index 0000000000000000000000000000000000000000..698f09cae4df23447bf608d2a585bd4d5972c27d GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^+CVJ9#LU3Jn0f2YF(8L0z$e6Y|Ni~?`T5VEKaXZ$ zILr2UCs3TRB*-tA!Qt7BG$3b&r;B4q#hlW9TP`L;fmV5yrw%$cCme3Ee&-OYn%|JV z;eHbLNzG*&z8F|Gv`(HGd$F~)u_nK+LS=<8R{%>WqskW{Rg3J}7qSOsCi?q75nH?M zE^{77+Z<+1r-r1Nch|4lthS=d{J1PfXUU1#ym22LZu_2=vAt}Pd}!6<{pzf1?Y4jM u^4(GWO*wx3{4#&$%6k3J$8QJwOy|GN;;5Q**1ZVmMg~t;KbLh*2~7aKlwD!~ literal 0 HcmV?d00001 diff --git a/ionnotes/internals.pl b/ionnotes/internals.pl new file mode 100644 index 0000000..89e33bb --- /dev/null +++ b/ionnotes/internals.pl @@ -0,0 +1,34 @@ +# LaTeX2HTML 2002-2-1 (1.71) +# Associate internals original text with physical files. + + +$key = q/sec:objects/; +$ref_files{$key} = "$dir".q|node2.html|; +$noresave{$key} = "$nosave"; + +$key = q/fig:parentship/; +$ref_files{$key} = "$dir".q|node2.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:supptypes/; +$ref_files{$key} = "$dir".q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:calling/; +$ref_files{$key} = "$dir".q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fig:managership/; +$ref_files{$key} = "$dir".q|node2.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:exporting/; +$ref_files{$key} = "$dir".q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fig:classhierarchy/; +$ref_files{$key} = "$dir".q|node2.html|; +$noresave{$key} = "$nosave"; + +1; + diff --git a/ionnotes/ionnotes.css b/ionnotes/ionnotes.css new file mode 100644 index 0000000..d22be91 --- /dev/null +++ b/ionnotes/ionnotes.css @@ -0,0 +1,37 @@ +/* Century Schoolbook font is very similar to Computer Modern Math: cmmi */ +.MATH { font-family: "Century Schoolbook", serif; } +.MATH I { font-family: "Century Schoolbook", serif; font-style: italic } +.BOLDMATH { font-family: "Century Schoolbook", serif; font-weight: bold } + +/* implement both fixed-size and relative sizes */ +SMALL.XTINY { font-size : xx-small } +SMALL.TINY { font-size : x-small } +SMALL.SCRIPTSIZE { font-size : smaller } +SMALL.FOOTNOTESIZE { font-size : small } +SMALL.SMALL { } +BIG.LARGE { } +BIG.XLARGE { font-size : large } +BIG.XXLARGE { font-size : x-large } +BIG.HUGE { font-size : larger } +BIG.XHUGE { font-size : xx-large } + +/* heading styles */ +H1 { } +H2 { } +H3 { } +H4 { } +H5 { } + +/* mathematics styles */ +DIV.displaymath { } /* math displays */ +TD.eqno { } /* equation-number cells */ + + +/* document-specific styles come next */ +DIV.navigation { } +DIV.center { } +SPAN.sc { } +DIV.quote { } +PRE.preform { } +SPAN.textit { font-style: italic } +SPAN.arabic { } diff --git a/ionnotes/ionnotes.html b/ionnotes/ionnotes.html new file mode 100644 index 0000000..27c31f2 --- /dev/null +++ b/ionnotes/ionnotes.html @@ -0,0 +1,172 @@ + + + + + +Ion: Notes for the module and patch writer + + + + + + + + + + + + + + + + + + + +

    +

    Ion: Notes for the module and patch writer

    +
    + +

    Tuomo Valkonen

    +

    tuomov at iki.fi

    +
    + +

    +Ion: Notes for the module and patch writer +
    +Copyright © 2003-2004 Tuomo Valkonen. + +

    +This document is free; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +

    +This document is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +section entitled ''GNU General Public License'' for more details. + +

    + +

    +
    + +

    + +

    Abstract:

    +
    + This document is an unorganized collection of notes for + those who want to write modules or patches to Ion. +
    +

    + +

    +


    + + + + + +

    + + + diff --git a/ionnotes/labels.pl b/ionnotes/labels.pl new file mode 100644 index 0000000..2c1867a --- /dev/null +++ b/ionnotes/labels.pl @@ -0,0 +1,69 @@ +# LaTeX2HTML 2002-2-1 (1.71) +# Associate labels original text with physical files. + + +$key = q/sec:objects/; +$external_labels{$key} = "$URL/" . q|node2.html|; +$noresave{$key} = "$nosave"; + +$key = q/fig:parentship/; +$external_labels{$key} = "$URL/" . q|node2.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:supptypes/; +$external_labels{$key} = "$URL/" . q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:calling/; +$external_labels{$key} = "$URL/" . q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fig:managership/; +$external_labels{$key} = "$URL/" . q|node2.html|; +$noresave{$key} = "$nosave"; + +$key = q/sec:exporting/; +$external_labels{$key} = "$URL/" . q|node4.html|; +$noresave{$key} = "$nosave"; + +$key = q/fig:classhierarchy/; +$external_labels{$key} = "$URL/" . q|node2.html|; +$noresave{$key} = "$nosave"; + +1; + + +# LaTeX2HTML 2002-2-1 (1.71) +# labels from external_latex_labels array. + + +$key = q/sec:objects/; +$external_latex_labels{$key} = q|1|; +$noresave{$key} = "$nosave"; + +$key = q/fig:parentship/; +$external_latex_labels{$key} = q|2|; +$noresave{$key} = "$nosave"; + +$key = q/sec:supptypes/; +$external_latex_labels{$key} = q|3.1|; +$noresave{$key} = "$nosave"; + +$key = q/sec:calling/; +$external_latex_labels{$key} = q|3.3|; +$noresave{$key} = "$nosave"; + +$key = q/fig:managership/; +$external_latex_labels{$key} = q|3|; +$noresave{$key} = "$nosave"; + +$key = q/sec:exporting/; +$external_latex_labels{$key} = q|3.2|; +$noresave{$key} = "$nosave"; + +$key = q/fig:classhierarchy/; +$external_latex_labels{$key} = q|1|; +$noresave{$key} = "$nosave"; + +1; + diff --git a/ionnotes/next.png b/ionnotes/next.png new file mode 100644 index 0000000000000000000000000000000000000000..1628652aac7cff4b24228abd9908c320c6026a7c GIT binary patch literal 245 zcmVQ2aP`rsfsL)H8>rF50IrEKQ7U2mrM!9=R9*Dw1X+@W9RTx^a-#5T6$bi^4|h!q3s vo9V3RdqZP$JTTh9!JZ)`voZLAB<&|;0_>J~#QNZkD16SAR=O4@7anKqmC5&ngT;#rH1+qK z20S~FlZynq-MY=T{~%>KNs884sExd44P^%bf!zNDPxW#x21^f><@$FgzM-=J5cLN5 WGDyh~oC>l40000 + + + + +Contents + + + + + + + + + + + + + + + + + + + + + +
    + +

    +Contents +

    + + + + +

    + +

    +


    + + + diff --git a/ionnotes/node2.html b/ionnotes/node2.html new file mode 100644 index 0000000..e25fd2d --- /dev/null +++ b/ionnotes/node2.html @@ -0,0 +1,444 @@ + + + + + +1 Class and object hierarchies + + + + + + + + + + + + + + + + + + + + + + +Subsections + + + +
    + +

    + +
    +1 Class and object hierarchies +

    + +

    +While Ion does not not have a truly object-oriented design +1, +things that appear on the computer screen are, however, quite +naturally expressed as such ''objects''. Therefore Ion implements +a rather primitive OO system for these screen objects and some +other things. + +

    +It is essential for the module writer to learn this object +system, but also people who write their own binding configuration files +necessarily come into contact with the class and object hierarchies +- you need to know which binding setup routines apply where, +and what functions can be used as handlers in which bindings. +It is the purpose of this section to attempt to explain these +hierarchies. If you do not wish the read the full section, at least +read the summary at the end of it, so that you understand the very +basic relations. + +

    +For simplicity we consider only the essential-for-basic-configuration +Ioncore, mod_tiling and mod_query classes. +See Appendix [*] for the full class hierachy visible +to Lua side. + +

    + +

    +1.1 Class hierarchy +

    + +

    +One of the most important principles of object-oriented design methodology +is inheritance; roughly how classes (objects are instances of classes) +extend on others' features. Inheritance gives rise to class hierarchy. +In the case of single-inheritance this hierarchy can be expressed as a +tree where the class at the root is inherited by all others below it +and so on. Figure 1 lists out the Ion class +hierarchy and below we explain what features of Ion the classes +implement. + +

    + +

    + + + +
    Figure 1: +Partial Ioncore, mod_tiling and mod_query + class hierarchy.
    +    Obj
    +     |-->WRegion
    +     |    |-->WClientWin
    +     |    |-->WWindow
    +     |    |    |-->WRootWin
    +     |    |    |-->WMPlex
    +     |    |    |    |-->WScreen
    +     |    |    |    |-->WFrame
    +     |    |    |-->WInput (mod_query)
    +     |    |         |-->WEdln (mod_query)
    +     |    |         |-->WMessage (mod_query)
    +     |    |-->WGroup
    +     |    |    |-->WGroupWS
    +     |    |    |-->WGroupCW
    +     |    |-->WTiling (mod_tiling)
    +     |-->WSplit (mod_tiling)
    +
    +
    + +

    +The core classes: + +

    +

    +
    Obj
    +
    + Is the base of Ion's object system. + +

    +

    +
    WRegion
    +
    + is the base class for everything corresponding to something on the + screen. Each object of type WRegion has a size and position + relative to the parent WRegion. While a big part of Ion + operates on these instead of more specialised classes, WRegion + is a ''virtual'' base class in that there are no objects of ''pure'' + type WRegion; all concrete regions are objects of some class + that inherits WRegion. + +

    +

    +
    WClientWin
    +
    is a class for + client window objects, the objects that window managers are + supposed to manage. + +

    +

    +
    WWindow
    +
    is the base class for all + internal objects having an X window associated to them + (WClientWins also have X windows associated to them). + +

    +

    +
    WRootWin
    +
    is the class for + root windows of X screens. + Note that an ''X screen'' or root window is not necessarily a + single physical screen as a root window + may be split over multiple screens when multi-head extensions + such as Xinerama are used. (Actually there + can be only one WRootWin when Xinerama is used.) + +

    +

    +
    WMPlex
    +
    is a base class for all regions that''multiplex'' + other regions. This means that of the regions managed by the multiplexer, + only one can be displayed at a time. Classes that inhereit WMPlex + include screens and frames. + +

    +

    +
    WScreen
    +
    is the class for objects + corresponding to physical screens. Screens may share a root + window when Xinerama multihead extensions are used as explained + above. + +

    +

    +
    WFrame
    +
    is the class for frames. + While most Ion's objects have no graphical presentation, frames basically + add to WMPlexes the decorations around client windows + (borders, tabs). + +

    +

    +
    WGroup
    +
    is the base class for groups. + Particular types of groups are workspaces + (WGroupWS) + and groups of client windows + (WGroupCW). +
    +
    + +

    +Classes implemented by the mod_tiling module: + +

    +

    +
    WTiling
    +
    is the class for tilings + of frames. + +
    +
    WSplit
    +
    (or, more specifically, classes + that inherit it) encode the WTiling tree structure. +
    +
    + +

    +Classes implemented by the mod_query module: + +

    +

    +
    WInput
    +
    is a virtual base class for the + two classes below. + +
    +
    WEdln
    +
    is the class for the ''queries'', + the text inputs that usually appear at bottoms of frames and sometimes + screens. Queries are the functional equivalent of ''mini buffers'' in + many text editors. + +
    +
    WMessage
    +
    implements the boxes for + warning and other messages that Ion may wish to display to the user. + These also usually appear at bottoms of frames. +
    +
    + +

    +There are also some other ''proxy'' classes that do not refer +to objects on the screen. The only important one of these for +basic configuration is WMoveresMode that is used for +binding callbacks in the move and resize mode. + +

    + +

    +1.2 Object hierarchies: WRegion parents and managers +

    + +

    + +

    +1.2.1 Parent-child relations +

    +Each object of type WRegion has a parent and possibly a manager +associated to it. The parent for an object is always a +WWindow and for WRegion with an X window (WClientWin, +WWindow) the parent WWindow is given by the same relation of +the X windows. For other WRegions the relation is not as clear. +There is generally very few restrictions other than the above on the +parent--child relation but the most common is as described in +Figure 2. + +

    + +

    + + + +
    Figure 2: +Most common parent-child relations
    +    WRootWins
    +     |-->WScreens
    +          |-->WGroupWSs
    +          |-->WTilings
    +          |-->WClientWins in full screen mode
    +          |-->WFrames
    +               |-->WGroupCWs
    +               |-->WClientWins
    +               |-->WFrames for transients
    +               |-->a possible WEdln or WMessage
    +
    +
    + +

    +WRegions have very little control over their children as a parent. +The manager WRegion has much more control over its +managed WRegions. Managers, for example, handle resize requests, +focusing and displaying of the managed regions. Indeed the manager--managed +relationship gives a better picture of the logical ordering of objects on +the screen. Again, there are generally few limits, but the most common +hierarchy is given in Figure 3. Note that sometimes +the parent and manager are the same object and not all objects may have +a manager (e.g. the dock in the dock module at the time of writing this) +but all have a parent-a screen if not anything else. + +

    + +

    +1.2.2 Manager-managed relations +

    + +

    + +

    + + + +
    Figure 3: +Most common manager-managed relations
    +    WRootWins
    +     |-->WScreens
    +          |-->WGroupCWs for full screen WClientWins
    +          |    |-->WClientWins
    +          |    |-->WFrames for transients (dialogs)
    +          |         |--> WClientWin
    +          |-->WGroupWSs for workspaces
    +          |    |-->WTiling
    +          |    |    |-->possibly a WEdln, WMessage or WMenu
    +          |    |    |-->WFrames
    +          |    |         |-->WGroupCWs (with contents as above)
    +          |    |-->WFrames for floating content
    +          |-->WFrames for sticky stuff, such as the scratchpad
    +
    +
    + +

    +Note that a workspace can manage another workspace. This can be +achieved with the attach_new function, and allows you to nest +workspaces as deep as you want. + +

    + +

    +1.3 Summary +

    + +

    +In the standard setup, keeping queries, messages and menus out of +consideration: + +

    + +

      +
    • The top-level objects that matter are screens and they correspond + to physical screens. The class for screens is WScreen. +
    • +
    • Screens contain (multiplex) groups (WGroup) and other + objects, such as WFrames. Some of these are mutually exclusive + to be viewed at a time. +
    • +
    • Groups of the specific kind WGroupWS often contain a + WTiling tiling for tiling frames (WFrame), but + groups may also directly contain floating frames. +
    • +
    • Frames are the objects with decorations such as tabs and borders. + Frames contain (multiplex) among others (groups of) client windows, + to each of which corresponds a tab in the frame's decoration. Only + one client window (or other object) can be shown at a time in each + frame. The class for client windows is WClientWin. +
    • +
    + +

    +


    Footnotes

    +
    +
    ... design1
    +
    the author doesn't like such artificial designs + +
    +
    + + + + + diff --git a/ionnotes/node3.html b/ionnotes/node3.html new file mode 100644 index 0000000..4f17c4e --- /dev/null +++ b/ionnotes/node3.html @@ -0,0 +1,121 @@ + + + + + +2 Object system implementation + + + + + + + + + + + + + + + + + + + + + + +

    +2 Object system implementation +

    + +

    +First, to get things clear, what are considered objects here are C +structures containing a properly initialized +structure defined in ioncore/obj.h as the first element (or the +first element of the structure which is the first element and so on which +gives rise to inheritance). The WObj structure contains a pointer +to a WObjDescr class type info structure and +a list of so called ''watches''. The WObjDescr structure simply +lists the class name, a table of dynamic functions and a pointer to +deinitialisation function (or ''destructor''). + +

    +Ion does not do any reference counting, garbage collecting or other +fancy things related to automatic safe freeing of objects with its +simplistic object system. Instead special watches (the WWatch + structure) may be used to create safe references to +objects that might be destroyed during the time the specific pointer is +needed. When an object is destroyed, its list of watches is processed, +setting the pointers in the watches to NULL and the watch handlers for +each watch are called. + +

    + +

    + +

    + + + + diff --git a/ionnotes/node4.html b/ionnotes/node4.html new file mode 100644 index 0000000..037e8bc --- /dev/null +++ b/ionnotes/node4.html @@ -0,0 +1,310 @@ + + + + + +3 The Lua interface + + + + + + + + + + + + + + + + + + + + + + +Subsections + + + +
    + +

    +3 The Lua interface +

    + +

    +This section finally describes the implementation details and how modules +should us the Lua interface. First, in section 3.1 +we look at types supported by the interface, how objects are passed to Lua +code and how Lua tables should be accessed from Ion and modules. In section +3.2 the methods for exporting functions and how they +are called from Lua are explained and in section 3.3 the +method for calling Lua functions is explained. + +

    + +

    + +
    +3.1 Supported types +

    + +

    +The following types are supported in passing parameters between the +C side of Ion and Lua: + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Identifier + characterC typeDescription
    iintInteger
    schar*String
    Sconst char*Constant string
    ddouble 
    bbool 
    tExtlTabReference to Lua table
    fExltFnReference to Lua function.
    oAny WObj* 
    + +

    +The difference between identifiers 's' and 'S' is that constant +strings as return values are not free'd by the level 1 call handler +(see below) after passing to Lua (lua_pushstring always makes a +copy) unlike normal strings. String parameters are always assumed to be +the property of the caller and thus implicitly const. + +

    +Likewise, if a reference to 't' or 'f' is wished to be stored +beyond the lifetime of a function receiving such as an argument, a new +reference should be created with extl_ref_table/fn. +References can be free'd with +extl_unref_table/fn. References gotten as return values with +the extl_table_get (how these work should be self-explanatory!) +functions are property of the caller and should be unreferenced with the +above-mentioned functions when no longer needed. +The functions extl_fn/table_none() +return the equivalent of NULL. + +

    +WObjs are passed to Lua code with WWatch userdatas pointing to +them so the objects can be safely deleted although Lua code might still be +referencing them. (This is why SWIG or tolua would not have helped in +creating the interface: extra wrappers for each function would still +have been needed to nicely integrate into Ion's object system. Even in +the case that Ion was written in C++ this would be so unless extra bloat +adding pointer-like objects were used everywhere instead of pointers.) +It may be sometimes necessary check in Lua code that a value known to +be an Ion WObj is of certain type. This can be accomplished with +obj_is(obj, "typename"). obj_typename(obj) returns type +name for a WObj. + +

    + +

    + +
    +3.2 Exporting functions +

    + +

    +Exported functions (those available to the extension language) are +defined by placing EXTL_EXPORT before the function implementation +in the C source. The script mkexports.pl is then used to automatically +generate exports.c from the source files if +MAKE_EXPORTS=modulename +is specified in the Makefile. All pointers with type beginning with a 'W' +are assumed to be pointers to something inheriting WObj. In +addition to a table of exported functions and second level call handlers +for these, exports.c will contain two functions +module_register_exports() and +module_unregister_exports() that should then be called in module +initialisation and deinitialisation code. + +

    +You've seen the terms level 1 and 2 call handler mentioned above. + +The Lua support code uses two so called call handlers to convert and check +the types of parameters passed from Lua to C and back to Lua. The first +one of these call handlers is the same for all exported functions and +indeed lua sees all exported as the same C function (the L1 call handler) +but with different upvalues passing a structure describing the actual +function and the second level call handler. The L1 call handler checks +that the parameters received from Lua match a template given as a string +of the identifier characters defined above. If everything checks out ok, +the parameters are then put in an array of C unions that can contain +anyof these known types and the L2 call handler is called. + +

    +The L2 call handler (which is automatically generated by the mkexports.pl +script) for each exported function checks that the passed WObjs +are of the more refined type required by the function and then calls the +actual function. While the WObj checking could be done in the L1 handler +too, the L2 call handlers are needed because we may not know how the target +platform passes each parameter type to the called function. Thefore we +must let the C compiler generate the code to convert from a simple and +known enough parameter passing method (the unions) to the actual +parameter passing method. When the called function returns everything +is done in reverse order for return values (only one return value is +supported by the generated L2 call handlers). + +

    + +

    + +
    +3.3 Calling Lua functions and code +

    + +

    +The functions +extl_call, +extl_call_named, +extl_dofile and +extl_dostring +call a referenced function (ExtlFn), named function, execute a +string and a file, respectively. The rest of the parameters for all these +functions are similar. The 'spec' argument is a string of identifier +characters (see above) describing the parameters to be passed. These +parameters follow after 'rspec'. For dofile and dostring these parameters +are passed in the global table arg (same as used for program command +lien parameters) and for functions as you might expect. The parameter +'rspec' is a similar description of return values. Pointers to variables +that should be set to the return values follow after the input values. +The return value of all these functions tells if the call and parameter +passing succeeded or not. + +

    +Sometimes it is necessary to block calls to all but a limited set of +Ion functions. This can be accomplished with +extl_set_safelist. +The parameter to this function is a NULL-terminated array of strings +and the return value is a similar old safelist. +The call extl_set_safelist(NULL) removes any safelist and allows +calls to all exported functions. + +

    + +

    +3.4 Miscellaneous notes +

    + +

    +Configuration files should be read as before with the function +read_config_for +except that the list of known options is no longer present. + +

    +Winprops are now stored in Lua tables and can contain arbitrary +properties. The 'proptab' entry in each WClientWin is a reference +to a winprop table or extl_table_none() if such does not exist +and properties may be read with the extl_table_gets functions. +(It is perfectly legal to pass extl_table_none() references to +extl_table_get*.) + +

    + +

    + + + + diff --git a/ionnotes/node5.html b/ionnotes/node5.html new file mode 100644 index 0000000..51c46f8 --- /dev/null +++ b/ionnotes/node5.html @@ -0,0 +1,188 @@ + + + + + +4 Miscellaneous design notes + + + + + + + + + + + + + + + + + + + + + + +Subsections + + + +
    + +

    +4 Miscellaneous design notes +

    + +

    + +

    +4.1 Destroying WObj:s +

    + +

    +To keep Ion's code as simple as possible yet safe, there are restrictions +when the WObj +destroy_obj +function that calls watches, the deinit routine and frees memory may +be called directly. In all other cases the +defer_destroy +function should be used to defer the call of destroy_obj until +Ioncore returns to its main event loop. + +

    +Calling the destroy_obj function directly is allowed in the +following cases: + +

      +
    • In the deinit handler for another object. Usually managed objects + are destroyed this way. +
    • +
    • The object was created during the current call to the function + that wants to get rid of the object. This is the case, for example, + when the function created a frame to manage some other object but for + some reason failed to reparent the object to this frame. +
    • +
    • In a deferred action handler set with + defer_action. + Like deferred destroys, other deferred actions are called when + Ioncore has returned to the main loop. +
    • +
    • You are absolute sure that C code outside your code has no + references to the object. +
    • +
    + +

    +If there are no serious side effects from deferring destroying the +object or you're unsure whether it is safe to destroy the object +immediately, use defer_destroy. + +

    + +

    +4.2 The types char* and const char* as function + parameters and return values +

    + +

    +The following rules should apply to using strings as return values and +parameters to functions. + +

    + + + + + + + + + + + + + +
    TypeReturn valueParameter
    const char*The string is owned by the called function + and the caller is only quaranteed short-term read access to the + string.The called function may only read the string during its execution. + For further reference a copy must be made.
    char*The string is the caller's responsibility and it + must free it when no longer needed.The called function may modify the string but the ''owner'' of + the string is case-dependant.
    + +

    + +

    + +

    + + + + diff --git a/ionnotes/node6.html b/ionnotes/node6.html new file mode 100644 index 0000000..8c20249 --- /dev/null +++ b/ionnotes/node6.html @@ -0,0 +1,285 @@ + + + + + +5 C coding style + + + + + + + + + + + + + + + + + + + + + + +Subsections + + + +
    + +

    +5 C coding style +

    + +

    +If you want to submit patches to Ion, you MUST follow my coding +style, even if you think it is the root of all evil. We don't want +the code to be an incomprehensible mess of styles and I have better +things to do than fix other people's style to match mine. The style +should be obvious by studying the source, but here's a list of some +things to take note of. + +

    + +

    +5.1 Whitespace +

    + +

    + +

      +
    • Indentations of 4 with tab size=4. + +

      +

    • +
    • No extra spaces between operators, delimiters etc. except + +
        +
      • around logical and, or (&&, ||) +
      • +
      • around the conditional a ? b : c +
      • +
      • after commas and semicolons + +
      • +
      + In my opinion this helps pointing out arithmetic or other + expressions within logical expressions or parameter lists. + +

      +

    • +
    • All kinds of labels are out-tended to the level of the higher + level block. For example: + +

      +

          
      +void foo()
      +{
      +again:
      +    switch(asdf){
      +    case 1:
      +        ...
      +        break;
      +    default:
      +        ...
      +        break;
      +    }
      +}
      +
      +
    • +
    + +

    + +

    +5.2 Braces +

    + +

    + +

      +
    • Opening brace is at the end of the line, except in function + bodies, where it is at the beginning of the line following + the definition. + +

      +

    • +
    • Never put the body of a control statement on the same line + with the statement (e.g. if(foo){ bar() }). + +

      +For example, the block +

          
      +void foo(int a, int b)
      +{
      +    if(a==b && c+d==e){
      +        ...
      +    }
      +}
      +
      + +

      +has correct style while the block + +

      +

         
      +void foo(int a,int b) {
      +    if (a == b && c + d == e) {
      +        ...
      +    }
      +}
      +
      + +

      +does not. + +

      +

    • +
    • The else keyword follows immediately after the closing brace of + previous if, if any. (This might change so I don't care if you put + it on the next line.) + +

      +

    • +
    • I have used the convention that control statement bodies containing + a single statement do not need braces around the block if, in case of + the if all the blocks in if ... else if ... else + contain just one statement. If you want to, just use braces in every + case. +
    • +
    + +

    + +

    +5.3 Names +

    + +

    + +

      +
    • Function and variable names only have lower case letters. Type + names are in mixed case while constants and macros (#defines) + are in upper case letters. +
    • +
    + +

    + +

    +5.4 Miscellaneous +

    + +

    + +

      +
    • In the definition of a pointer variable, the asterisk is attached + to the variable name: char *s;. (One could claim this an + exception to the second rule.) + +

      +

    • +
    • You might optionally want to use Jed's foldings to group blocks + of related code in a file to keep it organized: + +

      +

          
      +/*{{{ Many related functions */
      +	
      +void code()
      +{
      +    ...	
      +}
      +
      +...
      +
      +/*}}}*/
      +
      +
    • +
    + +

    +I think that's mostly it. Study the source when in doubt. + +

    + +

    + +

    + + + + diff --git a/ionnotes/node7.html b/ionnotes/node7.html new file mode 100644 index 0000000..7e36403 --- /dev/null +++ b/ionnotes/node7.html @@ -0,0 +1,597 @@ + + + + + +A. The GNU General Public License + + + + + + + + + + + + + + + + + + + + + + +Subsections + + + +
    + +

    +A. The GNU General Public License +

    + +

    +

    +
    +

    +

    Version 2, June 1991 +
    +

    +

    Copyright © 1989, 1991 Free Software Foundation, Inc. +
    +

    +

    +

    +
    +

    +

    +

    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA +
    +

    +

    +

    +
    +

    +

    +

    Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + + +
    + +

    +

    +Preamble + +
    + +

    +The licenses for most software are designed to take away your freedom to +share and change it. By contrast, the GNU General Public License is +intended to guarantee your freedom to share and change free software--to +make sure the software is free for all its users. This General Public +License applies to most of the Free Software Foundation's software and to +any other program whose authors commit to using it. (Some other Free +Software Foundation software is covered by the GNU Library General Public +License instead.) You can apply it to your programs, too. + +

    +When we speak of free software, we are referring to freedom, not price. +Our General Public Licenses are designed to make sure that you have the +freedom to distribute copies of free software (and charge for this service +if you wish), that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free programs; +and that you know you can do these things. + +

    +To protect your rights, we need to make restrictions that forbid anyone to +deny you these rights or to ask you to surrender the rights. These +restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + +

    +For example, if you distribute copies of such a program, whether gratis or +for a fee, you must give the recipients all the rights that you have. You +must make sure that they, too, receive or can get the source code. And +you must show them these terms so they know their rights. + +

    +We protect your rights with two steps: (1) copyright the software, and (2) +offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + +

    +Also, for each author's protection and ours, we want to make certain that +everyone understands that there is no warranty for this free software. If +the software is modified by someone else and passed on, we want its +recipients to know that what they have is not the original, so that any +problems introduced by others will not reflect on the original authors' +reputations. + +

    +Finally, any free program is threatened constantly by software patents. +We wish to avoid the danger that redistributors of a free program will +individually obtain patent licenses, in effect making the program +proprietary. To prevent this, we have made it clear that any patent must +be licensed for everyone's free use or not licensed at all. + +

    +The precise terms and conditions for copying, distribution and +modification follow. + +

    +

    +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND + MODIFICATION + +
    + +

    + +

      +
    1. +This License applies to any program or other work which contains a notice +placed by the copyright holder saying it may be distributed under the +terms of this General Public License. The ``Program'', below, refers to +any such program or work, and a ``work based on the Program'' means either +the Program or any derivative work under copyright law: that is to say, a +work containing the Program or a portion of it, either verbatim or with +modifications and/or translated into another language. (Hereinafter, +translation is included without limitation in the term ``modification''.) +Each licensee is addressed as ``you''. + +

      +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + +

      +

    2. +
    3. You may copy and distribute verbatim copies of the Program's source + code as you receive it, in any medium, provided that you conspicuously + and appropriately publish on each copy an appropriate copyright notice + and disclaimer of warranty; keep intact all the notices that refer to + this License and to the absence of any warranty; and give any other + recipients of the Program a copy of this License along with the Program. + +

      +You may charge a fee for the physical act of transferring a copy, and you +may at your option offer warranty protection in exchange for a fee. + +

      +

    4. +
    5. +You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + +

      + +

        +
      1. +You must cause the modified files to carry prominent notices stating that +you changed the files and the date of any change. + +

        +

      2. +
      3. +You must cause any work that you distribute or publish, that in +whole or in part contains or is derived from the Program or any +part thereof, to be licensed as a whole at no charge to all third +parties under the terms of this License. + +

        +

      4. +
      5. If the modified program normally reads commands interactively +when run, you must cause it, when started running for such +interactive use in the most ordinary way, to print or display an +announcement including an appropriate copyright notice and a +notice that there is no warranty (or else, saying that you provide +a warranty) and that users may redistribute the program under +these conditions, and telling the user how to view a copy of this +License. (Exception: if the Program itself is interactive but +does not normally print such an announcement, your work based on +the Program is not required to print an announcement.) + +

        +

      6. +
      + +

      +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +

      +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +

      +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + +

      +

    6. +
    7. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + +

      + +

        +
      1. +Accompany it with the complete corresponding machine-readable +source code, which must be distributed under the terms of Sections +1 and 2 above on a medium customarily used for software interchange; or, + +

        +

      2. +
      3. +Accompany it with a written offer, valid for at least three +years, to give any third party, for a charge no more than your +cost of physically performing source distribution, a complete +machine-readable copy of the corresponding source code, to be +distributed under the terms of Sections 1 and 2 above on a medium +customarily used for software interchange; or, + +

        +

      4. +
      5. +Accompany it with the information you received as to the offer +to distribute corresponding source code. (This alternative is +allowed only for noncommercial distribution and only if you +received the program in object code or executable form with such +an offer, in accord with Subsection b above.) + +

        +

      6. +
      + +

      +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +

      +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + +

      +

    8. +
    9. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + +

      +

    10. +
    11. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + +

      +

    12. +
    13. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + +

      +

    14. +
    15. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +

      +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +

      +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +

      +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + +

      +

    16. +
    17. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + +

      +

    18. +
    19. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +

      +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and ``any +later version'', you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + +

      +

    20. +
    21. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + +

      +

      + +NO WARRANTY + + +
      + +

      +

    22. +
    23. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + +

      +

    24. +
    25. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +

      +

    26. +
    + +

    +

    +END OF TERMS AND CONDITIONS + +
    + +

    + +

    + +

    +Appendix: How to Apply These Terms to Your New Programs +

    + +

    +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + +

    +To do so, attach the following notices to the program. It is safest to + attach them to the start of each source file to most effectively convey + the exclusion of warranty; and each file should have at least the + ``copyright'' line and a pointer to where the full notice is found. + +

    +

    +one line to give the program's name and a brief idea of what it does. +
    +Copyright (C) yyyy name of author +
    +

    +

    This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. +
    +

    +

    This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +
    +

    +

    You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +
    + +

    +Also add information on how to contact you by electronic and paper mail. + +

    +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + +

    +

    +Gnomovision version 69, Copyright (C) yyyy name of author +
    +Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. +
    +This is free software, and you are welcome to redistribute it +under certain conditions; type `show c' for details. + +
    + +

    +The hypothetical commands show w and show c should show the +appropriate parts of the General Public License. Of course, the commands +you use may be called something other than show w and show c; +they could even be mouse-clicks or menu items--whatever suits your +program. + +

    +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a ``copyright disclaimer'' for the program, if +necessary. Here is a sample; alter the names: + +

    +

    +Yoyodyne, Inc., hereby disclaims all copyright interest in the program +
    `Gnomovision' (which makes passes at compilers) written by James Hacker. +
    +

    +

    signature of Ty Coon, 1 April 1989 +
    +Ty Coon, President of Vice + +
    + +

    +This General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications +with the library. If this is what you want to do, use the GNU Library +General Public License instead of this License. + +

    + +

    + + + + diff --git a/ionnotes/node8.html b/ionnotes/node8.html new file mode 100644 index 0000000..0ec574a --- /dev/null +++ b/ionnotes/node8.html @@ -0,0 +1,139 @@ + + + + + +Index + + + + + + + + + + + + + + + + + + + + + +
    + +

    +Index +


    +
    call handler + : 3.2 +
    defer_action + : 4.1 +
    defer_destroy + : 4.1 +
    destroy_obj + : 4.1 +
    extl_call + : 3.3 +
    extl_call_named + : 3.3 +
    extl_dofile + : 3.3 +
    extl_dostring + : 3.3 +
    extl_set_safelist + : 3.3 +
    ExtlFn + : 3.1 +
    ExtlTab + : 3.1 +
    manager + : 1.2.1 +
    Obj + : 1.1 +
    parent + : 1.2.1 +
    read_config_for + : 3.4 +
    root window + : 1.1 +
    screen
    +
    physical : 1.1 +
    X : 1.1 +
    +
    WClientWin + : 1.1 +
    WEdln + : 1.1 +
    WFrame + : 1.1 +
    WGroup + : 1.1 +
    WGroupCW + : 1.1 +
    WGroupWS + : 1.1 +
    WInput + : 1.1 +
    WMessage + : 1.1 +
    WObj + : 2 +
    WObjDescr + : 2 +
    WRegion + : 1.1 +
    WRootWin + : 1.1 +
    WScreen + : 1.1 +
    WSplit + : 1.1 +
    WTiling + : 1.1 +
    WWatch + : 2 +
    WWindow + : 1.1 +
    Xinerama + : 1.1 + +
    + +

    +


    + + + diff --git a/ionnotes/node9.html b/ionnotes/node9.html new file mode 100644 index 0000000..a4ce07f --- /dev/null +++ b/ionnotes/node9.html @@ -0,0 +1,77 @@ + + + + + +About this document ... + + + + + + + + + + + + + + + + + + + + +

    +About this document ... +

    + Ion: Notes for the module and patch writer

    +This document was generated using the +LaTeX2HTML translator Version 2002-2-1 (1.71) +

    +Copyright © 1993, 1994, 1995, 1996, +Nikos Drakos, +Computer Based Learning Unit, University of Leeds. +
    +Copyright © 1997, 1998, 1999, +Ross Moore, +Mathematics Department, Macquarie University, Sydney. +

    +The command line arguments were:
    + latex2html -show_section_numbers -short_index -local_icons -noaddress -up_url http://iki.fi/tuomov/ion/ -up_title 'Ion homepage' -nofootnode -split 4 ionnotes +

    +The translation was initiated by tuomov on 2006-12-23 +


    + + + diff --git a/ionnotes/prev.png b/ionnotes/prev.png new file mode 100644 index 0000000000000000000000000000000000000000..e60b8b4073572dcd83b07c60b082ea6e2ba394c9 GIT binary patch literal 279 zcmV+y0qFjTP)fWJ4@hJr9=)Yx5|PDs2VC9?nk002ovPDHLkV1i^Ya=-up literal 0 HcmV?d00001 diff --git a/ionnotes/prev_g.png b/ionnotes/prev_g.png new file mode 100644 index 0000000000000000000000000000000000000000..476d9568c900e2ada6c2019b67eeee166a5f1288 GIT binary patch literal 327 zcmV-N0l5B&P)18~ zIpil5yY|hg&aw;rvXQ~olHp&x|G5Aw{ug* Z|8M28X+2RX!WaMm002ovPDHLkV1gF^iYx#C literal 0 HcmV?d00001 diff --git a/ionnotes/up.png b/ionnotes/up.png new file mode 100644 index 0000000000000000000000000000000000000000..3937e168f44bc997766dbe3b9383bd1db44f094d GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^Qa~)h#LU3J`0lmo0U(Dbz$e6Y|Ni~?`T5VEKaXZ$ zILr2UCs3TRB*-tA!Qt7BG$5zc)5S5QVoq$YAz!lrkL&!DV=`*aVJGv=2TrrsUKR?`=XF~0x$5q(BOL&qeQ?X^G$FnGH9 KxvX3 + \@toodeep + \else + \advance\@itemdepth \@ne + \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% + \list{\csname\@itemitem\endcsname}% + {% + \if@revlabel + \def\makelabel##1{\hskip .5\unitindent{\hfil ##1}}\else + %^^^^^^^^^ Changed + \def\makelabel##1{\hfil ##1} + %^^^^^^^^^ Changed + \fi + }% + \fi} + {\global\@ignoretrue \endlist} +\makeatletter +%end{latexonly} diff --git a/objects.tex b/objects.tex new file mode 100644 index 0000000..e751eab --- /dev/null +++ b/objects.tex @@ -0,0 +1,246 @@ + +\section{Class and object hierarchies} +\label{sec:objects} + +While Ion does not not have a truly object-oriented design +\footnote{the author doesn't like such artificial designs}, +things that appear on the computer screen are, however, quite +naturally expressed as such ''objects''. Therefore Ion implements +a rather primitive OO system for these screen objects and some +other things. + +It is essential for the module writer to learn this object +system, but also people who write their own binding configuration files +necessarily come into contact with the class and object hierarchies +-- you need to know which binding setup routines apply where, +and what functions can be used as handlers in which bindings. +It is the purpose of this section to attempt to explain these +hierarchies. If you do not wish the read the full section, at least +read the summary at the end of it, so that you understand the very +basic relations. + +For simplicity we consider only the essential-for-basic-configuration +Ioncore, \file{mod\_tiling} and \file{mod\_query} classes. +See Appendix \ref{app:fullhierarchy} for the full class hierachy visible +to Lua side. + +\subsection{Class hierarchy} + +One of the most important principles of object-oriented design methodology +is inheritance; roughly how classes (objects are instances of classes) +extend on others' features. Inheritance gives rise to class hierarchy. +In the case of single-inheritance this hierarchy can be expressed as a +tree where the class at the root is inherited by all others below it +and so on. Figure \ref{fig:classhierarchy} lists out the Ion class +hierarchy and below we explain what features of Ion the classes +implement. + +\begin{figure} +\begin{htmlonly} +\docode % latex2html kludge +\end{htmlonly} +\begin{verbatim} + Obj + |-->WRegion + | |-->WClientWin + | |-->WWindow + | | |-->WRootWin + | | |-->WMPlex + | | | |-->WScreen + | | | |-->WFrame + | | |-->WInput (mod_query) + | | |-->WEdln (mod_query) + | | |-->WMessage (mod_query) + | |-->WGroup + | | |-->WGroupWS + | | |-->WGroupCW + | |-->WTiling (mod_tiling) + |-->WSplit (mod_tiling) +\end{verbatim} +\caption{Partial Ioncore, \file{mod\_tiling} and \file{mod\_query} + class hierarchy.} +\label{fig:classhierarchy} +\end{figure} + +The core classes: + +\begin{description} + \item[\type{Obj}]\indextype{Obj} + Is the base of Ion's object system. + + \item[\type{WRegion}]\indextype{WRegion} + is the base class for everything corresponding to something on the + screen. Each object of type \type{WRegion} has a size and position + relative to the parent \type{WRegion}. While a big part of Ion + operates on these instead of more specialised classes, \type{WRegion} + is a ''virtual'' base class in that there are no objects of ''pure'' + type \type{WRegion}; all concrete regions are objects of some class + that inherits \type{WRegion}. + + \item[\type{WClientWin}]\indextype{WClientWin} is a class for + client window objects, the objects that window managers are + supposed to manage. + + \item[\type{WWindow}]\indextype{WWindow} is the base class for all + internal objects having an X window associated to them + (\type{WClientWins} also have X windows associated to them). + + \item[\type{WRootWin}]\indextype{WRootWin} is the class for + root windows\index{root window} of X screens\index{screen!X}. + Note that an ''X screen'' or root window is not necessarily a + single physical screen\index{screen!physical} as a root window + may be split over multiple screens when multi-head extensions + such as Xinerama\index{Xinerama} are used. (Actually there + can be only one \type{WRootWin} when Xinerama is used.) + + \item[\type{WMPlex}] is a base class for all regions that''multiplex'' + other regions. This means that of the regions managed by the multiplexer, + only one can be displayed at a time. Classes that inhereit \type{WMPlex} + include screens and frames. + + \item[\type{WScreen}]\indextype{WScreen} is the class for objects + corresponding to physical screens. Screens may share a root + window when Xinerama multihead extensions are used as explained + above. + + \item[\type{WFrame}]\indextype{WFrame} is the class for frames. + While most Ion's objects have no graphical presentation, frames basically + add to \type{WMPlex}es the decorations around client windows + (borders, tabs). + + \item[\type{WGroup}]\indextype{WGroup} is the base class for groups. + Particular types of groups are workspaces + (\type{WGroupWS}\indextype{WGroupWS}) + and groups of client windows + (\type{WGroupCW}\indextype{WGroupCW}). +\end{description} + + +Classes implemented by the \file{mod\_tiling} module: + +\begin{description} + \item[\type{WTiling}]\indextype{WTiling} is the class for tilings + of frames. + \item[\type{WSplit}]\indextype{WSplit} (or, more specifically, classes + that inherit it) encode the \type{WTiling} tree structure. +\end{description} + + +Classes implemented by the \file{mod\_query} module: + +\begin{description} + \item[\type{WInput}]\indextype{WInput} is a virtual base class for the + two classes below. + \item[\type{WEdln}]\indextype{WEdln} is the class for the ''queries'', + the text inputs that usually appear at bottoms of frames and sometimes + screens. Queries are the functional equivalent of ''mini buffers'' in + many text editors. + \item[\type{WMessage}]\indextype{WMessage} implements the boxes for + warning and other messages that Ion may wish to display to the user. + These also usually appear at bottoms of frames. +\end{description} + +There are also some other ''proxy'' classes that do not refer +to objects on the screen. The only important one of these for +basic configuration is \type{WMoveresMode} that is used for +binding callbacks in the move and resize mode. + + +\subsection{Object hierarchies: \type{WRegion} parents and managers} + +\subsubsection{Parent--child relations} +Each object of type \type{WRegion} has a parent and possibly a manager +associated to it. The parent\index{parent} for an object is always a +\type{WWindow} and for \type{WRegion} with an X window (\type{WClientWin}, +\type{WWindow}) the parent \type{WWindow} is given by the same relation of +the X windows. For other \type{WRegion}s the relation is not as clear. +There is generally very few restrictions other than the above on the +parent---child relation but the most common is as described in +Figure \ref{fig:parentship}. + +\begin{figure} +\begin{htmlonly} +\docode % latex2html kludge +\end{htmlonly} +\begin{verbatim} + WRootWins + |-->WScreens + |-->WGroupWSs + |-->WTilings + |-->WClientWins in full screen mode + |-->WFrames + |-->WGroupCWs + |-->WClientWins + |-->WFrames for transients + |-->a possible WEdln or WMessage +\end{verbatim} +\caption{Most common parent--child relations} +\label{fig:parentship} +\end{figure} + +\type{WRegion}s have very little control over their children as a parent. +The manager\index{manager} \type{WRegion} has much more control over its +managed \type{WRegion}s. Managers, for example, handle resize requests, +focusing and displaying of the managed regions. Indeed the manager---managed +relationship gives a better picture of the logical ordering of objects on +the screen. Again, there are generally few limits, but the most common +hierarchy is given in Figure \ref{fig:managership}. Note that sometimes +the parent and manager are the same object and not all objects may have +a manager (e.g. the dock in the dock module at the time of writing this) +but all have a parent--a screen if not anything else. + +\subsubsection{Manager--managed relations} + +\begin{figure} +\begin{htmlonly} +\docode % latex2html kludge +\end{htmlonly} +\begin{verbatim} + WRootWins + |-->WScreens + |-->WGroupCWs for full screen WClientWins + | |-->WClientWins + | |-->WFrames for transients (dialogs) + | |--> WClientWin + |-->WGroupWSs for workspaces + | |-->WTiling + | | |-->possibly a WEdln, WMessage or WMenu + | | |-->WFrames + | | |-->WGroupCWs (with contents as above) + | |-->WFrames for floating content + |-->WFrames for sticky stuff, such as the scratchpad +\end{verbatim} +\caption{Most common manager--managed relations} +\label{fig:managership} +\end{figure} + +Note that a workspace can manage another workspace. This can be +achieved with the \fnref{attach_new} function, and allows you to nest +workspaces as deep as you want. + +%Note how the \type{WClientWin}s managed by \type{WFloatFrame}s don't have +%transients managed by them. This is because WFloatWSs choose to handle +%transients differently (transients are put in separate frames like normal +%windows). + +\subsection{Summary} + +In the standard setup, keeping queries, messages and menus out of +consideration: + +\begin{itemize} + \item The top-level objects that matter are screens and they correspond + to physical screens. The class for screens is \type{WScreen}. + \item Screens contain (multiplex) groups (\type{WGroup}) and other + objects, such as \type{WFrames}. Some of these are mutually exclusive + to be viewed at a time. + \item Groups of the specific kind \type{WGroupWS} often contain a + \type{WTiling} tiling for tiling frames (\type{WFrame}), but + groups may also directly contain floating frames. + \item Frames are the objects with decorations such as tabs and borders. + Frames contain (multiplex) among others (groups of) client windows, + to each of which corresponds a tab in the frame's decoration. Only + one client window (or other object) can be shown at a time in each + frame. The class for client windows is \type{WClientWin}. +\end{itemize} + diff --git a/objectsimpl.tex b/objectsimpl.tex new file mode 100644 index 0000000..ccc440d --- /dev/null +++ b/objectsimpl.tex @@ -0,0 +1,20 @@ +\section{Object system implementation} + +First, to get things clear, what are considered objects here are C +structures containing a properly initialized \type\indextype{WObj} +structure defined in \file{ioncore/obj.h} as the first element (or the +first element of the structure which is the first element and so on which +gives rise to inheritance). The \type{WObj} structure contains a pointer +to a \type{WObjDescr}\indextype{WObjDescr} class type info structure and +a list of so called ''watches''. The \type{WObjDescr} structure simply +lists the class name, a table of dynamic functions and a pointer to +deinitialisation function (or ''destructor''). + +Ion does not do any reference counting, garbage collecting or other +fancy things related to automatic safe freeing of objects with its +simplistic object system. Instead special watches (the \type{WWatch} +\indextype{WWatch} structure) may be used to create safe references to +objects that might be destroyed during the time the specific pointer is +needed. When an object is destroyed, its list of watches is processed, +setting the pointers in the watches to NULL and the watch handlers for +each watch are called. diff --git a/predist.sh b/predist.sh new file mode 100644 index 0000000..31e7405 --- /dev/null +++ b/predist.sh @@ -0,0 +1,39 @@ +#!/bin/sh + +## +## Versioning +## + +pwd=`pwd` +dir=`basename "$pwd"` + +release=`echo "$dir"|sed 's/^.\+-\([^-]\+-[0-9]\+\)$/\1/p; d'` + +if test "$release" == ""; then + echo "Invalid package name $dir." + exit 1 +fi + +## +## Ion path +## + +if test "$ION_PATH" = ""; then + ION_PATH="../ion-${release}" +fi + +## +## Build +## + +set -e + +d=`echo $release|sed 's/[^-]\+-\(....\)\(..\)\(..\)/\1-\2-\3/'` + +perl -p -i -e "s/%%DATE/\\\\date{$d}/" ionconf.tex +sed "s:^TOPDIR=.*:TOPDIR=${ION_PATH}:" Makefile > Makefile.tmp +make -f Makefile.tmp all +make -f Makefile.tmp all-ps +make -f Makefile.tmp clean +rm Makefile.tmp +gzip *.dvi *.ps diff --git a/prelim.tex b/prelim.tex new file mode 100644 index 0000000..c5db5f8 --- /dev/null +++ b/prelim.tex @@ -0,0 +1,58 @@ + +\chapter{Preliminaries: Key concepts and relations} +\label{chap:prelim} + +The purpose of this chapter to explain some of key concepts and +relations you need to understand before reading the following +chapters. These include modules explained in section \ref{sec:modules} +and the Ion class and object hierarchies, section \ref{sec:objects}. + + +\section{Modules} +\label{sec:modules} + +Ion has been designed so that the 'ion' executable only implements some +basic services on top of which very different kinds of window managers +could be build by loading the appropriate 'modules'. On modern system +these modules are simply dynamically loaded \file{.so} libraries. On +more primitive systems, or if you want to squeeze total size of the +executable and libraries, the modules can optionally be statically +linked to the main binary, but must nevertheless be loaded with the +\fnref{dopath} function. Modules may also include Lua code. + +If no modules are loaded, all client windows appear in full screen mode. +To get better window management support, one or more workspace modules +should be loaded. Currently Ion provides the following modules: + +\begin{description} + \item[\file{mod\_tiling}] Tilings for workspaces of the original tiled + Ion kind. + \item[\file{mod\_query}] Queries (for starting programs and so on) + and message boxes. + \item[\file{mod\_menu}] Support for menus, both pull-down and + keyboard-operated in-frame menus. + \item[\file{mod\_statusbar}] Module that implements a statusbar that + can be adaptively embedded in each workspace's layout. + \item[\file{mod\_dock}] Module for docking Window Maker dockapps. + The dock can both float and be embedded as the statusbar. + \item[\file{mod\_sp}] This module implements a scratchpad frame that can + be toggled on/off everywhere. Think of the 'console' in some + first-person shooters. + \item[\file{mod\_mgmtmode}] Support module for implementing ''management + modes'' with a XOR-frame similar to move/resize mode around selected + region. + \item[\file{mod\_sm}] Session management support module. + \emph{Loaded automatically when needed!} +\end{description} + +So-called drawing engines are also implemented as a modules, +but they are not discussed here; see chapter \ref{chap:gr}. + +The stock configuration for the 'ion3' executable loads all of the modules +mentioned above except \file{mod\_dock} and file{mod\_mgmtmode}. +The stock configuration for the 'pwm3' executable (which differs from the +'ion3' executable in a few configuration details, such as Xinerama usage) +loads another set of modules. + + +\input{objects} diff --git a/rapport3.perl b/rapport3.perl new file mode 100644 index 0000000..77b2cbd --- /dev/null +++ b/rapport3.perl @@ -0,0 +1,38 @@ +# rapport3.perl by Tuomo Valkonen, , 2003-05-10 +# +# Implementation of the documentclass for latex2html. Just make some +# sectioning commands saner and load report. +# + +package main; + +# +# Sections should start at H2 instead of the insane default H1. +# + +%standard_section_headings = + ('part' , 'H1' , 'chapter' , 'H1', 'section', 'H2', 'subsection', 'H3' + , 'subsubsection', 'H4', 'paragraph', 'H4', 'subparagraph', 'H5'); + +&generate_sectioning_subs; + +%section_headings = + ('partstar' , 'H1' , 'chapterstar' , 'H1', 'sectionstar', 'H2' + , 'subsectionstar', 'H3', 'subsubsectionstar', 'H4', 'paragraphstar' + , 'H4', 'subparagraphstar', 'H5', %section_headings); + +# +# These should be chapters in a report +# + +%section_headings = + ('tableofcontents', 'H1', 'listoffigures', 'H1', 'listoftables', 'H1' + , 'bibliography', 'H1', 'textohtmlindex', 'H1' + , %standard_section_headings + , %section_headings); + + +&do_require_package("report"); + +1; + diff --git a/statusd.tex b/statusd.tex new file mode 100644 index 0000000..e1fe6b2 --- /dev/null +++ b/statusd.tex @@ -0,0 +1,81 @@ + +\section{Writing \command{ion-statusd} monitors} + +All statusbar meters that do not monitor the internal state of Ion should +go in the separate \command{ion-statusd} program. + +Whenever the user requests a meter \code{\%foo} or \code{\%foo_bar} to be +inserted in a statusbar, \file{mod\_statusbar} asks \command{ion-statusd} to +load \fnref{statusd_foo.lua} on its search path (same as that for Ion-side +scripts). This script should then supply all meters with the initial part +'\code{foo}'. + +To provide this value, the script should simply call \code{statusd.inform} +with the name of the meter and the value as a string. +Additionally the script should provide a 'template' for the meter to +facilitate expected width calculation by \file{mod\_statusbar}, and +may provide a 'hint' for colour-coding the value. The interpretation +of hints depends on the graphical style in use, and currently the +stock styles support the \code{normal}, \code{important} and +\code{critical} hints. + + +In our example of the 'foo monitor', at script init we might broadcast +the template as follows: + +\begin{verbatim} +statusd.inform("foo_template", "000") +\end{verbatim} + +To inform \file{mod\_statusbar} of the actual value of the meter and +indicate that the value is critical if above 100, we might write the +following function: + +\begin{verbatim} +local function inform_foo(foo) + statusd.inform("foo", tostring(foo)) + if foo>100 then + statusd.inform("foo_hint", "critical") + else + statusd.inform("foo_hint", "normal") + end +end +\end{verbatim} + +To periodically update the value of the meter, we must use timers. +First we must create one: + +\begin{verbatim} +local foo_timer=statusd.create_timer() +\end{verbatim} + +Then we write a function to be called whenever the timer expires. +This function must also restart the timer. + +\begin{verbatim} +local function update_foo() + local foo= ... measure foo somehow ... + inform_foo(foo) + foo_timer:set(settings.update_interval, update_foo) +end +\end{verbatim} + +Finally, at the end of our script we want to do the initial +measurement, and set up timer for further measurements: + +\begin{verbatim} +update_foo() +\end{verbatim} + + +If our scripts supports configurable parameters, the following code +(at the beginning of the script) will allow them to be configured in +\file{cfg\_statusbar.lua} and passed to the status daemon and our script: + +\begin{verbatim} +local defaults={ + update_interval=10*1000, -- 10 seconds +} + +local settings=table.join(statusd.get_config("foo"), defaults) +\end{verbatim} diff --git a/tricks.tex b/tricks.tex new file mode 100644 index 0000000..69fe945 --- /dev/null +++ b/tricks.tex @@ -0,0 +1,104 @@ + +\chapter{Scripting} +\label{chap:tricks} + +This chapter documents some additional features of the Ion configuration +and scripting interface that can be used for more advanced scripting than +the basic configuration exlained in chapter \ref{chap:config}. + +\section{Hooks} +\label{sec:hooks} + +Hooks are lists of functions to be called when a certain event occurs. +There are two types of them; normal and ''alternative'' hooks. Normal +hooks do not return anything, but alt-hooks should return a boolean +indicating whether it handled its assigned task succesfully. In the case +that \var{true} is returned, remaining handlers are not called. + +Hook handlers are registered by first finding the hook +with \fnref{ioncore.get_hook} and then calling \fnref{WHook.add} +on the (succesfull) result with the handler as parameter. Similarly +handlers are unregistered with \fnref{WHook.remove}. For example: + +\begin{verbatim} +ioncore.get_hook("ioncore_snapshot_hook"):add( + function() print("Snapshot hook called.") end +) +\end{verbatim} + +In this example the hook handler has no parameters, but many hook +handlers do. The types of parameters for each hook are listed in +the hook reference, section \ref{sec:hookref}. + + +Note that many of the hooks are called in ''protected mode'' and can not +use any functions that modify Ion's internal state. TODO: More detailed +documentation when this is final. + +\section{Referring to regions} + +\subsection{Direct object references} + +All Ion objects are passed to Lua scriptss as 'userdatas', and you may +safely store such object references for future use. The C-side object +may be destroyed while Lua still refers to the object. All exported +functions gracefully fail in such a case, but if you need to explicitly +test that the C-side object still exists, use \fnref{obj_exists}. + +As an example, the following short piece of code implements +bookmarking: + +\begin{verbatim} +local bookmarks={} + +-- Set bookmark bm point to the region reg +function set_bookmark(bm, reg) + bookmarks[bm]=reg +end + +-- Go to bookmark bm +function goto_bookmark(bm) + if bookmarks[bm] then + -- We could check that bookmarks[bm] still exists, if we + -- wanted to avoid an error message. + bookmarks[bm]:goto() + end +end +\end{verbatim} + +\subsection{Name-based lookups} + +If you want to a single non-\type{WClientWin} region with an exact known +name, use \fnref{ioncore.lookup_region}. If you want a list of all regions, +use \fnref{ioncore.region_list}. Both functions accept an optional argument +that can be used to specify that the returned region(s) must be of a more +specific type. Client windows live in a different namespace and for them +you should use the equivalent functions \fnref{ioncore.lookup_clientwin} +and \fnref{ioncore.clientwin_list}. + +To get the name of an object, use \fnref{WRegion.name}. Please be +aware, that the names of client windows reflect their titles and +are subject to changes. To change the name of a non-client window +region, use \fnref{WRegion.set_name}. + + +\section{Alternative winprop selection criteria} + +It is possible to write more complex winprop selection routines than +those described in section \ref{sec:winprops}. To match a particular +winprop using whatever way you want to, just set the \var{match} +field of the winprop to a function that receives the client window +as its sole parameter, and that returns \code{true} if the winprop +matches, and \code{false} otherwise. + +The class, instance and role properties can be obtained with +\fnref{WClientWin.get_ident}, and the title with \fnref{WRegion.name}. +If you want to match against (almost) arbitrary window properties, +have a look at the documentation for the following functions, and +their standard Xlib counterparts: \fnref{ioncore.x_intern_atom} +(XInternAtom), \fnref{ioncore.x_get_window_property} (XGetWindowProperty), +and \fnref{ioncore.x_get_text_property} (XGetTextProperty). + + +\input{statusd} + -- 2.39.5