aboutsummaryrefslogtreecommitdiff
path: root/transcode.sh.bash-completion
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--transcode.sh.bash-completion297
1 files changed, 155 insertions, 142 deletions
diff --git a/transcode.sh.bash-completion b/transcode.sh.bash-completion
index 9fc4701..1cae90e 100644
--- a/transcode.sh.bash-completion
+++ b/transcode.sh.bash-completion
@@ -14,155 +14,168 @@
# long equals --encode-file=list.txt
_transcode_sh() {
- local cur prev words cword
- _init_completion || return
+ local cur prev words cword
+ _init_completion || return
- local -r preset_dir="${XDG_CONFIG_HOME:-$HOME/.config}/transcode.sh/presets"
+ local -r preset_dir="${XDG_CONFIG_HOME:-$HOME/.config}/transcode.sh/presets"
- # ---------------------------------------------------------------------------
- # Helper: collect preset names from the preset directory
- # ---------------------------------------------------------------------------
- _transcode_presets() {
- local presets=()
- if [[ -d "$preset_dir" ]]; then
- local f
- while IFS= read -r f; do
- f="${f##*/}" # basename
- f="${f%.sh}" # strip .sh extension
- presets+=("$f")
- done < <(find "$preset_dir" -maxdepth 1 -name '*.sh' -type f 2>/dev/null)
- fi
- printf '%s\n' "${presets[@]}"
- }
+ # ---------------------------------------------------------------------------
+ # Helper: collect preset names from the preset directory
+ # ---------------------------------------------------------------------------
+ _transcode_presets() {
+ local presets=()
+ if [[ -d "$preset_dir" ]]; then
+ local f
+ while IFS= read -r f; do
+ f="${f##*/}" # basename
+ f="${f%.sh}" # strip .sh extension
+ presets+=("$f")
+ done < <(find "$preset_dir" -maxdepth 1 -name '*.sh' -type f 2>/dev/null)
+ fi
+ printf '%s\n' "${presets[@]}"
+ }
- local codecs='h264 hevc av1 vp8 vp9 mpeg2video mpeg4 mjpeg theora'
- local nice_vals='0 5 10 15 19'
+ local codecs='h264 hevc av1 vp8 vp9 mpeg2video mpeg4 mjpeg theora'
+ local nice_vals='0 5 10 15 19'
+ local hwaccel_methods='auto cuda vaapi dxva2 d3d11va videotoolbox qsv'
- # ---------------------------------------------------------------------------
- # Handle --option=VALUE: cur contains the entire "--opt=val" token.
- # Strip the "opt=" prefix and delegate to the appropriate completer.
- # This must be checked before the $prev dispatch below.
- # ---------------------------------------------------------------------------
- case "$cur" in
- --config-file=*)
- cur="${cur#*=}"
- _filedir
- return
- ;;
- --encode-file=*)
- cur="${cur#*=}"
- _filedir
- return
- ;;
- --saving-file=*)
- cur="${cur#*=}"
- _filedir
- return
- ;;
- --nice=*)
- cur="${cur#*=}"
- COMPREPLY=( $(compgen -W "$nice_vals" -- "$cur") )
- return
- ;;
- --skip-codec=*)
- cur="${cur#*=}"
- COMPREPLY=( $(compgen -W "$codecs" -- "$cur") )
- return
- ;;
- --preset=*)
- cur="${cur#*=}"
- COMPREPLY=( $(compgen -W "$(_transcode_presets)" -- "$cur") )
- return
- ;;
- esac
+ # ---------------------------------------------------------------------------
+ # Handle --option=VALUE: cur contains the entire "--opt=val" token.
+ # Strip the "opt=" prefix and delegate to the appropriate completer.
+ # This must be checked before the $prev dispatch below.
+ # ---------------------------------------------------------------------------
+ case "$cur" in
+ --config-file=*)
+ cur="${cur#*=}"
+ _filedir
+ return
+ ;;
+ --encode-file=*)
+ cur="${cur#*=}"
+ _filedir
+ return
+ ;;
+ --saving-file=*)
+ cur="${cur#*=}"
+ _filedir
+ return
+ ;;
+ --nice=*)
+ cur="${cur#*=}"
+ COMPREPLY=($(compgen -W "$nice_vals" -- "$cur"))
+ return
+ ;;
+ --skip-codec=*)
+ cur="${cur#*=}"
+ COMPREPLY=($(compgen -W "$codecs" -- "$cur"))
+ return
+ ;;
+ --preset=*)
+ cur="${cur#*=}"
+ COMPREPLY=($(compgen -W "$(_transcode_presets)" -- "$cur"))
+ return
+ ;;
+ --hwaccel=*)
+ cur="${cur#*=}"
+ COMPREPLY=($(compgen -W "$hwaccel_methods" -- "$cur"))
+ return
+ ;;
+ esac
- # ---------------------------------------------------------------------------
- # Handle VALUE after short form (-f, -N, -S, -p) and
- # long space form (--encode-file, --nice, --saving-file, --skip-codec, --preset).
- # $prev is the option word, $cur is the value being typed.
- # ---------------------------------------------------------------------------
- case "$prev" in
- --config-file)
- _filedir
- return
- ;;
- -f|--encode-file)
- _filedir
- return
- ;;
- -N|--nice)
- COMPREPLY=( $(compgen -W "$nice_vals" -- "$cur") )
- return
- ;;
- --saving-file)
- _filedir
- return
- ;;
- -S|--skip-codec)
- COMPREPLY=( $(compgen -W "$codecs" -- "$cur") )
- return
- ;;
- -p|--preset)
- COMPREPLY=( $(compgen -W "$(_transcode_presets)" -- "$cur") )
- return
- ;;
- esac
+ # ---------------------------------------------------------------------------
+ # Handle VALUE after short form (-f, -N, -S, -p) and
+ # long space form (--encode-file, --nice, --saving-file, --skip-codec, --preset).
+ # $prev is the option word, $cur is the value being typed.
+ # ---------------------------------------------------------------------------
+ case "$prev" in
+ --config-file)
+ _filedir
+ return
+ ;;
+ -f | --encode-file)
+ _filedir
+ return
+ ;;
+ -N | --nice)
+ COMPREPLY=($(compgen -W "$nice_vals" -- "$cur"))
+ return
+ ;;
+ --saving-file)
+ _filedir
+ return
+ ;;
+ -S | --skip-codec)
+ COMPREPLY=($(compgen -W "$codecs" -- "$cur"))
+ return
+ ;;
+ -p | --preset)
+ COMPREPLY=($(compgen -W "$(_transcode_presets)" -- "$cur"))
+ return
+ ;;
+ --hwaccel)
+ COMPREPLY=($(compgen -W "$hwaccel_methods" -- "$cur"))
+ return
+ ;;
+ esac
- # ---------------------------------------------------------------------------
- # Complete option names themselves.
- # For options that accept an argument we list both the bare long form
- # (--nice) and the equals form (--nice=) so the user can choose their
- # preferred style. compopt -o nospace is applied when the sole match
- # ends with '=' to avoid an unwanted trailing space in that case.
- # ---------------------------------------------------------------------------
- case "$cur" in
- --*)
- local longopts='
- --continue
- --no-continue
- --verify-output
- --no-verify-output
- --config-file
- --config-file=
- --encode-file
- --encode-file=
- --dry-run
- --nice
- --nice=
- --saving
- --no-saving
- --saving-file
- --saving-file=
- --skip-codec
- --skip-codec=
- --only-if-smaller
- --no-only-if-smaller
- --preset
- --preset=
- --help
- --quiet
- --verbose
- --version
- --color
- --no-color
- '
- COMPREPLY=( $(compgen -W "$longopts" -- "$cur") )
- # Suppress the trailing space when the only completion ends with '='
- [[ ${#COMPREPLY[@]} -eq 1 && "${COMPREPLY[0]}" == *= ]] \
- && compopt -o nospace
- return
- ;;
- -*)
- local shortopts='-c -f -n -N -s -S -l -p -h -? -q -v --'
- COMPREPLY=( $(compgen -W "$shortopts" -- "$cur") )
- return
- ;;
- esac
+ # ---------------------------------------------------------------------------
+ # Complete option names themselves.
+ # For options that accept an argument we list both the bare long form
+ # (--nice) and the equals form (--nice=) so the user can choose their
+ # preferred style. compopt -o nospace is applied when the sole match
+ # ends with '=' to avoid an unwanted trailing space in that case.
+ # ---------------------------------------------------------------------------
+ case "$cur" in
+ --*)
+ local longopts='
+ --color
+ --config-file
+ --config-file=
+ --continue
+ --dry-run
+ --encode-file
+ --encode-file=
+ --help
+ --hwaccel
+ --hwaccel=
+ --nice
+ --nice=
+ --no-color
+ --no-continue
+ --no-hwaccel
+ --no-only-if-smaller
+ --no-saving
+ --no-verify-output
+ --only-if-smaller
+ --preset
+ --preset=
+ --quiet
+ --saving
+ --saving-file
+ --saving-file=
+ --skip-codec
+ --skip-codec=
+ --verbose
+ --verify-output
+ --version
+ '
+ COMPREPLY=($(compgen -W "$longopts" -- "$cur"))
+ # Suppress the trailing space when the only completion ends with '='
+ [[ ${#COMPREPLY[@]} -eq 1 && "${COMPREPLY[0]}" == *= ]] &&
+ compopt -o nospace
+ return
+ ;;
+ -*)
+ local shortopts='-c -f -n -N -s -S -l -p -h -? -q -v --'
+ COMPREPLY=($(compgen -W "$shortopts" -- "$cur"))
+ return
+ ;;
+ esac
- # ---------------------------------------------------------------------------
- # Default: complete positional FILE arguments with common media extensions
- # ---------------------------------------------------------------------------
- _filedir '@(mkv|mp4|mov|avi|webm|flv|wmv|m4v|ts|mts|m2ts|mpg|mpeg|ogv|3gp|rm|rmvb)'
+ # ---------------------------------------------------------------------------
+ # Default: complete positional FILE arguments with common media extensions
+ # ---------------------------------------------------------------------------
+ _filedir '@(mkv|mp4|mov|avi|webm|flv|wmv|m4v|ts|mts|m2ts|mpg|mpeg|ogv|3gp|rm|rmvb)'
}
complete -F _transcode_sh transcode.sh