remove denote files

This commit is contained in:
Levi Neely 2025-11-17 21:01:46 +01:00
parent e5652dfd90
commit 2dad540135
3 changed files with 72 additions and 10 deletions

View File

@ -513,6 +513,10 @@ func EventListener() {
if err := handleNewEvent(identifier); err != nil {
log.Printf("error handling new for %s: %v", identifier, err)
}
case "d":
if err := handleDeleteEvent(identifier); err != nil {
log.Printf("error handling delete for %s: %v", identifier, err)
}
}
}
})
@ -652,3 +656,31 @@ func handleNewEvent(identifier string) error {
log.Printf("created new note: %s at %s", identifier, path)
return nil
}
func handleDeleteEvent(identifier string) error {
// Get denote directory
denoteDir := GetDir()
// Find file matching pattern: <identifier>--*
pattern := filepath.Join(denoteDir, identifier+"--*")
matches, err := filepath.Glob(pattern)
if err != nil {
return fmt.Errorf("failed to find file: %w", err)
}
if len(matches) == 0 {
return fmt.Errorf("no file found matching identifier: %s", identifier)
}
if len(matches) > 1 {
log.Printf("warning: multiple files match identifier %s, deleting first: %s", identifier, matches[0])
}
// Delete the file
if err := os.Remove(matches[0]); err != nil {
return fmt.Errorf("failed to delete file: %w", err)
}
log.Printf("deleted note: %s", matches[0])
return nil
}

View File

@ -1006,7 +1006,20 @@ func (s *server) write(cs *connState, fc *plan9.Fcall) *plan9.Fcall {
default:
}
case "event":
// Emit custom event (e.g., "r" for rename)
// Handle delete event specially
if value == "d" {
// Remove from in-memory state
s.mu.Lock()
for i, n := range s.notes {
if n.Identifier == noteID {
s.notes = append(s.notes[:i], s.notes[i+1:]...)
break
}
}
s.mu.Unlock()
}
// Emit custom event (e.g., "r" for rename, "d" for delete)
event := noteID + " " + value
select {
case s.eventChan <- event:

35
main.go
View File

@ -9,6 +9,7 @@ import (
"log"
"os"
"os/exec"
"path/filepath"
"regexp"
"strings"
"unicode"
@ -61,7 +62,7 @@ func main() {
}
defer w.CloseFiles()
if err = ui.TagSet(w, "New Reset Sync Put"); err != nil {
if err = ui.TagSet(w, "New Put Remove Reset Sync"); err != nil {
log.Fatal(err)
}
@ -97,15 +98,17 @@ func main() {
event := strings.TrimSpace(string(buf[:n]))
parts := strings.Fields(event)
if len(parts) >= 2 && parts[1] == "n" {
// Refresh window with new results
rs, err := denote.Search(fs.Filters{})
if err != nil {
log.Printf("error refreshing after new file: %v", err)
continue
if len(parts) >= 2 {
if parts[1] == "n" || parts[1] == "d" {
// Refresh window with new results
rs, err := denote.Search(fs.Filters{})
if err != nil {
log.Printf("error refreshing after new file: %v", err)
continue
}
fs.Sort(rs, fs.SortById, fs.SortOrderDesc)
refreshWindow(w, rs)
}
fs.Sort(rs, fs.SortById, fs.SortOrderDesc)
refreshWindow(w, rs)
}
}
})
@ -138,6 +141,20 @@ func main() {
}); err != nil {
log.Printf("failed to create new file: %v", err)
}
case "Remove":
// Read chorded argument
input := strings.TrimSpace(string(e.Arg))
if input == "" {
log.Printf("New: no input provided")
break
}
// Write to denote/<identifier>/event via 9P
if err := fs.With9P(func(f *client.Fsys) error {
return fs.WriteFile(f, filepath.Join(input, "event"), "d")
}); err != nil {
log.Printf("failed to delete file: %v", err)
}
case "Reset":
rs, err := denote.Search(fs.Filters{})
if err != nil {