-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathsupertag-menu.el
More file actions
455 lines (387 loc) · 23.1 KB
/
Copy pathsupertag-menu.el
File metadata and controls
455 lines (387 loc) · 23.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
;;; supertag-menu.el --- Discoverable transient menu for Supertag -*- lexical-binding: t; -*-
;; Keywords: convenience
;;; Commentary:
;; `supertag-menu' is a single entry point that surfaces the most useful
;; Supertag commands in one discoverable `transient' pop-up, so users
;; do not have to hunt through `M-x' to remember command names.
;;
;; `transient' has shipped with Emacs since 28.1, so this file adds no new
;; dependency.
;;
;; Design notes:
;; - Commands are grouped into columns: Views, Tags & Fields, Search &
;; Query, Capture, Sync & Maintenance, Git Sync, Automation, and an
;; optional Setup group. Less-common commands (virtual columns,
;; analytic demo views, database migration) live behind the Setup
;; group's "More commands..." nested prefix (`supertag-menu-more')
;; rather than crowding the top-level popup.
;; - Keys are two-character mnemonics of the form "<group><letter>"
;; (e.g. "vt" for the table View, "ta" for Tag Add) so that every key
;; across the whole menu is unique; the lowercase "q" is left untouched
;; so `transient's default quit binding keeps working.
;; - Every command referenced here already exists elsewhere in
;; Supertag; none are (re)defined in this file. Commands whose
;; owning feature carries an `;;;###autoload' cookie (or is guaranteed
;; to already be loaded as part of Supertag's own core `require'
;; chain) are wired directly by symbol. Commands whose owning feature
;; is NOT unconditionally loaded (or has no autoload cookie) are wired
;; through a thin `supertag-menu--*' wrapper that `require's the owning
;; feature before calling the real command interactively, so the menu
;; works regardless of what has been loaded so far.
;; - The optional "Setup" group wires `supertag-setup' and
;; `supertag-automation-insert-template', both developed alongside this
;; file. Their suffixes are guarded with `:if (lambda () (fboundp ...))'
;; so the menu degrades gracefully whether or not those features are
;; present in a given checkout.
;;; Code:
(require 'transient)
;;; --- Forward declarations ---
;; These commands live in other Supertag modules. None of those
;; modules are `require'd unconditionally here (to keep this file cheap
;; to load); each is either pulled in lazily by a wrapper below, or is
;; already guaranteed to be loaded by the time a real Supertag session
;; calls `supertag-menu' (see the module-by-module notes below).
;; supertag-view-table.el (no autoload cookie; wrapped)
(declare-function supertag-view-table "supertag-view-table" (data-source &optional columns view-config named-views))
;; supertag-ui-commands.el (no autoload cookie; wrapped)
(declare-function supertag-view-kanban "supertag-ui-commands" ())
;; supertag-view-node.el (no autoload cookie; wrapped)
(declare-function supertag-view-node "supertag-view-node" ())
;; supertag-view-schema.el (;;;###autoload; also unconditionally required
;; by supertag.el, so it is safe to reference directly)
(declare-function supertag-view-schema "supertag-view-schema" ())
;; supertag-board.el (;;;###autoload; optional feature, requires the
;; external `websocket' package; guarded with :if fboundp below)
(declare-function supertag-board-mode "supertag-board" (&optional arg))
;; supertag-graph-ui.el (;;;###autoload; optional feature, requires the
;; external `websocket' package; guarded with :if fboundp below)
(declare-function supertag-graph-ui-open "supertag-graph-ui" ())
;; supertag-ui-commands.el (no autoload cookies; all wrapped)
(declare-function supertag-add-tag "supertag-ui-commands" (&optional beg end))
(declare-function supertag-remove-tag-from-node "supertag-ui-commands" ())
(declare-function supertag-change-tag-at-point "supertag-ui-commands" ())
(declare-function supertag-rename-tag "supertag-ui-commands" (&optional tag-id))
(declare-function supertag-delete-tag-everywhere "supertag-ui-commands" (&optional tag-id))
(declare-function supertag-ui-quick-edit-field "supertag-ui-commands" ())
(declare-function supertag-find-node "supertag-ui-commands" ())
(declare-function supertag-add-reference "supertag-ui-commands" ())
(declare-function supertag-insert-embed "supertag-ui-commands" ())
(declare-function supertag-convert-link-to-embed "supertag-ui-commands" ())
(declare-function supertag-capture "supertag-ui-commands" (&optional target-file headline))
;; supertag-concept.el (;;;###autoload; also unconditionally required by
;; supertag.el, so it is safe to reference directly)
(declare-function supertag-promote-concept "supertag-concept" (beg end))
;; supertag-ui-search.el (no autoload cookie; wrapped)
(declare-function supertag-search "supertag-ui-search" ())
;; supertag-ui-query-block.el (no autoload cookie; wrapped)
(declare-function supertag-insert-query-block "supertag-ui-query-block" ())
(declare-function supertag-insert-query-dblock "supertag-ui-query-block" ())
(declare-function supertag-query-build "supertag-query-library" ())
(declare-function supertag-query-run-saved "supertag-query-library" ())
(declare-function supertag-query-describe-syntax "supertag-query-library" ())
;; supertag-services-capture.el (;;;###autoload; also unconditionally
;; required by supertag.el, so it is safe to reference directly)
(declare-function supertag-capture-with-template "supertag-services-capture" (&optional template-key))
;; supertag-ui-commands.el / supertag-services-sync.el (;;;###autoload;
;; unconditionally required by supertag.el, so it is safe to
;; reference these directly)
(declare-function supertag-sync-check-now "supertag-ui-commands" ())
(declare-function supertag-sync-cleanup-database "supertag-ui-commands" ())
(declare-function supertag-sync-status "supertag-ui-commands" ())
(declare-function supertag-reindex-org "supertag-services-sync" ())
;; supertag-doctor.el (;;;###autoload, but NOT part of supertag.el's
;; own `require' chain; wrapped for robustness)
(declare-function supertag-doctor "supertag-doctor" (&optional report-only))
;; supertag-core-persistence.el (no autoload cookie; wrapped)
(declare-function supertag-db-retry-lock "supertag-core-persistence" ())
;; supertag-core-persistence.el (owned by a teammate; `supertag-restore'
;; is developed alongside this iteration too, so it is wrapped exactly
;; like `supertag-db-retry-lock' above rather than assumed present)
(declare-function supertag-restore "supertag-core-persistence" ())
;; supertag-git.el (;;;###autoload, but NOT part of supertag.el's own
;; `require' chain; wrapped for robustness, same as `supertag-doctor')
(declare-function supertag-git-setup "supertag-git" ())
(declare-function supertag-git-clone "supertag-git" (remote-url local-directory))
(declare-function supertag-git-sync-mode "supertag-git" (&optional arg))
;; supertag-conflicts.el (;;;###autoload; also unconditionally required by
;; supertag.el, so it is safe to reference directly)
(declare-function supertag-conflicts-resolve "supertag-conflicts" ())
(declare-function supertag-conflicts-use-ours-all "supertag-conflicts" ())
(declare-function supertag-conflicts-use-theirs-all "supertag-conflicts" ())
;; supertag-automation-sync.el / supertag-automation.el (no autoload
;; cookie; unconditionally required by supertag.el, but wrapped
;; anyway since Supertag's own menu entries for this file wrap every
;; non-autoloaded command)
(declare-function supertag-automation-sync-enable "supertag-automation-sync" ())
(declare-function supertag-automation-sync-disable "supertag-automation-sync" ())
(declare-function supertag-automation-recalculate-all-rollups "supertag-automation" ())
;; supertag-services-scheduler.el (no autoload cookie; wrapped)
(declare-function supertag-scheduler-start "supertag-services-scheduler" ())
(declare-function supertag-scheduler-stop "supertag-services-scheduler" ())
(declare-function supertag-scheduler-list-tasks "supertag-services-scheduler" ())
;; supertag-virtual-column.el (no autoload cookie; wrapped)
(declare-function supertag-virtual-column-create-interactive "supertag-virtual-column" ())
(declare-function supertag-virtual-column-edit-interactive "supertag-virtual-column" ())
(declare-function supertag-virtual-column-delete-interactive "supertag-virtual-column" ())
(declare-function supertag-virtual-column-list-interactive "supertag-virtual-column" ())
;; supertag-view-priority-matrix.el / supertag-view-progress-dashboard.el /
;; supertag-view-effort-distribution.el (no autoload cookie; wrapped).
;; Only `-demo' entry points exist for these views today, so the menu
;; wires and labels them honestly as demos.
(declare-function supertag-view-priority-matrix-demo "supertag-view-priority-matrix" ())
(declare-function supertag-view-progress-dashboard-demo "supertag-view-progress-dashboard" ())
(declare-function supertag-view-effort-distribution-demo "supertag-view-effort-distribution" ())
;; supertag-migration.el (;;;###autoload; also unconditionally required by
;; supertag.el, so it is safe to reference directly)
(declare-function supertag-migrate-database-to-new-arch "supertag-migration" ())
(declare-function supertag-batch-convert-properties-to-fields "supertag-migration" ())
(declare-function supertag-migration-add-ids-to-org-headings "supertag-migration" (directory))
(declare-function supertag-migration-preview-reciprocal-links "supertag-migration" (&optional displayp))
(declare-function supertag-migrate-reciprocal-links "supertag-migration" ())
;; supertag-migrate-tag-ids.el (no autoload cookie; NOT part of
;; supertag.el's own `require' chain; wrapped)
(declare-function supertag-migrate-tag-ids "supertag-migrate-tag-ids" ())
;; supertag-view-svg-tag.el / supertag-concept.el (;;;###autoload; also
;; unconditionally required by supertag.el, so it is safe to
;; reference these directly)
(declare-function supertag-svg-tag-mode-toggle "supertag-view-svg-tag" ())
(declare-function supertag-concept-link-mode "supertag-concept" (&optional arg))
;; supertag-setup.el and supertag-automation-templates.el are developed
;; alongside this file; guard every reference with `fboundp' and never
;; `require' them directly from here.
(declare-function supertag-setup "supertag-setup" ())
(declare-function supertag-automation-insert-template "supertag-automation-templates" ())
(declare-function supertag-automation-list-templates "supertag-automation-templates" ())
;;; --- Thin lazy-loading wrappers ---
;; Each wrapper `require's the owning feature (safe: these files have no
;; load-time side effects of their own -- unlike `supertag.el', which
;; runs `supertag-init' at load time) and then calls the real, already
;;-interactive command. This keeps `supertag-menu' usable even when only
;; part of Supertag has been loaded so far.
(defmacro supertag-menu--defwrapper (name feature command doc)
"Define NAME as a command that `require's FEATURE, then calls COMMAND.
DOC is used as the docstring of the generated wrapper."
(declare (indent defun))
`(defun ,name ()
,doc
(interactive)
(require ',feature)
(call-interactively #',command)))
(supertag-menu--defwrapper supertag-menu--view-table
supertag-view-table supertag-view-table
"Open `supertag-view-table', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--view-kanban
supertag-ui-commands supertag-view-kanban
"Open `supertag-view-kanban', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--view-node
supertag-view-node supertag-view-node
"Open `supertag-view-node', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--add-tag
supertag-ui-commands supertag-add-tag
"Run `supertag-add-tag', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--remove-tag
supertag-ui-commands supertag-remove-tag-from-node
"Run `supertag-remove-tag-from-node', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--change-tag
supertag-ui-commands supertag-change-tag-at-point
"Run `supertag-change-tag-at-point', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--rename-tag
supertag-ui-commands supertag-rename-tag
"Run `supertag-rename-tag', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--delete-tag
supertag-ui-commands supertag-delete-tag-everywhere
"Run `supertag-delete-tag-everywhere', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--quick-edit-field
supertag-ui-commands supertag-ui-quick-edit-field
"Run `supertag-ui-quick-edit-field', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--search
supertag-ui-search supertag-search
"Run `supertag-search', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--insert-query-block
supertag-ui-query-block supertag-insert-query-block
"Run `supertag-insert-query-block', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--insert-query-dblock
supertag-ui-query-block supertag-insert-query-dblock
"Run `supertag-insert-query-dblock', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--query-build
supertag-query-library supertag-query-build
"Run `supertag-query-build', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--query-run-saved
supertag-query-library supertag-query-run-saved
"Run `supertag-query-run-saved', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--query-describe-syntax
supertag-query-library supertag-query-describe-syntax
"Run `supertag-query-describe-syntax', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--insert-embed
supertag-ui-commands supertag-insert-embed
"Run `supertag-insert-embed', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--convert-link-to-embed
supertag-ui-commands supertag-convert-link-to-embed
"Run `supertag-convert-link-to-embed', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--add-reference
supertag-ui-commands supertag-add-reference
"Run `supertag-add-reference', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--find-node
supertag-ui-commands supertag-find-node
"Run `supertag-find-node', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--capture
supertag-ui-commands supertag-capture
"Run `supertag-capture', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--doctor
supertag-doctor supertag-doctor
"Run `supertag-doctor', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--db-retry-lock
supertag-core-persistence supertag-db-retry-lock
"Run `supertag-db-retry-lock', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--restore
supertag-core-persistence supertag-restore
"Run `supertag-restore', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--git-setup
supertag-git supertag-git-setup
"Run `supertag-git-setup', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--git-clone
supertag-git supertag-git-clone
"Run `supertag-git-clone', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--git-sync-mode
supertag-git supertag-git-sync-mode
"Toggle `supertag-git-sync-mode', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--automation-sync-enable
supertag-automation-sync supertag-automation-sync-enable
"Run `supertag-automation-sync-enable', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--automation-sync-disable
supertag-automation-sync supertag-automation-sync-disable
"Run `supertag-automation-sync-disable', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--automation-recalculate-all-rollups
supertag-automation supertag-automation-recalculate-all-rollups
"Run `supertag-automation-recalculate-all-rollups', loading its feature
first if needed.")
(supertag-menu--defwrapper supertag-menu--scheduler-start
supertag-services-scheduler supertag-scheduler-start
"Run `supertag-scheduler-start', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--scheduler-stop
supertag-services-scheduler supertag-scheduler-stop
"Run `supertag-scheduler-stop', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--scheduler-list-tasks
supertag-services-scheduler supertag-scheduler-list-tasks
"Run `supertag-scheduler-list-tasks', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--virtual-column-create
supertag-virtual-column supertag-virtual-column-create-interactive
"Run `supertag-virtual-column-create-interactive', loading its feature
first if needed.")
(supertag-menu--defwrapper supertag-menu--virtual-column-edit
supertag-virtual-column supertag-virtual-column-edit-interactive
"Run `supertag-virtual-column-edit-interactive', loading its feature
first if needed.")
(supertag-menu--defwrapper supertag-menu--virtual-column-delete
supertag-virtual-column supertag-virtual-column-delete-interactive
"Run `supertag-virtual-column-delete-interactive', loading its feature
first if needed.")
(supertag-menu--defwrapper supertag-menu--virtual-column-list
supertag-virtual-column supertag-virtual-column-list-interactive
"Run `supertag-virtual-column-list-interactive', loading its feature
first if needed.")
(supertag-menu--defwrapper supertag-menu--view-priority-matrix-demo
supertag-view-priority-matrix supertag-view-priority-matrix-demo
"Run `supertag-view-priority-matrix-demo', loading its feature first if needed.")
(supertag-menu--defwrapper supertag-menu--view-progress-dashboard-demo
supertag-view-progress-dashboard supertag-view-progress-dashboard-demo
"Run `supertag-view-progress-dashboard-demo', loading its feature
first if needed.")
(supertag-menu--defwrapper supertag-menu--view-effort-distribution-demo
supertag-view-effort-distribution supertag-view-effort-distribution-demo
"Run `supertag-view-effort-distribution-demo', loading its feature
first if needed.")
(supertag-menu--defwrapper supertag-menu--migrate-tag-ids
supertag-migrate-tag-ids supertag-migrate-tag-ids
"Run `supertag-migrate-tag-ids', loading its feature first if needed.")
;;; --- The menu ---
;;;###autoload
(transient-define-prefix supertag-menu ()
"Top-level discoverable menu for Supertag commands."
[["Views"
("vt" "Table" supertag-menu--view-table)
("vk" "Kanban board" supertag-menu--view-kanban)
("vn" "Node view" supertag-menu--view-node)
("vs" "Schema" supertag-view-schema)
("vw" "Whiteboard" supertag-board-mode
:if (lambda () (fboundp 'supertag-board-mode)))
("vg" "Graph UI" supertag-graph-ui-open
:if (lambda () (fboundp 'supertag-graph-ui-open)))
("vy" "Toggle SVG tags" supertag-svg-tag-mode-toggle)
("vl" "Toggle concept links" supertag-concept-link-mode)]
["Tags & Fields"
("ta" "Add tag" supertag-menu--add-tag)
("tr" "Remove tag" supertag-menu--remove-tag)
("tc" "Change tag" supertag-menu--change-tag)
("tR" "Rename tag (all)" supertag-menu--rename-tag)
("tD" "Delete tag (all)" supertag-menu--delete-tag)
("tf" "Quick edit field" supertag-menu--quick-edit-field)
("tp" "Promote concept" supertag-promote-concept)]]
[["Search & Query"
("ss" "Search" supertag-menu--search)
("sq" "Insert query block" supertag-menu--insert-query-block)
("sd" "Insert dynamic query" supertag-menu--insert-query-dblock)
("sb" "Build query (wizard)" supertag-menu--query-build)
("sr" "Run saved query" supertag-menu--query-run-saved)
("sy" "Query syntax help" supertag-menu--query-describe-syntax)
("se" "Insert embed" supertag-menu--insert-embed)
("sc" "Convert link to embed" supertag-menu--convert-link-to-embed)
("sl" "Add reference" supertag-menu--add-reference)
("sf" "Find node" supertag-menu--find-node)]
["Capture"
("cc" "Capture" supertag-menu--capture)
("ct" "Capture with template" supertag-capture-with-template)]]
[["Sync & Maintenance"
("mc" "Check & sync now" supertag-sync-check-now)
("mr" "Reindex Org" supertag-reindex-org)
("mx" "Cleanup database" supertag-sync-cleanup-database)
("ms" "Sync status" supertag-sync-status)
("md" "Doctor" supertag-menu--doctor)
("ml" "Retry DB lock" supertag-menu--db-retry-lock)]
["Git Sync"
("gs" "Setup git sync" supertag-menu--git-setup)
("gc" "Clone vault" supertag-menu--git-clone)
("gm" "Toggle sync mode" supertag-menu--git-sync-mode)
("gr" "Resolve conflicts" supertag-conflicts-resolve)
("go" "Use ours (all)" supertag-conflicts-use-ours-all)
("gt" "Use theirs (all)" supertag-conflicts-use-theirs-all)]]
[["Automation"
("al" "List templates" supertag-automation-list-templates
:if (lambda () (fboundp 'supertag-automation-list-templates)))
("ae" "Enable auto-sync" supertag-menu--automation-sync-enable)
("ad" "Disable auto-sync" supertag-menu--automation-sync-disable)
("ar" "Recalculate rollups" supertag-menu--automation-recalculate-all-rollups)
("as" "Start scheduler" supertag-menu--scheduler-start)
("ax" "Stop scheduler" supertag-menu--scheduler-stop)
("at" "List scheduled tasks" supertag-menu--scheduler-list-tasks)]
["Setup"
("zs" "Setup wizard" supertag-setup
:if (lambda () (fboundp 'supertag-setup)))
("zt" "Insert automation template" supertag-automation-insert-template
:if (lambda () (fboundp 'supertag-automation-insert-template)))
("zr" "Restore from backup" supertag-menu--restore)
("zm" "More commands..." supertag-menu-more)]])
;;;###autoload
(transient-define-prefix supertag-menu-more ()
"Secondary menu for less-common Supertag commands.
Reached from `supertag-menu''s Setup group; kept separate so the
top-level popup does not get crowded with rarely-used virtual column,
analytic demo view, and database migration commands."
[["Virtual Columns"
("vc" "Create" supertag-menu--virtual-column-create)
("ve" "Edit" supertag-menu--virtual-column-edit)
("vd" "Delete" supertag-menu--virtual-column-delete)
("vl" "List" supertag-menu--virtual-column-list)]
["Analytics"
("ap" "Priority matrix (demo)" supertag-menu--view-priority-matrix-demo)
("ab" "Progress dashboard (demo)" supertag-menu--view-progress-dashboard-demo)
("af" "Effort distribution (demo)" supertag-menu--view-effort-distribution-demo)]
["Migration"
("ma" "Migrate DB to new arch" supertag-migrate-database-to-new-arch)
("mp" "Convert properties to fields" supertag-batch-convert-properties-to-fields)
("mi" "Add IDs to org headings" supertag-migration-add-ids-to-org-headings)
("mr" "Preview reciprocal links" supertag-migration-preview-reciprocal-links)
("mx" "Migrate reciprocal links" supertag-migrate-reciprocal-links)
("mt" "Migrate tag IDs" supertag-menu--migrate-tag-ids)]])
(provide 'supertag-menu)
;;; supertag-menu.el ends here