利用可能なシステムフォントを使用した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 コマンドをパイプしてはいけません。ターゲットコマンドをサブシェルにパイプすると、サブシェルを終了すると COMPREPLY 配列の新しい内容がすぐに失われます。<プロセスでリダイレクトを置き換えるほうがうまく<(...)いきます。

fc-listの引数は、-f単純なgrepコマンドの形式を指定して、コマンドラインに入力された最初の文字に一致するフォント名を選択し、便宜上ソートします。また、-uソートに(唯一の)パラメーターを追加しました。この場合は、製品ファミリだけがリストされているためです。各バリアントは重複項目として表示されるため、分類する必要があります。

おすすめ記事