diff options
author | joe <rbo@gmx.us> | 2025-08-27 14:56:57 +0200 |
---|---|---|
committer | joe <rbo@gmx.us> | 2025-08-27 14:56:57 +0200 |
commit | 86d9a8a21756344856617156c36113aa848671c4 (patch) | |
tree | 2af7382dba86ad744592cd304049a2ff55949edb | |
parent | k (diff) | |
download | hardflip-86d9a8a21756344856617156c36113aa848671c4.tar.gz hardflip-86d9a8a21756344856617156c36113aa848671c4.tar.bz2 hardflip-86d9a8a21756344856617156c36113aa848671c4.tar.xz hardflip-86d9a8a21756344856617156c36113aa848671c4.tar.zst hardflip-86d9a8a21756344856617156c36113aa848671c4.zip |
fzf in progress
-rw-r--r-- | ROADMAP.md | 4 | ||||
-rw-r--r-- | src/c_defs.go | 19 | ||||
-rw-r--r-- | src/c_exec.go | 5 | ||||
-rw-r--r-- | src/c_fuzz.go | 65 | ||||
-rw-r--r-- | src/c_utils.go | 9 | ||||
-rw-r--r-- | src/e_keys.go | 2 |
6 files changed, 85 insertions, 19 deletions
@@ -58,18 +58,18 @@ ## v1.1 - 360 hard - [ ] fuzz -- [ ] undo maybe - [ ] better insert form +- [ ] ssh port rdr ## v1.2 - ghetto bird -- [ ] ssh port rdr - [ ] vnc - [ ] tree-like branches ## v1.3 - late flip - [ ] sorting options (yea like never) +- [ ] undo maybe ## v1.4 diff --git a/src/c_defs.go b/src/c_defs.go index ec8b447..916f19f 100644 --- a/src/c_defs.go +++ b/src/c_defs.go @@ -61,15 +61,16 @@ const ( ) const ( - NORMAL_KEYS_HINTS = `a/i: insert host - -m: mkdir - -[C-r]: reload - -?: help` - ERROR_KEYS_HINTS = "[Enter]: ok" - CONFIRM_KEYS_HINTS = `y/n: yes - no` - HELP_KEYS_HINTS = `q: close - -j: down - -k: up` + NORMAL_KEYS_HINTS = `add host: a/i: | +mkdir: m | +reload: <c-r> | +search: / | +keybinds: ?` + ERROR_KEYS_HINTS = "ok: [Enter]" + CONFIRM_KEYS_HINTS = `yes-no: y/n` + HELP_KEYS_HINTS = `close: q | +down: j | +up: k` ) const ( diff --git a/src/c_exec.go b/src/c_exec.go index 6d42b29..e00fe36 100644 --- a/src/c_exec.go +++ b/src/c_exec.go @@ -313,9 +313,6 @@ func c_exec(host *HostNode, opts HardOpts, ui *HardUI) { ui.s.Fini() os.Exit(0) } else if silent == false { - if err := ui.s.Resume(); err != nil { - ui.s.Fini() - c_die("view", err) - } + c_resume_or_die(ui) } } 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) } diff --git a/src/c_utils.go b/src/c_utils.go index 3ea4ee8..af6b4af 100644 --- a/src/c_utils.go +++ b/src/c_utils.go @@ -157,6 +157,15 @@ func c_error_mode(msg string, err error, ui *HardUI) { ui.err[ERROR_ERR] = err_str } +// c_resume_or_die attempts to resume a previously suspended tcell.Screen +// it will kill the program using c_die() in case of resume failure +func c_resume_or_die(ui *HardUI) { + if err := ui.s.Resume(); err != nil { + ui.s.Fini() + c_die("view", err) + } +} + // c_encrypt_str encrypts a string with the given gpgkey func c_encrypt_str(str string, gpg string) (string, error) { if len(gpg) == 0 || gpg == "plain" { diff --git a/src/e_keys.go b/src/e_keys.go index b8c1e52..f118fe3 100644 --- a/src/e_keys.go +++ b/src/e_keys.go @@ -250,7 +250,7 @@ func e_normal_events(data *HardData, ui *HardUI, event tcell.EventKey) bool { } else if (event.Rune() == '/' || event.Key() == tcell.KeyCtrlF) && data.litems.curr != nil { - c_fuzz(data) + c_fuzz(data, ui) } else if event.Rune() == '?' { ui.mode = HELP_MODE ui.help_scroll = 0 |