From a711d9abea98243256583edb508ea3f7bc30a2f5 Mon Sep 17 00:00:00 2001 From: ruinivist Date: Sat, 3 Jan 2026 21:54:11 +0000 Subject: [PATCH] fix bug where creating new file in collapsed folder leads to nothing selected --- fstree/fstree.go | 38 ++++++++++--------- sample/bubbletea/what is.md | 3 -- sample/{test => new_root_folder}/new_file.txt | 0 .../new_root_folder/new_folder/new_file.txt | 0 .../new_folder/new_folder/new_file.txt | 0 .../new_folder/new_folder/new_file.txt | 0 .../new_folder/new_folder/new_file.txt | 0 .../new_folder/new_folder/new_file.txt | 0 8 files changed, 21 insertions(+), 20 deletions(-) delete mode 100644 sample/bubbletea/what is.md rename sample/{test => new_root_folder}/new_file.txt (100%) create mode 100644 sample/new_root_folder/new_folder/new_file.txt create mode 100644 sample/new_root_folder/new_folder/new_folder/new_file.txt create mode 100644 sample/new_root_folder/new_folder/new_folder/new_folder/new_file.txt create mode 100644 sample/new_root_folder/new_folder/new_folder/new_folder/new_folder/new_file.txt create mode 100644 sample/new_root_folder/new_folder/new_folder/new_folder/new_folder/new_folder/new_file.txt diff --git a/fstree/fstree.go b/fstree/fstree.go index bd84814..a4c5a25 100644 --- a/fstree/fstree.go +++ b/fstree/fstree.go @@ -120,34 +120,36 @@ func (t *FsTree) View() string { return t.errMsg } + if len(t.root.children) == 0 { + return "no files/folders\nPress C to create" + } + builder := &strings.Builder{} t.renderNode(t.root, 0, builder) rendered := builder.String() // clamp to height around selected node - if t.selectedNode != nil { - lines := strings.Split(rendered, "\n") - totalLines := len(lines) - selectedLine := t.selectedNode.line + lines := strings.Split(rendered, "\n") + totalLines := len(lines) + selectedLine := t.selectedNode.line - halfHeight := t.height / 2 - startLine := selectedLine - halfHeight + halfHeight := t.height / 2 + startLine := selectedLine - halfHeight + if startLine < 0 { + startLine = 0 + } + endLine := startLine + t.height + if endLine > totalLines { + endLine = totalLines + startLine = endLine - t.height if startLine < 0 { startLine = 0 } - endLine := startLine + t.height - if endLine > totalLines { - endLine = totalLines - startLine = endLine - t.height - if startLine < 0 { - startLine = 0 - } - } - - clampedLines := lines[startLine:endLine] - rendered = strings.Join(clampedLines, "\n") } + clampedLines := lines[startLine:endLine] + rendered = strings.Join(clampedLines, "\n") + return rendered } @@ -351,6 +353,8 @@ func (t *FsTree) CreateNode(folder *FsNode, name string, nodeType FsNodeType) er if folder.nodeType != FolderNode { return errors.New("parent node must be a folder. this should not be allowed by ui") + } else if folder.nodeType == FolderNode && !folder.expanded { + folder.expanded = true } if name == "" { diff --git a/sample/bubbletea/what is.md b/sample/bubbletea/what is.md deleted file mode 100644 index 4459ecb..0000000 --- a/sample/bubbletea/what is.md +++ /dev/null @@ -1,3 +0,0 @@ -# what is bubbletea? - -it's a simple framework based on elm architecture diff --git a/sample/test/new_file.txt b/sample/new_root_folder/new_file.txt similarity index 100% rename from sample/test/new_file.txt rename to sample/new_root_folder/new_file.txt diff --git a/sample/new_root_folder/new_folder/new_file.txt b/sample/new_root_folder/new_folder/new_file.txt new file mode 100644 index 0000000..e69de29 diff --git a/sample/new_root_folder/new_folder/new_folder/new_file.txt b/sample/new_root_folder/new_folder/new_folder/new_file.txt new file mode 100644 index 0000000..e69de29 diff --git a/sample/new_root_folder/new_folder/new_folder/new_folder/new_file.txt b/sample/new_root_folder/new_folder/new_folder/new_folder/new_file.txt new file mode 100644 index 0000000..e69de29 diff --git a/sample/new_root_folder/new_folder/new_folder/new_folder/new_folder/new_file.txt b/sample/new_root_folder/new_folder/new_folder/new_folder/new_folder/new_file.txt new file mode 100644 index 0000000..e69de29 diff --git a/sample/new_root_folder/new_folder/new_folder/new_folder/new_folder/new_folder/new_file.txt b/sample/new_root_folder/new_folder/new_folder/new_folder/new_folder/new_folder/new_file.txt new file mode 100644 index 0000000..e69de29