メディアプレーヤーのzshの完成

メディアプレーヤーのzshの完成

私は以下を除いてグローバルに無効に.zshrcしました。menu selectmpv/mplayer

zstyle ':completion:*' menu select=0
zstyle ':completion::complete:mpv:*' menu yes select

これは期待どおりに機能しますが、メニューが呼び出されたときにメディアファイルのみが表示されるようにルールを変更したいと思いますmpv(例: "mp3|mp4|mpg|avi|...")。

*テストするためにに変更してみましたが、うまく*.mp3いきませんでした。

ルールを変更するにはどうすればよいですか?

答え1

zstyle完成設定は、完成の表示方法に影響し、完成の生成方法を調整できますが、完成を生成するコードを決定するわけではありません。コードは、またはそれに対応するものを使用して設定さcompdefれますcompctl

メディアファイルのみを完成ファイルとして指定するには、次のようにmpv呼び出します。compctl.zshrc

compctl -/ -g '*.(#i)(mp3|mp4|mpg|avi)' mpv

この-/オプションは、他の補完とともにディレクトリも完成することを意味します(そうしないと、サブディレクトリのファイルにアクセスできません)。この-gオプションは、完了するファイルを選択するためのグローバルモードを指定します。(#i)大文字と小文字を区別せずに一致します。

compdefより複雑な完成の選択のために(この答えの範囲外)、関数を作成し、自動ロードマジックを使用するか、それを介してコマンドに関連付けます。関数が完成の生成方法を調整したい場合は、zstyleスタイルを照会できます。

答え2

私達は指定できますignored-patternszstyle次のように追加の行を追加します。

# append below line
zstyle ':completion::complete:mpv:*:*files' ignored-patterns '^*.(#i)(mp3|mp4|mpg|avi)'

PS:パターンを除くすべてと一致することが^できる「グローバル演算子」なので、上記のおおよその意味は、zshにコマンドのメディアではなくファイルを無視するように要求することです。^xxzstylempv

ignored-patterns

パターンリスト。これらのパターンの1つと一致する試験の完了は、検討対象から除外される。完了者は、_ignored完了者リストに表示され、無視された一致を復元できます。これはシェルパラメータのより設定可能なバージョンです$fignore

ご注意ください、EXTENDED_GLOBオプションはコンプリート機能の実行中に設定されるため、文字 ''、' #' ~、' ^' はパターンに特別な意味を持ちます。

---zshcompsys(1), zsh 完成システム, 標準スタイル

答え3

2つのことをする必要があります。 (注:これは推測ではありません。テストしてみるとうまくいきます。)

まず、以下をfile-patterns定義する必要があります。mpv.zshrc

zstyle ':completion:*:mpv:*' file-patterns \
        '%p.(mp3|mp4|mpg|avi)(#q^-/):globbed-files:"media file"' '*(-/):directories:directory' '*(#q^-/):all-files:file'

これは、Zshの完成システムが最初の試みで指定された拡張子で終わるファイルのみを完成するように指示します(有効になっている場合は「Media Files」ヘッダーでgroup-name)。失敗した場合にのみディレクトリを提供します。この操作が失敗した場合にのみ、他の種類のファイルが提供されます。 ((#q^-/)ディレクトリではない(-/)ディレクトリにのみ一致します。)

しかし、それだけでは十分ではありません。提供された完成品mpv(これをインストールしましたか?)もURLを完成として提供しようとするからです。メディアファイルが利用可能なときにこれらのコンテンツが表示されないようにするには、次のように追加します。

zstyle ':completion:*:mpv:*' tag-order 'files'

つまりmpv、このコマンドの場合は、最初にファイル(上記のすべての項目を含むfile-patterns)を提供し、失敗した場合にのみ別のものを提供する必要があります。

関連情報