docs: describe the six-plugin layout after the split
README: replace the single-deft.so install instructions with the per-feature plugin table (palette, switch, radial, acme, sam, plumb), a glob install loop, and a note that the plugins cooperate by resolving each other's actions by object name; refresh the layout tree (plugin/ gone, switch/ added, palette/ and radial/ now hold their plugins) and mark milestones 5 and 6 DONE. PLAN.md: add an architecture note at the top flagging the split and that the design prose below refers to the former monolith as historical.
This commit is contained in:
parent
d8f0225178
commit
ed3bd4249b
87
README.md
87
README.md
|
|
@ -51,23 +51,41 @@ QT_QPA_PLATFORM=offscreen ./build/bin/test_fuzzyranker # run the matcher tests
|
|||
ctest --test-dir build # or via ctest
|
||||
```
|
||||
|
||||
## Install the plugin into Kate
|
||||
## Install the plugins into Kate
|
||||
|
||||
The plugin builds to `build/bin/kf6/ktexteditor/deft.so`. Drop it where
|
||||
Kate scans for KTextEditor plugins (a user path on `QT_PLUGIN_PATH`):
|
||||
Deft is **one `.so` per feature**, not a monolith. The build produces six
|
||||
KTextEditor plugins under `build/bin/kf6/ktexteditor/`:
|
||||
|
||||
| Plugin file | Display name | Feature |
|
||||
|------------------|-----------------------|---------|
|
||||
| `deft_palette.so`| `[deft:util] palette` | Command palette (`Alt+X` / M-x) over every window action + the `:`-verbs + the switchers, frecency-ranked |
|
||||
| `deft_switch.so` | `[deft:util] switch` | Project **Go to File** (`Alt+P`) and **Go to Symbol** (`Alt+G`) |
|
||||
| `deft_radial.so` | `[deft:util] radial` | Radial caret menu (`Alt+R` / right-mouse) |
|
||||
| `deft_acme.so` | `[deft:nineify] acme` | Acme editing gestures (line keys, pair selection, mouse chords) |
|
||||
| `deft_sam.so` | `[deft:nineify] sam` | `sam`-style structural regular expressions |
|
||||
| `deft_plumb.so` | `[deft:nineify] plumb`| Plan 9 plumber (open under cursor) |
|
||||
|
||||
Drop whichever features you want where Kate scans for KTextEditor plugins (a
|
||||
user path on `QT_PLUGIN_PATH`):
|
||||
|
||||
```sh
|
||||
install -D build/bin/kf6/ktexteditor/deft.so \
|
||||
~/.local/lib/x86_64-linux-gnu/qt6/plugins/kf6/ktexteditor/deft.so
|
||||
for so in build/bin/kf6/ktexteditor/deft_*.so; do
|
||||
install -D "$so" ~/.local/lib/x86_64-linux-gnu/qt6/plugins/kf6/ktexteditor/"$(basename "$so")"
|
||||
done
|
||||
```
|
||||
|
||||
Then in Kate: Settings → Configure Kate → Plugins → enable
|
||||
**Deft**. Press **Alt+X** (M-x) to open the command palette;
|
||||
type to filter, Enter or click to run. Open the editing **radial menu** either
|
||||
by pressing **Alt+R** (opens at the caret) or by **pressing the right mouse
|
||||
button** in the editor (opens at the pointer; the normal context menu is
|
||||
suppressed while this is enabled). Move toward a slice and release — or click;
|
||||
a branch slice (marked ▸) opens a submenu, the centre hub goes back/cancels.
|
||||
Then in Kate: Settings → Configure Kate → Plugins → enable each **`[deft:…]`**
|
||||
plugin you installed. Press **Alt+X** (M-x) to open the command palette; type to
|
||||
filter, Enter or click to run. Open the editing **radial menu** either by
|
||||
pressing **Alt+R** (opens at the caret) or by **pressing the right mouse button**
|
||||
in the editor (opens at the pointer; the normal context menu is suppressed while
|
||||
this is enabled). Move toward a slice and release — or click; a branch slice
|
||||
(marked ▸) opens a submenu, the centre hub goes back/cancels.
|
||||
|
||||
The plugins cooperate but do not depend on one another: palette's "Go to
|
||||
File/Symbol" entries and radial's launcher slices resolve `switch`'s actions by
|
||||
object name at runtime, so each `.so` works on its own and simply gains those
|
||||
entry points when its sibling is also enabled.
|
||||
|
||||
## Status
|
||||
|
||||
|
|
@ -79,16 +97,26 @@ See [docs/PLAN.md](docs/PLAN.md) for the full roadmap.
|
|||
- **Milestone 2 — custom palette widget: DONE.** `PaletteModel` +
|
||||
`PaletteWidget` (frameless popup, live filtering, highlighted matches,
|
||||
keyboard + mouse activation). 10 model unit tests, all green.
|
||||
- Milestone 3 — KTextEditor plugin + M-x: **DONE.** Loadable `deft.so`;
|
||||
`Alt+X` opens the palette over every action in the window's GUI clients.
|
||||
- Milestone 3 — KTextEditor plugin + M-x: **DONE.** `Alt+X` opens the palette
|
||||
over every action in the window's GUI clients.
|
||||
- Milestone 4 — radial caret menu: **DONE (first increment).** Multi-level
|
||||
radial menu at the caret (`Alt+R`) or at the pointer via a **right-mouse
|
||||
gesture**, mouse-driven selection, config tree with per-radial key + mouse
|
||||
triggers. Free-form stroke gestures next.
|
||||
- Milestone 5 — command vocabulary + project-as-directory + switchers: next.
|
||||
- Milestone 5 — command vocabulary + project-as-directory + switchers: **DONE.**
|
||||
`:`-verb pack, project file (`Alt+P`) and symbol (`Alt+G`) switchers over an
|
||||
async, cached index.
|
||||
- Milestone 6 — one `.so` per feature: **DONE.** The monolithic plugin is split
|
||||
into six independent KTextEditor plugins (`palette`, `switch`, `radial`,
|
||||
`acme`, `sam`, `plumb`), tagged `[deft:util]` / `[deft:nineify]`, cooperating
|
||||
by resolving each other's actions by object name at runtime.
|
||||
|
||||
## Layout
|
||||
|
||||
Shared building blocks are static libraries (`fuzzy`, `palette`, `project`,
|
||||
`commands`, …); each feature is a self-contained KTextEditor plugin that links
|
||||
the libraries it needs.
|
||||
|
||||
```
|
||||
CMakeLists.txt top-level KF6/Qt6/ECM project
|
||||
src/
|
||||
|
|
@ -98,20 +126,33 @@ src/
|
|||
palette/
|
||||
palettemodel.{h,cpp} ranked, filterable list model (headless)
|
||||
palettewidget.{h,cpp} frameless command-palette popup
|
||||
test_palettemodel.cpp QTest suite
|
||||
frecencystore.{h,cpp} persisted frecency ranking
|
||||
paletteplugin.{h,cpp} [deft:util] palette — M-x, :-verbs, switcher doors
|
||||
paletteplugin.json plugin metadata
|
||||
test_*.cpp QTest suites
|
||||
switch/
|
||||
switchplugin.{h,cpp} [deft:util] switch — Go to File (Alt+P) / Symbol (Alt+G)
|
||||
switchplugin.json plugin metadata
|
||||
radial/
|
||||
radialmodel.{h,cpp} radial tree + hit-test geometry (headless)
|
||||
radialmenu.{h,cpp} frameless multi-level radial widget
|
||||
radialconfig.{h,cpp} JSON → radial tree + built-in default
|
||||
test_radialmodel.cpp QTest suite
|
||||
test_radialconfig.cpp QTest suite
|
||||
radialplugin.{h,cpp} [deft:util] radial — caret menu plugin
|
||||
radialplugin.json plugin metadata
|
||||
test_*.cpp QTest suites
|
||||
commands/
|
||||
texttransforms.{h,cpp} pure text transforms (headless)
|
||||
olliecommands.{h,cpp} ":"-verb KTextEditor::Command pack
|
||||
test_texttransforms.cpp QTest suite
|
||||
plugin/
|
||||
ollieplugin.{h,cpp} KTextEditor::Plugin + M-x + radial wiring
|
||||
ollieplugin.json plugin metadata
|
||||
olliecommands.{h,cpp} ":"-verb KTextEditor::Command pack (used by palette)
|
||||
test_*.cpp QTest suites
|
||||
project/
|
||||
projectindex / symbolindex / projectindexer / kateprojectbridge
|
||||
async, cached file & symbol index (used by switch)
|
||||
acme/
|
||||
acmeplugin.{h,cpp,json} [deft:nineify] acme — editing gestures
|
||||
sam/
|
||||
sam* + samplugin.{h,cpp,json} [deft:nineify] sam — structural regexps
|
||||
plumb/
|
||||
plumb* + plumbplugin [deft:nineify] plumb — Plan 9 plumber
|
||||
docs/
|
||||
PLAN.md goal, constraints, roadmap
|
||||
```
|
||||
|
|
|
|||
13
docs/PLAN.md
13
docs/PLAN.md
|
|
@ -1,5 +1,18 @@
|
|||
# Plan — kate-custom
|
||||
|
||||
> **Architecture note (current):** The suite has been split into **one `.so` per
|
||||
> feature** — `deft_palette`, `deft_switch`, `deft_radial`, `deft_acme`,
|
||||
> `deft_sam`, `deft_plumb` — each a standalone `KTextEditor::Plugin` tagged
|
||||
> `[deft:util]` / `[deft:nineify]`. See the README's plugin table for the
|
||||
> current layout. The design prose below predates that split and still refers to
|
||||
> the former monolith (`OlliePlugin` / `OllieView`, a single `olliepalette.so`,
|
||||
> and the `olliepalette/` config dir); read those names as historical. In the
|
||||
> split suite the palette plugin owns the M-x launcher and the `:`-verbs, the
|
||||
> switch plugin owns the file/symbol switchers and the project index, each plugin
|
||||
> keeps its own `FrecencyStore` file under `deft/`, and the doors cooperate by
|
||||
> resolving each other's actions by object name at runtime rather than by direct
|
||||
> calls or link dependencies.
|
||||
|
||||
## Goal
|
||||
|
||||
Build a suite of Kate plugins that make the editor usable without menus, tuned
|
||||
|
|
|
|||
Loading…
Reference in New Issue