[cmd] 设置不处理按键为ESC
This commit is contained in:
parent
99e314c925
commit
a1faa3c9b5
|
|
@ -13,6 +13,7 @@ import (
|
|||
|
||||
"github.com/spf13/cobra"
|
||||
"go.uber.org/zap"
|
||||
"golang.org/x/term"
|
||||
)
|
||||
|
||||
var SafeCmd = &cobra.Command{
|
||||
|
|
@ -30,6 +31,25 @@ var SafeCmd = &cobra.Command{
|
|||
},
|
||||
}
|
||||
|
||||
func readKeyWithESC() (string, error) {
|
||||
oldState, err := term.MakeRaw(int(os.Stdin.Fd()))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer term.Restore(int(os.Stdin.Fd()), oldState)
|
||||
|
||||
b := make([]byte, 1)
|
||||
_, err = os.Stdin.Read(b)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if b[0] == 27 { // ESC
|
||||
return "ESC", nil
|
||||
}
|
||||
return string(b), nil
|
||||
}
|
||||
|
||||
func interactiveSafe(cfg *config.Config) {
|
||||
dataDir := cfg.Storage.DataDir
|
||||
|
||||
|
|
@ -55,12 +75,14 @@ func interactiveSafe(cfg *config.Config) {
|
|||
fmt.Println("\n请选择操作:")
|
||||
fmt.Println("[1] 将以上可疑文件全部确认为安全 (移至白名单)")
|
||||
// Todo: 支持逐个确认
|
||||
fmt.Println("[2] 退出不处理")
|
||||
fmt.Print("请输入选项 (1-2): ")
|
||||
fmt.Println("[ESC] 退出不处理")
|
||||
fmt.Print("请输入选项: ")
|
||||
|
||||
reader := bufio.NewReader(os.Stdin)
|
||||
input, _ := reader.ReadString('\n')
|
||||
input = strings.TrimSpace(input)
|
||||
input, err := readKeyWithESC()
|
||||
if err != nil {
|
||||
fmt.Printf("读取输入失败: %v\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
switch input {
|
||||
case "1":
|
||||
|
|
@ -70,7 +92,7 @@ func interactiveSafe(cfg *config.Config) {
|
|||
} else {
|
||||
fmt.Println("已将可疑文件移入白名单。")
|
||||
}
|
||||
case "2":
|
||||
case "ESC":
|
||||
fmt.Println("已取消操作。")
|
||||
default:
|
||||
fmt.Println("无效选项,已退出。")
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user