使用可用系统字体自动完成 bash 功能

使用可用系统字体自动完成 bash 功能

我有一个功能。如何为其添加带有可用字体名称的自动完成功能?

因此,如果我输入类似的内容,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向排序添加了一个(唯一的)参数,因为在本例中我仅列出了族;每个变体都会显示为重复项,因此我们应该将它们分类。

相关内容