From 84ef855f216dc31ef6d0f1bb617b3c59c3266cbc Mon Sep 17 00:00:00 2001 From: ruinivist Date: Sat, 3 Jan 2026 20:19:20 +0000 Subject: [PATCH] add del handling, non fs materialised --- fstree/fstree.go | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/fstree/fstree.go b/fstree/fstree.go index 49d68c4..8ffd56c 100644 --- a/fstree/fstree.go +++ b/fstree/fstree.go @@ -74,6 +74,8 @@ func (t *FsTree) Update(msg tea.Msg) (tea.Model, tea.Cmd) { _ = t.CreateNode(t.selectedNode, "new_folder", FolderNode) case "C": // new root node _ = t.CreateNode(t.root, "new_root_folder", FolderNode) + case "d", "delete": // delete node + _ = t.DeleteNode(t.selectedNode) } case tea.MouseMsg: @@ -129,7 +131,16 @@ func (t *FsTree) DeleteNode(node *FsNode) error { return errors.New("node to delete must have a parent") } + t.selectedNode = node.prev // cannot be next as subfolder/file deletion parent.children = utils.RemoveFromSlice(parent.children, node) + + if t.selectedNode == nil { + // can only happen if first root level node is deleted + if len(t.root.children) > 0 { + t.selectedNode = t.root.children[0] + } + } + t.buildLines() return nil } @@ -244,15 +255,12 @@ func (t *FsTree) buildLines() { flatTree := make([]*FsNode, 0) t.buildLinesRec(t.root, 0, &line, &flatTree) // root has -1 depth and -1 index, as it's not meant to be rendered // everything is a child of root - flatTree = flatTree[1:] // skip root + flatTree[0] = nil // basically a merge of skip root and padding ends with nil + flatTree = append(flatTree, nil) - for i, node := range flatTree { - if i > 0 { - node.prev = flatTree[i-1] - } - if i < len(flatTree)-1 { - node.next = flatTree[i+1] - } + for i := 1; i < len(flatTree)-1; i++ { + flatTree[i].prev = flatTree[i-1] + flatTree[i].next = flatTree[i+1] } }