私はzshのカスタムレース関数を書いています。現在、次のコードがあります
_arguments \
...
'(-G --glitchpct)'{-G+,--glitchpct=}'[Controls how often the characters on screen glitch]'
私は現在または-G VALUE
両方をglitchpct=VALUE
許可--glitchpct VALUE
することを指定します(同じグループに属しているため、相互に排他的です)。
パラメータ値が1つではなく2つが必要な場合はどうすればよいですか?つまり、-G VALUE1 VALUE2
またはがあると予想します--glitchpct=VALUE1,VALUE2
。これをどのように指定しますか?また、3つの同じパラメータがある場合の違いは何ですか?
また、各パラメータのカスタムメッセージを表示できますか?VALUE1
表示する必要が'float from 0 to 50'
あり、画面にVALUE2
表示する必要があると言います。組み込みでこれを行うこと'float from 100 to 150'
ができると思いますが、どのように機能させるかはわかりません。_message
次のように状態を指定してみました。 (まだ2つの値の使用方法を理解していないため、これは1つの値でのみ機能します。)
_arguments \
...
'(-G --glitchpct)'{-G+,--glitchpct=}'[Controls how often the characters on screen glitch]:float:->display_float'
...
case "$state" in
(display_float)
_message "sample message"
;;
esac
しかし、これは何も示していません。次の形式も機能しません。
'(-G --glitchpct)'{-G+,--glitchpct=}'[Controls how often the characters on screen glitch]:float:_message "sample message"
答え1
パラメータ配列を含む例にリンクすることを望み、上記の説明を提供します。以下は、リンクから直接コピーした例です。
_arguments '-m[music file]:filename:->files' '-f[flags]:flag:->flags'
case "$state" in
files)
local -a music_files
music_files=( Music/**/*.{mp3,wav,flac,ogg} )
_multi_parts / music_files
;;
flags)
_values -s , 'flags' a b c d e
;;
esac
上記の例はHowtoから取得され、パラメータを配列に渡す方法を示しています。この例を分析すると、次のようになります。
- その声明は
-m
次のようになります-ma
。a
すべての音楽ファイルのリストが含まれ、ファイル名は必要ありません。 - この
flags
セクションは具体化されていませんが、次の可能な値-f
で初期化できます。-fs
-fa
-fe
コード関連:上記のコードに似た次の形式を考えてみましょう。
_arguments '-G[glitchpercentage]:gpercent:->percents' '-f[flags]:flag:->flags'
case "$state" in
percents)
local -a percents
glitchpercentage=\\do something to set to 100%
_message "Some message for all option"
local -h percents
glitchpercentage=//do something to set to 50%
_message "Some message for half option"
;;
flags)
// Add these to control the program, i.e. use these options
// if they dont control something in the percents array.
_values -s , 'flags' a b c d e
;;
esac
上記はテストされていませんので、疑似コードと見なしてください。上記のように配列を使用しようとしていると思います。