fzdwx/infinite

bug:多個Text同時使用時,使用Ctrl+C無法觸發Quit

Closed this issue · 21 comments

bug:多個Text同時使用時,使用Ctrl+C無法觸發Quit

同時發現在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

我刚刚试了下,可以输入中文

img_v3_028p_50db599a-e421-4c9b-8765-6eeff287ba9g

我测试用系统的输入法也是出现乱码。是不是我系统环境有问题。我先排除一下好了

上面使用的是 win11 terminal

我也是使用windows11的Terminal,但是我shell用的是PowerShell。我试试cmd

image
cmd也是这样,我觉得应该是我环境问题。我跑个测试看看

問題找到了,這個問題僅限英文的windows系統,需要在這裏設定語言爲中文簡體,然後關閉unicode支持。輸入中文就正常了。感謝
image

折騰了一下,如果我啓用Unicode支持,我就不能正常輸入中文。但是bubbletea的table樣式是正常的。如果關閉unicode支持,我可以正常輸入中文,但是bubbletea的table樣式寬度計算就會錯誤。windows的BUG真的多……

是的,主要是 windows 上的终端协议是单独的

看了一下,希望NewSingleSelect這些組建也能有Status()參數,這樣方便判斷是否是用戶退出

看了一下,希望NewSingleSelect這些組建也能有Status()參數,這樣方便判斷是否是用戶退出

可以帮忙提下pr吗😂

行,我稍后来看看怎么改好了。看起來不是很麻煩的事情