35 lines
469 B
Go
35 lines
469 B
Go
|
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
|
||
|
}
|