If the argument isn't an ID, use fzf to find an ID
Signed-off-by: Oliver Davies <oliver@oliverdavies.uk>
This commit is contained in:
parent
329d6d34e0
commit
3c7a1dc3c1
5 changed files with 118 additions and 20 deletions
9
internal/lib/ansi.go
Normal file
9
internal/lib/ansi.go
Normal file
|
@ -0,0 +1,9 @@
|
|||
package lib
|
||||
|
||||
import "regexp"
|
||||
|
||||
var ansiRegex = regexp.MustCompile(`\x1b\[[0-9;]*m`)
|
||||
|
||||
func StripANSI(s string) string {
|
||||
return ansiRegex.ReplaceAllString(s, "")
|
||||
}
|
34
internal/lib/fzf.go
Normal file
34
internal/lib/fzf.go
Normal file
|
@ -0,0 +1,34 @@
|
|||
package lib
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func SelectWithFzf(items []string) (string, error) {
|
||||
cmd := exec.Command("fzf", "--ansi")
|
||||
|
||||
var input bytes.Buffer
|
||||
|
||||
for _, item := range items {
|
||||
input.WriteString(item + "\n")
|
||||
}
|
||||
|
||||
cmd.Stdin = &input
|
||||
|
||||
var output bytes.Buffer
|
||||
cmd.Stdout = &output
|
||||
cmd.Stderr = os.Stderr
|
||||
|
||||
err := cmd.Run()
|
||||
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
selected := strings.TrimSpace(output.String())
|
||||
|
||||
return selected, nil
|
||||
}
|
|
@ -3,13 +3,10 @@ package lib
|
|||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var ansiRegex = regexp.MustCompile(`\x1b\[[0-9;]*m`)
|
||||
|
||||
type Item struct {
|
||||
ID int `json:"id"`
|
||||
Title string `json:"title"`
|
||||
|
@ -19,7 +16,7 @@ func AsJSON(zets []string) (string, error) {
|
|||
var items []Item
|
||||
|
||||
for _, entry := range zets {
|
||||
cleanEntry := stripANSI(entry)
|
||||
cleanEntry := StripANSI(entry)
|
||||
parts := strings.SplitN(cleanEntry, " ", 2)
|
||||
|
||||
id, _ := strconv.Atoi(parts[0])
|
||||
|
@ -42,7 +39,3 @@ func AsJSON(zets []string) (string, error) {
|
|||
|
||||
return string(jsonData), nil
|
||||
}
|
||||
|
||||
func stripANSI(s string) string {
|
||||
return ansiRegex.ReplaceAllString(s, "")
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue