特定のコマンドのbash補完にプログラムでアクセスする 質問する

特定のコマンドのbash補完にプログラムでアクセスする 質問する

私は小さなコマンド ランチャー アプリケーションを作成しようとしており、独自の補完システムで bash のタブ補完を使用したいと考えています。 を使用して、一般的なコマンドの補完リストを取得できましたcompgen -abck
ただし、特定のコマンドの補完も取得したいと考えています。たとえば、入力にはgit pgit のコマンドの補完が表示される必要があります。

これを実行する方法はありますかcompgen? そうでない場合、プログラムで補完リストを取得する他の方法はありますか?

[編集: 明確にするために、私は提供するbash への補完 - 私のアプリは GUI コマンド ランチャーです。自分のアプリで bash の既存の補完を使用したいと思います。

ベストアンサー1

仕組みはよく分かりませんが、素晴らしいウィンドウマネージャーbash 補完の結果にアクセスするために次の Lua コードを使用します。

https://github.com/awesomeWM/awesome/blob/master/lib/awful/completion.lua#L119

  1. 経由でcomplete -pを見つけますcomplete -o bashdefault -o default -o nospace -F _git git。後で使用するために「_git」を覚えておきます。
  2. 「git l」の長さは 5 なので、COMP_COUNT=6 を設定します。「git」への最初の引数を完了しているので、COMP_CWORD=1 です。

全体として、次のスクリプトを使用します。

__print_completions() {
    printf '%s\n' "${COMPREPLY[@]}"
}

# load bash-completion functions
source /etc/bash_completion

# load git's completion function
_completion_loader git

COMP_WORDS=(git l)
COMP_LINE='git l'
COMP_POINT=6
COMP_CWORD=1
_git
__print_completions

出力: "log"

おすすめ記事