bash-completion
ロードがunrar x
完了したら、Tabキーを押してRARアーカイブのディレクトリに移動します。
ただし、新しい命名規則を使用するマルチパートアーカイブの場合、たとえば
ファイル名.part01.rar
ファイル名.part02.rar
ファイル名.part03.rar
で終わる最初のアーカイブまたは他のすべての部分(たとえば、直接開かれていない部分)との違いを確認せずに.part1.rar
完了します.part01.rar
。.part001.rar
.part02.rar
みんな。
bash-completionを設定して次のように設定できますか?最初の部分マルチパートRARアーカイブは完了しましたか?これは、ファイルが□の前にゼロのある1より大きい数字(たとえば、2、02、または002)で終わるが、.rar
?で終わらないことを意味します。.part□.rar
次は私のために働いた。この言葉が100%合っているかはわかりません。
# unrar(1) completion -*- shell-script -*-
_unrar()
{
local cur prev words cword cmp_opts=1 i
_init_completion || return
# Check if all of the middle part are options.
# If not, we break at the last-option idx, and won't complete opts.
for ((i=1; i<${#words[@]}-1; i++)); do
# not using the whole list for checking -- too verbose
if [[ ${words[i]} != -* || ${words[i]} == '--' ]]; then
cmp_opts=0
break
fi
done
if [[ $cur == -* ]] && ((cmp_opts)); then # options
COMPREPLY=( $( compgen -W '-ad -ap -av- -c- -cfg- -cl -cu -dh -ep -f
-idp -ierr -inul -kb -o+ -o- -ow -p -p- -r -ta -tb -tn -to -u -v
-ver -vp -x -x@ -y' -- "$cur" ) )
elif ((cword == 1)); then # command
COMPREPLY=( $( compgen -W 'e l lb lt p t v vb vt x' -- "$cur" ) )
elif ((cword == i+1)); then # archive
_filedir '[rR][aA][rR]'
# If there is a second, third, ... ninth part
for i in "${COMPREPLY[@]}"; do
if [[ $i == *.part*(0)[2-9].[rR][aA][rR] ]]; then
# Only look for the first, since it's the only useful one
COMPREPLY=()
_filedir 'part*(0)1.[rR][aA][rR]'
break
fi
done
else # files.../path...
_filedir
fi
} &&
complete -F _unrar unrar
# ex: ts=4 sw=4 et filetype=sh
ベストアンサー1
見ているhttps://github.com/scop/bash-completion/pull/12/filesこのフィルタリングを実行する方法を学びます。
COMPREPLY[]
デフォルトでは、誤った補完を取り除くには、いかなる方法でも後処理が必要です。ラッパーを追加することもできます。
_mycomp_unrar(){
local i
_unrar "${[@]}" # use the old one
# now copy the for i in "${COMPREPLY[]}" stuff
} &&
complete -p rar # remove old completion
complete -F _mycomp_unrar # use your good new one
または(上記のように)プルリクエストを送信し、何が起こっているのかを確認できます。
提出物が追加されました。https://github.com/Arthur2e5/bash-completion-1/commit/a586ede一般ファイルが表示されない部分の問題を修正しました。 (全体グローブは…読むことができません。)
if ((cmp_parts))
このセクションもコピーする必要があります。また、cmp_parts
ローカライズもしてみてください。