diff --git a/main.go b/main.go index fa47aff..c1c426b 100644 --- a/main.go +++ b/main.go @@ -93,24 +93,26 @@ func newBrowse(file string) { log.Printf("could not open dir: %v", err) return } - directoryState.images = []string{} - for _, v := range dirfiles { - if filetypes.IsImage(v) { - directoryState.images = append(directoryState.images, v.Name()) - } - } - slices.SortFunc(directoryState.images, func(a, b string) int { - if natural.Less(a, b) { + // natsort the directory listing first... + slices.SortFunc(dirfiles, func(a, b os.DirEntry) int { + if natural.Less(a.Name(), b.Name()) { return -1 } return 1 }) + // ...that way we only have to do this loop once. clearFileList() - for i, v := range directoryState.images { - insertIntoFileList(directoryState.images[i]) - if v == filepath.Base(file) { - directoryState.i = i - moveSelectionInFileList(i) + directoryState.images = []string{} + i := 0 + for _, v := range dirfiles { + if filetypes.IsImage(v) { + directoryState.images = append(directoryState.images, v.Name()) + insertIntoFileList(directoryState.images[i]) + if v.Name() == filepath.Base(file) { + directoryState.i = i + moveSelectionInFileList(i) + } + i++ } } updateImage(file) @@ -225,19 +227,18 @@ func constructFileList() { fileList = nil fileListBindVar.Set("0") })) + clearFileList() + for i := range directoryState.images { + insertIntoFileList(directoryState.images[i]) + if directoryState.i == i { + moveSelectionInFileList(i) + } + } } func showFileList() { if fileList == nil { constructFileList() - // repopulate - lb.Delete("0", "end") - for i := range directoryState.images { - lb.Insert("end", directoryState.images[i]) - if directoryState.i == i { - lb.SelectionSet(i) - } - } } tk.WmDeiconify(fileList.Window) fileListBindVar.Set("1")