luvcraft/clim/tests.lisp
Wayland supplies the Dvorak character as well as the physical scancode. The physical D position must walk even though its text is E.
Place remains the physical QWERTY E position, whose Dvorak text is a dot.
Commands needing arguments will join M-x when it can ask for them; presenting them as executable before then would make a dishonest menu.
Words need not be adjacent, so the same finder scales to longer names.
The 0 key ends the number row as the tenth slot.
The whole design rests on this: with no FRAME-PROCESS of its own, the frame applies a command on the thread that looked it up, so a command may touch session state exactly as an event handler may.
An unbound key changes nothing and says so.
Dispatch: which layer a key reaches.
The release matching the focus keystroke is swallowed; ordinary Tab afterwards belongs to the focus, which is where Bash completion lives.
Shift-Tab is in the window table, so it leaves even a focus that takes every other key.
Unfocused, the same key is the world's verb rather than text, and never reaches the object that used to hold focus.
Holding the opposite direction is standing still, and letting go of it leaves the first one still held -- which one axis could not remember.
Shift makes a player sprint; it does not make W into another key.
A repeat is the same keystroke still held, so a verb does not fire again.
The legend says what the tables say.
A direction is its own line, because walking forward and sprinting are different things to do even though one command performs both.
The arrows look rather than walk: one merged row, all four keys.
Modifiers are printed, and :ANY is not: it is noise on every row.
A wall's modes are reachable, and say by which key.
Ten slots share one line, because nobody needs to be told about each.
A command owned by the movement layer is not repeated under the world that inherits it.
(key-name &key character modifiers repeat-p)(session)Return an application frame holding SESSION's command vocabulary. Deliberately built without a frame manager: MAKE-APPLICATION-FRAME only adopts a frame when one is supplied, so this frame has no panes, no mirror, and no second native canvas -- which luv's Cocoa host would refuse anyway. It exists for its command…
(focus session)Return a non-negative targeting score when FOCUS can be entered by TAB.
(focus session canvas event)Handle EVENT while FOCUS owns SESSION's modal player interaction.
A native destination with a lifetime and frame clock.
A direct McCLIM surface mounted in the presentation HUD.
(session event)The command SESSION's current input layer binds to key EVENT, or NIL. The window layer answers first and cannot be shadowed. After it, a focused object is asked through its own table and an unfocused player through the world's, so a key reaches exactly one layer.
(layout)()Return Luvcraft's currently defined argument-free commands as conses. This compatibility-shaped query is useful to callers which only inspect the vocabulary. The live menu itself retains MCLUV:COMMAND-MENU-ENTRY objects.
(entries query)An explicitly owned AVFrame.
(inventory)(frame event)Logical negation of one test or raw truth value.
(session overlay)Attach OVERLAY at SESSION's next native frame boundary and return it. ADD consumes a newly offered OVERLAY on both success and terminal rejection. Once SESSION begins stopping, the rejected overlay is released exactly once before APPLICATION-ATTACHMENT-CLOSED is signalled.
(session focus)Enter modal interaction with FOCUS, suspending ordinary player input. This is the common session transition behind using a world terminal or book, mounting a vehicle, and other interactions described by #8JCMA5.
(session)(key-name &key character modifiers)(intent urge)Test whether two compatible scalars are equal.
(intent positive negative)(intent)A simple Org table without formulas.
A key nothing binds is not a command and must not be mistaken for one: LOOKUP-KEYSTROKE-COMMAND-ITEM answers with the gesture on a miss.