# kate-custom A suite of Kate plugins for people who despise menus. The aim is a text editor that is driven by the mouse at the cursor and by plain-letter keyboard input — never by hunting through nested menubars or memorizing complex chords. ## Design constraints These are hard constraints that shape every decision: - **Mouse-heavy.** The fastest input is the mouse, used *locally* at the caret (radial / floating surfaces), not a trek to the menubar. - **One-handed typing.** Keyboard input must work comfortably with one hand. - **No complex chords.** Single modifier at most (`Ctrl`+letter). No leader-key chord trees, no multi-cursor keybinds. - **Compact keyboard.** F-keys and nav clusters live on a layer toggle, so they carry extra cognitive cost and are avoided as primary triggers. - **Emacs/Sublime fluency.** `M-x` (`Alt+x`) is comfortable and welcome as a primary keyboard entry point, as is a Sublime-style type-to-filter palette. ### Unifying principle > **One action registry. Three doors onto it:** > **`M-x` (keyboard), a radial caret menu (mouse), and the `:` command line (optional).** > **No action requires an F-key or a chord.** ## Why not just use Kate's command bar? Kate's `KCommandBar` is a sealed widget: it accepts a list of actions via `setActions()` and exposes **no hook** to customize its matcher. Its matcher, `KFuzzyMatcher`, is single-needle, strictly in-order subsequence, with **no typo tolerance** — by KDE's own documentation, `"gti"` will not match `"git"`. There is no "orderless" (space-separated tokens in any order) and no company-style live completion. So the project replaces the palette rather than extending it, built on a custom matcher (`FuzzyRanker`). ## Environment - Kate 25.12.3, KDE Frameworks 6, Qt 6 - C++20, CMake, extra-cmake-modules - C++ is the only first-class plugin path on this install (no Python/Pâté binding present) ## Build ```sh cmake -B build -S . cmake --build build QT_QPA_PLATFORM=offscreen ./build/bin/test_fuzzyranker # run the matcher tests ctest --test-dir build # or via ctest ``` ## Status See [docs/PLAN.md](docs/PLAN.md) for the full roadmap. - **Milestone 1 — FuzzyRanker (keystone): DONE.** Orderless, layered scoring (exact / substring / word-initials / subsequence / bounded typo), merged highlight ranges. 14 unit tests, all green. - Milestone 2 — custom palette widget: next. ## Layout ``` CMakeLists.txt top-level KF6/Qt6/ECM project src/ fuzzy/ fuzzyranker.{h,cpp} orderless + layered fuzzy matcher test_fuzzyranker.cpp QTest suite docs/ PLAN.md goal, constraints, roadmap ```