aboutsummaryrefslogtreecommitdiffstats
path: root/doc/info/mds.texinfo
diff options
context:
space:
mode:
authorMattias Andrée <maandree@operamail.com>2015-07-14 13:51:31 +0200
committerMattias Andrée <maandree@operamail.com>2015-07-14 13:51:31 +0200
commit2a981a921c4a5e43b821533131dc78f64ccad772 (patch)
treed67af31cfb1fe5701e91c83dee1f43a091372211 /doc/info/mds.texinfo
parentm + indices (diff)
downloadmds-2a981a921c4a5e43b821533131dc78f64ccad772.tar.gz
mds-2a981a921c4a5e43b821533131dc78f64ccad772.tar.bz2
mds-2a981a921c4a5e43b821533131dc78f64ccad772.tar.xz
info: misc
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to 'doc/info/mds.texinfo')
-rw-r--r--doc/info/mds.texinfo1127
1 files changed, 758 insertions, 369 deletions
diff --git a/doc/info/mds.texinfo b/doc/info/mds.texinfo
index e45fa77..a16b4b0 100644
--- a/doc/info/mds.texinfo
+++ b/doc/info/mds.texinfo
@@ -1,67 +1,184 @@
\input texinfo @c -*-texinfo-*-
+@copying
+Copyright @copyright{} 2014, 2015 Mattias Andrée (@email{maandree@@member.fsf.org})
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts. A copy of the license is included in the section entitled
+``GNU Free Documentation License''.
+@end quotation
+@end copying
+
@c %**start of header
@setfilename mds.info
-@settitle mds
+@settitle mds -- The avant-garde micro-display server
+@documentencoding UTF-8
+@documentlanguage en_GB
+@finalout
+@iftex
+@c @set USLETTER
@c @set AFIVEPAPER
@c @set SMALLBOOK
-@c This document does not look too good on A5-paper
-@c This document looks best on A4-paper, but smallbook format is acceptable
+
+@c @set HARDCOPY
+@c @set CROPMARKS
+@c @set SKIPCHAPTERNEWPAGE
+@c @set SKIPFONTTEXTSIZE
+@end iftex
+@c @set LOGO
+@c @set DOUBLE_HEADINGS
+@c @set SINGLE_HEADINGS
+@c @set AMERICANSPACING
+
+@ignore
+
+ This document does not look too good on A5-paper.
+ This document looks best on A4-paper, but smallbook
+ format and US Letter is acceptable.
+
+ CROPMARKS has no effect unless HARDCOPY is set.
+ CROPMARKS and AFIVEPAPER (or actually @cropmarks
+ and @afivepaper) does not play well together.
+
+ You can configure how TeX output files should look by
+ uncommenting @set commands above. Do not uncomment more
+ than one of the paper sizes (USLETTER, AFIVEPAPER and
+ SMALLBOOK); if none is uncomment AFOURPAPER will be set.
+ However, if you do not want to modify this source file,
+ you can run `make` with for example `TEXIFLAGS='-D HARDCOPY'`
+ or `TEXIFLAGS='--texinfo="@set HARDCOPY"'`.
+
+@end ignore
+
+@ifclear SINGLE_HEADINGS
+@ifclear DOUBLE_HEADINGS
+@ifclear HARDCOPY
+@set SINGLE_HEADINGS
+@end ifclear
+@ifset HARDCOPY
+@set DOUBLE_HEADINGS
+@end ifset
+@end ifclear
+@end ifclear
@ifset AFIVEPAPER
@afivepaper
@end ifset
-@ifclear AFIVEPAPER
@ifset SMALLBOOK
@smallbook
@end ifset
+@ifclear AFIVEPAPER
@ifclear SMALLBOOK
+@ifclear USLETTER
@afourpaper
@set AFOURPAPER
@end ifclear
@end ifclear
-
-@documentencoding UTF-8
-@documentlanguage en
-
-@c @set HARDCOPY
-@c @set LOGO
+@end ifclear
@ifset HARDCOPY
+@ifset CROPMARKS
@cropmarks
+@end ifset
+@ifclear SKIPCHAPTERNEWPAGE
@setchapternewpage odd
+@end ifclear
@end ifset
-@finalout
-@c %**end of header
+@ifclear SKIPFONTTEXTSIZE
+@ifset SMALLBOOK
+@set SMALLFONT
+@end ifset
+@ifset AFIVEPAPER
+@set SMALLFONT
+@end ifset
+@end ifclear
+@ifset SMALLFONT
+@fonttextsize 10
+@end ifset
+@ifclear SMALLFONT
+@fonttextsize 11
+@end ifclear
+
+@ifclear AMERICANSPACING
+@frenchspacing on
+@end ifclear
+@c @paragraphindent asis
+@c @firstparagraphindent none
+@c @exampleindent asis
+@c @kbdinputstyle distinct
@dircategory Graphics environment
@direntry
-* mds: (mds). The avant-garde micro-display server
+* mds: (mds). The avant-garde micro-display server.
@end direntry
+@documentdescription
+User and developer manual for mds, the avant-garde
+micro-display server, and servers, protocols,
+libraries and concepts.
+@end documentdescription
+@c %**end of header
+
+
+
+@ifset AFIVEPAPER
+@set AFIVEPAPER_OR_USLETTER
+@set SMALLBOOK_OR_AFIVEPAPER
+@set AFOURPAPER_OR_AFIVEPAPER
+@end ifset
+@ifset USLETTER
+@set AFIVEPAPER_OR_USLETTER
+@set AFOURPAPER_OR_USLETTER
+@end ifset
+@ifset AFOURPAPER
+@set AFOURPAPER_OR_USLETTER
+@set AFOURPAPER_OR_AFIVEPAPER
+@end ifset
+@ifset SMALLBOOK
+@set SMALLBOOK_OR_AFIVEPAPER
+@end ifset
+
+@ifset SMALLFONT
+@set AFOURPAPER_OR_USLETTER_OR_SMALLFONT
+@ifset SMALLBOOK
+@set SMALLBOOK_WITH_SMALLFONT
+@set AFOURPAPER_OR_USLETTER_OR_SMALLBOOK_WITH_SMALLFONT
+@set AFIVEPAPER_OR_USLETTER_OR_SMALLBOOK_WITH_SMALLFONT
+@end ifset
+@ifset AFIVEPAPER
+@set AFIVEPAPER_WITH_SMALLFONT
+@end ifset
+@ifset AFOURPAPER
+@set AFOURPAPER_WITH_SMALLFONT
+@set AFIVEPAPER_OR_AFOURPAPER_WITH_SMALLFONT
+@end ifset
+@ifset USLETTER
+@set USLETTER_WITH_SMALLFONT
+@end ifset
+@end ifset
+@ifset AFOURPAPER_OR_USLETTER
+@set AFOURPAPER_OR_USLETTER_OR_SMALLFONT
+@set AFOURPAPER_OR_USLETTER_OR_SMALLBOOK_WITH_SMALLFONT
+@end ifset
+@ifset AFIVEPAPER_OR_USLETTER
+@set AFIVEPAPER_OR_USLETTER_OR_SMALLBOOK_WITH_SMALLFONT
+@set AFIVEPAPER_OR_AFOURPAPER_WITH_SMALLFONT
+@end ifset
+
+
@defindex op
@defindex sg
-@ifclear HARDCOPY
-@copying
-Copyright @copyright{} 2014, 2015 Mattias Andrée
-
-@quotation
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with no
-Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
-Texts. A copy of the license is included in the section entitled
-``GNU Free Documentation License''.
-@end quotation
-@end copying
-@end ifclear
@ifset HARDCOPY
@include hardcopy-copying.texinfo
@end ifset
@@ -99,6 +216,14 @@ Texts. A copy of the license is included in the section entitled
@insertcopying
@end titlepage
+@ifset DOUBLE_HEADINGS
+@headings double
+@end ifset
+@ifset SINGLE_HEADINGS
+@headings single
+@end ifset
+
+@shortcontents
@contents
@@ -120,8 +245,10 @@ Texts. A copy of the license is included in the section entitled
* Specifications:: Specifications.
* New Concepts:: Discussion of new display server concepts.
* Discussion:: Discussion on display server-architecture.
+
* GNU General Public License:: Copying and sharing @command{mds}.
* GNU Free Documentation License:: Copying and sharing this manual.
+
* Program index:: Index of servers, clients and utilities.
* Variable index:: Index of environment variables.
* Option index:: Index of command line options.
@@ -130,7 +257,7 @@ Texts. A copy of the license is included in the section entitled
* Function index:: Index of functions.
* Data type index:: Index of data types.
@end menu
-@c TODO @detailmenu
+@c TODO @detailmenu (`C-c C-u m`)
@@ -282,7 +409,7 @@ things:
@itemize
@item
-Request assignment of a unique ID.
+Request assignment of a unique ID@.
@item
Multicast a message.
@@ -486,7 +613,7 @@ environment variable @env{DISPLAY} to
@code{<host>:<display index>}, where @code{<host>}
is empty if the display is one the local machine.
In this tradition @command{mds} does the same thing
-with the environment variable @env{MDS_DISPLAY}.
+with the environment variable @env{MDS_DISPLAY}@.
@cpindex Environment variables
@vrindex @env{MDS_PGROUP}
@@ -494,7 +621,7 @@ with the environment variable @env{MDS_DISPLAY}.
@cpindex Process group, display server
@command{mds} also creates a new process group and
export the new process group ID to the environment
-variable @command{MDS_PGROUP}. This process group
+variable @command{MDS_PGROUP}@. This process group
can be used to send signals to all @command{mds}
servers collectively.
@@ -533,7 +660,7 @@ If you need servers to free up allocated
memory that they do not use, send the signal
@code{SIGDANGER}, or if not defined
@code{SIGRTMIN + 1}. Unimportant servers
-may choose to die on @code{SIGDANGER}.
+may choose to die on @code{SIGDANGER}@.
@sgindex @code{SIGINFO}
@sgindex @code{SIGRTMIN + 2}
@@ -546,7 +673,7 @@ that server do support this signal, but
thay must not die when received. @code{SIGINFO}
is send by a user to the server, if she wants
the server to dump information about the
-server's state or statistics to the TTY.
+server's state or statistics to the TTY@.
@sgindex @code{SIGRTMIN}
@cpindex No-operation signal
@@ -643,9 +770,11 @@ is seldom a reason for servers to do this.}
To do this the client sends
@example
+@group
Command: assign-id\n
Message ID: 0\n
\n
+@end group
@end example
where @code{\n} is an LF-line break.
@@ -691,9 +820,11 @@ and the value that was in the
For example:
@example
+@group
ID assignment: 0:1\n
In response to: 0\n
\n
+@end group
@end example
Notice that the master server never
@@ -720,8 +851,10 @@ and contain ID of the client that closed.
For example:
@example
+@group
Client closed: 0:1\n
\n
+@end group
@end example
Be aware that if a server or client
@@ -729,18 +862,20 @@ closes and does not have a unique client
ID, this message will be:
@example
+@group
Client closed: 0:0\n
\n
+@end group
@end example
Once a client has an unique client ID
assigned to it, it should always include
the header @code{Client ID} in its
messages. The value of @code{Client ID}
-should be the client's ID. If a server
+should be the client's ID@. If a server
wants to address this client, it should
include the header @code{To} with the
-value set to the recipient's client ID.
+value set to the recipient's client ID@.
Be aware that such message may not be
sent to that recipient uniquely, any
server or client is free to sign up
@@ -780,9 +915,11 @@ the display server, simply sign up for
all messages:
@example
+@group
Command: intercept\n
Message ID: 0\n
\n
+@end group
@end example
But if you only want messages contain
@@ -1039,7 +1176,7 @@ integer would overflow.
Native endianness when a endianness is choosen.
Do not assume big endianness, but the same
endianness that appear on the same machine when
-using C.
+using C@.
@item
@cpindex UTF-8, portability
@@ -1117,9 +1254,11 @@ its own argument. For example:
@opindex @option{--initial-spawn}
@example
+@group
mds-respawn --interval=5 \
@{ mds-foo --initial-spawn @} \
@{ mds-bar --initial-spawn @} &
+@end group
@end example
@cpindex Server supervision
@@ -1137,7 +1276,7 @@ respawned.
@sgindex @code{SIGTERM}
A server is considered to exit with a failure status
unless it exits with the return value 0 or is terminated
-by the signal @code{SIGTERM}.
+by the signal @code{SIGTERM}@.
@@ -1280,7 +1419,7 @@ be used to select monitor.
@opindex @option{--monitor}
Take screenshot of the monitor whose root window's
window ID is @var{WINDOW_ID} or has another window
-in it whose window ID is @var{WINDOW_ID}.
+in it whose window ID is @var{WINDOW_ID}@.
@item --embed
@opindex @option{--embed}
@@ -1290,7 +1429,7 @@ The rat will be used to select window.
@item --embed=WINDOW_ID
@opindex @option{--monitor}
Take a screenshot of an embedded window whose
-window ID is @var{WINDOW_ID}.
+window ID is @var{WINDOW_ID}@.
@item --window
@opindex @option{--window}
@@ -1300,7 +1439,7 @@ The rat will be used to select window.
@item --window=WINDOW_ID
@opindex @option{--window}
Take a screenshot of a window whose
-window ID is @var{WINDOW_ID}.
+window ID is @var{WINDOW_ID}@.
@item --decoration
@opindex @option{--decoration}
@@ -1373,7 +1512,7 @@ The rat will be used to select window.
@item --embed=WINDOW_ID
@opindex @option{--embed}
Kill an embedded window whose
-window ID is @var{WINDOW_ID}.
+window ID is @var{WINDOW_ID}@.
@item --window
@opindex @option{--window}
@@ -1383,7 +1522,7 @@ The rat will be used to select window.
@item --window=WINDOW_ID
@opindex @option{--window}
Kill a window whose
-window ID is @var{WINDOW_ID}.
+window ID is @var{WINDOW_ID}@.
@item --signal=SIGNAL
@opindex @option{--signal}
@@ -1424,7 +1563,7 @@ recognises the following options:
@table @option
@item --switch=VT
@opindex @option{--switch}
-Switch to the virtual terminal with the index @var{VT}.
+Switch to the virtual terminal with the index @var{VT}@.
@end table
@@ -1459,8 +1598,10 @@ can be initialised, you can in
@file{$@{XDG_CONFIG_HOME@}/mdsinitrc} write:
@example
+@group
mds-foo --on-init-fork
mds-bar &
+@end group
@end example
@opindex @option{--on-init-fork}
@@ -1492,6 +1633,21 @@ mds-respawn @{ mds-bar @} & # Spawn `mds-bar`.
@end example
@end ifset
@ifclear AFOURPAPER
+@ifset USLETTER
+@example
+S=$(cmdipc -Scx set 1 | cut -d ' ' -f 2)
+# Create a System V semaphore with the value 1.
+
+mds-respawn @{ mds-foo --on-init-sh="cmdipc -Sk $S p" @} &
+# Spawn `mds-foo` and decrease the semaphore with 1 when initialised.
+
+cmdipc -Sk $S z # Wait for the semaphore's
+ # value to become 0.
+cmdipc -Srk $S # Remove the semaphore.
+mds-respawn @{ mds-bar @} & # Spawn `mds-bar`.
+@end example
+@end ifset
+@ifclear USLETTER
@example
S=$(cmdipc -Scx set 1 | cut -d ' ' -f 2)
# Create a System V semaphore with the value 1.
@@ -1506,6 +1662,7 @@ cmdipc -Srk $S # Remove the semaphore.
mds-respawn @{ mds-bar @} & # Spawn `mds-bar`.
@end example
@end ifclear
+@end ifclear
@pgindex @command{mds-reg}
This is however seldom necessary as @command{mds-reg} can
@@ -1657,7 +1814,7 @@ mode to graphical mode or text mode.
By default @command{mds-vt} will select the next
available virtual terminal for the display server.
You can override this behaviour by exporting a value
-to the environment variable @env{XDG_VTNR}. The value
+to the environment variable @env{XDG_VTNR}@. The value
must be a decimal integer of a valid virtual terminal
index@footnote{Which is the same thing as a valid TTY
index.}. To select the virtual terminal the display
@@ -2303,7 +2460,7 @@ It creates a window that emulates a monitor.
@command{mds-meta} is a metadisplay server.
It creates or joins a named metadisplay server,
and creates an alternative value for
-@env{MDS_DISPLAY}. Any server connecting to
+@env{MDS_DISPLAY}@. Any server connecting to
this alternative @env{MDS_DISPLAY} connects
to this metadisplay server. This can be used
to make servers shared between display server
@@ -2583,7 +2740,7 @@ simple, reference implementation of a, status icon tray.
@section Infrastructure Protocols
@menu
-* assign-id:: Assign new ID to client, or fetch current ID.
+* assign-id:: Assign new ID to client, or fetch current ID@.
* intercept:: Sign up for reception of message.
* register:: Register availability of a command for which you implement a service.
* reregister:: Request for reregistration for available commands.
@@ -2600,7 +2757,7 @@ simple, reference implementation of a, status icon tray.
@code{Command: assign-id}
@item Action:
-Assign new ID to client, or fetch current ID.
+Assign new ID to client, or fetch current ID@.
@item Purpose:
Assigning ID to clients so server can respond to that client.
@@ -2833,7 +2990,7 @@ Allow programs to be aware of which VT the server is running on.
@item Purpose:
Allow programs to gain access of the TTY associated with the
-VT such that they can use ioctl and similar calls on that TTY.
+VT such that they can use ioctl and similar calls on that TTY@.
@item Compulsivity:
Required.
@@ -2868,9 +3025,9 @@ Set the TTY text mode if the value of the header
@code{Graphical} is @code{no}.
@end table
The server implementing this protocol should not set the
-TTY to text mode temporarily when switching TTY. It is
+TTY to text mode temporarily when switching TTY@. It is
up to the server that set the request for graphical mode
-to temporarily switch to text mode when switching TTY.
+to temporarily switch to text mode when switching TTY@.
@item Optional header: @code{Exclusive}
@table @code
@@ -2894,7 +3051,7 @@ Allow presentation servers to enter and leave graphical mode.
@item Purpose:
Allow programs to gain access of the TTY associated with the
-VT such that they can use ioctl and similar calls on that TTY.
+VT such that they can use ioctl and similar calls on that TTY@.
@item Compulsivity:
Required.
@@ -2938,7 +3095,7 @@ let the message pass to the next server by telling
the master server that it is no modification to do.
Once all servers are read for the switch the server
that emitted this message should signal the kernel
-that it may switch VT. The server should detect
+that it may switch VT@. The server should detect
this by setting up secondary contection to the
display that intercepts this message. This connection
should intercept this message with priority @math{-2^{62}},
@@ -3027,36 +3184,36 @@ bit zeroed out. This may not be remapped.
Single blank space separated list of active modifiers:
@table @code
@item shift
-Shift (level 2)
+@key{Shift} (level 2)
@item ctrl
-Control
+@key{Control}
@item alt
-Alternative/Option
+@key{Alternative}/@key{Option}
@item altgr
-Alternative Graphic (level 3)
+@key{Alternative Graphic} (level 3)
@item lvl*
@code{*} may be any @math{2^n + 1} integer with
@math{1 < n < 20}.
@item super
-Super
+@key{Super}
@item hyper
-Hyper
+@key{Hyper}
@item ultra
-Ultra
+@key{Ultra}
@item caps
-Caps (usually a lock key)
+@key{Caps} (usually a lock key)
@item num
-Num (usually a lock key)
+@key{Num} (usually a lock key)
@item scrl
-Scroll (usually a lock key)
+@key{Scroll} (usually a lock key)
@item top
-Top (historical)
+@key{Top} (historical)
@item front
-Front (historical)
+@key{Front} (historical)
@item greek
-Greek (historical)
+@key{Greek} (historical)
@item compose
-Compose (rare, it is usually a dead key)
+@key{Compose} (rare, it is usually a dead key)
@end table
Any key that has been locked should be prefix with
@code{+}, if the key has been locked by nullified
@@ -3069,93 +3226,93 @@ A textual representation of the key that has been typed or
released, as mapped by the keyboard layout.
@table @code
@item esc
-Escape
+@key{Escape}
@item f*
-F@code{*} where @code{*} is any integer.
+@key{F*} where @code{*} is any integer.
@item sysrq
-System Request/Print Screen
+@key{System Request}/@key{Print Screen}
@item scrl
-Scroll (lock)
+@key{Scroll} (lock)
@item break
-Break/Pause
+@key{Break}/@key{Pause}
@item backspace
-Backspace
+@key{Backspace}
@item tab
-Tab
+@key{Tab}
@item return
-Return/Enter
+@key{Return}/@key{Enter}
@item space
-Blank Space
+@key{Blank Space}
@item menu
-Application Menu
+@key{Application Menu}
@item ins
-Insert
+@key{Insert}
@item home
-Home
+@key{Home}
@item pgup
-Page Up
+@key{Page Up}
@item del
-Delete
+@key{Delete}
@item end
-End
+@key{End}
@item pgdown
-Page Down
+@key{Page Down}
@item up
-Up Arrow
+@key{Up} arrow
@item left
-Left Arrow
+@key{Left} arrow
@item down
-Down Arrow
+@key{Down} arrow
@item right
-Right Arrow
+@key{Right} arrow
@item shift
-Shift (level 2)
+@key{Shift} (level 2)
@item begin
-Begin (keypad 5 in nagivation mode)
+@key{Begin} (keypad @key{5} in nagivation mode)
@item ctrl
-Control
+@key{Control}
@item alt
-Alternative/Option
+@key{Alternative}/@key{Option}
@item altgr
-Alternative Graphic (level 3)
+@key{Alternative Graphic} (level 3)
@item lvl*
@code{*} may be any @math{2^n + 1} integer
with @math{1 < n < 20}.
@item super
-Super
+@key{Super}
@item hyper
-Hyper
+@key{Hyper}
@item ultra
-Ultra
+@key{Ultra}
@item caps
-Caps (usually a lock key)
+@key{Caps} (usually a lock key)
@item num
-Num (usually a lock key)
+@key{Num} (usually a lock key)
@item scrl
-Scroll (usually a lock key)
+@key{Scroll} (usually a lock key)
@item top
-Top (historical)
+@key{Top} (historical)
@item front
-Front (historical)
+@key{Front} (historical)
@item greek
-Greek (historical)
+@key{Greek} (historical)
@item compose
-Compose (usually a dead key)
+@key{Compose} (usually a dead key)
@item hexcompose
-Hex-Compose (usually a dead key)
+@key{Hex-Compose} (usually a dead key)
(Used to create aribitrary characters.)
@item longhexcompose
-Long Hex-Compose (usually a dead key)
-(Variant of hexcompose for longer codepoints.)
+@key{Long Hex-Compose} (usually a dead key)
+(Variant of @code{hexcompose} for longer codepoints.)
@item modelock
-Mode Lock
+@key{Mode Lock}
@item letter *
@code{*} may be any UTF-8 encoded letter.
@end table
Keys that lock/unlock a modifer should be suffixed with a
blank space and a @code{lock}. If the key is a dead key
-(even the compose key) should use @code{dead} instead. A
-position, either @code{left}, @code{right}, @code{keypad}
+(even the @key{Compose} key) should use @code{dead} instead.
+A position, either @code{left}, @code{right}, @code{keypad}
or an index, followed by a blank space, should prefix any
key that occurs on multiple position on the keyboard,
unless it only appears on the keypad once and once not on
@@ -3279,13 +3436,13 @@ it is off, and turned off if it is on.
The value is a single blank space separated list of LED:s:
@table @code
@item num
-Num lock
+@key{Num lock}
@item caps
-Caps lock
+@key{Caps lock}
@item scroll
-Scroll lock
+@key{Scroll lock}
@item compose
-Compose
+@key{Compose}
@end table
Unsupported LED:s should be silently ignored.
@@ -3531,13 +3688,15 @@ is included in the headers.
Each line contains contains two single space delimited numbers,
the first number is the keycode as determined by the scancode,
the second number is keycode that scancode should generate.
-For example, @code{1 1} resets Escape to be mapped to Escape,
-and @code{1 59} remaps Escape to F1, while
+For example, @code{1 1} resets @key{Escape} to be mapped to
+@key{Escape}, and @code{1 59} remaps @key{Escape} to @key{F1}, while
@example
+@group
1 59
59 1
+@end group
@end example
-swaps Escape and F1.
+swaps @key{Escape} and @key{F1}.
@item Purpose:
Enable the user to swap or replace keys on the keyboard.
@@ -3995,49 +4154,61 @@ Alpha channel should be included but ignored if
@code{Has alpha: no}, in such as it is best to set
it to full.
-@ifset AFOURPAPER
+@ifset AFOURPAPER_OR_USLETTER
Example image with @code{Bytes: 2},
@code{Has alpha: no} and @code{Size: 3}:
@example
+@group
sRGB(x0102, 0, 0), sRGB(0, x0304, 0), sRGB(0, 0, x0506)
sRGB(x0708, 0, 0), sRGB(0, x090A, 0), sRGB(0, 0, x0B0C)
sRGB(x0D0E, 0, 0), sRGB(0, x0F10, 0), sRGB(0, 0, x1112)
+@end group
@end example
Encoding of example image in hexadecimal representation:
@example
+@group
FFFF 0102 0000 0000 FFFF 0000 0304 0000 FFFF 0000 0000 0506
FFFF 0708 0000 0000 FFFF 0000 090A 0000 FFFF 0000 0000 0B0C
FFFF 0D0E 0000 0000 FFFF 0000 0F10 0000 FFFF 0000 0000 1112
+@end group
@end example
Note that on a big-endian system this would be:
@footnote{x86_64 computers are big-endian.}
@example
+@group
FF FF 02 01 0 0 0 0 FF FF 0 0 04 03 0 0 FF FF 0 0 0 0 06 05
FF FF 08 07 0 0 0 0 FF FF 0 0 0A 09 0 0 FF FF 0 0 0 0 0C 0B
FF FF 0E 0D 0 0 0 0 FF FF 0 0 10 0F 0 0 FF FF 0 0 0 0 12 11
+@end group
@end example
@end ifset
-@ifclear AFOURPAPER
+@ifclear AFOURPAPER_OR_USLETTER
Example image with @code{Bytes: 2},
@code{Has alpha: no} and @code{Size: 2}:
@example
+@group
sRGB(x0102, 0, 0), sRGB(0, x0304, 0)
sRGB(x0708, 0, 0), sRGB(0, x090A, 0)
+@end group
@end example
Encoding of example image in hexadecimal representation:
@example
+@group
FFFF 0102 0000 0000 FFFF 0000 0304 0000
FFFF 0708 0000 0000 FFFF 0000 090A 0000
+@end group
@end example
Note that on a big-endian system this would be:
@footnote{x86_64 computers are big-endian.}
@example
+@group
FF FF 02 01 0 0 0 0 FF FF 0 0 04 03 0 0
FF FF 08 07 0 0 0 0 FF FF 0 0 0A 09 0 0
+@end group
@end example
@end ifclear
@@ -4235,16 +4406,20 @@ ramp is (17, 18, 19, 20, 21, 22, 23) and the blue
ramp is (33, 34, 35, 36, 37, 38, 39, 40) then the
message will be (hexadecimal representation):
@example
+@group
0001 0002 0003 0004 0005 0006
0011 0012 0013 0014 0015 0016 0017
0021 0022 0023 0024 0025 0026 0027 0028
+@end group
@end example
On a big-endian system this would be:
@example
+@group
01 00 02 00 03 00 04 00 05 00 06 00
11 00 12 00 13 00 14 00 15 00 16 00 17 00
21 00 22 00 23 00 24 00 25 00 26 00 27 00 28 00
+@end group
@end example
However if @code{Coalesce: no} was used in the query,
@@ -4331,17 +4506,21 @@ is (1, 2, 3, 4, 5, 6), the green ramp is (17, 18, 19,
37, 38, 39, 40) then the message will be (hexadecimal
representation):
@example
+@group
0001 0002 0003 0004 0005 0006
0011 0012 0013 0014 0015 0016 0017
0021 0022 0023 0024 0025 0026 0027 0028
+@end group
@end example
Note that on a big-endian system this would be:
@footnote{x86_64 computers are big-endian.}
@example
+@group
01 00 02 00 03 00 04 00 05 00 06 00
11 00 12 00 13 00 14 00 15 00 16 00 17 00
21 00 22 00 23 00 24 00 25 00 26 00 27 00 28 00
+@end group
@end example
It is up to the networking servers to translate
@@ -4664,7 +4843,7 @@ this is however dependent on the operating system.
The server will respond with a
@command{Command: error} message.
In this message the server all include an
-ad-hoc header: @code{Process ID}. Its value
+ad-hoc header: @code{Process ID}@. Its value
will be the ID of the process that owns the
window.
@@ -4887,8 +5066,10 @@ Decreases the pointer @code{buffer} by the size of
@cpindex Marshalling macros
@sgindex @code{SIGUPDATE}
@example
+@group
buf_set(buffer, type, 0, variable),
buf_next(buffer, type, 1);
+@end group
@end example
@item @code{buf_get_next} [(@code{char* buffer, type, type variable}) @arrow{} @code{type}]
@@ -4901,22 +5082,24 @@ buf_next(buffer, type, 1);
@cpindex Marshalling macros
@sgindex @code{SIGUPDATE}
@example
+@group
buf_get(buffer, type, 0, variable),
buf_next(buffer, type, 1);
+@end group
@end example
@item @code{strequals} [(@code{const char* a, const char* b}) @arrow{} @code{int}]
@fnindex @code{strequals}
@cpindex String comparison
Evaluates whether the strings @code{a} and @code{b}
-are equals, neither may be @code{NULL}.
+are equals, neither may be @code{NULL}@.
@item @code{startswith} [(@code{const char* haystack, const char* needle}) @arrow{} @code{int}]
@fnindex @code{startswith}
@cpindex String comparison
Evaluates whether the string @code{haystack}
starts with the string @code{needle}, neither
-may be @code{NULL}.
+may be @code{NULL}@.
@item @code{drop_privileges} [(void) @arrow{} @code{int}]
@fnindex @code{drop_privileges}
@@ -5240,7 +5423,7 @@ may not even refer to the program, and @code{chdir}
could also hinter its use.
@item
-The kernel appends ` (deleted)' to
+The kernel appends @samp{ (deleted)} to
@file{/proc/self/exe} once it has been removed,
so it cannot be replaced.
@end enumerate
@@ -5586,7 +5769,7 @@ a list, reads its variable @code{size_t size}.
The variable @code{uint64_t* clients} is
used to retrieve stored elements.
-@ifset AFOURPAPER
+@ifset AFOURPAPER_OR_USLETTER_OR_SMALLBOOK_WITH_SMALLFONT
@example
void print_elements(client_list_t* this)
@{
@@ -5596,7 +5779,7 @@ void print_elements(client_list_t* this)
@}
@end example
@end ifset
-@ifclear AFOURPAPER
+@ifclear AFOURPAPER_OR_USLETTER_OR_SMALLBOOK_WITH_SMALLFONT
@example
void print_elements(client_list_t* this)
@{
@@ -5939,7 +6122,7 @@ be stored to the variable @code{entry} and the
bucket index will be stored to the variable
@code{i}.
-@ifset AFOURPAPER
+@ifset AFOURPAPER_OR_USLETTER_OR_SMALLBOOK_WITH_SMALLFONT
@example
void print_hash_table(hash_table_t* table)
@{
@@ -5950,7 +6133,7 @@ void print_hash_table(hash_table_t* table)
@}
@end example
@end ifset
-@ifclear AFOURPAPER
+@ifclear AFOURPAPER_OR_USLETTER_OR_SMALLBOOK_WITH_SMALLFONT
@example
void print_hash_table(hash_table_t* table)
@{
@@ -5972,7 +6155,7 @@ is not a popinter.
@vrindex @code{fd_table_t.value_comparator}
The structures @code{hash_table_t} and @code{fd_table_t}
contain the variable @code{value_comparator} which by
-default is @code{NULL}. If this variable is set to @code{NULL},
+default is @code{NULL}@. If this variable is set to @code{NULL},
two values will be considered equal if and only if they are
numerically identical; otherwise two values will be considered
equal if and only if @code{value_comparator} returned a
@@ -6217,7 +6400,7 @@ the server has been initialised.
@item --on-init-sh=COMMAND
@opindex @option{--on-init-sh}
When the server has been initialised, run the
-command @var{COMMAND}.
+command @var{COMMAND}@.
@item --immortal
@opindex @option{--immortal}
@@ -6364,7 +6547,7 @@ Calculate and returns the number of bytes that will be stored
by @code{marshal_server}. On failure the server should call
@code{abort} or exit with failure status by other means.
However it should not be possible for this function to fail.
-@code{marshal_server_size} must be pure.@footnote{That is,
+@code{marshal_server_size} must be pure@footnote{That is,
define with and conforming to @code{__attribute__((pure))}.}.
@item @code{marshal_server} [(@code{char* state_buf}) @arrow{} @code{int}]
@@ -6633,119 +6816,119 @@ for reference.
@table @asis
@item @code{1}
-@kbd{Escape} key
+@key{Escape} key
@item @code{2}--@code{11}
-Keys: @kbd{1}, @kbd{2}, @kbd{3}, @kbd{4}, @kbd{5}, @kbd{6}, @kbd{7}, @kbd{8}, @kbd{9}, @kbd{0}
+Keys: @key{1}, @key{2}, @key{3}, @key{4}, @key{5}, @key{6}, @key{7}, @key{8}, @key{9}, @key{0}
@item @code{12}
-Key right of @kbd{0}.
+Key right of @key{0}.
@item @code{13}
-Key left of @kbd{backspace}
+Key left of @key{Backspace}
@item @code{14}
-@kbd{Backspace} key
+@key{Backspace} key
@item @code{15}
-@kbd{Tab} key
+@key{Tab} key
@item @code{16}--@code{25}
-Keys: @kbd{q}, @kbd{w}, @kbd{e}, @kbd{r}, @kbd{t}, @kbd{y}, @kbd{u}, @kbd{i}, @kbd{o}, @kbd{p}
+Keys: @key{q}, @key{w}, @key{e}, @key{r}, @key{t}, @key{y}, @key{u}, @key{i}, @key{o}, @key{p}
@item @code{26}
-Key right of @kbd{p}, once removed
+Key right of @key{p}, once removed
@item @code{27}
-Key right of @kbd{p}, twice removed
+Key right of @key{p}, twice removed
@item @code{28}
-@kbd{Return} key
+@key{Return} key
@item @code{29}
-Left @kbd{control} key
+Left @key{Control} key
@item @code{30}--@code{38}
-Keys: @kbd{a}, @kbd{s}, @kbd{d}, @kbd{f}, @kbd{g}, @kbd{h}, @kbd{j}, @kbd{k}, @kbd{l}
+Keys: @key{a}, @key{s}, @key{d}, @key{f}, @key{g}, @key{h}, @key{j}, @key{k}, @key{l}
@item @code{39}
-Key right of @kbd{l}, once removed
+Key right of @key{l}, once removed
@item @code{40}
-Key right of @kbd{l}, twice removed
+Key right of @key{l}, twice removed
@item @code{41}
-Key left of @kbd{1}
+Key left of @key{1}
@item @code{42}
-Left @kbd{shift} key
+Left @key{Shift} key
@item @code{43}
-Key right of @kbd{l}, three times removed
+Key right of @key{l}, three times removed
@item @code{44}--@code{50}
-Keys: @kbd{z}, @kbd{x}, @kbd{c}, @kbd{v}, @kbd{b}, @kbd{n}, @kbd{m}
+Keys: @key{z}, @key{x}, @key{c}, @key{v}, @key{b}, @key{n}, @key{m}
@item @code{51}
-Key right of @kbd{m}, once removed
+Key right of @key{m}, once removed
@item @code{52}
-Key right of @kbd{m}, twice removed
+Key right of @key{m}, twice removed
@item @code{53}
-Key right of @kbd{m}, three times removed
+Key right of @key{m}, three times removed
@item @code{54}
-Right @kbd{shift} key
+Right @key{Shift} key
@item @code{55}
-@kbd{Multiply} key on the keypad
+@key{Multiply} key on the keypad
@item @code{56}
-@kbd{Alternative} key
+@key{Alternative} key
@item @code{57}
-@kbd{Space} key
+@key{Space} key
@item @code{58}
-@kbd{Caps lock} key
+@key{Caps Lock} key
@item @code{59}--@code{68}
-Keys: @kbd{F1} through @kbd{F10}
+Keys: @key{F1} through @key{F10}
@item @code{69}
-@kbd{Num lock} key
+@key{Num Lock} key
@item @code{70}
-@kbd{Scroll lock} key
+@key{Scroll Lock} key
@item @code{71}--@code{73}
-@kbd{7}, @kbd{8}, @kbd{9} keys on the keypad
+@key{7}, @key{8}, @key{9} keys on the keypad
@item @code{74}
-@kbd{Minus} key on the keypad
+@key{Minus} key on the keypad
@item @code{75}--@code{77}
-@kbd{4}, @kbd{5}, @kbd{6} keys on the keypad
+@key{4}, @key{5}, @key{6} keys on the keypad
@item @code{78}
-@kbd{Plus} key on the keypad
+@key{Plus} key on the keypad
@item @code{79}--@code{82}
-@kbd{1}, @kbd{2}, @kbd{3}, @kbd{0} keys on the keypad
+@key{1}, @key{2}, @key{3}, @key{0} keys on the keypad
@item @code{83}
-@kbd{Comma} key on the keypad
+@key{Comma} key on the keypad
@item @code{86}
-Key left of @kbd{z}
+Key left of @key{z}
@item @code{87}
-@kbd{F11} key
+@key{F11} key
@item @code{88}
-@kbd{F12} key
+@key{F12} key
@item @code{96}
-@kbd{Return} key on the keypad
+@key{Return} key on the keypad
@item @code{97}
-Right @kbd{control} key
+Right @key{control} key
@item @code{98}
-@kbd{Divide} key on the keypad
+@key{Divide} key on the keypad
@item @code{99}
-@kbd{System Request/Print Screen} key
+@key{System Request}/@key{Print Screen} key
@item @code{100}
-@kbd{Alternative graphic} key
+@key{Alternative Graphic} key
@item @code{102}
-@kbd{Home} key
+@key{Home} key
@item @code{103}
-@kbd{Up} arrow key
+@key{Up} arrow key
@item @code{104}
-@kbd{Page up} key
+@key{Page up} key
@item @code{105}
-@kbd{Left} arrow key
+@key{Left} arrow key
@item @code{106}
-@kbd{Right} arrow key
+@key{Right} arrow key
@item @code{107}
-@kbd{End} key
+@key{End} key
@item @code{108}
-@kbd{Down} arrow key
+@key{Down} arrow key
@item @code{109}
-@kbd{Page down} down
+@key{Page down} down
@item @code{110}
-@kbd{Insert} key
+@key{Insert} key
@item @code{111}
-@kbd{Delete} key
+@key{Delete} key
@item @code{119}
-@kbd{Pause/Break} key
+@key{Pause}/@key{Break} key
@item @code{125}
-Left @kbd{super} key
+Left @key{Super} key
@item @code{126}
-Right @kbd{super} key
+Right @key{Super} key
@item @code{127}
-@kbd{Application menu} key
+@key{Application Menu} key
@end table
@@ -6799,7 +6982,7 @@ other, does not matter. Additionally, the layout files
are parsed line by line, and leading whitespace is ignored.
Comment can be started with a #-character and end at the
end of the line. It is important to know that modifiers
-like @kbd{shift} and @kbd{control} needs to be mapped from
+like @key{Shift} and @key{Control} needs to be mapped from
a keycode, this and similar that many keyboards have in
common, except dead key composition and compose sequences,
is already available in the @file{layout/common} directory
@@ -6844,27 +7027,33 @@ space when we are writting so we add
giving us
@example
+@group
<keycode 57> : <space>
<space> : " "
+@end group
@end example
Because the order of the mapping statements does not
matter we can just as well write
@example
+@group
<space> : " "
<keycode 57> : <space>
+@end group
@end example
@code{" "} represents a text string with one blank
space, but it is possible to have multiple characters.
-We want to extend this to @kbd{altgr+space} producing
+If we want to extend this to @kbd{altgr+space} producing
a no-break space, we can add either of the lines
@example
+@group
<altgr space> : "\u00A0" # no-break space (# comment)
<altgr keycode 57> : "\u00A0" # no-break space
+@end group
@end example
However, we also need a mapping to @kbd{altgr}:
@@ -6877,8 +7066,10 @@ If we want to add a mapping to @kbd{ultra} from
@kbd{altgr+menu} we can write
@example
+@group
<keycode 127> : <menu>
<altgr menu> : <-altgr ultra>
+@end group
@end example
@code{-altgr} means that @kbd{altgr} should
@@ -6901,7 +7092,7 @@ are lock keys or not. To map the keycode
But if you do not want it be a lock key,
but instead be required to be held down,
-similar to how is normal for @kbd{shift},
+similar to how is normal for @key{Shift},
instead write
@example
@@ -6911,14 +7102,14 @@ instead write
Any modifier may be a lock key.
Another, just as important, use of mappings
-to is map letter keys. Unlike control keys
-like space and shift, there are no predefined
-letters@footnote{With letters with mean any
-character other than space.}. Therefore the
-letter is prefixed with the word `letter'.
+to is map letter keys. Unlike @key{Control} keys
+like @key{Space} and @key{Shift}, there are no
+predefined letters@footnote{With letters with
+mean any character other than space.}. Therefore
+the letter is prefixed with the word `letter'.
For example:
-@ifset AFOURPAPER
+@ifset AFOURPAPER_OR_USLETTER
@example
<keycode 16> : <letter q> # The Q-key has keycode 16 (on QWERTY)
<letter q> : "q" # The Q-key should produce a `q'
@@ -6927,7 +7118,7 @@ For example:
<shift caps letter q> : "q" # but not when both are used
@end example
@end ifset
-@ifclear AFOURPAPER
+@ifclear AFOURPAPER_OR_USLETTER
@example
# The Q-key has keycode 16 (on QWERTY)
<keycode 16> : <letter q>
@@ -6962,15 +7153,17 @@ To define @kbd{´}, with keycode 13, @kbd{compose}, with
keycode 125, as a dead keys write
@example
+@group
<keycode 13> : <dead letter ´>
<keycode 125> : <dead compose>
+@end group
@end example
@cpindex Duplicate keys
@cpindex Keys, duplicates
Some may appear on multiple locations on the keyboard,
-for example, there may be a left and a right shift key,
-and a normal return key and one on the keypad:
+for example, there may be a left and a right @key{Shift}
+key, and a normal @key{Return} key and one on the keypad:
@example
<keycode 42> : <left shift>
@@ -6985,9 +7178,9 @@ Because @code{<left>} and @code{<right>} are
valid keys --- they are arrow keys --- it is
importatn to place them directly before the
key, and not after. For instance @code{<left shift>}
-denotes the left @kbd{shift} key, whilst
-@code{<shift left>} denotes the left-arrow key
-with a @kbd{shift} key held down. Modifiers
+denotes the left @key{Shift} key, whilst
+@code{<shift left>} denotes the @key{Left} arrow
+key with a @key{Shift} key held down. Modifiers
goes first.
@@ -7024,8 +7217,8 @@ a sequence:
<super tab> : <tab> <tab> <tab> <tab>
@end example
-An alternative to @kbd{compose} as a dead key,
-is @kbd{compose} as a modifier. If you use this,
+An alternative to @key{Compose} as a dead key,
+is @key{Compose} as a modifier. If you use this,
the compose table need to be written for just
that. There two ways do this this. Either you
can write for example
@@ -7035,7 +7228,7 @@ can write for example
@end example
This maps two `s':es to a `ß', but requires that
-@kbd{compose} is held down during both key-presses.
+@key{Compose} is held down during both key-presses.
The other way is to write
@example
@@ -7050,8 +7243,10 @@ where it does not matter in which order you
press some of the keys. For example, instead of
@example
+@group
<dead compose> "S" "|" : "$"
<dead compose> "|" "S" : "$"
+@end group
@end example
you can write
@@ -7070,8 +7265,10 @@ You can also use @code{[ ]} for alternation.
For example, instead of
@example
+@group
<dead compose> ("S" "|") : "$"
<dead compose> ("s" "|") : "$"
+@end group
@end example
you can write
@@ -7085,8 +7282,10 @@ for specify that no key press is needed.
For example, instead of
@example
+@group
<dead compose> "|" "S" : "$"
<dead compose> "|" "|" "S" : "$"
+@end group
@end example
you can write
@@ -7108,8 +7307,8 @@ subsequence inside unordered subsequence
because of readability issues.
Unordered subsequences longer than 5 elements
-cannot compile under normal circumstances. This
-is eliminiation of unordered subsequences grows
+cannot compile under normal circumstances.
+Eliminiation of unordered subsequences grows
superexponentially, and thus is probably an error
than can cause memory exhaustion and unrealistic
compilation-time. Therefore, if an unordered
@@ -7118,7 +7317,7 @@ compiler required that the @option{--force} flag
is used and that the unordered subsequences uses
double brackets:
-@ifset AFOURPAPER
+@ifset AFOURPAPER_OR_USLETTER
@example
<dead compose> ("1" "2" "3" "4" "5") : "120"
<dead compose> (("1" "2" "3" "4" "5" "6")) : "720"
@@ -7127,13 +7326,25 @@ double brackets:
<dead compose> (("1" "2" "3" "4" "5" "6" "7" "8" "9")) : "362880"
@end example
@end ifset
-@ifclear AFOURPAPER
+@ifclear AFOURPAPER_OR_USLETTER
+@ifset SMALLBOOK_WITH_SMALLFONT
+@example
+<dead compose> ("1" "2" "3" "4" "5") : "120"
+<dead compose> (("1" "2" "3" "4" "5" "6")) : "720"
+<dead compose> (("1" "2" "3" "4" "5" "6" "7")) : "5040"
+<dead compose> (("1" "2" "3" "4" "5" "6" "7" "8")) : "40320"
+@end example
+@end ifset
+@ifclear SMALLBOOK_WITH_SMALLFONT
@example
+@group
<dead compose> ("1" "2" "3" "4" "5") : "120"
<dead compose> (("1" "2" "3" "4" "5" "6")) : "720"
<dead compose> (("1" "2" "3" "4" "5" "6" "7")) : "5040"
+@end group
@end example
@end ifclear
+@end ifclear
@@ -7237,9 +7448,9 @@ is compile by itself. If this is done, the compiler can
warn when one of the compositions cannot be reached from
those basic keys.
-If we want to make the compiler assume that @kbd{compose}
-is available as a dead key, that @kbd{shift}, @kbd{altgr}
-and @kbd{space} are available and that the ASCII letter,
+If we want to make the compiler assume that @key{compose}
+is available as a dead key, that @key{shift}, @key{altgr}
+and @key{space} are available and that the ASCII letter,
digits and some basic special characters are available we
can write.
@@ -7279,8 +7490,10 @@ For instance @file{layout/sv/qwerty} has two include
statements to implement its basics:
@example
+@group
include "../common/qwerty"
include "../common/base"
+@end group
@end example
@@ -7292,7 +7505,7 @@ include "../common/base"
@cpindex Macros, keyboard layout
There is a lot of repetitive work in layouts, for instance
all letters need mapping for any combination of use of
-@kbd{shift} and @kbd{compose}. To reduce this, you can
+@key{shift} and @key{compose}. To reduce this, you can
define macros.
For example instead of writing
@@ -7326,9 +7539,9 @@ letter("b" "B")
# and so on ...
@end example
-The name of this macro is `letter/2',
-but it is called with the name `letter'
-and two arguments. The `/2'-suffix means
+The name of this macro is @code{letter/2},
+but it is called with the name @code{letter}
+and two arguments. The @code{/2}-suffix means
that it is invoked with exactly two arguments.
You can use this do define multiple version
of the same macro, with the same invocation
@@ -7355,45 +7568,48 @@ letter("ö" "Ö")
@end example
@code{\add( )} and @code{\sub( )} are calls to two
-built-in functions named `add/2' and `sub/2'.
+built-in functions named @code{add/2} and @code{sub/2}.
@cpindex Alternation, keys
@cpindex Key alternations
Alternation can be used to invoke a macro:
-@ifset AFOURPAPER
+@ifset AFOURPAPER_OR_USLETTER_OR_SMALLFONT
@example
+@group
letter(["a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m"])
letter(["n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"])
+@end group
@end example
@end ifset
-@ifclear AFOURPAPER
+@ifclear AFOURPAPER_OR_USLETTER_OR_SMALLFONT
@example
+@group
letter(["a" "b" "c" "d" "e" "f" "g" "h" "i" "j"])
letter(["k" "l" "m" "n" "o" "p" "q" "r" "s" "t"])
letter(["u" "v" "w" "x" "y" "z"])
+@end group
@end example
@end ifclear
@cpindex Alternation, keys
@cpindex Key alternations
-You may use `.' in an alternation, in that case
+You may use @code{.} in an alternation, in that case
macro is called once with the argument, causing it
-to invoke for example `letter/0' instead of
-`letter/1'.
+to invoke for example @code{letter/0} instead of
+@code{letter/1}.
-A related issue are for-loops. If we for
-example want to call the macro `letter/1' for
-all letters betweeh and including `a' and `z'
+A related issue are for-loops. If we for example
+want to call the macro @code{letter/1} for all
+letters between and including `a' and `z'
we can just write
-@ifclear AFOURPAPER
-@page
-@end ifclear
@example
+@group
for "a" to "z" as \1
letter(\1)
end for
+@end group
@end example
instead of using the alternation-trick.
@@ -7451,7 +7667,6 @@ to or greater than 2 to the power of 31 not
allowed and can either cause compile-time
error or erroneous compiled files.
-
@cpindex Keyboard layout, macros
@cpindex Macros, keyboard layout
Functions are similar to function macros,
@@ -7462,13 +7677,15 @@ to the last value it evaluted before it returned.
For example instead of @code{\not(\greater(\1 "z"))}
you can write @code{\less_eq(\1 "z")} after you
-have defined the function `less_eq/2' with the
+have defined the function @code{less_eq/2} with the
following code:
@example
+@group
function less_eq/2
\not(\greater(\1 \2))
end function
+@end group
@end example
A final construct to make layout code less
@@ -7518,16 +7735,20 @@ them, may span multiple lines. For example
you may write
@example
+@group
let \1 : @{
"å" "ä" "ö" "à" "é" "ü"
@}
+@end group
@end example
but not
@example
+@group
let \1 :
@{ "å" "ä" "ö" "à" "é" "ü" @}
+@end group
@end example
See @ref{Builtin Functions} for how they are used.
@@ -7572,13 +7793,13 @@ a @code{< >}. But `\' can also be used to specify
characters by their code point, for example if you want
an `æ' you can write @code{"\u00E6"} or @code{"\uE6"},
instead of @code{"æ"}. You can also write @code{"\0346"},
-the difference between `\0' and `\u' is that `\0' uses
-octal whereas `\u' uses hexadecimal. A noteworthy
-side-effect of this is that function names cannot start
-with a lower case `u'.
+the difference between @code{\0} and @code{\u} is that
+@code{\0} uses octal whereas @code{\u} uses hexadecimal.
+A noteworthy side-effect of this is that function names
+cannot start with a lower case `u'.
`\' can also be used to access variables and parameters.
-For example `\1' in
+For example @code{\1} in
@example
macro letter/2
@@ -7590,19 +7811,20 @@ end macro
letter("å" "Å")
@end example
-is expanded to an `å', where as `\2' is expanded to an `Å'.
+is expanded to an `å', where as @code{\2} is expanded
+to an `Å'.
`\' is also used to call functions, for example if
-you want to call the function `f/0' you write
+you want to call the function @code{f/0} you write
@code{\f()}.
Because numerical (possibly prefixed with an `u') are of
variable length, it is possible to specify the escape's
-termination point with a dot. For instance, if you
-want the value of the first variable (\1) followed by
-two zeroes, you do not write `\100' as that would expand
-to the value of the hundredth variable. Instead you
-write `\1.00'.
+termination point with a dot. For instance, if you want
+the value of the first variable (@code{\1}) followed by
+two zeroes, you do not write @code{\100} as that would
+expand to the value of the hundredth variable. Instead
+you write @code{\1.00}.
Use of function calls and variables inside
@code{include}-statments invokes undefined behaviour.
@@ -7624,74 +7846,73 @@ of basic functions:
@table @code
@item add/2
@fnindex @code{add/2}
-The code points in \1 plus the code points of the
-corresponding characters in \2. If \1 and \2 are
-not of the same length, the returned string will
-be of the length of the longer of the parameters,
-and modulo is used to map to the corresponing
-character.
+The code points in @code{\1} plus the code points
+of the corresponding characters in @code{\2}. If
+@code{\1} and @code{\2} are not of the same length,
+the returned string will be of the length of the
+longer of the parameters, and modulo is used to map
+to the corresponing character.
@item sub/2
@fnindex @code{sub/2}
-Like `add/2' but subtraction.
+Like @code{add/2} but subtraction.
@item mul/2
@fnindex @code{mul/2}
-Like `add/2' but multiplication.
+Like @code{add/2} but multiplication.
@item div/2
@fnindex @code{div/2}
-Like `add/2' but division.
+Like @code{add/2} but division.
@item mod/2
@fnindex @code{mod/2}
-Like `add/2' but modulo.
+Like @code{add/2} but modulo.
@item rsh/2
@fnindex @code{rsh/2}
-Like `add/2' but rightward bitwise shift.
-If a character in \2 is has a code point
-greater than 30, undefined behaviour is
-invoked.
+Like @code{add/2} but rightward bitwise shift.
+If a character in @code{\2} is has a code point
+greater than 30, undefined behaviour is invoked.
@item lsh/2
@fnindex @code{lsh/2}
-Like `add/2' but leftward bitwise shift.
-If a character in \2 is has a code point
-greater than 30, undefined behaviour is
-invoked.
+Like @code{add/2} but leftward bitwise shift.
+If a character in @code{\2} is has a code point
+greater than 30, undefined behaviour is invoked.
@item or/2
@fnindex @code{or/2}
-Like `add/2' but bitwise OR.
+Like @code{add/2} but bitwise OR@.
@item and/2
@fnindex @code{and/2}
-Like `add/2' but bitwise AND.
+Like @code{add/2} but bitwise AND@.
@item xor/2
@fnindex @code{xor/2}
-Like `add/2' but bitwise XOR.
+Like @code{add/2} but bitwise XOR@.
@item not/1
@fnindex @code{not/1}
-For each character in \1, evaluate to
-zero if the character is not zero, and
+For each character in @code{\1}, evaluate
+to zero if the character is not zero, and
one if the character is zero.
@item equals/2
@fnindex @code{equals/2}
For each character, evalute to one if
-the characters in \1 and \2 are equal
-and zero otherwise.
+the characters in @code{\1} and @code{\2}
+are equal and zero otherwise.
@item greater/2
@fnindex @code{greater/2}
-Like `equals/2' but \1 greater than \2
-rather than \1 equals \2.
+Like @code{equals/2} but @code{\1} greater
+than @code{\2} rather than @code{\1} equals
+@code{\2}.
@item less/2
@fnindex @code{less/2}
-Like `equals/2' but \1 less than \2
-rather than \1 equals \2.
+Like @code{equals/2} but @code{\1} less than
+@code{\2} rather than @code{\1} equals @code{\2}.
@item set/3
@fnindex @code{set/3}
-Set the element with index \2, in the
-array with variable index \1, to \3,
-and return \3.
+Set the element with index @code{\2}, in
+the array with variable index @code{\1}, to
+@code{\3}, and return @code{\3}.
For example @code{\set(1 0 4)} sets the
-first element in \1 to 4.
+first element in @code{\1} to 4.
@item get/2
@fnindex @code{get/2}
-Return the element with index \2 in the
-array with variable index \1.
+Return the element with index @code{\2} in
+the array with variable index @code{\1}.
For example after @code{\set(1 0 4)} or
@code{let \1 : @{ 4 3 2 1 0 @}} has been
used, @code{\get(1 0)} evaluates to 4.
@@ -7726,10 +7947,10 @@ the compose key.
@c * Ancient Greek Numbers:: Ancient Greek Numbers.
@c * Ancient Symbols:: Ancient Symbols.
@c * Arabic:: Arabic.
-@c * Arabic Extended-A:: Arabic Extended-A.
+@c * Arabic Extended-A:: Arabic Extended-A@.
@c * Arabic Mathematical Alphabetic Symbols:: Arabic Mathematical Alphabetic Symbols.
-@c * Arabic Presentation Forms-A:: Arabic Presentation Forms-A.
-@c * Arabic Presentation Forms-B:: Arabic Presentation Forms-B.
+@c * Arabic Presentation Forms-A:: Arabic Presentation Forms-A@.
+@c * Arabic Presentation Forms-B:: Arabic Presentation Forms-B@.
@c * Arabic Supplement:: Arabic Supplement.
@c * Armenian:: Armenian.
* Arrows:: Arrows.
@@ -7765,10 +7986,10 @@ the compose key.
@c * CJK Strokes:: CJK Strokes.
@c * CJK Symbols and Punctuation:: CJK Symbols and Punctuation.
@c * CJK Unified Ideographs:: CJK Unified Ideographs.
-@c * CJK Unified Ideographs Extension A:: CJK Unified Ideographs Extension A.
-@c * CJK Unified Ideographs Extension B:: CJK Unified Ideographs Extension B.
-@c * CJK Unified Ideographs Extension C:: CJK Unified Ideographs Extension C.
-@c * CJK Unified Ideographs Extension D:: CJK Unified Ideographs Extension D.
+@c * CJK Unified Ideographs Extension A:: CJK Unified Ideographs Extension A@.
+@c * CJK Unified Ideographs Extension B:: CJK Unified Ideographs Extension B@.
+@c * CJK Unified Ideographs Extension C:: CJK Unified Ideographs Extension C@.
+@c * CJK Unified Ideographs Extension D:: CJK Unified Ideographs Extension D@.
@c * Combining Diacritical Marks:: Combining Diacritical Marks.
@c * Combining Diacritical Marks Extended:: Combining Diacritical Marks Extended.
@c * Combining Diacritical Marks for Symbols:: Combining Diacritical Marks for Symbols.
@@ -7784,8 +8005,8 @@ the compose key.
@c * Currency Symbols:: Currency Symbols.
@c * Cypriot Syllabary:: Cypriot Syllabary.
@c * Cyrillic:: Cyrillic.
-@c * Cyrillic Extended-A:: Cyrillic Extended-A.
-@c * Cyrillic Extended-B:: Cyrillic Extended-B.
+@c * Cyrillic Extended-A:: Cyrillic Extended-A@.
+@c * Cyrillic Extended-B:: Cyrillic Extended-B@.
@c * Cyrillic Supplement:: Cyrillic Supplement.
@c * Deseret:: Deseret.
@c * Devanagari:: Devanagari.
@@ -7802,7 +8023,7 @@ the compose key.
@c * Enclosed CJK Letters and Months:: Enclosed CJK Letters and Months.
@c * Ethiopic:: Ethiopic.
@c * Ethiopic Extended:: Ethiopic Extended.
-@c * Ethiopic Extended-A:: Ethiopic Extended-A.
+@c * Ethiopic Extended-A:: Ethiopic Extended-A@.
@c * Ethiopic Supplement:: Ethiopic Supplement.
* General Punctuation:: General Punctuation.
* Geometric Shapes:: Geometric Shapes.
@@ -7819,8 +8040,8 @@ the compose key.
@c * Halfwidth and Fullwidth Forms:: Halfwidth and Fullwidth Forms.
@c * Hangul Compatibility Jamo:: Hangul Compatibility Jamo.
@c * Hangul Jamo:: Hangul Jamo.
-@c * Hangul Jamo Extended-A:: Hangul Jamo Extended-A.
-@c * Hangul Jamo Extended-B:: Hangul Jamo Extended-B.
+@c * Hangul Jamo Extended-A:: Hangul Jamo Extended-A@.
+@c * Hangul Jamo Extended-B:: Hangul Jamo Extended-B@.
@c * Hangul Syllables:: Hangul Syllables.
@c * Hanunoo:: Hanunoo.
@c * Hebrew:: Hebrew.
@@ -7846,16 +8067,16 @@ the compose key.
@c * Khudawadi:: Khudawadi.
@c * Lao:: Lao.
@c * Latin Extended Additional:: Latin Extended Additional.
-* Latin Extended-A:: Latin Extended-A.
-* Latin Extended-B:: Latin Extended-B.
-* Latin Extended-C:: Latin Extended-C.
-@c * Latin Extended-D:: Latin Extended-D.
-@c * Latin Extended-E:: Latin Extended-E.
+* Latin Extended-A:: Latin Extended-A@.
+* Latin Extended-B:: Latin Extended-B@.
+* Latin Extended-C:: Latin Extended-C@.
+@c * Latin Extended-D:: Latin Extended-D@.
+@c * Latin Extended-E:: Latin Extended-E@.
* Latin-1 Supplement:: Latin-1 Supplement.
@c * Lepcha:: Lepcha.
@c * Letterlike Symbols:: Letterlike Symbols.
@c * Limbu:: Limbu.
-@c * Linear A:: Linear A.
+@c * Linear A:: Linear A@.
@c * Linear B Ideograms:: Linear B Ideograms.
@c * Linear B Syllabary:: Linear B Syllabary.
@c * Lisu:: Lisu.
@@ -7874,8 +8095,8 @@ the compose key.
@c * Meroitic Cursive:: Meroitic Cursive.
@c * Meroitic Hieroglyphs:: Meroitic Hieroglyphs.
@c * Miao:: Miao.
-* Miscellaneous Mathematical Symbols-A:: Miscellaneous Mathematical Symbols-A.
-* Miscellaneous Mathematical Symbols-B:: Miscellaneous Mathematical Symbols-B.
+* Miscellaneous Mathematical Symbols-A:: Miscellaneous Mathematical Symbols-A@.
+* Miscellaneous Mathematical Symbols-B:: Miscellaneous Mathematical Symbols-B@.
@c * Miscellaneous Symbols:: Miscellaneous Symbols.
* Miscellaneous Symbols and Arrows:: Miscellaneous Symbols and Arrows.
@c * Miscellaneous Symbols and Pictographs:: Miscellaneous Symbols and Pictographs.
@@ -7886,8 +8107,8 @@ the compose key.
@c * Mro:: Mro.
@c * Musical Symbols:: Musical Symbols.
@c * Myanmar:: Myanmar.
-@c * Myanmar Extended-A:: Myanmar Extended-A.
-@c * Myanmar Extended-B:: Myanmar Extended-B.
+@c * Myanmar Extended-A:: Myanmar Extended-A@.
+@c * Myanmar Extended-B:: Myanmar Extended-B@.
@c * Nabataean:: Nabataean.
@c * New Tai Lue:: New Tai Lue.
@c * NKo:: NKo.
@@ -7932,9 +8153,9 @@ the compose key.
@c * Sundanese:: Sundanese.
@c * Sundanese Supplement:: Sundanese Supplement.
* Superscripts and Subscripts:: Superscripts and Subscripts.
-* Supplemental Arrows-A:: Supplemental Arrows-A.
-* Supplemental Arrows-B:: Supplemental Arrows-B.
-* Supplemental Arrows-C:: Supplemental Arrows-C.
+* Supplemental Arrows-A:: Supplemental Arrows-A@.
+* Supplemental Arrows-B:: Supplemental Arrows-B@.
+* Supplemental Arrows-C:: Supplemental Arrows-C@.
* Supplemental Mathematical Operators:: Supplemental Mathematical Operators.
@c * Syloti Nagri:: Syloti Nagri.
@c * Syriac:: Syriac.
@@ -7994,11 +8215,11 @@ the compose key.
@subsection Box Drawing
Most of the box drawing glyphs can be composed by
-typing @kbd{<dead compose>} followed by two
-glyphs that should be combined to form the desired
-glyphs. If the two glyphs are identical the glyph
-becomes heavy. More general, common parts of the
-glyphs become heavy.
+typing @kbd{<dead compose>} followed by two glyphs
+that should be combined to form the desired glyphs.
+If the two glyphs are identical the glyph becomes
+heavy. More general, common parts of the glyphs
+become heavy.
Glyphs that contain a heavy part be transformed
so that the heavy parts become double stroked.
@@ -8698,7 +8919,7 @@ the cursor should transition from @code{X} to @code{X-hold}.
@code{X-hold} is the version of @code{X} that should be used
if any rat button is held down. @code{X} is an animation from
@code{X-release} to @code{X} and is used when the cursor should
-transition from @code{X-release} to @code{X}. Clients should
+transition from @code{X-release} to @code{X}@. Clients should
not set the cursor to either of them, it is up to the server
to do this based on events from the rat device.
@@ -8721,6 +8942,7 @@ This cursor is usually a north-west or north-north-west
pointing arrow. For left-handed themes this cursor is
usually a north-east or north-north-east pointing arrow.
@example
+@group
##
####
######
@@ -8737,6 +8959,7 @@ usually a north-east or north-north-east pointing arrow.
######
####
####
+@end group
@end example
@page
@@ -8749,6 +8972,7 @@ context menu.
This cursor is typically @command{default} combined with a
small menu.
@example
+@group
## ############
#### ############
###### ## ##
@@ -8765,8 +8989,9 @@ small menu.
######
####
####
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@ifset AFIVEPAPER
@page
@@ -8777,6 +9002,7 @@ an horizontal text that can be selected and possibly edited.
This cursor is usually a vertical I-beam.
@example
+@group
##############
##
##
@@ -8793,10 +9019,13 @@ This cursor is usually a vertical I-beam.
##
##
##############
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
+@ifclear AFOURPAPER_WITH_SMALLFONT
@page
+@end ifclear
@item vertical-text
This cursor should be used when the rat pointers is above
an vertical text that can be selected and possibly edited.
@@ -8806,6 +9035,7 @@ the first fallback.
This cursor is usually a horizontal I-beam.
@example
+@group
## ##
## ##
## ##
@@ -8813,9 +9043,13 @@ This cursor is usually a horizontal I-beam.
## ##
## ##
## ##
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
+@ifset AFOURPAPER_WITH_SMALLFONT
+@page
+@end ifset
@item progress
This cursor indicates that the interface can
be used as when @command{default} is used.
@@ -8825,6 +9059,7 @@ with command the user previously issued.
This cursor is usually rendered as a combination
of @command{default} and @command{wait}.
@example
+@group
## ############
#### ############
###### ########
@@ -8841,10 +9076,13 @@ of @command{default} and @command{wait}.
######
####
####
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
+@ifclear AFOURPAPER_WITH_SMALLFONT
@page
+@end ifclear
@item wait
This cursor indicates that the interface cannot
be used because it is working or is blocked by
@@ -8854,6 +9092,7 @@ This cursor is typically rendered as a
hourglass, watch, sundial or some sort
of animated ring.
@example
+@group
####################
####################
################
@@ -8870,10 +9109,11 @@ of animated ring.
################
####################
####################
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
-@ifset AFIVEPAPER
+@ifset AFIVEPAPER_OR_AFOURPAPER_WITH_SMALLFONT
@page
@end ifset
@item pointer
@@ -8886,6 +9126,7 @@ apparent by design that the object is clickable.
This cursor is usually a right hand (left hand if
left-handed) pointing with the index-finger.
@example
+@group
####
####
####
@@ -8902,10 +9143,13 @@ left-handed) pointing with the index-finger.
########################
####################
################
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
+@ifclear AFOURPAPER_WITH_SMALLFONT
@page
+@end ifclear
@item help
This cursor indicates that the interface is in
context help mode. This is usually activated by
@@ -8915,6 +9159,7 @@ question mark on it --- on the titlebar.
This cursor is typically renderas as @code{default}
with a question mark next to it.
@example
+@group
## ######
#### ##########
###### #### ####
@@ -8931,8 +9176,9 @@ with a question mark next to it.
######
####
####
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@item drag
This cursor indicates that an object is
@@ -8941,6 +9187,7 @@ being dragged.
This cursor is usually a closed right hand,
or closed left hand if left-handed.
@example
+@group
#### #### ####
################ ####
############################
@@ -8951,8 +9198,9 @@ or closed left hand if left-handed.
########################
####################
################
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@page
@item copy
@@ -8965,6 +9213,7 @@ be used as the first fallback.
This cursor is usually rendered as
@code{drag} with a plus-sign next to it.
@example
+@group
##
##
##########
@@ -8981,8 +9230,9 @@ This cursor is usually rendered as
########################
####################
################
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@ifset AFIVEPAPER
@page
@@ -9000,6 +9250,7 @@ This cursor is usually rendered as
The arrow is usually point north east,
or north west if left-handed.
@example
+@group
######
####
## ##
@@ -9016,8 +9267,9 @@ or north west if left-handed.
########################
####################
################
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@page
@item alias
@@ -9032,6 +9284,7 @@ This cursor is usually rendered as
@code{drag} with an two or three linked
links next to it, or an arced arrow.
@example
+@group
#### ####
## ##
## ######## ##
@@ -9048,12 +9301,17 @@ links next to it, or an arced arrow.
########################
####################
################
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@ifclear AFOURPAPER
+@ifclear SMALLBOOK_WITH_SMALLFONT
+@ifclear USLETTER_WITH_SMALLFONT
@page
@end ifclear
+@end ifclear
+@end ifclear
@item no-drop
This cursor indicates that the dragged object
cannot be release where the rat pointer is
@@ -9068,6 +9326,7 @@ should be used as the first fallback, and
This cursor is typically rendered as a
combination of @code{drag} and @code{not-allowed}.
@example
+@group
########
## ####
## ## ##
@@ -9084,8 +9343,9 @@ combination of @code{drag} and @code{not-allowed}.
########################
####################
################
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@page
@item not-allowed
@@ -9096,6 +9356,7 @@ operation.
This cursor is often rendered as a circle with
a diagonal line through it.
@example
+@group
########
#### ####
## ##
@@ -9112,8 +9373,9 @@ a diagonal line through it.
## ##
#### ####
########
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@ifset AFIVEPAPER
@page
@@ -9126,6 +9388,7 @@ below the cursor
This cursor is often rendered as a combined
vertical and horizontal twin-headed arrow.
@example
+@group
##
######
##########
@@ -9141,10 +9404,11 @@ vertical and horizontal twin-headed arrow.
##########
######
##
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
-@ifclear AFIVEPAPER
+@ifclear AFIVEPAPER_OR_AFOURPAPER_WITH_SMALLFONT
@page
@end ifclear
@item up-arrow
@@ -9153,6 +9417,7 @@ insertion point.
It is often rendered an upwards pointing arrow.
@example
+@group
##
######
##########
@@ -9164,15 +9429,20 @@ It is often rendered an upwards pointing arrow.
######
######
######
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
+@ifset AFOURPAPER_WITH_SMALLFONT
+@page
+@end ifset
@item cell
This cursor is often used in spread-sheet applications
-when selecting cells
+when selecting cells.
It is typically rendered as a thick plus-sign.
@example
+@group
######
######
######
@@ -9186,10 +9456,13 @@ It is typically rendered as a thick plus-sign.
######
######
######
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
+@ifclear AFOURPAPER_WITH_SMALLFONT
@page
+@end ifclear
@item col-resize
This cursor is used to indicate the the cursor is within a region
that allows it rat to be used to resize a column.
@@ -9203,6 +9476,7 @@ with an arrow from the left side pointing horizontally
towards it and an arrow from the right side pointing
horizontally towards it.
@example
+@group
##
##
##
@@ -9218,12 +9492,18 @@ horizontally towards it.
##
##
##
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@ifclear AFOURPAPER
+@ifclear USLETTER_WITH_SMALLFONT
@page
@end ifclear
+@end ifclear
+@ifset AFOURPAPER_WITH_SMALLFONT
+@page
+@end ifset
@item row-resize
This cursor is used to indicate the the cursor is within a region
that allows it rat to be used to resize a column.
@@ -9237,6 +9517,7 @@ with an arrow from the left side pointing vertically
towards it and an arrow from the right side pointing
vertically towards it.
@example
+@group
##
##
##
@@ -9252,16 +9533,27 @@ vertically towards it.
##
##
##
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
+@ifclear USLETTER
+@ifclear SMALLBOOK_WITH_SMALLFONT
+@ifclear AFOURPAPER_WITH_SMALLFONT
+@page
+@end ifclear
+@end ifclear
+@end ifclear
+@ifset USLETTER_WITH_SMALLFONT
@page
+@end ifset
@item crosshair
This cursor is used for precision drawing or
precision manipulation of an area.
This cursor typically a thin crosshair.
@example
+@group
##
##
##
@@ -9277,8 +9569,9 @@ This cursor typically a thin crosshair.
##
##
##
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@item w-resize
If this cursor is missing, @code{w-select}
@@ -9293,6 +9586,7 @@ This cursor is typically rendered as a
west pointing arrow, optionally with a
wall at the arrow head.
@example
+@group
## ##
## ##
## ##
@@ -9300,9 +9594,13 @@ wall at the arrow head.
## ##
## ##
## ##
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
+@ifset AFOURPAPER_WITH_SMALLFONT
+@page
+@end ifset
@item w-select
If this cursor is missing, @code{w-resize}
should be used as the first fallback,
@@ -9315,6 +9613,7 @@ the fourth fallback.
This cursor is typically rendered as a
west pointing arrow.
@example
+@group
##
##
##
@@ -9322,12 +9621,18 @@ west pointing arrow.
##
##
##
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
-@ifclear AFIVEPAPER
+@ifclear AFIVEPAPER_OR_USLETTER_OR_SMALLBOOK_WITH_SMALLFONT
+@ifclear AFOURPAPER_WITH_SMALLFONT
@page
@end ifclear
+@end ifclear
+@ifset USLETTER_WITH_SMALLFONT
+@page
+@end ifset
@item e-resize
If this cursor is missing, @code{e-select}
should be used as the first fallback,
@@ -9341,6 +9646,7 @@ This cursor is typically rendered as a
east pointing arrow, optionally with a
wall at the arrow head.
@example
+@group
## ##
## ##
## ##
@@ -9348,11 +9654,14 @@ wall at the arrow head.
## ##
## ##
## ##
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
-@ifset AFIVEPAPER
+@ifset AFIVEPAPER_OR_USLETTER_OR_SMALLBOOK_WITH_SMALLFONT
+@ifclear USLETTER_WITH_SMALLFONT
@page
+@end ifclear
@end ifset
@item e-select
If this cursor is missing, @code{e-resize}
@@ -9366,6 +9675,7 @@ the fourth fallback.
This cursor is typically rendered as a
east pointing arrow.
@example
+@group
##
##
##
@@ -9373,10 +9683,16 @@ east pointing arrow.
##
##
##
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@ifset SMALLBOOK
+@ifclear SMALLFONT
+@page
+@end ifclear
+@end ifset
+@ifset AFOURPAPER_WITH_SMALLFONT
@page
@end ifset
@item n-resize
@@ -9392,6 +9708,7 @@ This cursor is typically rendered as a
north pointing arrow, optionally with a
wall at the arrow head.
@example
+@group
##############
##
@@ -9408,12 +9725,18 @@ wall at the arrow head.
##
##
##
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@ifclear SMALLBOOK
+@ifclear AFOURPAPER_WITH_SMALLFONT
@page
@end ifclear
+@end ifclear
+@ifset SMALLBOOK_WITH_SMALLFONT
+@page
+@end ifset
@item n-select
If this cursor is missing, @code{n-resize}
should be used as the first fallback,
@@ -9426,6 +9749,7 @@ the fourth fallback.
This cursor is typically rendered as a
north pointing arrow.
@example
+@group
##
######
## ## ##
@@ -9440,12 +9764,16 @@ north pointing arrow.
##
##
##
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
-@ifclear AFOURPAPER
+@ifclear AFOURPAPER_OR_USLETTER_OR_SMALLBOOK_WITH_SMALLFONT
@page
@end ifclear
+@ifset AFOURPAPER_WITH_SMALLFONT
+@page
+@end ifset
@item s-resize
If this cursor is missing, @code{s-select}
should be used as the first fallback,
@@ -9459,6 +9787,7 @@ This cursor is typically rendered as a
south pointing arrow, optionally with a
wall at the arrow head.
@example
+@group
##
##
##
@@ -9475,12 +9804,15 @@ wall at the arrow head.
##
##############
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@ifclear SMALLBOOK
+@ifclear AFOURPAPER_WITH_SMALLFONT
@page
@end ifclear
+@end ifclear
@item s-select
If this cursor is missing, @code{s-resize}
should be used as the first fallback,
@@ -9493,6 +9825,7 @@ the fourth fallback.
This cursor is typically rendered as a
south pointing arrow.
@example
+@group
##
##
##
@@ -9507,10 +9840,11 @@ south pointing arrow.
## ## ##
######
##
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
-@ifset AFIVEPAPER
+@ifset AFIVEPAPER_OR_AFOURPAPER_WITH_SMALLFONT
@page
@end ifset
@item nw-resize
@@ -9526,6 +9860,7 @@ This cursor is typically rendered as a
north-west pointing arrow, optionally
with a corner at the arrow head.
@example
+@group
##################
##
##
@@ -9542,12 +9877,15 @@ with a corner at the arrow head.
##
##
##
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@ifclear SMALLBOOK
+@ifclear AFOURPAPER_WITH_SMALLFONT
@page
@end ifclear
+@end ifclear
@item nw-select
If this cursor is missing, @code{nw-resize}
should be used as the first fallback,
@@ -9560,6 +9898,7 @@ the fourth fallback.
This cursor is typically rendered as a
north-west pointing arrow.
@example
+@group
############
####
## ##
@@ -9573,10 +9912,11 @@ north-west pointing arrow.
##
##
##
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
-@ifset AFIVEPAPER
+@ifset AFIVEPAPER_OR_AFOURPAPER_WITH_SMALLFONT
@page
@end ifset
@item se-resize
@@ -9592,6 +9932,7 @@ This cursor is typically rendered as a
south-east pointing arrow, optionally
with a corner at the arrow head.
@example
+@group
##
##
##
@@ -9608,12 +9949,15 @@ with a corner at the arrow head.
##
##
##################
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@ifclear SMALLBOOK
+@ifclear AFOURPAPER_WITH_SMALLFONT
@page
@end ifclear
+@end ifclear
@item se-select
If this cursor is missing, @code{se-resize}
should be used as the first fallback,
@@ -9626,6 +9970,7 @@ the fourth fallback.
This cursor is typically rendered as a
south-east pointing arrow.
@example
+@group
##
##
##
@@ -9639,10 +9984,11 @@ south-east pointing arrow.
## ##
####
############
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
-@ifset AFIVEPAPER
+@ifset AFIVEPAPER_OR_AFOURPAPER_WITH_SMALLFONT
@page
@end ifset
@item ne-resize
@@ -9658,6 +10004,7 @@ This cursor is typically rendered as a
north-east pointing arrow, optionally
with a corner at the arrow head.
@example
+@group
##################
##
##
@@ -9674,12 +10021,15 @@ with a corner at the arrow head.
##
##
##
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@ifclear SMALLBOOK
+@ifclear AFOURPAPER_WITH_SMALLFONT
@page
@end ifclear
+@end ifclear
@item ne-select
If this cursor is missing, @code{ne-resize}
should be used as the first fallback,
@@ -9692,6 +10042,7 @@ the fourth fallback.
This cursor is typically rendered as a
north-east pointing arrow.
@example
+@group
############
####
## ##
@@ -9705,10 +10056,11 @@ north-east pointing arrow.
##
##
##
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
-@ifset AFIVEPAPER
+@ifset AFIVEPAPER_OR_AFOURPAPER_WITH_SMALLFONT
@page
@end ifset
@item sw-resize
@@ -9724,6 +10076,7 @@ This cursor is typically rendered as a
south-west pointing arrow, optionally
with a corner at the arrow head.
@example
+@group
##
##
##
@@ -9740,12 +10093,15 @@ with a corner at the arrow head.
##
##
##################
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@ifclear SMALLBOOK
+@ifclear AFOURPAPER_WITH_SMALLFONT
@page
@end ifclear
+@end ifclear
@item sw-select
If this cursor is missing, @code{sw-resize}
should be used as the first fallback,
@@ -9758,6 +10114,7 @@ the fourth fallback.
This cursor is typically rendered as a
south-west pointing arrow.
@example
+@group
##
##
##
@@ -9771,8 +10128,9 @@ south-west pointing arrow.
## ##
####
############
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@item ew-resize
If this cursor is missing, @code{ew-select}
@@ -9784,6 +10142,7 @@ This cursor is typically rendered as a
east and west pointing twin-arrow,
optionally with a wall at the arrow heads.
@example
+@group
## ## ## ##
## ## ## ##
## ## ## ##
@@ -9791,9 +10150,15 @@ optionally with a wall at the arrow heads.
## ## ## ##
## ## ## ##
## ## ## ##
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
+@ifset SMALLFONT
+@ifset AFOURPAPER_OR_AFIVEPAPER
+@page
+@end ifset
+@end ifset
@item ew-select
If this cursor is missing, @code{ew-resize}
should be used as the first fallback, and
@@ -9803,6 +10168,7 @@ second fallback.
This cursor is typically rendered as a
east and west pointing twin-arrow.
@example
+@group
## ##
## ##
## ##
@@ -9810,10 +10176,11 @@ east and west pointing twin-arrow.
## ##
## ##
## ##
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
-@ifclear AFIVEPAPER
+@ifclear AFIVEPAPER_OR_AFOURPAPER_WITH_SMALLFONT
@page
@end ifclear
@item ns-resize
@@ -9826,6 +10193,7 @@ This cursor is typically rendered as a
north and south pointing twin-arrow,
optionally with a wall at the arrow heads.
@example
+@group
##############
##
@@ -9842,8 +10210,9 @@ optionally with a wall at the arrow heads.
##
##############
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@item ns-select
If this cursor is missing, @code{ns-resize}
@@ -9854,6 +10223,7 @@ second fallback.
This cursor is typically rendered as a
north and south pointing twin-arrow.
@example
+@group
##
######
## ## ##
@@ -9866,10 +10236,21 @@ north and south pointing twin-arrow.
## ## ##
######
##
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
+@ifclear SMALLFONT
+@ifclear AFIVEPAPER
@page
+@end ifclear
+@end ifclear
+@ifset USLETTER_WITH_SMALLFONT
+@page
+@end ifset
+@ifset AFOURPAPER_WITH_SMALLFONT
+@page
+@end ifset
@item nwse-resize
If this cursor is missing, @code{all-resize}
should be used as the first fallback.
@@ -9878,6 +10259,7 @@ This cursor is typically rendered as a
north-west and south-east pointing twin-arrow,
optionally with a corner at the arrow heads.
@example
+@group
##################
##
##
@@ -9894,8 +10276,9 @@ optionally with a corner at the arrow heads.
##
##
##################
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@ifset AFIVEPAPER
@page
@@ -9908,6 +10291,7 @@ This cursor is typically rendered as a
north-east and south-west pointing twin-arrow,
optionally with a corner at the arrow heads.
@example
+@group
##################
##
##
@@ -9924,8 +10308,9 @@ optionally with a corner at the arrow heads.
##
##
##################
+@end group
@end example
-@vskip 0pt plus 2filll
+@vskip 0pt plus 1filll
@page
@item all-resize
@@ -9935,6 +10320,7 @@ twin-arrow and a north-west and south-east
pointing twin-arrow, optionally with a corner
at the arrow heads.
@example
+@group
########## ##########
#### ####
## ## ## ##
@@ -9950,6 +10336,7 @@ at the arrow heads.
## ## ## ##
#### ####
########## ##########
+@end group
@end example
@end table
@@ -9971,7 +10358,7 @@ the windows ID of the socket that the application
should be embedded in.
All @command{mds} applications must be aware
-of the environment variable @env{MDS_EMBED}.
+of the environment variable @env{MDS_EMBED}@.
The application may choose not to embed itself
in the announced socket, however it should have
good reason for not doing this.
@@ -10012,7 +10399,7 @@ if and only if @env{PREFERRED_DISPLAY} lists any
other display protocol.
If a compatibility server is successfully started,
-it shoul be listed in @env{PREFERRED_DISPLAY}.
+it shoul be listed in @env{PREFERRED_DISPLAY}@.
Be sure to keep the list ordered by preference.
@table @code
@@ -10077,7 +10464,7 @@ to run them across any number of computers.
@pgindex @code{@command{mds-host}}
@pgindex @command{mds-remote}
-@pgindex Networking
+@cpindex Networking
If a hosting server, like @command{mds-host}, runs
inside a metadisplay, any number of computers can
connect to the metadisplay using a server like
@@ -10695,7 +11082,7 @@ Development of @command{mds} started out of
concern that Wayland would not meet our needs,
and the knowledge that X does not. We are now
however aware that Wayland meets our needs even
-less than X.@footnote{Not even counting that
+less than X@.@footnote{Not even counting that
the documentation for Wayland is way more lacking
that X's documentation.}
@@ -11027,31 +11414,31 @@ backgrund.
@include fdl.texinfo
@node Program index
-@appendix Program index
+@unnumbered Program index
@printindex pg
@node Variable index
-@appendix Variable index
+@unnumbered Variable index
@printindex vr
@node Option index
-@appendix Option index
+@unnumbered Option index
@printindex op
@node Concept index
-@appendix Concept index
+@unnumbered Concept index
@printindex cp
@node Signal index
-@appendix Signal index
+@unnumbered Signal index
@printindex sg
@node Function index
-@appendix Function index
+@unnumbered Function index
@printindex fn
@node Data type index
-@appendix Data type index
+@unnumbered Data type index
@printindex tp
@bye
@@ -11096,7 +11483,7 @@ TODO protocol: workspace
TODO protocol: ping
TODO notifications (balloons, bubbles)
-TODO virtual resultion (the screen is larger than the output)
+TODO virtual resolution (the screen is larger than the output)
TODO taskbar features:
progress bars (any number) with colours
@@ -11111,3 +11498,5 @@ TODO application menu features:
different ways to start an program, for example,
browers may include a safe-browsing mode.
+In `Rat Cursors` use anchors and references to hyperlink names.
+