EPIC Enhanced Programmable IRC-II Client

Default key bindings

Synopsis

/bind
/bind -defaults

These are the core bindings created at client startup and rebuilt by bind -defaults. Terminal capability bindings are then added, and startup scripts can replace them. The bindings active in an ordinary configured session can therefore differ from these initial defaults. Use bind to inspect the current map.

^A means Control-A; ^[ means Escape; ^? means DEL, byte 127. Characters following Escape are a sequence, not necessarily simultaneous keystrokes. Ordinary letter case matters in sequences: Escape followed by lowercase b is different from Escape followed by uppercase B.

Single-character bindings

Printable ASCII characters, including space, initially use self_insert. DEL is subsequently rebound to backspace. Non-ASCII input characters use the input system's Unicode insertion path rather than an ordinary byte-sequence binding.

Sequence Bound action
^A beginning_of_line
^B bold
^C self_insert
^D delete_character
^E end_of_line
^F blink
^G self_insert
^H backspace
^I toggle_insert_mode
^J send_line
^K erase_to_end_of_line
^L refresh_screen
^M send_line
^O highlight_off
^Q quote_character
^U erase_line
^V reverse
^W next_window
^X switch_channels
^Y yank_from_cutbuffer
^_ underline
^? backspace

Tab is ^I, so its core action toggles insert mode rather than performing completion. Enter commonly sends ^M or ^J, both bound to send_line. A physical Backspace key can send ^H or DEL; both erase backward here. A terminal's separate Delete key may have a multi-character sequence mapped to forward deletion instead.

Control-C has a self_insert binding if that character reaches the binding system. Fullscreen terminal setup normally leaves Control-C as the terminal's interrupt signal, so the binding should not be interpreted as a guarantee that pressing Control-C inserts text. Control-G inserts the bell character. Neither action itself submits the line.

No core action is assigned to Control-N, Control-P, Control-R, Control-S, Control-T, or Control-Z. In particular, there is no default stop-screen, transpose, or process-suspend action on those keys. Scripts can assign other behavior.

Escape sequences

Sequence Bound action
^[. clear_screen
^[< scroll_start
^[> scroll_end
^[b backward_word
^[d delete_next_word
^[e scroll_end
^[f forward_word
^[h delete_previous_word
^[n scroll_forward
^[p scroll_backward
^[^? delete_previous_word

Fixed terminal-style sequences

The following byte sequences are also installed directly. Their physical key names depend on the terminal or emulator; the sequence spelling is the reliable identifier.

Sequence Bound action
^[OC, ^[[C forward_character
^[OD, ^[[D backward_character
^[OF, ^[[F, ^[O4~, ^[[4~ scroll_end
^[OG, ^[[G, ^[O6~, ^[[6~ scroll_forward
^[OH, ^[[H, ^[O1~, ^[[1~ scroll_start
^[OI, ^[[I, ^[O5~, ^[[5~ scroll_backward
^[On, ^[[n next_window
^[Op, ^[[p previous_window

The core table does not assign Up/Down history actions. The supplied history script can install history navigation, while completion scripts can replace Tab and other keys. An external terminal or multiplexer can intercept a key before EPIC receives it.

Terminal-derived bindings

After core setup, init_termkeys uses terminal capabilities to add these mappings when the corresponding capability exists:

Terminal capability Action
key_ppage scroll_backward
key_npage scroll_forward
key_home scroll_start
key_end scroll_end
key_ic toggle_insert_mode
key_dc delete_character

These can overlap or replace fixed sequences. Correct TERM and terminal capability data matter; not every keyboard sends the same sequence for Home, End, Insert, Delete, or Page Up/Down. The terminal setup disables XON/XOFF flow control in fullscreen mode, but surrounding terminal or session configuration can still affect delivery.

Resetting and customizing

bind -defaults removes existing binding actions, recreates built-in actions, constructs the default keymap, and reapplies terminal-capability mappings. It does not rerun your startup scripts to reinstall history, completion, or custom key actions. Script-created bind functions and prior assignments are not automatically restored.

To make a single change, bind just the desired key rather than resetting all bindings. For example:

/bind ^I self_insert

This makes Tab insert a literal tab if it reaches EPIC. Individual action pages describe cursor movement, cutbuffer changes, formatting insertion, window switching, and message submission. A key binding has no general function-return value; its effects come from its assigned action. Core bindings need no optional script package or server extension, though actions involving a target can depend on connection state.

Source references