![使用可用系统字体自动完成 bash 功能](https://linux22.com/image/198683/%E4%BD%BF%E7%94%A8%E5%8F%AF%E7%94%A8%E7%B3%BB%E7%BB%9F%E5%AD%97%E4%BD%93%E8%87%AA%E5%8A%A8%E5%AE%8C%E6%88%90%20bash%20%E5%8A%9F%E8%83%BD.png)
我有一个功能。如何为其添加带有可用字体名称的自动完成功能?
因此,如果我输入类似的内容,doSomethingWithFont Ubun<tab>
它将完成doSomethingWithFont Ubuntu\ Mono
例如。
doSomethingWithFont () {
echo $1
}
_completeWithFontName () {
# ????
}
complete -F _completeWithFontName doSomethingWithFont
答案1
您可能需要使用 fc_list 命令以您希望输入的格式列出可用字体。
这就是它如何适合您的示例代码:
_completeWithFontName() { < <(fc-list -f "%{family}\n" | grep "^$2" | sort -u) mapfile -t COMPREPLY; }
complete -F _completeWithFontName doSomethingWithFont
请注意,您不应通过管道输入 mapfile 命令:通过管道将目标命令放入子 shell 中,并且在退出该子 shell 时,您将立即丢失 COMPREPLY 数组的新内容。<
从进程替换重定向效果<(...)
更好。
fc-list 的参数-f
设置格式,简单的 grep 命令选择与命令行上输入的第一个字符匹配的字体名称,排序是为了方便。我还-u
向排序添加了一个(唯一的)参数,因为在本例中我仅列出了族;每个变体都会显示为重复项,因此我们应该将它们分类。