Files
RedBear-OS/local/docs/operator-runbooks/redbear-ime.md
T
vasilito 9f2de2a0b1 docs+build: correct version drift, mangled prose, and toolchain-version gaps
Docs:
- Baseline was stated as 0.3.1 across the canonical set while the branch,
  Cat 0/1 crates and every Cat 2 fork are 0.3.2. AGENTS.md also cited a
  sources/redbear-0.3.1/ archive that does not exist; the only archive
  present is sources/redbear-0.1.0/. Versioning examples now match the
  forks as they actually stand (redoxfs/syscall 0.9.1, libredox 0.1.19).
- Repaired 18 instances of 'immutable archived' across 8 documents, where
  a global find/replace had turned sync/synced/archived into that phrase
  and produced ungrammatical text ('never auto-immutable archived',
  '### Source immutable archived').
- Settled the apply-patches.sh contradiction empirically. Both sides were
  wrong: the GROSS WARNING blocks (x5) described it as routine
  patch-linking, and SCRIPT-BEHAVIOR-MATRIX.md said build-redbear.sh
  'never invokes' it. It is invoked at build-redbear.sh:487, but only to
  auto-repair a failed verify-overlay-integrity.sh check.
- Dropped the dangling reference to a local/AGENTS.md section
  'NO OVERLAY-STYLE PATCHES — SCOPED POLICY' that does not exist.

Build system:
- mk/prefix.mk hardcoded 13.2.0 in the limits.h removal, which silently
  no-ops after a toolchain upgrade and leaves the conflicting header.
  Version-globbed.
- Parameterized GCC_RECIPE so the from-source toolchain path is not
  pinned to gcc13.
- The three cstdlib strtold seds were not idempotent -- the shipped GCC
  13 toolchain carried that comment block 17 times from repeated
  'make prefix' runs. Each is now guarded.
2026-08-03 13:07:25 +03:00

2.8 KiB

redbear-ime — Operator Runbook

Daemon: redbear-ime Init service: /usr/lib/init.d/61_ime.service Status check: cat /scheme/ime/state Restart: init-svc restart ime

Logs

  • Destination: stderr (tagged [ime])
  • No env-var log level control; all messages are INFO or ERROR level.

Scheme

  • Scheme name: ime
  • Root: /scheme/ime/ (directory, mode 0555)

Scheme Paths

Path Type Mode Description
state file 0644 Read-only: composing=, preedit=, committed=
compose file 0644 Write: feed key events (feed <scancode> <pressed> [shift] [altgr]) or reset to clear state
candidates file 0644 Read-only: tab-separated compose candidate list

Compose Engine

  • Current engine: BasicLatinEngine (hardcoded, no config selection yet)
  • Dead key trigger: Scancode 0x5D (apps/menu key). Cycles through grave, acute, circumflex, diaeresis, caron dead keys.
  • Compose table: Supports à/è/ì/ò/ù (grave), á/é/í/ó/ú (acute), â/ê/î/ô/û (circumflex), ä/ë/ï/ö/ü (diaeresis), ǎ/ě/ǐ/ǒ/ǔ (caron).
  • US QWERTY layout: Hardcoded scancode-to-char mapping in BasicLatinEngine::scancode_to_char

Writing to compose

# Feed a key press (scancode, pressed, shift, altgr)
feed 0x1E 1 0 0     # 'a' press
feed 0x1E 0 0 0     # 'a' release

# Feed a shift-modified key
feed 0x1E 1 1 0     # 'A' press

# Feed a dead key sequence
feed 0x5D 1 0 0     # dead key toggle (grave)
feed 0x12 1 0 0     # 'e' → 'è'

# Reset compose state
reset

Signals / SIGTERM Behavior

  • No SIGTERM handler. Scheme socket close triggers clean exit. Registered via register_sync_scheme.

Common Issues

  1. failed to register scheme:ime — Another daemon already registered the scheme name. Kill the existing instance first.
  2. Dead key compose not working — The compose key is scancode 0x5D (apps/menu). Ensure the input stack sends this scancode. The engine cycles through 5 dead key types (grave/acute/circumflex/diaeresis/caron) — press the compose key multiple times to select the desired accent.
  3. Committed text not appearing — Read /scheme/ime/state to verify committed= has the expected character. The daemon accumulates committed output in memory; the compositor must read state to retrieve it.
  4. BasicLatinEngine is the only engine — No engine selection mechanism exists. Latin-based scripts only (ASCII + Latin-1 Supplement composed characters). CJK, Indic, Arabic, etc. are not supported in the current BasicLatinEngine.
  5. Key releases (pressed=0) do nothing — The engine only processes key presses (pressed=1). Always send both press and release events for compatibility with future engines that may track press duration.