加载指示器
spinner是一个简单的包,用于在任何终端应用程序中添加加载指示器/进度指示器。下面可以找到示例,完整示例在examples目录中。
有关库及其功能的更多详细信息,安装后请参考本地godoc。
欢迎贡献!
安装
go get github.com/briandowns/spinner
可用字符集
90个字符集。以下是一些示例:
(按其切片索引编号)
索引 | 字符集 | 示例动图 |
---|---|---|
0 | ←↖↑↗→↘↓↙ | |
1 | ▁▃▄▅▆▇█▇▆▅▄▃▁ | |
2 | ▖▘▝▗ | |
3 | ┤┘┴└├┌┬┐ | |
4 | ◢◣◤◥ | |
5 | ◰◳◲◱ | |
6 | ◴◷◶◵ | |
7 | ◐◓◑◒ | |
8 | .oO@* | |
9 | |/-\ | |
10 | ◡◡⊙⊙◠◠ | |
11 | ⣾⣽⣻⢿⡿⣟⣯⣷ | |
12 | >))'> >))'> >))'> >))'> >))'> <'((< <'((< <'((< | |
13 | ⠁⠂⠄⡀⢀⠠⠐⠈ | |
14 | ⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏ | |
15 | abcdefghijklmnopqrstuvwxyz | |
16 | ▉▊▋▌▍▎▏▎▍▌▋▊▉ | |
17 | ■□▪▫ | |
18 | ←↑→↓ | |
19 | ╫╪ | |
20 | ⇐⇖⇑⇗⇒⇘⇓⇙ | |
21 | ⠁⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈⠈ | |
22 | ⠈⠉⠋⠓⠒⠐⠐⠒⠖⠦⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈ | |
23 | ⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠴⠲⠒⠂⠂⠒⠚⠙⠉⠁ | |
24 | ⠋⠙⠚⠒⠂⠂⠒⠲⠴⠦⠖⠒⠐⠐⠒⠓⠋ | |
25 | ヲァィゥェォャュョッアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン | |
26 | . .. ... | |
27 | ▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▏▎▍▌▋▊▉█▇▆▅▄▃▂▁ | |
28 | .oO°Oo. | |
29 | +x | |
30 | v<^> | |
31 | >>---> >>---> >>---> >>---> >>---> <---<< <---<< <---<< <---<< <---<< | |
32 | | || ||| |||| ||||| |||||| ||||| |||| ||| || | | |
33 | [] [=] [==] [===] [====] [=====] [======] [=======] [========] [=========] [==========] | |
34 | (*---------) (-*--------) (--*-------) (---*------) (----*-----) (-----*----) (------*---) (-------*--) (--------*-) (---------*) | |
35 | █▒▒▒▒▒▒▒▒▒ ███▒▒▒▒▒▒▒ █████▒▒▒▒▒ ███████▒▒▒ ██████████ | |
36 | [ ] [=> ] [===> ] [=====> ] [======> ] [========> ] [==========> ] [============> ] [==============> ] [================> ] [==================> ] [===================>] | |
37 | 🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛 | |
38 | 🕐 🕜 🕑 🕝 🕒 🕞 🕓 🕟 🕔 🕠 🕕 🕡 🕖 🕢 🕗 🕣 🕘 🕤 🕙 🕥 🕚 🕦 🕛 🕧 | |
39 | 🌍 🌎 🌏 | |
40 | ◜ ◝ ◞ ◟ | |
41 | ⬒ ⬔ ⬓ ⬕ | |
42 | ⬖ ⬘ ⬗ ⬙ | |
43 | [>>> >] []>>>> [] [] >>>> [] [] >>>> [] [] >>>> [] [] >>>>[] [>> >>] |
特性
- 启动
- 停止
- 重启
- 反向旋转
- 更新旋转器字符集
- 更新旋转速度
- 前缀或附加文本
- 更改旋转器颜色、背景和文本属性如粗体/斜体
- 获取旋转器状态
- 链接、管道、重定向输出
- 在旋转器/指示器完成时输出最终字符串
示例
package main
import (
"github.com/briandowns/spinner"
"time"
)
func main() {
s := spinner.New(spinner.CharSets[9], 100*time.Millisecond) // 构建新的旋转器
s.Start() // 启动旋转器
time.Sleep(4 * time.Second) // 运行一段时间来模拟工作
s.Stop()
}
更新字符集并重启旋转器
s.UpdateCharSet(spinner.CharSets[1]) // 更新旋转器以使用不同的字符集
s.Restart() // 重启旋转器
time.Sleep(4 * time.Second)
s.Stop()
更新旋转速度并重启旋转器
s.UpdateSpeed(200 * time.Millisecond) // 更新旋转器的旋转速度
s.Restart()
time.Sleep(4 * time.Second)
s.Stop()
反转旋转器的方向
s.Reverse() // 反转旋转器的旋转方向
s.Restart()
time.Sleep(4 * time.Second)
s.Stop()
提供自己的旋转器
(或向我提交问题或拉取请求以添加到项目中)
someSet := []string{"+", "-"}
s := spinner.New(someSet, 100*time.Millisecond)
在旋转器前缀或附加文本
s.Prefix = "前缀文本: " // 在旋转器之前添加前缀文本
s.Suffix = " :附加文本" // 在旋转器之后附加文本
设置或更改旋转器的颜色。默认颜色为白色。需要重启旋转器以应用更改。
s.Color("red") // 将旋转器颜色设置为红色
您可以同时指定背景色和前景色,以及其他属性如bold
或underline
。
s.Color("red", "bold") // 将旋转器颜色设置为粗体红色
要将背景设置为黑色,前景设置为粗体红色:
s.Color("bgBlack", "bold", "fgRed")
以下是完整的颜色和属性列表:
// 默认颜色
red
black
green
yellow
blue
magenta
cyan
white
// 属性
reset
bold
faint
italic
underline
blinkslow
blinkrapid
reversevideo
concealed
crossedout
// 前景文本
fgBlack
fgRed
fgGreen
fgYellow
fgBlue
fgMagenta
fgCyan
fgWhite
// 前景高强度文本
fgHiBlack
fgHiRed
fgHiGreen
fgHiYellow
fgHiBlue
fgHiMagenta
fgHiCyan
fgHiWhite
// 背景文本
bgBlack
bgRed
bgGreen
bgYellow
bgBlue
bgMagenta
bgCyan
bgWhite
// 背景高强度文本
bgHiBlack
bgHiRed
bgHiGreen
bgHiYellow
bgHiBlue
bgHiMagenta
bgHiCyan
bgHiWhite
生成数字序列
setOfDigits := spinner.GenerateNumberSequence(25) // 生成25位数字字符串
s := spinner.New(setOfDigits, 100*time.Millisecond)
获取旋转器状态
fmt.Println(s.Active())
Unix管道和重定向
由dekz建议并撰写的功能
将Spinner Writer设置为Stderr有助于向用户显示进度,并增强了链接、管道或重定向输出的功能。
这是当前设置Writer的首选方法。
s := spinner.New(spinner.CharSets[11], 100*time.Millisecond, spinner.WithWriter(os.Stderr))
s.Suffix = " 正在加密数据..."
s.Start()
// 将数据加密为密文
fmt.Println(os.Stdout, ciphertext)
> myprog encrypt "Secret text" > encrypted.txt
⣯ 正在加密数据...
> cat encrypted.txt
1243hjkbas23i9ah27sj39jghv237n2oa93hg83
最终字符串输出
在旋转器/指示器完成时添加额外输出。"最终"输出字符串可以是多行的,并将写入配置的io.Writer
。
s := spinner.New(spinner.CharSets[9], 100*time.Millisecond)
s.FinalMSG = "完成!\n新行!\n再一行!\n"
s.Start()
time.Sleep(4 * time.Second)
s.Stop()
输出
完成!
新行!
再一行!