bug:多個Text同時使用時,使用Ctrl+C無法觸發Quit
Closed this issue · 21 comments
同時發現在windows下,text輸入中文是不正常的
输入法相关确实是有各种问题。。。
关于 ctrl + c 无法退出,可以把贴一下可运行的代码吗?
func newPost() bool {
metadata := make(map[string]interface{})
metadata["Title"], _ = inf.NewText(text.WithPrompt("Please enter the title of the article:"), text.WithRequired()).Display()
metadata["Name"], _ = inf.NewText(text.WithPrompt("Please enter the slug:"), text.WithPromptStyle(theme.DefaultTheme.PromptStyle), text.WithDefaultValue(metadata["Title"].(string))).Display()
metadata["Image"], _ = inf.NewText(text.WithPrompt("Please enter the URL of the head image:")).Display()
releaseDate, _ := inf.NewText(text.WithPrompt("Please enter a release date:"), text.WithPromptStyle(theme.DefaultTheme.PromptStyle), text.WithDefaultValue(time.Now().Format("2006-01-02"))).Display()
parse, err := time.Parse("2006-01-02", releaseDate)
if err != nil {
log.Panic(err)
}
metadata["Time"] = parse.UTC().Unix()
e := editor.New([]byte(""), "NewPost.md")
content, err := e.Run()
if err != nil {
panic(err)
}
err = manage.AddPost(metadata, string(content))
if err != nil {
log.Fatal(err)
}
log.Println("Article added successfully!")
return true
}
這是我目前使用的代碼
ctrl + c
好像是针对单个组件的,所以需要按多次 ctrl + c
對,這樣程序等於繼續執行下去了,等於我本來要退出程序,結果成了創建一個空文章。能否通過err返回一下quit狀態,這樣方便處理
现在的运行方式做不了这种一个 ctrl+c
退出整个程序。如果要做到只能添加一个特性: 一个组件可以聚合多个组件。
我现在记录了一下 text 退出的状态:
func main() {
metadata := make(map[string]interface{})
keyMap := components.InputDefaultKeyMap()
keyMap.Quit.SetEnabled(true)
newText := inf.NewText(
text.WithPrompt("Please enter the title of the article:"), text.WithRequired(),
text.WithKeyMap(keyMap),
)
metadata["Title"], _ = newText.Display()
// 判断是否是 ctrl + c 退出的
fmt.Println(newText.Status() == components.Quit)
metadata["Name"], _ = inf.NewText(text.WithPrompt("Please enter the slug:"), text.WithPromptStyle(theme.DefaultTheme.PromptStyle), text.WithDefaultValue(metadata["Title"].(string))).Display()
metadata["Image"], _ = inf.NewText(text.WithPrompt("Please enter the URL of the head image:")).Display()
releaseDate, _ := inf.NewText(text.WithPrompt("Please enter a release date:"), text.WithPromptStyle(theme.DefaultTheme.PromptStyle), text.WithDefaultValue(time.Now().Format("2006-01-02"))).Display()
parse, err := time.Parse("2006-01-02", releaseDate)
if err != nil {
log.Panic(err)
}
metadata["Time"] = parse.UTC().Unix()
}
你拉一下 go get github.com/fzdwx/infinite@main
可以看下
測試了一下,使用Ctrl+C退出的時候已經沒有問題了,非常感謝!
不過目前中文輸入依舊有問題,我已經啓用windows的UTF-8支援,我也嘗試吧Codepage改到65000.看起來都不能正常輸入中文。我目前用的作業系統是Windows 11 Pro。系統語言是英文(美國)
可以试试 wezterm or kitty ? 我日常使用 linux
我测试用系统的输入法也是出现乱码。是不是我系统环境有问题。我先排除一下好了
上面使用的是 win11 terminal
我也是使用windows11的Terminal,但是我shell用的是PowerShell。我试试cmd
折騰了一下,如果我啓用Unicode支持,我就不能正常輸入中文。但是bubbletea的table樣式是正常的。如果關閉unicode支持,我可以正常輸入中文,但是bubbletea的table樣式寬度計算就會錯誤。windows的BUG真的多……
是的,主要是 windows 上的终端协议是单独的
看了一下,希望NewSingleSelect這些組建也能有Status()參數,這樣方便判斷是否是用戶退出
看了一下,希望NewSingleSelect這些組建也能有Status()參數,這樣方便判斷是否是用戶退出
可以帮忙提下pr吗😂
行,我稍后来看看怎么改好了。看起來不是很麻煩的事情