私には機能があります。利用可能なフォント名でオートコンプリートを追加するにはどうすればよいですか?
たとえば、このように入力すると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 コマンドをパイプしてはいけません。ターゲットコマンドをサブシェルにパイプすると、サブシェルを終了すると COMPREPLY 配列の新しい内容がすぐに失われます。<
プロセスでリダイレクトを置き換えるほうがうまく<(...)
いきます。
fc-listの引数は、-f
単純なgrepコマンドの形式を指定して、コマンドラインに入力された最初の文字に一致するフォント名を選択し、便宜上ソートします。また、-u
ソートに(唯一の)パラメーターを追加しました。この場合は、製品ファミリだけがリストされているためです。各バリアントは重複項目として表示されるため、分類する必要があります。