tree: several nodes picked up and moved at once

m now adds the row under the cursor to a set of marks and steps on, so
mmm picks up three; M takes the whole folder, Esc or :unmark puts it all
back. Marks stay while the list walks, so they can be gathered from
several folders. p, :mv and Shift+digit move the whole set.

With a pointer, Ctrl- or Cmd-click marks a row and Shift-click every row
from the cursor to it. Rows drag onto a folder row, a crumb or a space
pill; a marked row carries every marked node with it.

POST /api/nodes/move takes { ids, parent_id } and moves them all or
none: every node is checked before any moves, sealing into a sealed
folder happens before the one transaction that moves them, and two of a
name get slugs of their own. The single move goes the same way.
This commit is contained in:
nvrl committed 2026-10-20 11:13:52 +02:00
1 parent b19fb21fc4
commit 6bf88e7ffd
15 files changed
+407 -111

No files matched your search

+6 -1
View File
@@ -568,10 +568,14 @@
else void workspace.guard(() => workspace.openSelected())
break
case 'm':
// Pick a node up here, walk to a folder, put it down with `p`.
// Pick nodes up here, walk to a folder, put them down with `p`.
event.preventDefault()
workspace.mark()
break
case 'M':
event.preventDefault()
workspace.markAll()
break
case 'p':
event.preventDefault()
void workspace.guard(() => workspace.drop())
@@ -619,6 +623,7 @@
case 'Escape':
event.preventDefault()
if (workspace.open) void runCommand('q')
else workspace.unmarkAll()
break
case 'x':
event.preventDefault()