eliminate ui pkg

This commit is contained in:
Levi Neely 2025-11-22 14:52:21 +01:00
parent 5365c19720
commit fda140439c
2 changed files with 45 additions and 107 deletions

View File

@ -1,87 +0,0 @@
package ui
import (
"fmt"
a "9fans.net/go/acme"
)
type Window = a.Win
// WindowOpen shows the window with a given name if it exists,
// otherwise creates it
func WindowOpen(name string) (*a.Win, error) {
if w := a.Show(name); w != nil {
return w, nil
}
w, err := a.New()
if err != nil {
return nil, fmt.Errorf("failed to open prompt window: %w", err)
}
if err := w.Name(name); err != nil {
w.Del(true)
return nil, fmt.Errorf("failed to set prompt window name: %w", err)
}
return w, nil
}
// WindowDirty marks the window as "dirty"
// (dirty=true) or "clean" (dirty=false).
func WindowDirty(w *a.Win, dirty bool) {
if dirty {
w.Ctl("dirty")
} else {
w.Ctl("clean")
}
}
// DotToAddr positions the cursor in a window to the given addr.
// addr follows the ':' in a fileaddr (e.g., '$', '#0', '<linenum>',
// '<range>')
func DotToAddr(w *a.Win, addr string) {
w.Addr(addr)
w.Ctl("dot=addr")
w.Ctl("show")
}
// WindowClear clears a window's contents
func WindowClear(w *a.Win) {
w.Clear()
}
// TagSet sets the tag of the window with the given name.
func TagSet(w *a.Win, tag string) error {
if _, err := w.Write("tag", []byte(tag)); err != nil {
w.Del(true)
return fmt.Errorf("failed to set tag: %w", err)
}
return nil
}
// BodyWrite writes the bytes s to the window body at address addr.
// addr is what follows the ":" in a file address, e.g., "$" for EOF,
// "1" for BOF, "," for the full file, "1,20" for lines 1-20.
func BodyWrite(w *a.Win, addr string, s []byte) error {
if err := w.Addr(addr); err != nil {
return fmt.Errorf("failed to seek to end of body: %w", err)
}
_, err := w.Write("data", s)
if err != nil {
return fmt.Errorf("failed to append data: %w", err)
}
return nil
}
// BodyRead reads the full contents from the window of
// the given name.
func BodyRead(w *a.Win) ([]byte, error) {
data, err := w.ReadAll("body")
if err != nil {
return []byte(""), fmt.Errorf("failed to read from window: %w", err)
}
return data, nil
}

65
main.go
View File

@ -4,7 +4,6 @@ import (
"denote/internal/fs" "denote/internal/fs"
"denote/internal/sync" "denote/internal/sync"
"denote/internal/tmpl" "denote/internal/tmpl"
"denote/internal/ui"
"fmt" "fmt"
"io" "io"
"log" "log"
@ -359,7 +358,7 @@ func handleDeleteEvent(identifier string) error {
func main() { func main() {
var err error var err error
var w *ui.Window var w *acme.Win
args := os.Args[1:] args := os.Args[1:]
if len(args) == 1 { if len(args) == 1 {
if identifier, ok := strings.CutPrefix(args[0], "denote:"); ok { if identifier, ok := strings.CutPrefix(args[0], "denote:"); ok {
@ -394,13 +393,20 @@ func main() {
go sync.WatchAcmeLog() go sync.WatchAcmeLog()
// open window // open window
if w, err = ui.WindowOpen(wname); err != nil { if w = acme.Show(wname); w == nil {
log.Fatal(err) if w, err = acme.New(); err != nil {
log.Fatal(err)
}
if err = w.Name(wname); err != nil {
w.Del(true)
log.Fatal(fmt.Errorf("failed to set window name: %w", err))
}
} }
defer w.CloseFiles() defer w.CloseFiles()
if err = ui.TagSet(w, "New Put Remove Reset Sync"); err != nil { if _, err = w.Write("tag", []byte("New Put Remove Reset Sync")); err != nil {
log.Fatal(err) w.Del(true)
log.Fatal(fmt.Errorf("failed to set tag: %w", err))
} }
// get initial results (clear any filter, read index) // get initial results (clear any filter, read index)
@ -452,8 +458,10 @@ func main() {
} }
}() }()
ui.WindowDirty(w, false) w.Ctl("clean")
ui.DotToAddr(w, "#0") w.Addr("#0")
w.Ctl("dot=addr")
w.Ctl("show")
// event loop // event loop
for e := range w.EventChan() { for e := range w.EventChan() {
@ -503,21 +511,35 @@ func main() {
fullPath, content := generateNotePath(denoteDir, title, tags, "md-yaml") fullPath, content := generateNotePath(denoteDir, title, tags, "md-yaml")
// Create new Acme window // Create new Acme window
newWin, err := ui.WindowOpen(fullPath) var newWin *acme.Win
if err != nil { if newWin = acme.Show(fullPath); newWin == nil {
log.Printf("New: failed to create window: %v", err) if newWin, err = acme.New(); err != nil {
break log.Printf("New: failed to create window: %v", err)
break
}
if err = newWin.Name(fullPath); err != nil {
newWin.Del(true)
log.Printf("New: failed to set window name: %v", err)
break
}
} }
// Write content to window // Write content to window
if err := ui.BodyWrite(newWin, "0", []byte(content)); err != nil { if err := newWin.Addr("0"); err != nil {
log.Printf("New: failed to seek: %v", err)
newWin.Del(true)
break
}
if _, err := newWin.Write("data", []byte(content)); err != nil {
log.Printf("New: failed to write content: %v", err) log.Printf("New: failed to write content: %v", err)
newWin.Del(true) newWin.Del(true)
break break
} }
ui.WindowDirty(newWin, true) newWin.Ctl("dirty")
ui.DotToAddr(newWin, "$") newWin.Addr("$")
newWin.Ctl("dot=addr")
newWin.Ctl("show")
// Start event listener for this note window // Start event listener for this note window
go watchNoteWindow(newWin, fullPath) go watchNoteWindow(newWin, fullPath)
@ -597,7 +619,7 @@ func main() {
} }
} }
func performSearch(w *ui.Window, searchText string) { func performSearch(w *acme.Win, searchText string) {
args := parseArgs(searchText) args := parseArgs(searchText)
var filterArgs []string var filterArgs []string
@ -650,12 +672,15 @@ func performSearch(w *ui.Window, searchText string) {
refreshWindow(w, rs) refreshWindow(w, rs)
} }
func refreshWindow(w *ui.Window, rs fs.Results) { func refreshWindow(w *acme.Win, rs fs.Results) {
ui.BodyWrite(w, ",", rs.Bytes()) w.Addr(",")
ui.DotToAddr(w, "#0") w.Write("data", rs.Bytes())
w.Addr("#0")
w.Ctl("dot=addr")
w.Ctl("show")
} }
func refreshWindowWithDefaults(w *ui.Window) { func refreshWindowWithDefaults(w *acme.Win) {
// Clear filter and read index // Clear filter and read index
if err := setFilter(""); err != nil { if err := setFilter(""); err != nil {
log.Printf("error clearing filter: %v", err) log.Printf("error clearing filter: %v", err)