diff options
Diffstat (limited to 'src/c_fuzz.go')
-rw-r--r-- | src/c_fuzz.go | 65 |
1 files changed, 62 insertions, 3 deletions
diff --git a/src/c_fuzz.go b/src/c_fuzz.go index 5b59297..c629b91 100644 --- a/src/c_fuzz.go +++ b/src/c_fuzz.go @@ -43,7 +43,7 @@ * POSSIBILITY OF SUCH DAMAGE. * * hardflip: src/c_fuzz.go - * Tue, 26 Aug 2025 19:32:25 +0200 + * Wed, 27 Aug 2025 13:43:16 +0200 * Joe * * search with fzf otherwise shitty search @@ -51,6 +51,65 @@ package main -func c_fuzz(data *HardData) { - // TODO: here +import ( + "fmt" + "io" + "os/exec" + "strings" + "time" +) + +func c_list_items(litems *ItemsList, stdin io.WriteCloser) { + for ptr := litems.head; ptr != nil; ptr = ptr.next { + var forebears []string + + if ptr.is_dir() == true { + continue + } + for rptr := ptr.Host.parent; len(rptr.Name) > 0; rptr = rptr.Parent { + forebears = append(forebears, rptr.Name) + } + for i := len(forebears) - 1; i >= 0; i-- { + io.WriteString(stdin, forebears[i] + "/") + } + io.WriteString(stdin, ptr.Host.Name + "\n") + } +} + +func c_fuzz(data *HardData, ui *HardUI) { + if err := ui.s.Suspend(); err != nil { + c_error_mode("screen", err, ui) + return + } + search := exec.Command("fzf") + stdin, err := search.StdinPipe() + if err != nil { + c_error_mode("search stdin pipe", err, ui) + c_resume_or_die(ui) + return + } + stdout, err := search.StdoutPipe() + if err != nil { + c_error_mode("search stdout pipe", err, ui) + c_resume_or_die(ui) + return + } + if err := search.Start(); err != nil { + c_error_mode("fzf", err, ui) + c_resume_or_die(ui) + return + } + go func() { + defer stdin.Close() + c_list_items(data.litems, stdin) + }() + output, err := io.ReadAll(stdout) + if err != nil { + ui.s.Fini() + c_die("fuck it failed", err) + } + str_out := strings.TrimSuffix(string(output), "\n") + fmt.Printf("[%s]\n", str_out) + time.Sleep(3 * time.Second) + c_resume_or_die(ui) } |