aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjoe <rbo@gmx.us>2025-08-27 14:56:57 +0200
committerjoe <rbo@gmx.us>2025-08-27 14:56:57 +0200
commit86d9a8a21756344856617156c36113aa848671c4 (patch)
tree2af7382dba86ad744592cd304049a2ff55949edb
parentk (diff)
downloadhardflip-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.md4
-rw-r--r--src/c_defs.go19
-rw-r--r--src/c_exec.go5
-rw-r--r--src/c_fuzz.go65
-rw-r--r--src/c_utils.go9
-rw-r--r--src/e_keys.go2
6 files changed, 85 insertions, 19 deletions
diff --git a/ROADMAP.md b/ROADMAP.md
index 7acd9c9..eda20e3 100644
--- a/ROADMAP.md
+++ b/ROADMAP.md
@@ -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