ZMail command and keybinding inventory for the maintained LM-3 tree
This page records the command environment constructed by the active ZMail source at LM-3 System check-in 4df393c. It is a static source inventory, not a claim that the tested 303-0 world had loaded ZMail or that a user's profile and patches left every binding unchanged. The application study explains the architecture, features, release boundary, and failed runtime load attempt. The normative multi-profile contract is the ZMail and mail-composition reimplementation specification.
“Complete” on this page means complete for the application-owned mappings and transient contexts found in the selected maintained System 303 source. A complete effective keyboard requires this page together with D08's context, numeric, applicability, Help, and unbound rules and D05's System 303 ZWEI/Zmacs parent tables. The public System 46 composer is a different profile whose sparse local tree is specified in D08; the tested System 303-0 band did not have the System 303 reader resident. Neither is merged into this denominator.
When D08 incorporates this page, MUST, MUST NOT, SHOULD, and MAY state normative requirements for the selected maintained-source profile. Static source closure remains distinct from the unavailable loaded-band runtime oracle.
How command lookup is composed
ZMail does not use one flat keymap. INITIALIZE-ZMAIL-COMTABS constructs related tables and explicit indirections:
- the top-level ZMail table handles mail-reading commands;
- the message-editing table delegates an absent direct cell to the selected ZWEI mode;
- its
Control-Xtable delegates an absent child to ZWEI's standardControl-Xtable; - the reply table adds send/abort/yank operations, but an absent direct reply cell delegates straight to the selected ZWEI mode, not through the message table;
- the reply
Control-Xtable adds window and draft operations, then delegates to the messageControl-Xtable and from there to ZWEI's standardControl-Xtable; - a right-click in reply composition opens a menu over the principal header, draft, send, and abort commands.
The effective composition editor therefore inherits ordinary ZWEI editing and mode behavior, but its two direct paths are siblings rather than a reply-to-message parent chain. The reply-to-message chain exists only below Control-X. The bindings below are ZMail's additions and overrides; they should be read alongside the ZWEI/Zmacs binding audit and D08, not as a standalone keyboard for inserting and editing text. The top-level reader differs: its table has no ordinary text-insertion fallback, so an absent cell reaches ZMail's unbound-command path rather than inserting the character. These edges are constructed in zmail/comnds.lisp.602:76-143; in particular, the direct indirections are at lines 80 and 143 and the reply-prefix indirection is at line 105.
The selected System 303 implementation is a ZWEI/TV application, not CLIM and not the later Dynamic Windows presentation framework. A search of the pinned Zmail source finds no application-owned DEFINE-PRESENTATION-TYPE or presentation translator definitions. Sensitive output instead uses TV typeout-item registries and the special blips enumerated below; minibuffer readers remain D05 ZWEI contracts. G85's typed parser/completion/default table therefore must not be copied back into this profile.
Top-level mail-reading table
Direct message and application commands
| Key | Command | Effect |
|---|---|---|
C-D |
Delete and Up | delete current message and move in the source-defined upward direction |
C-F |
Find String | search message text forward |
C-G |
Beep | cancel/error feedback through the shared ZWEI command |
C-L |
Recenter Window | recenter the active display |
C-N |
Down to Next | move to the next displayed message |
C-P |
Up to Previous | move to the previous displayed message |
C-R |
Edit Current Msg | edit the selected message |
C-U |
Universal Argument | start a numeric argument |
C-V |
Next Screen | scroll the current message forward |
C-Z |
Quit | invoke the inherited generic quit command from the ZMail table |
C-Space |
Set Pop Mark | push the current message position |
M-V |
Previous Screen | scroll backward |
M-X |
Extended Command | complete and invoke a named ZMail command |
M-? |
Self Document | use ZWEI line self-help with the ZMail table |
M-~ |
Not Modified | clear the current buffer's modified state through the ZMail command |
M-< |
Start of Msg | move to the start of the message |
M-> |
End of Msg | move to the end of the message |
C-M-V |
Scroll Summary Window | scroll the summary independently of the message |
C-M-Space |
Move to Previous Point | pop a saved message position |
. |
Start of Msg | printable alias for message start |
? |
Documentation | enter ZMail's key/help dispatcher |
C |
Continue | resume a saved draft |
D |
Delete | mark current message deleted |
E |
Expunge | rewrite affected mail files without deleted messages |
F |
Forward | begin forwarding the current message |
G |
Get New Mail | retrieve new mail into the primary buffer |
J |
Jump | select a message using jump/filter interaction |
L |
Keywords | edit keywords on the current message |
M |
begin a mail, bug, forward, redistribute, or local-message operation | |
N |
Next | select the next message according to current policy |
O |
Move | file/move the current message |
P |
Previous | select the previous message |
Q |
Quit | quit ZMail |
R |
Reply | begin a reply |
S |
Save | save changed mail files |
U |
Undelete | remove the deleted mark |
X |
Extended Command | printable alias for named-command completion |
Z |
Large Argument | ZMail-specific large numeric argument |
Break |
Break | enter the ZMail break/debug path |
Backspace |
Previous Screen | scroll backward |
Rubout |
Previous Screen | scroll backward |
Hand-Down |
Next Screen | scroll forward |
Hand-Up |
Previous Screen | scroll backward |
Help |
Documentation | enter ZMail help |
Form |
Refresh | refresh the ZMail display |
Resume |
Continue | resume a draft |
Space |
Next Screen | scroll forward |
N and P are not simple array increments in every case. Profile/menu choices can select unseen or undeleted messages and first/last variants. The table binds the entry commands; those commands interpret the current policy.
Numeric arguments
| Keys | Command |
|---|---|
-, C--, M--, C-M-- |
negate numeric argument |
0 through 9 |
enter a digit |
C-0 through C-9 |
enter a digit |
M-0 through M-9 |
enter a digit |
C-M-0 through C-M-9 |
enter a digit |
The four ten-key ranges are generated by range entries in SET-COMTAB; they are 40 effective bindings, not four literal keys. Together with the four minus variants, the reader table has 44 generated numeric cells in addition to its 47 ordinary direct cells.
The argument is not adequately represented by “present plus an integer.” The source retains five provenance tags:
| Tag | How it is reached | Initial or resulting value |
|---|---|---|
NIL |
no argument command | 1 |
:SIGN |
one of the four minus cells before a digit | -1 until digits replace the magnitude |
:DIGITS |
one or more numeric cells | the entered signed decimal integer |
:CONTROL-U |
C-U without a following digit |
four times the preceding value |
:INFINITY |
top-level Z / Large Argument |
MOST-POSITIVE-FIXNUM |
The top-level loop resets value and tag before each command (zmail/top.lisp.566:95-103); Large Argument installs :INFINITY (zmail/comnds.lisp.602:269-273). Provenance is observable: Summary scrolling tests :DIGITS and :CONTROL-U as explicit line counts and treats the other tags as screen counts (zmail/comnds.lisp.602:1687-1701).
Reachability is context-specific. The top-level ZMail reader reaches all five tags. The message and reply editors use the inherited System 303 editor argument reader, which reaches NIL, :SIGN, :DIGITS, and :CONTROL-U (zwei/modes.lisp.164:995-1024); Large Argument is not installed in those editor tables, so :INFINITY is not an editor state in the clean profile. Summary, menu, pointer, typeout, and transient utility loops do not synthesize a separate numeric state of their own. A command reached after returning to the top reader receives the top reader's state; a command executed wholly inside one of those loops does not. Minibuffer argument behavior belongs to D05's minibuffer parent.
Address-field editing additions
The mode table supplied to ZMail gains five Hyper bindings for editing structured address lists:
| Key | Command |
|---|---|
Hyper-F |
Forward Address |
Hyper-B |
Backward Address |
Hyper-K |
Kill Address |
Hyper-Rubout |
Backward Kill Address |
Hyper-T |
Exchange Addresses |
These commands operate at address boundaries rather than ordinary word boundaries, which reflects ZMail's structured treatment of recipient headers.
Message-editing and composition tables
General message editing
| Key | Command | Delegation |
|---|---|---|
End |
Quit ZMail Edit | ZMail override |
C-Escape |
Quit ZMail Edit | ZMail override |
Abort |
Quit ZMail Edit | ZMail override |
| all other applicable keys | current mode/ZWEI command | through table indirection |
The message Control-X prefix adds:
| Key | Command |
|---|---|
C-X A |
Add More Text |
C-X C |
Add Cc Field |
C-X S |
Add Subject Field |
C-X T |
Add To Field |
Unrecognized Control-X keys continue into ZWEI's standard prefix table.
Reply/draft composition
| Key | Command | Effect |
|---|---|---|
End |
Mail End | finish according to the current draft/send state |
C-Escape |
Send Message | send the draft |
C-M-Y |
ZMail Yank | insert the referenced/current message into the draft |
Abort |
Abort Send | abandon with the ordinary confirmation path |
Super-Abort |
Really Abort Send | force the stronger abort path |
C-] |
Abort Send | keyboard alias for aborting composition |
The reply Control-X table adds:
| Key | Command |
|---|---|
C-X 1 |
Reply One Window |
C-X 2 |
Reply Two Windows |
C-X 3 |
Reply Three Windows |
C-X M |
Recursive Mail |
C-X O |
Other Window |
C-X Y |
Prune Yanked Headers |
C-X C-R |
Restore Draft File |
C-X C-S |
Save Draft File |
C-X C-W |
Write Draft File |
C-X C-M-S |
Save Draft as Msg |
An absent reply-prefix child then inherits the message-prefix additions and Standard ZWEI Control-X commands. Direct reply cells instead go straight to the active mode, as described above.
The reply extended-command registry has these 17 entries in source order:
- Add To Field
- Add Cc Field
- Add FTo Field
- Add Fcc Field
- Add Subject Field
- Add In-Reply-To Field
- Add More Text
- Add From Field
- ZMail Yank Current Msg
- Prune Yanked Headers
- Send Message
- Abort Send
- Restore Draft File
- Write Draft File
- Save Draft File
- Save Draft As Msg
- Change Subject Pronouns
Mouse-3-1 opens this separate 15-entry menu, also in exact source order:
- Add To
- Add Cc
- Add Fcc
- Add Subject
- Add In-Reply-To
- Add More Text
- Add From
- Prune Yanked Headers
- Send Message
- Abort Send
- Restore Draft File
- Write Draft File
- Save Draft File
- Save Draft As Msg
- Change Subject Pronouns
Thus Add FTo Field and ZMail Yank Current Msg are extended-command-only in this profile. The two lists and their deliberate difference are constructed at zmail/comnds.lisp.602:107-142; they must not be normalized into one synthetic menu.
Summary-pane mouse behavior
Summary lines are mouse-sensitive message objects.
| Gesture | Source behavior |
|---|---|
| Left click | select the message; if necessary leave summary-only layout so its body can be shown |
| Middle click | perform the profile-selected middle action; the default is delete-or-undelete |
| Right click | open the summary-message menu |
The static registry is Continue, Keywords, Delete, Undelete, Remove, Reply, Move, Append, Filter, but that is not the exact right-button display order. The dispatcher synthesizes this ordered list for each clicked row:
- Keywords;
- Delete or Undelete, according to the clicked message's deleted state;
- Remove, only for a temporary buffer;
- Continue for a draft or Reply for any other message;
- Move;
- Append;
- Filter.
The middle-button chooser is a separate exact list: Delete/Undelete; Delete/Remove; Keywords; Delete; Undelete; Remove; Reply; Move; Append; Filter. The first two entries resolve conditionally at execution. The static registries are at zmail/defs.lisp.284:848-875; the synthesized right list and middle dispatch are at zmail/window.lisp.361:734-759.
Menu buttons also distinguish left, middle, and right actions. Consequently, a label such as Reply or Move can have a quick default action and a right-button option menu; the visible label alone is not a complete interaction specification.
Transient task and presentation trees
The main table is only one input context. System 303 installs separate input loops for marking, filter and universe work, profile editing, one-shot choosers, typeout items, extended search, and the experimental :NEW layout. These branches do not fall through to the top-level reader unless the named branch explicitly requeues an event.
Utility-frame parent
Filter, universe, and profile tasks share this noneditor outer loop:
| Atomic input | Effect |
|---|---|
Clear-Screen |
refresh the frame |
Control-R |
select and edit the current pane |
Break |
enter ZMail Break |
Abort |
throw to the child frame's top-level tag |
| any other atomic key | BARF; there is no Standard-editor fallthrough |
The parent compound-event dispatcher is exact and ordered by opcode:
| Opcode | Parent action and result |
|---|---|
SUMMARY-EXECUTE, :TYPEOUT-EXECUTE, :EXECUTE |
apply the supplied function and arguments; return its values |
READ-BACKGROUND-RESPONSE-QUEUE |
consume and return DIS-NONE; the outer loop services the queue |
REDISPLAY, CONFIGURATION-CHANGED |
consume and return DIS-NONE |
SCROLL |
preserve relative scrolling, otherwise convert the requested line to an absolute start; redisplay that window and return DIS-NONE |
SELECT-WINDOW |
temporarily select the named window, enter its editor under the standalone-abort catch, then return DIS-NONE |
raw :MOUSE-BUTTON |
requeue the complete event and recursively issue SELECT-WINDOW for the current editor window |
The main ZMail frame uses that table as its fallback but overrides these opcodes:
| Opcode | Main-frame override |
|---|---|
:MENU |
set command-button state from the blip, resolve the menu item without side effects, and execute its command |
raw :MOUSE-BUTTON on the command-buttons frame |
requeue the event and enter the experimental universe/filter operand collector |
raw :MOUSE-BUTTON on the current editor window |
requeue the event and invoke the main SELECT-WINDOW branch |
raw :MOUSE-BUTTON on any other window |
ignore and return DIS-NONE |
SUMMARY-MOUSE |
set command-button state from the row gesture and dispatch the clicked message |
SELECT-WINDOW |
clear pending input when there is no current message, make the named window current, and execute Edit Current Message |
GET-NEW-MAIL |
invoke Get New Mail directly |
MODE-LINE |
set the supplied button and execute the supplied command |
READ-BACKGROUND-RESPONSE-QUEUE |
consume and return DIS-NONE |
Main-frame matches take precedence; unlisted opcodes fall through to the parent. An unknown compound event is requeued only when the active dispatcher's :WHICH-OPERATIONS result advertises that opcode, then the current loop is restarted. Otherwise the unknown-special condition declines it; there is no universal “unknown event beeps” rule. These branches are at zmail/top.lisp.566:135-185,694-727.
Reader mode line and summary label
The mode line has three dynamic selectable regions:
| Region | Gesture tree |
|---|---|
| buffer filename | present only while a buffer exists; invoke Rename Buffer |
| current keywords | left repeats the last stored add/remove sets or barfs if none; middle derives keywords from matching filters; right chooses the complete set and updates the stored default |
| message more/scroll | left advances one screen less one line; middle moves backward by that amount; right opens Forward, Backward, Beginning, End in that order |
The Summary pane's label has a separate geometry-dependent action. A single left click in its central half toggles Both to Summary and every other configuration to Both. A single left click in either outer quarter selects Message. Other mouse buttons on the label do not invoke this transition.
Marking mode
Marking first clears message marks and exposes the Summary configuration. Its entire task-local tree is:
| Input | Effect |
|---|---|
SUMMARY-MOUSE |
toggle the clicked message's mark |
End |
commit the marked set as a temporary buffer |
| any other compound blip | commit, requeue that blip, and return |
Abort, Control-] |
abort without committing |
| any other atomic key | beep and remain in marking mode |
Compound-blip commit is tested before atomic abort. Unwind always removes the marks and restores the prior documentation and layout.
Filter selection
The filter-selection frame owns no keyboard table: every atomic key beeps. Its pointer/event tree is:
| Item or event | Button policy and result |
|---|---|
| Abort | every button aborts selection |
| Not | every button toggles the Not accent/state |
| Universe | every button opens the universe chooser; commit only a non-null result |
| keyword menu | return the selected keyword predicate |
| system menu | return All, Deleted, Unseen, Recent, Answered, Filed, Search, From/To, or Subject |
| user-filter menu | return the selected stored filter |
| New Filter | enter filter definition; canceling definition aborts selection |
| other compound or random nonaccent click | ignore |
Filter definition
Outside the editor, filter definition inherits the utility-frame parent. Inside the editor, End and Control-Escape finish the standalone edit, Abort leaves only the editor, and all other input inherits Standard ZWEI plus the extended-search Control-H prefix listed below.
The insertion menus cover Any or a named keyword, a named user filter, Deleted/Unseen/Recent/Answered/Filed, Search, To, To/Cc, From, Subject, Other, and Before/On/After date predicates. The application buttons are exact:
| Button | Left | Middle | Right |
|---|---|---|---|
| Not, And, Or, Close | same insertion or navigation action | same | same |
| Sample | sample the current sequence | sample the current sequence | choose a universe, then sample |
| Done | parse, evaluate, and compile | same | same |
| Abort | return null | same | same |
| Name | prompt for a new name | open existing-filter menu | open existing-filter menu |
A summary click extracts filter material. Typeout-execute and summary-execute events explicitly barf. The middle-button Name behavior is source-visible even though its documentation mentions only the right button.
Universe definition
Universe definition uses the same utility parent and standalone editor contract; its mode line incorrectly says Editing Filter. File and temporary-buffer menu items insert buffer-name strings, Primary and Current insert those symbols, named universes insert a one-item list, and All inserts (ALL).
Union, Intersection, Not, Close, Done, and Abort perform the same action for every button. Name uses left for a new name and middle/right for the existing universe menu. D08 retains a runtime oracle for the (ALL) representation versus direct symbol expansion instead of guessing.
Profile task
The profile task uses the utility parent before editing and standalone ZWEI while editing. Control-R, selecting the editor pane, or clicking Edit enters the editor. The application buttons form this tree:
| Button | Left or keyboard | Middle | Right |
|---|---|---|---|
| Filters | edit remembered list | filter associations | menu of those two |
| Universes | edit remembered list | universe-filter associations | menu of those two |
| Mail Files | edit remembered files | file-filter associations | menu of those two |
| Keywords | edit file keywords | keyword-filter associations | menu of those two |
| Save | insert changes, save, maybe compile | make init compiled | Save file; Make init compiled; Insert changes; Reap file; Recompile file |
| Hardcopy | choose hardcopy options | same | same |
| File Options | choose buffer and edit options | same | same |
| Exit | leave profile task | same | same |
| Reset | restore init-file values, optionally text | same | same |
| Defaults | restore system defaults | same | same |
| Edit | synchronize values, edit, then reread | same | same |
Variable-choice events delegate the actual button to the TV value pane, mark profile state changed, and refresh its documentation. The Keywords popup uses the same standalone End/Abort edit contract. Random nonaccent clicks are ignored.
Message choosers and typeout items
CHOOSE-MSG-FROM-SUMMARY consumes exactly one event: SUMMARY-MOUSE returns its message; every other input barfs and is not requeued. The typed-or-summary chooser uses ordinary minibuffer editing, accepts a clicked summary message, and substitutes its default when typed input is empty.
Typeout items have these left defaults and ordered right menus:
| Item | Left default | Right menu, in order |
|---|---|---|
| ZMail buffer | Select | Kill; Save; Expunge; Expunge & Save; Select |
| file | Select | Select; Arbitrary format; View |
| unloaded mail file | Read in | Read in |
| summary line | Select message | Select |
| saved point | Select point | Select |
| message line | Select containing message | Select |
| minibuffer string | Insert | Insert |
| sender, recipient, or subject predicate | Insert predicate | Insert |
Left emits a typeout-execute event, right chooses an operation, and any other single button beeps. The typeout reader returns only numeric/keyboard input or the named typeout, summary, menu, mouse, mode-line, and mouse-button opcodes; it discards other compound events. Multiple-header and single-field selectors accept exactly one typeout-execute event and barf otherwise. Filter extraction accepts typeout actions, changes its source message on a summary click, returns on Space, and requeues any other input before returning.
Extended-search minibuffer
Extended search inherits the ordinary minibuffer and adds Help plus this complete Control-H child:
Control-H leaf |
Search expression |
|---|---|
( |
open |
) |
close |
Control-_, Control-O |
Or |
Control-D, &, Control-A |
And |
Control-N, ~, Control-E |
Not |
Space |
whitespace |
- |
delimiter |
A |
alphabetic |
* |
repeat next |
Control-X |
any character |
Help |
documentation |
The ordinary parent accepts Return, Control-Return, End, Control-G, Abort, Control-Shift-Y, Control-Meta-Y, Control-Shift-S, Meta-Shift-Y, and a double left click. Control-Z, Meta-Z, and Control-Meta-Z are hard undefined before Standard fallthrough.
Experimental :NEW layout
The experimental layout gathers a universe, filter, and command through a staged tree:
Universe
├─ left -> reuse last universe
├─ middle -> current buffer
└─ right -> choose universe and save it as the default
Filter
├─ left -> reuse last filter
├─ middle -> BARF
└─ right -> choose filter and save it as the default
Command/menu event
├─ repeatedly resolve Other Commands
├─ current-message command
├─ current-buffer associated-all command
├─ other-buffer associated-all command under dynamic selection
├─ materialize filtered temporary buffer, then associated-all command
├─ associated map command
└─ otherwise BARF
A filter chosen while scope is one message promotes scope to the current buffer. An input which is neither a menu nor mouse-button event is requeued and exits operand collection. Unwind restores the labels Just current message and All.
Complete named top-level command inventory
The active 18-path system defines 86 distinct commands through DEFINE-ZMAIL-TOP-LEVEL-COMMAND. Macro names become human-readable completion names by removing COM- or COM-ZMAIL-, replacing hyphens with spaces, and capitalizing words. The following grouping is editorial; the denominator and names are exact.
Message lifecycle and filing
Delete; Delete All; Delete and Save Msg; Delete and Up; Delete Duplicate Msgs; Expunge; Get New Mail; Kill Current Buffer; Kill Ring Save Msg; List Buffers; Move; Move All to File; Not Modified; Remove; Rename Buffer; Save; Select; Select Arbitrary Format Mail File; Set Expiration Date; Undelete; Undelete All; Undigestify Message; View File.
Composition, reply, and transport-facing commands
Bug; Continue; Edit Current Msg; Forward; Forward All; Mail; Redistribute All; Redistribute Msg; Reply; Reply All; Yank Msg.
Classification, search, and bulk operations
Goto; Jump; Keywords; Keywords All; Large Argument; Map; Occur; Other Commands; Profile; Select References; Sort; Survey; Type; Type All; Unkeywords All.
Reference and conversation operations
Append to Referenced Msg; Concatenate; Concatenate All; Delete Conversation by References; Delete Referenced Msgs; Move in Place of Referenced Msg; Select Conversation by References; Select Referenced Msg.
Output, integration, and session control
Enable Background Process When Deexposed; Gmsgs; Hardcopy All; Hardcopy Msg; Quit; View Original Header; Whois.
The groups account for all 86 definitions. Some named commands call shared ZWEI commands or open secondary menus; some direct bindings such as scrolling use generic ZWEI commands and therefore do not appear in this ZMail-macro denominator.
Conformance enumeration requirements
A System 303 implementation conforming to this companion must produce an effective-tree record for every row below, not just demonstrate a few representative keys:
- enumerate every finite character/modifier cell of the top reader, recursively descend
Control-X, expand all four ten-digit ranges, and distinguish absent, hard-undefined, prefix, nonfunction symbol, and callable leaves; - enumerate message direct -> selected mode and message
Control-X-> StandardControl-Xindependently, then enumerate reply direct -> selected mode and replyControl-X-> messageControl-X-> StandardControl-X; reject an implementation which inserts the message direct table into the reply direct path; - compare the reply extended registry and
Mouse-3-1menu as ordered 17- and 15-leaf sequences, including the two extended-only leaves; - invoke all 20 main commands with KBD, left, middle, and right under fixtures for every remembered/profile default being present and absent, and compare all fixed lists and Cartesian products in order;
- construct dynamic fixtures with zero, one, and multiple disk and temporary buffers, drafts, keywords, filters, macro registrations, and appended Other commands; compare category order, balancing cells, button-valued leaves, cancellation, remembered-state updates, and Save's Expunge -> Save -> Kill execution order;
- enumerate Summary left/middle/right with draft/non-draft, deleted/undeleted, and disk/temporary states, comparing the synthesized list rather than the static registry;
- drive the parent compound dispatcher, every main-frame override, and every transient context on this page with each accepted atomic key and compound opcode, including an unknown atomic and unknown compound value. Verify override-before-parent precedence, consume, beep, barf, abort, commit, requeue, and fallthrough separately; also prove that TV typeout items, not a synthesized Dynamic Windows presentation-type graph, own this profile's sensitive output;
- test the top reader with
NIL,:SIGN,:DIGITS,:CONTROL-U, and:INFINITY, retaining tag and value separately. Test inherited editor contexts only with the first four reachable tags, and prove that utility loops do not manufacture numeric variants; - query Help for every direct leaf and every reachable prefix leaf, then traverse the explicit Map and Other right-button branches. Record the source-visible four-key-path display limit and do not infer recursive traversal of unrelated menus; and
- repeat the graph after applying a controlled profile default, appended Other command, and installed key, recording clean-source and overlay origins separately.
Each record must include context, active pane/mode, input path, button, numeric tag and value, applicability state, ordered parent path, selected leaf, state change, redisplay degree, Help result, error/abort result, and whether the event was consumed or requeued. Passing only command-name counts does not satisfy these requirements.
Source/runtime boundary
The fixed reader/editor bindings are established by source inspection of zmail/comnds.lisp and the menu/default definitions in zmail/defs.lisp; top.lisp, filter.lisp, and profil.lisp establish the transient loops, choosers, search grammar, and button policies. They have not been enumerated from a live ZMail frame. The fresh System 303-0 session described in the application article proved that the static System Menu advertised Mail while ZWEI:ZMAIL-FRAME was not loaded. Loading the source was blocked by the unsited world's file-host configuration.
Runtime TODO: after a disposable local file host is configured, evaluate the live command-table indirections and completion alist, compare them with this static list, exercise Help and the three mouse buttons in a synthetic empty mailbox, and retain capture-specific provenance for any reviewed screenshots.
Until that oracle runs, this is complete selected-source mapping rather than a claim about site/profile overlays in a live historical frame. A conformance enumerator must walk every parent edge and prefix from D05, each table and transient branch here, and the precedence, argument, Help, applicability, and unbound rules in D08.
Sources
- LM-3 System 303
zmail/comnds.lisp, command-table construction and top-level commands. - LM-3 System 303
zmail/defs.lisp, menus, options, and layout names. - LM-3 System 303
zmail/top.lisp, utility-frame dispatch, transient-frame entry, choosers, and the experimental:NEWcommand loop. - LM-3 System 303
zmail/filter.lisp, marking, filter/universe tasks, extended-search prefix, and typeout handlers. - LM-3 System 303
zmail/profil.lisp, profile button and editor behavior. - Richard Stallman, ZMail Manual, first edition, April 1983, used as version-qualified intended-behavior evidence.
Last verified: 2026-07-19.