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
|
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
|
Deft is **one `.so` per feature**, not a monolith. The build produces six
|
||||||
Kate scans for KTextEditor plugins (a user path on `QT_PLUGIN_PATH`):
|
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
|
```sh
|
||||||
install -D build/bin/kf6/ktexteditor/deft.so \
|
for so in build/bin/kf6/ktexteditor/deft_*.so; do
|
||||||
~/.local/lib/x86_64-linux-gnu/qt6/plugins/kf6/ktexteditor/deft.so
|
install -D "$so" ~/.local/lib/x86_64-linux-gnu/qt6/plugins/kf6/ktexteditor/"$(basename "$so")"
|
||||||
|
done
|
||||||
```
|
```
|
||||||
|
|
||||||
Then in Kate: Settings → Configure Kate → Plugins → enable
|
Then in Kate: Settings → Configure Kate → Plugins → enable each **`[deft:…]`**
|
||||||
**Deft**. Press **Alt+X** (M-x) to open the command palette;
|
plugin you installed. Press **Alt+X** (M-x) to open the command palette; type to
|
||||||
type to filter, Enter or click to run. Open the editing **radial menu** either
|
filter, Enter or click to run. Open the editing **radial menu** either by
|
||||||
by pressing **Alt+R** (opens at the caret) or by **pressing the right mouse
|
pressing **Alt+R** (opens at the caret) or by **pressing the right mouse button**
|
||||||
button** in the editor (opens at the pointer; the normal context menu is
|
in the editor (opens at the pointer; the normal context menu is suppressed while
|
||||||
suppressed while this is enabled). Move toward a slice and release — or click;
|
this is enabled). Move toward a slice and release — or click; a branch slice
|
||||||
a branch slice (marked ▸) opens a submenu, the centre hub goes back/cancels.
|
(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
|
## Status
|
||||||
|
|
||||||
|
|
@ -79,16 +97,26 @@ See [docs/PLAN.md](docs/PLAN.md) for the full roadmap.
|
||||||
- **Milestone 2 — custom palette widget: DONE.** `PaletteModel` +
|
- **Milestone 2 — custom palette widget: DONE.** `PaletteModel` +
|
||||||
`PaletteWidget` (frameless popup, live filtering, highlighted matches,
|
`PaletteWidget` (frameless popup, live filtering, highlighted matches,
|
||||||
keyboard + mouse activation). 10 model unit tests, all green.
|
keyboard + mouse activation). 10 model unit tests, all green.
|
||||||
- Milestone 3 — KTextEditor plugin + M-x: **DONE.** Loadable `deft.so`;
|
- Milestone 3 — KTextEditor plugin + M-x: **DONE.** `Alt+X` opens the palette
|
||||||
`Alt+X` opens the palette over every action in the window's GUI clients.
|
over every action in the window's GUI clients.
|
||||||
- Milestone 4 — radial caret menu: **DONE (first increment).** Multi-level
|
- 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
|
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
|
gesture**, mouse-driven selection, config tree with per-radial key + mouse
|
||||||
triggers. Free-form stroke gestures next.
|
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
|
## 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
|
CMakeLists.txt top-level KF6/Qt6/ECM project
|
||||||
src/
|
src/
|
||||||
|
|
@ -98,20 +126,33 @@ src/
|
||||||
palette/
|
palette/
|
||||||
palettemodel.{h,cpp} ranked, filterable list model (headless)
|
palettemodel.{h,cpp} ranked, filterable list model (headless)
|
||||||
palettewidget.{h,cpp} frameless command-palette popup
|
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/
|
radial/
|
||||||
radialmodel.{h,cpp} radial tree + hit-test geometry (headless)
|
radialmodel.{h,cpp} radial tree + hit-test geometry (headless)
|
||||||
radialmenu.{h,cpp} frameless multi-level radial widget
|
radialmenu.{h,cpp} frameless multi-level radial widget
|
||||||
radialconfig.{h,cpp} JSON → radial tree + built-in default
|
radialconfig.{h,cpp} JSON → radial tree + built-in default
|
||||||
test_radialmodel.cpp QTest suite
|
radialplugin.{h,cpp} [deft:util] radial — caret menu plugin
|
||||||
test_radialconfig.cpp QTest suite
|
radialplugin.json plugin metadata
|
||||||
|
test_*.cpp QTest suites
|
||||||
commands/
|
commands/
|
||||||
texttransforms.{h,cpp} pure text transforms (headless)
|
texttransforms.{h,cpp} pure text transforms (headless)
|
||||||
olliecommands.{h,cpp} ":"-verb KTextEditor::Command pack
|
olliecommands.{h,cpp} ":"-verb KTextEditor::Command pack (used by palette)
|
||||||
test_texttransforms.cpp QTest suite
|
test_*.cpp QTest suites
|
||||||
plugin/
|
project/
|
||||||
ollieplugin.{h,cpp} KTextEditor::Plugin + M-x + radial wiring
|
projectindex / symbolindex / projectindexer / kateprojectbridge
|
||||||
ollieplugin.json plugin metadata
|
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/
|
docs/
|
||||||
PLAN.md goal, constraints, roadmap
|
PLAN.md goal, constraints, roadmap
|
||||||
```
|
```
|
||||||
|
|
|
||||||
13
docs/PLAN.md
13
docs/PLAN.md
|
|
@ -1,5 +1,18 @@
|
||||||
# Plan — kate-custom
|
# 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
|
## Goal
|
||||||
|
|
||||||
Build a suite of Kate plugins that make the editor usable without menus, tuned
|
Build a suite of Kate plugins that make the editor usable without menus, tuned
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue