start build prompt commandline application
开始构建提示符命令行应用
复刻划掉参考 python-prompt-toolkit 库
支持 Linux MacOS
package main
/*
读取用户输入并将其打印出来
*/
import (
"fmt"
"github.com/yetsing/startprompt"
)
func main() {
c, err := startprompt.NewCommandLine(nil)
if err != nil {
fmt.Printf("failed to startprompt.NewCommandLine: %v\n", err)
return
}
line, err := c.ReadInput()
if err != nil {
fmt.Printf("ReadInput error: %v\n", err)
}
fmt.Println("echo:", line)
}
package main
/*
helloworld 例子,读取用户输入并将其打印出来
*/
import (
"fmt"
"github.com/yetsing/startprompt"
)
func main() {
c, err := startprompt.NewTCommandLine(nil)
if err != nil {
fmt.Printf("failed to startprompt.NewTCommandLine: %v\n", err)
return
}
defer c.Close()
c.Println("Type some text. Press Enter confirm or Ctrl-D exit")
line, err := c.ReadInput()
if err != nil {
return
}
c.Println("echo:", line)
}
- 支持常用快捷键操作,可看 keybinding
- 支持输入历史(提供内存和文件两种实现)
- 支持语法高亮(通过自定义分词器实现)
- 支持鼠标操作,可看 mouse (TCommandLine 支持)
有两个实现 CommandLine
TCommandLine
,这两个在细节行为上有差异,
TCommandLine
基于 tcell 实现,增加鼠标支持
examples
文件夹有一些简单的例子,其中以 t 开头的是使用 TCommandLine
的例子。
-
startprompt-python-repl 一个 Python repl
-
sqlite cli todo
日志内容会输出到当前目录下的 startprompt.log
文件中
c, err := startprompt.NewTCommandLine(&startprompt.CommandLineOption{
EnableDebug: true,
})
词法分析主要参考下面
Let's Build A Simple Interpreter
《用Go语言自制解释器》