Zmacs in Symbolics Genera
Zmacs is Genera's general file and program editor. Zwei is the underlying text editing system used by Zmacs and by specialized applications. In the inspected Genera 8.5 sources, Zmacs still composes a standard Zwei command table, a Zmacs overlay, separate Control-X tables, and mode-local tables. In the running world, that architecture appears as context-sensitive Help, mouse documentation, menus, and buffer-list operations rather than as a static wall chart.
This page documents architecture and features. The binding companion enumerates the configured standard, Zmacs, prefix, argument, Help, mode, and pointer/presentation layers in the inspected source revisions, while preserving the installed-world dump as an explicit oracle. The named-command audit records the counts, functional groups, and installation semantics of the two base command-alist constructors and the later CP additions. The editor-family reimplementation specification defines the semantic and behavioral reconstruction contract.
Evidence and rights boundary
The following local files came from the licensed Open Genera runtime and remain untracked. Evidence-only original prose and cryptographic identities are published here. Six sparse functional screen states have also passed a capture-specific fair-use review and are published in the curated Genera screenshot catalog; that review does not extend to the source tree, decoded Help, worlds, fonts, or other session output.
| Portable artifact | Bytes | SHA-256 | Use in this study |
|---|---|---|---|
sys.sct/zwei/defs.lisp.~292~ |
45,782 | e0c460db04abb2fb40af0717f3d0a0ba45bd83589f1846c4ba8c778420127b4c |
generic and Zmacs editor composition |
sys.sct/zwei/comtab.lisp.~589~ |
100,220 | 5101f5a25a7222d6d0f8f48401522fa418576eb27d145f659513eb80660ca2b1 |
lookup and standard tables |
sys.sct/zwei/zmacs.lisp.~1058~ |
31,456 | 082959472626b04d74631ada24bb8ad164bc44ef19f292343f905fbf10bf1d2f |
Zmacs and Zmacs Control-X overlays |
sys.sct/zwei/zmacs-buffers.lisp.~54~ |
64,709 | 5e7866786dffc8ec03cc3df6b0cd21277ac34656351a494c8e7656a837549bcf |
Zmacs buffer objects and operations |
sys.sct/zwei/screen.lisp.~638~ |
106,998 | 3b7a3353a2831c84a3130390539e419b843efed6d1425296b98242f4d9ffccb6 |
windows, redisplay state, and presentation integration |
sys.sct/zwei/files.lisp.~378~ |
88,157 | f627f666b0fe9ca7a1450526f081685b95b2c7e522a06d71b6db962345e957bc |
file buffers, attributes, versions, and locking |
sys.sct/zwei/modes.lisp.~254~ |
69,374 | 49d268b554e41a595741b4e6fc3066c9f52f69783fba112e8d3023256018b8f9 |
general mode machinery and minor modes |
sys.sct/zwei/language-modes.lisp.~140~ |
39,590 | ee78472671fd5476fb7bc2a712eedeebcedd90dc3e2e6f33d2595b41a09692fb |
language mode definitions and file-type selection |
sys.sct/zwei/text-modes.lisp.~27~ |
12,414 | 34c9bdec02ab8e8c7229c4303c48b59e28df8369f09253333b1eb6e4b0919020 |
text-derived modes and source/manual discrepancies |
sys.sct/zwei/search.lisp.~152~ |
62,618 | 4b98387119a754d74f388a5b94e435b4f492a296859ad009984b2fae80c04279 |
extended-search table hierarchy and operators |
sys.sct/zwei/comg.lisp.~96~ |
17,848 | 66007d528c90407fb162df152e6dfc383282981c0162abd67ebd3c6702784043 |
keyboard-macro mover and transient sentinel table |
sys.sct/zwei/dired.lisp.~465~ |
78,695 | d988987ca7220fd156a0c35eca2651e009c0054a8b9b86774890bfcaa6055da5 |
Dired mode and local commands |
sys.sct/zwei/buffer-editor.lisp.~12~ |
24,248 | f339b6b55994148b02c46dbca3fd532a4784d67b8ae24d89fa9ef954c07bef14 |
Edit Buffers line-property/action model and local table; List Buffers presentations |
sys.sct/zwei/mail.lisp.~38~ |
31,024 | 533278201f8538e9709cea2415491543bcc52a250c00acf9a387d391cd8ff93b |
editor Mail mode and bindings |
sys.sct/zwei/pated.lisp.~321~ |
127,190 | 010026c3ca264dc76c3278eda79bbbd69d1e9f51e4a6d088c686187ba2f418bf |
patch-description editor integration |
The local defsystem zwei declaration names 54 modules, and the highest evacuated Lisp revision is present for all 54. Together they total 2,405,992 bytes; the declaration-order manifest has SHA-256 d32d09305b38f8636d689cf89161a2e97fba254ea5890fd448bef3b984eed6eb. The declaration witness sys.sct/zwei/sysdcl.lisp.~3~ is 5,581 bytes with SHA-256 69a0dc2c0709cabcf1d3b14c35e745fbcb0b6414efc800057473c1d93545d0c3. Each manifest record is its UTF-8 archive-relative versioned pathname, one NUL byte, and the 32-byte binary file SHA-256; declaration-order records are concatenated without a terminator and hashed again. That is the static base-subsystem denominator used here. Conditional or compiled-only Fortran, C, Pascal, Joshua, Concordia, PostScript, and contributed Macsyma packages are not promoted to base-world-active modes without runtime evidence.
The locally extracted Document Examiner corpus contains 23 installed Zmacs chapters as well as file-attribute, environment, and release documentation. It was used to find intended behavior and terminology. No extracted Sage Binary text or source tree is tracked; the only tracked runtime pixels are the six reviewed functional captures cataloged below. The public Genera 8 Editing and Mail manual is cited where it establishes product-level behavior.
The public manual is labeled Genera 8, while the local world identifies as 8.5. Manual statements are therefore cross-checked against local source or runtime before they are stated as exact 8.5 behavior.
Zmacs and Zwei are different layers
Genera documentation says that Zwei is not itself the file editor: it is a text-manipulation and data-structure system used to construct editors. Zmacs is the editor for files. Dired, Zmail, and Converse are sibling domain editors built with Zwei. The Input Editor is a separate core facility, although local source also contains commands that integrate it with Zwei-aware behavior.
The code makes the layering concrete. A generic editor owns a command loop and dynamically bound editing state. A top-level editor is callable. Zmacs-specific editor objects add the named buffer set, buffer history, file-group data, completion state, tag tables, and the Zmacs command environment. The full top-level object composes those roles with screen windows and process state.
Text, buffer, and window objects
The implementation is not a single mutable character array. A line is a doubly-linked object with text, length, permanent buffer pointers, modification tick, owner, properties, and parser/token data. A buffer pointer identifies a line and character index and records how it should move when text is inserted. An interval is bounded by buffer pointers; a node adds hierarchy, modification state, and read/write locks; a top-level node adds change history and local variables.
A buffer adds saved point, mark, window start, mode list, sections, and typein style. A file buffer also records its pathname, read/save ticks, file metadata, and version string. A window references an interval but owns its own display sheet, start, point, mark, point stack, blinkers, redisplay state, and buffer history. This separation predicts independent panes over shared text; the two-window runtime observation below verifies the visible result in this world.
Effective command lookup
The active keymap is a chain:
- a major/minor-mode table, when present;
- the Zmacs application table;
- the standard Zwei table.
Control-X follows an analogous Zmacs-prefix-to-standard-prefix chain. Entries can be direct commands, aliases, prefixes, dynamic menu commands, explicitly undefined cells, or inherited cells. Named commands have parallel alists, and users, patches, site files, and loaded systems can modify the result.
This is why the companion reference counts configured entries rather than claiming a universal runtime-active number. The inspected source contains 212 literal entries in the standard direct table, 40 in the standard Control-X table, 13 direct Zmacs overrides, and 22 Zmacs Control-X entries, plus the installed prefix and right-button menu. It also lists 140 standard and 137 Zmacs-specific named-command candidates, counting the two separately supplied CP candidates. The constructor can warn and omit a command that is undefined at load time. Inheritance, ranges, shadows, optional packages, and those omissions prevent the source counts from being added into a meaningful “number of available keys.” The complete ordered candidate arrays are recorded separately in ignored local evidence; the publishable named-command audit retains their counts, categories, checksums, and reproducibility boundary.
Feature inventory
Core editing and histories
- ordinary insertion, overwrite mode, quoting of arbitrary characters, transposition, whitespace normalization, case conversion, and indentation;
- movement and marking by character, line, screen, page, word, sentence, paragraph, definition, s-expression, and list structure;
- active regions, registers, kill/copy/yank history, matching-yank operations, and region-specific undo and redo;
- keyboard macros, named macros, mouse macros, command installation, and command implementation editing;
- hardware
Cut,Copy,Paste,Undo,Redo, arrows,Home,Find,Scroll,Back-Scroll,Complete,Help, andAbortcharacters in addition to Control/Meta combinations.
Buffers, files, locks, and windows
- create, select, show, insert, rename, list, edit, kill, revert, and review named buffers;
- file find, visit, read-only find, save, write, insert, append, prepend, copy, rename, delete/undelete, link, directory creation, and property display;
- visited-file attributes for mode, package, readtable, base, tab width, character style, and other editor state;
- changed-on-disk detection, refinding, file and buffer read-only state, and release of file locks;
- one- and two-window layouts, comparison views, multiple buffers, window growth, other-window selection, and two views showing one region;
- an Edit Buffers read-only major mode whose rows carry buffer/action line properties and whose local command table schedules operations; the separate List Buffers typeout report wraps displayed rows as presentations.
Search, replace, and possibility sets
- forward and reverse incremental search,
Find-key equivalents, pattern and Lisp-oriented searches, occurrences, matching-line lists, and filtering; - an extended-search mini-language with grouping, Boolean AND/OR/NOT, and whitespace, delimiter, symbol-delimiter, alphabetic, digit, some, and any predicates, plus beginning/end/top-line/reverse string-search operators;
- literal, query, multi-string, buffer-driven, and tag-table-wide replace;
- definition-name completion and definition lists;
- possibility buffers that turn results, callers, warnings, or alternate definitions into a navigable sequence;
- sorting, reversing, counting, and keyboard-macro-driven transformations.
Lisp and Genera development
- evaluate or compile a region, buffer, definition, file, changed definitions, or tag-table set, with locator-aware variants;
- show argument lists, documentation, variables, presentations, resources, functions, classes, generic functions, effective methods, flavors, slots, initializations, methods, and dependents;
- edit definitions and alternate definitions, callers by package/system, methods, combined methods, compiler warnings, and installed or saved forms;
- macro expansion, disassembly, trace/untrace, compiler optimization and effect inspection;
- source compare and merge against installed, saved, or newest definitions;
- patch creation, private patches, patch authors/reviewers/comments, changed definition collection, recompilation, reload, abort/revoke, and resumption.
Text, styles, spelling, and abbreviations
- Text, Bolio, Scribe, Lisp, MIDAS, TECO, Macsyma, and Fundamental editing configurations in the inspected modules;
- paragraph and region filling, alternative fill choices, comment filling, prefix and column control, tabification, and untabification;
- spelling correction exposed by the manual/help environment, and word-abbreviation definition, files, listing, and expansion. The audited base Zwei source only resets a speller-owned dictionary variable; the speller command implementation is external to the 54-module base and was not runtime-confirmed here;
- character styles applied to a character, word, region, or typein default, with style discovery and display. Older ZWEI “font” concepts survive in some text-justifier command names, but the user-facing Genera operation is style- based and can carry family, face, and size information.
Help and customization
Help enters an editor Help dispatcher rather than merely opening a static manual. Its operations include command apropos, character description, command description, recent input, tutorial/basic help, undo-related help, variable apropos, and where-is queries. Meta-? describes a key; Control-Meta-? and Help reach fuller documentation. Control-? is instead definition-name completion in the standard table, a concrete change from the older System 46 self-documentation binding.
Named commands are read with completion. Variables and bindings can be made local, initialization files can customize the environment, and modes contribute their own syntax, hooks, and command tables. Self-documentation consults the active command environment, so its answer can reflect modes and dynamic objects.
Modes in the inspected 8.5 source
The general and language/text modules define these user-facing modes:
| Kind | Modes found in source |
|---|---|
| Language/text major modes | Lisp, MIDAS, Text, Bolio, Scribe, Fundamental, TECO, Macsyma |
| Task major modes | FEP Command, Dired, Edit Buffers, Edit Word Abbrevs |
| Minor modes | Atom Word, Emacs, Auto Fill, Full Auto Fill, Overwrite, Word Abbrev, Electric Shift Lock, Electric Character Style Lock, Auto Fill Lisp Comments, Patch Description, Mail |
DEFMODE is a higher-level mode constructor used by several language/text modes; DEFMAJOR and DEFMINOR cover other configurations. A mode can change syntax and hooks without installing a key, so this inventory comes from mode definitions rather than only key-table forms.
Patch Comment Editor and Standalone Editor Frame are initialized special editing contexts rather than mode declarations. Each installs a local Abort Standalone Abort overlay and is therefore documented in the binding companion, but neither is added to the mode count.
An apparent literal Common Lisp minor-mode definition is inside a block comment. Lisp-syntax registration can define syntax minor modes dynamically, but this audit did not dump the live registry. “Common Lisp minor mode is active in the base world” is therefore not asserted.
Source findings not evident from a feature list
- A source comment says the comment-editing bindings were a nuisance outside Zmacs. They are therefore absent/commented in the standard Zwei table and installed by the Zmacs overlay. The layering reflects an explicit usability decision.
M-.runs “Edit Definition And Other Definitions,” not only a single jump. Its possibility mechanism accounts for multiple definitions.- Standard
C-QisVarious Quantities, not the older quoted-insert binding. The richer keyboard and input facilities changed a familiar Emacs-derived key. - Several ordinary mouse-left/middle entries in the static standard table are commented, while live Zmacs still supplies dynamic bottom-line mouse documentation and contextual menus. Static table parsing alone misses the presentation system's contribution.
CompleteandC-?operate on definition names in the standard table, whileHelpretains the documentation dispatcher. This split is more specific than saying simply that “Zmacs has help and completion.”- The Zmacs source installs
Execute CP CommandandEdit CP Commandin a second named-command update after the main command alist. A parser that only reads the first constructor undercounts the command environment. - Single-line and multi-line prompt tables differ intentionally. Ordinary
Returnterminates single-line input; it remains insertable in multi-line search input, which exits throughC-Return/Endor its search-specificAltmode/Endleaves. - Extended-search input is a hierarchy of sparse tables, not one monolithic keymap. Its operator prefix, string-search overlay, and single-/multi-line minibuffers inherit different parents; the complete chain is recorded in the binding reference.
- Keyboard Macro Mover points a one-cell sparse table at the caller's active command table and injects an internal
BLIPS:a/sentinel to terminate replay. That implementation detail is invisible in an ordinary keyboard summary. - Word Abbrev mode writes its three
Control-Xleaves into the shared standard prefix rather than a mode-local prefix. The static mutation is established; its live cross-buffer scope remains a runtimeTODO. - Bolio's documentation and mode description promise Control-Meta font keys, but the implementing mode form is block-commented in this revision. Scribe is defined while
:MSSis mapped to Text and described in source as not really existing yet. These are shipped-source contradictions, not features inferred from a manual. - The inspected Macsyma source configures
//* ... *//comments and Indent Nested onTab, while the public manual says/* ... */and Indent Relative. Which definition is active in the world remains a runtimeTODO.
Runtime observations in Genera 8.5
A fresh isolated session named zmacs-research, generation 1, used base world Genera-8-5.vlod (54,804,480 bytes; SHA-256 a8ee5e86cc7e322f7385af3e0cd579d7650d4dcfc3ce328acbf8b25515dd0672) and VLM executable SHA-256 9f5e18d5770f973879716182b6856ef5a8ee9d3b2bb907476ea0cf35986aa4c7. The full run boundary was:
| Item | Recorded value |
|---|---|
| Session | zmacs-research, generation 1; 2026-07-18 00:08:49–00:32:25 EDT |
| Licensed release archive | 206,213,430 bytes; SHA-256 89fb3e76b91d612834f565834dea950b603acf8f9dbacacdd0b1c3c284a2d36e |
| Base and private world | 54,804,480 bytes; SHA-256 a8ee5e86cc7e322f7385af3e0cd579d7650d4dcfc3ce328acbf8b25515dd0672 at start and stop |
| Debugger and VLM | debugger SHA-256 2db918cfe8f35f52c7ff4b7695b0ecd3bb85e41a3327ea5a94874edf05edb54a; VLM SHA-256 9f5e18d5770f973879716182b6856ef5a8ee9d3b2bb907476ea0cf35986aa4c7 |
| Harness | execution-time SHA-256 bc9276ac766913bc15018dd334a2a2704ae5a926e1fcbc30ccfcff08af8cb48a |
| Toolchain | manifest.scm SHA-256 3adae999bbe420182f22adc2499fcc82449a46eaf580a362de9c0e718fa6b37d; Guix channel 230aa373f315f247852ee07dff34146e9b480aec |
| X compatibility preload | source SHA-256 4db1dee8e71d5ddc5cfd8289ecc3607738370ac97f856853786cfe713e94e392; executable SHA-256 acd71dbcb948f05b7fd2730b2b4706c08f16f46d792bd9aa6aa64370e855e4b1 |
| Network/configuration helpers | ifconfig interposer SHA-256 f45f45461622975996ab41138f64bb84a4b17c51fba0dbb649208914898c26b7; configuration SHA-256 5ce6509f5adf2cf2d054d34eb4ba777ce462285b8cd9b01bc071bf819139e086 |
| Time responder | executable SHA-256 cc3a2274149c5593b52e6608d732d4048518c766134df5e0f018746ad5cf98bb; validated RFC 868 evidence SHA-256 166bd62890002c9a34ad4e750f50914f2d80b557614492fc356828b74a1cbe34 |
| Selected window | Genera on DIS-LOCAL-HOST, XID 4194310, x=72, y=55, 1200×900 |
The VLM ran in separate user, mount, network, PID, IPC, and hostname namespaces. The session had no external route or guest-visible host file service, and the Xvfb server did not advertise MIT-SHM. Both byte-exact X request substitutions and the one local RFC 868 request/reply were observed and validated; the time responder exited zero.
Bubblewrap exposed a read-only Guix store, generated hosts and nsswitch files, the exact read-only helper scripts and private X socket, and the writable private runtime. It hid the host root, home, repository, private session metadata, and unrelated runtime sockets. This is a native-process reach reduction, not a claim of a complete kernel security boundary.
The ordered input intents were: Select E; pointer movement and a held/released right button; insertion of the probe text; host Help, F11, and F12 mapping probes; Help command/list paths and aborts; Meta-X translation probes; Control-X 3; Control-X Control-B; pointer movement and a generic right-button menu while List Buffers was visible; Control-X 1; Help Apropos with empty input; Help command description for List Commands; and a final Meta-X keysym probe. The generation-scoped log preserves all 37 intents and their 37 linked outcomes, including attempts that produced no claimed guest effect.
The following states were directly observed.
Active Help dispatcher
Host F12 reached the Genera Help dispatcher; host F11 and a literal host Help keysym did not in this X translation. This is a harness mapping result, not a Symbolics-keyboard claim. Help command description, recent-input history, and Apropos paths were also reached. An empty Apropos input was rejected with There is no default.

Runtime observation — Genera 8.5, session zmacs-research, generation 1, verified 2026-07-18: host F12 reached the editor Help dispatcher. The image records this harness translation, not the position of Help on Symbolics hardware.
Windows and buffer lists
Control-X 3 displayed two windows and selected a new *Buffer-2* in the lower pane.

Runtime observation — Genera 8.5, session zmacs-research, generation 1, verified 2026-07-18: Control-X 3 produced two independently selected editor windows and created the lower *Buffer-2* view.
Control-X Control-B then opened the presentation-oriented, nonmodal List Buffers typeout report. Its own visible legend says that + denotes a new file or a nonempty non-file buffer; it is not a generic modified-buffer marker. This agrees with the selected source, which binds Control-X Control-B to List Buffers and reserves Control-X Control-Shift-B for the distinct Edit Buffers application.

Runtime observation — Genera 8.5, session zmacs-research, generation 1, verified 2026-07-18 and reclassified 2026-07-19: Control-X Control-B opened List Buffers; the visible heading, legend, and unchanged Zmacs (Fundamental) mode line distinguish the report from Edit Buffers.
List-report mouse observations
The pointer was moved to coordinates intended to hit a displayed buffer row. The captured bottom line still shows generic window/menu documentation, so the image does not establish a typed presentation hit or buffer-specific operation.

Runtime observation — Genera 8.5, session zmacs-research, generation 1, captured 2026-07-18 and reassessed 2026-07-19: pointer movement left a generic Mouse-R: Menu-style description visible. An exact-glyph hit probe remains required before claiming List Buffers row recognition.
A generic right-button Operation menu was also observed while the list was displayed.

Runtime observation — Genera 8.5, session zmacs-research, generation 1, verified 2026-07-18 and reclassified 2026-07-19: button 3 opened a contextual Operation menu while List Buffers typeout was displayed. Its entries are generic Marking and Yanking, System, and Window menus; the capture does not establish a buffer-row presentation or buffer-specific menu owner.
The six images above are exact, unmodified copies of the selected raw PNGs. Their raw-to-curated mappings, capture times, per-capture action-prefix hashes, dimensions, PNG and normalized-pixel hashes, fair-use scope, and project-license exclusion are recorded in the curated screenshot catalog.
The raw PNGs, action records, world copy, VLM, and shutdown evidence remain in the ignored session tree. The 22,655-byte run record has SHA-256 7a372b6985f81cf2ad713dc89037177e0d411f266f4c3d17125838844284391a. The 35,050-byte, 74-record action log has SHA-256 8f7ca2510a6f3cc74ee6d72cdd3b3fd875de2df48075e330993b5507a655d721. The shutdown prompt was observed, yes was sent and accepted, and cleanup progress appeared. The known cold-load mutex stall then required bounded host cleanup. The final record says forced-stopped, forced_stop=true, forced_after_confirmed_shutdown_stall=true, state_may_be_incomplete=true, orderly_vlm_host_shutdown=false, and unsaved_lisp_state_discarded=true. The harness did not request Save World or a checkpoint; whether any in-guest persistence mechanism ran remains unverified. The private world stayed byte-identical to the base. See the Genera computer-use harness article for the isolation and provenance model.
Sources
- Symbolics, Editing and Mail, Genera 8, Zmacs and Zwei overview plus editing-command chapters; verified 2026-07-18.
- Symbolics, Genera 8.0 Reference Cards, used only as an 8.0 cross-check, not proof of exact 8.5 bindings; verified 2026-07-18.
- Licensed local Genera 8.5 source and extracted Document Examiner help, identities recorded above; inspected 2026-07-18.
- Fresh
zmacs-researchGenera Xvfb session, generation 1, input and image evidence recorded above; observed 2026-07-18.
