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