Use Familiar Interaction
This chapter uses Odra's default Direct profile, applies prefix arguments, enters component-local maps, and verifies that packages and modules add only the bindings they own.
Before You Begin
Complete Discover Commands and Bindings.
Keep one ordinary text file open and use M-x describe-keymap-state to confirm
that the selected interaction profile is direct.
Odra commands have stable semantic names. Direct and Modal provide different keyboard grammars for those commands; Darek, Maksym, Ksawery, Jan, and Roman add maps only while their own context is active.
Exercise the Direct Foundation
In the ordinary text file, use these representative bindings:
| Binding | Command | Result |
|---|---|---|
C-x C-f |
find-file |
Open a path. |
C-x C-s |
save-associated-document |
Save the current file. |
C-a, C-e |
cursor-line-start, cursor-line-end |
Move within the logical line. |
M-f, M-b |
cursor-next-word, cursor-previous-word |
Move by word. |
C-s, C-r |
isearch-forward, isearch-backward |
Search incrementally. |
C-SPC |
set-mark-command |
Start or finish a region. |
M-w, C-w, C-y |
copy-region, kill-region, yank |
Copy, cut, and paste. |
C-_ or C-x u |
undo |
Undo one transaction. |
M-x |
execute-extended-command |
Run a command by semantic name. |
Press C-h k, then one of the sequences above. The inspection result should
show the same command name as the table. Press C-h w, enter that command
name, and confirm that Odra can also find the route from command to binding.
Apply a Prefix Argument
Place the cursor before several words. Press M-3 M-f; the cursor advances
three words. Press C-u C-n; the cursor advances four lines because one
universal argument starts at four. Repeating C-u multiplies the value by
four, and M-- begins a negative numeric argument.
The prefix belongs to the next resolved Direct command, including one selected
through M-x. Press C-g to cancel a pending prefix. Switching profiles also
clears it; Modal counts belong to the Modal grammar instead.
Enter Component-Local Maps
Open each component through its normal User Guide workflow. Its familiar keys become active only while that component owns input.
| Owner | Representative entry or action | Familiar local bindings |
|---|---|---|
| Maksym | C-x d |
f opens, m marks, g refreshes, q closes. |
| Darek | C-x t t |
s selects sorting; t h, t i, t g, and t a toggle presentation and watching. |
| Ksawery | M-x ksawery-status |
g refreshes; d, r, m, M, and C open operation families; ? opens the dispatcher. |
| Jan Babel | Open a .jan or .org document |
C-c C-c performs the contextual action; C-c C-v introduces Babel operations. |
| Roman | Enable odra.roman and open a Jan document |
C-c n f finds a node, C-c n i inserts one, and C-c n g opens the graph. |
Run C-h m inside a component and again after closing it. The active owner and
maps should change, while the semantic command registry remains available to
M-x. A key with a component-local meaning returns to its Direct meaning when
that context closes.
Compare Direct and Modal
Run M-x select-interaction-profile and select modal for the current
session. Commands such as save, undo, Jan actions, and Roman actions retain
their public identities, but the profile resolves them through its own maps.
Component-owned prompts, candidates, Darek, Maksym, and Ksawery continue to
take local input while active.
Return to direct with the same command. Use C-h m after each transition to
inspect the selected profile and active context rather than inferring them
from one key.
Observe Package and Module Lifecycle
Roman contributes commands and C-c n maps only while odra.roman is enabled.
Run M-x package-disable, select odra.roman, and confirm that C-h w no
longer finds an active route for roman-node-find. Enable the installed
package again and reopen a Jan document; the route returns with the new
contribution generation.
Darek and Maksym follow the same ownership rule at the module boundary. Their local maps are present only when the module is loaded and its surface owns input. Closing a surface must not leave one of its local bindings in the ordinary editor map.
Recognize Intentional Migrations
The register prefix follows familiar meanings: C-x r s stores the active
region, C-x r SPC stores the current location, and C-x r j visits a stored
location or layout. The older Odra routes remain available by command name
where they still represent useful operations.
Ksawery reserves its Status family keys for their repository meanings. The
previous unrelated actions moved instead of remaining as dangerous conflicts:
refresh is g, discard is k, fetch is &, and sequence inspection remains
available through M-x ksawery-sequence.
Terminal-only exclusions are deliberate. Operations that require graphical frames or visual text scaling have no Direct binding. They remain explicit in the compatibility ledger rather than resolving to an unrelated action.
Diagnose a Surprising Binding
Use this order before changing configuration:
- Press
C-h kand capture the complete sequence. - Run
C-h mto identify the selected profile and contextual owner. - Run
C-h wwith the expected command name. - Run
M-x describe-keymap-conflictsafter a rejected profile reload. - Press
C-gto cancel retained prefix, prompt, candidate, or pending-key state and repeat the inspection.
A package or module replacement publishes a complete new contribution generation. Old bindings must disappear with the old generation; they are not silently redirected by display name.
Previous: Discover Commands and Bindings · User Guide · Next: Compose Keymaps and Profiles