diff --git a/go.mod b/go.mod index 5f9584e..fc1cc56 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.24.0 require ( github.com/disintegration/imaging v1.6.2 - modernc.org/tk9.0 v0.68.0 + modernc.org/tk9.0 v0.68.2-0.20250417123848-ef9ac7c6aea1 ) require ( diff --git a/go.sum b/go.sum index d56ac63..b6f4fb2 100644 --- a/go.sum +++ b/go.sum @@ -119,5 +119,7 @@ modernc.org/tcl9.0 v0.16.0 h1:Me5on7SpLPIv3yEkUiFVG14YR1AbvzHrZGkEu4s696s= modernc.org/tcl9.0 v0.16.0/go.mod h1:RMBQkc0bU2Sl7et9IoZjFG3Bcehh+6ARJgVBpKJ48+4= modernc.org/tk9.0 v0.68.0 h1:Qt6ENHG774ZYsDpMq5R1VKR0S5PQdyuQXFtMol6WJyg= modernc.org/tk9.0 v0.68.0/go.mod h1:YAR5KsxdaU5uTL+1PLEXrQN+rrhJ+Sz+suwXM7piwFU= +modernc.org/tk9.0 v0.68.2-0.20250417123848-ef9ac7c6aea1 h1:Gg+D6aT+sW5zTGjRspRv2HPnWAJvamXpDwEx+ea1GzA= +modernc.org/tk9.0 v0.68.2-0.20250417123848-ef9ac7c6aea1/go.mod h1:YAR5KsxdaU5uTL+1PLEXrQN+rrhJ+Sz+suwXM7piwFU= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= diff --git a/main.go b/main.go index b63c1e1..6013147 100644 --- a/main.go +++ b/main.go @@ -31,6 +31,7 @@ var validFileTypes = []tk.FileType{ var metaActive bool var fileList *tk.ToplevelWidget +var lb *tk.ListboxWidget var directoryState struct { currentDirectory string @@ -159,9 +160,22 @@ func main() { if fileList == nil { fileList = tk.Toplevel() fileList.WmTitle("files") + lb = fileList.Listbox(tk.Height(0)) + for i := range directoryState.images { + lb.Insert("end", directoryState.images[i]) + if directoryState.currentFile == directoryState.images[i] { + lb.SelectionSet(i) + } + } + tk.Pack(lb) + tk.Bind(lb, "<>", tk.Command(func() { + selection := lb.Curselection() + updateImage(filepath.Join(directoryState.currentDirectory, directoryState.images[selection[0]]), img) + })) tk.Bind(fileList, "", tk.Command(func(e *tk.Event) { // list closed by user click on fileList = nil + lb = nil })) } else { // list closed by Meta-a @@ -171,10 +185,18 @@ func main() { case "Up": if curr > 0 { updateImage(filepath.Join(directoryState.currentDirectory, directoryState.images[curr-1]), img) + if lb != nil { + lb.SelectionClear("0", "end") + lb.SelectionSet(curr - 1) + } } case "Down": if curr < len(directoryState.images)-1 && curr != -1 { updateImage(filepath.Join(directoryState.currentDirectory, directoryState.images[curr+1]), img) + if lb != nil { + lb.SelectionClear("0", "end") + lb.SelectionSet(curr + 1) + } } } }))