From c314a9ec76a7fa9885d61479d23863d1247776fe Mon Sep 17 00:00:00 2001 From: "Arnaud G. GIBERT" Date: Sun, 12 Apr 2026 17:40:53 +0200 Subject: [PATCH] - Migrate album_metadata_save, album_rename & album_renum, - Add album_metadata_save, album_rename & album_renum completion scripts. --- .gitignore | 2 + bin/album_metadata_save | 257 ++++++++++++---------- bin/album_rename | 180 ++++++++++++++- bin/album_renum | 167 ++++++++------ etc/bash_completion.d/album_convert | 66 +++++- etc/bash_completion.d/album_merge | 4 + etc/bash_completion.d/album_metadata_load | 8 +- etc/bash_completion.d/album_metadata_save | 48 ++++ etc/bash_completion.d/album_name_fix | 4 + etc/bash_completion.d/album_rename | 96 ++++++++ etc/bash_completion.d/album_renum | 107 +++++++++ usr/lib/rx3/music_tools.bash | 73 +++--- 12 files changed, 780 insertions(+), 232 deletions(-) create mode 100644 .gitignore create mode 100644 etc/bash_completion.d/album_metadata_save create mode 100644 etc/bash_completion.d/album_rename create mode 100644 etc/bash_completion.d/album_renum diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..556bc65 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*~ +*.old diff --git a/bin/album_metadata_save b/bin/album_metadata_save index 292a7b4..c4e4389 100755 --- a/bin/album_metadata_save +++ b/bin/album_metadata_save @@ -1,104 +1,135 @@ #!/bin/bash +#----------------------------------------------------------------------------------------------------------------------------------- +# +# Album MetaData Save +# +# Copyright (C) 2016-2026 Arnaud G. GIBERT +# mailto:arnaud@rx3.net +# +# This is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; If not, see +# . +# +#----------------------------------------------------------------------------------------------------------------------------------- + + +#----------------------------------------------------------------------------------------------------------------------------------- # Includes #----------------------------------------------------------------------------------------------------------------------------------- -. /usr/global/lib/music.bash +: "${RX3_LIB_DIR:=/usr/lib/rx3}" +. "${RX3_LIB_DIR}/music_tools.bash" -# System Constants +#----------------------------------------------------------------------------------------------------------------------------------- +# Global Variables #----------------------------------------------------------------------------------------------------------------------------------- - AMS_NAME="album_metadata_save" -AMS_VERSION="$Name: album_metadata_save-1_0_0-1 $" +declare -g VERSION="1.0.0" +declare -g NAME="album_metadata_save" +declare -g HELP="usage: [-h | --help] | [-V | --version] | [-T | --test] [-v | --verbose] [-f | --factoring] [-s | --standardising] " + +declare -g FACTORING="FALSE" +declare -g STANDARDISING="FALSE" +declare -g SOURCE_DIR="" +declare -g METADATA_FILE="" + +declare -g MODE="DEFAULT" +declare -g VERBOSE="FALSE" +declare -g DRY_RUN="FALSE" -# Print Version +#----------------------------------------------------------------------------------------------------------------------------------- +# Version Print #----------------------------------------------------------------------------------------------------------------------------------- -function version_print() +ams_version_print() { - echo ${AMS_VERSION} | sed -e 's/.*: //' -e 's/-/ /' -e 's/_/\./g' -e 's/\$$//' + version_print } -# Prin Help +#----------------------------------------------------------------------------------------------------------------------------------- +# Help Print #----------------------------------------------------------------------------------------------------------------------------------- -function help_print() +ams_help_print() { - echo "${AMS_NAME} [-h | --help] | [-V | --version] | [-T | --test] [-v | --verbose] [-f | --factoring] [-s | standardising] " + ams_version_print + help_print } +#----------------------------------------------------------------------------------------------------------------------------------- # Arg Parse #----------------------------------------------------------------------------------------------------------------------------------- -function args_parse() +ams_args_parse() { - mode="default" - verbose="false" - factoring="false" - standardising="false" - source_dir="" - metadata_file="" + tmp_args=$(getopt -o ThVvfs --long test,help,version,verbose,factoring,standardising -n "${NAME}" -- "$@") - tmp_args=$(getopt -o ThVvfs --long test,help,version,verbose,factoring,standardising -n "${AMS_NAME}" -- "$@") + if [ $? != 0 ]; then echo "Terminating..." >&2; exit 1; fi - if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi - - # Note the quotes around `$TEMP': they are essential! eval set -- "${tmp_args}" - while true ; do - case "$1" in - # Options + while true + do + case "$1" in + # Mode switches + -T|--test) MODE="TEST"; shift;; + -h|--help) MODE="EXIT"; ams_help_print; shift;; + -V|--version) MODE="EXIT"; ams_version_print; shift;; - # Mode switches - -T|--test) mode="test"; shift;; - -h|--help) mode="exit"; help_print; shift;; - -V|--version) mode="exit"; version_print; shift;; + # Global options + -v|--verbose) VERBOSE="TRUE"; shift;; + -f|--factoring) FACTORING="TRUE"; shift;; + -s|--standardising) STANDARDISING="TRUE"; shift;; - # Global options - -v|--verbose) verbose="true"; shift;; - -f|--factoring) factoring="true"; shift;; - -s|--standardising) standardising="true"; shift;; - - # - --) shift; break;; - *) echo "args_parse internal error [$1] !"; exit 1;; - esac + --) shift; break;; + *) echo_error "args_parse internal error [$1]!"; exit 1;; + esac done - if [[ "${mode}" != "exit" ]] + if [[ "${MODE}" != "EXIT" ]] then - if [[ "${#}" != "2" ]] - then - if [[ "${#}" -lt "2" ]] - then - echo "Not enough args!" - else - echo "Too many args!" - fi + if [[ "${#}" != "2" ]] + then + if [[ "${#}" -lt "2" ]] + then + echo_error "Not enough args!" + else + echo_error "Too many args!" + fi - mode="exit" - help_print - else - source_dir="$1" - metadata_file="$2" - fi + MODE="EXIT" + ams_help_print + else + SOURCE_DIR="$1" + METADATA_FILE="$2" + fi fi } @@ -106,88 +137,86 @@ function args_parse() +#----------------------------------------------------------------------------------------------------------------------------------- # Main #----------------------------------------------------------------------------------------------------------------------------------- -args_parse "$@" +ams_args_parse "$@" -if [[ ${mode} == "exit" ]] + + +if [[ "${MODE}" == "EXIT" ]] then exit 0 else - if [[ ${mode} == "test" ]] + if [[ "${MODE}" == "TEST" ]] then - dry_run=true - else - dry_run=false + DRY_RUN="TRUE" fi fi +echo_error "${NAME}: Mode: [${MODE}] Verbose: [${VERBOSE}] Factoring: [${FACTORING}] Standardising: [${STANDARDISING}] Source_Dir: [${SOURCE_DIR}] MetaData_File: [${METADATA_FILE}]" -echo "mode: [${mode}] verbose: [${verbose}] factoring: [${factoring}] standardising: [${standardising}] source_dir: [${source_dir}] metadata_file: [${metadata_file}]" 1>&2 +find "${SOURCE_DIR}" -maxdepth 1 -name '*.flac' -o -name '*.mp3' | sort | + ( + nb_track=0 -declare -g nb_track + mt_tagtab_alloc + while read track_file + do + nb_track=$((nb_track + 1)) + if [[ "${FACTORING}" == "TRUE" ]] + then + mt_tagtab_read "${nb_track}" "${track_file}" "FACTORING" + else + mt_tagtab_read "${nb_track}" "${track_file}" "NOFACTORING" + fi + done + + track_id=0 -find "${source_dir}" -maxdepth 1 -name '*.flac' -o -name '*.mp3' | sort | ( + while [[ "${track_id}" -le "${nb_track}" ]] + do + if [[ "${track_id}" == 0 ]] + then + echo "DEF" + else + echo "SOT" + fi - tagtab_alloc + if [[ "${STANDARDISING}" == "TRUE" ]] + then + mt_tagtab_dump "${track_id}" "STANDARD" + else + mt_tagtab_dump "${track_id}" "PASSTHROUGH" + fi - while read track_file - do - nb_track=$((${nb_track} + 1)) + echo "EOT" - if [[ "${factoring}" == "true" ]] + track_id=$((track_id + 1)) + done + + echo "EOA" + + echo 1>&2 "NB Track dumped: [${nb_track}]" + ) | + ( + if [[ "${DRY_RUN}" == "TRUE" ]] then - tagtab_read "${nb_track}" "${track_file}" "FACTORING" - else - tagtab_read "${nb_track}" "${track_file}" "NOFACTORING" - fi - done - - track_id=0 - - while [[ "${track_id}" -le "${nb_track}" ]] - do - if [[ "${track_id}" == 0 ]] - then - echo "DEF" - else - echo "SOT" - fi - - if [[ "${standardising}" == "true" ]] + cat + else + tee "${METADATA_FILE}" + fi + ) | + ( + if [[ "${VERBOSE}" == "TRUE" ]] then - tagtab_dump "${track_id}" "STANDARD" - else - tagtab_dump "${track_id}" "PASSTHROUGH" - fi - - echo "EOT" - - track_id=$((${track_id} + 1)) - done - - echo "EOA" - - echo 1>&2 "NB Track dumped: [${nb_track}]" -#) -#) >"${metadata_file}" -) | ( - if [[ "${dry_run}" == "true" ]] - then - cat - else - tee "${metadata_file}" - fi -) | ( - if [[ "${verbose}" == "true" ]] - then - cat - else - cat >/dev/null - fi -) + cat + else + cat >/dev/null + fi + ) diff --git a/bin/album_rename b/bin/album_rename index d16ea04..16cc1b2 100755 --- a/bin/album_rename +++ b/bin/album_rename @@ -1,21 +1,177 @@ #!/bin/bash +#----------------------------------------------------------------------------------------------------------------------------------- +# +# Album Rename +# +# Copyright (C) 2016-2026 Arnaud G. GIBERT +# mailto:arnaud@rx3.net +# +# This is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; If not, see +# . +# +#----------------------------------------------------------------------------------------------------------------------------------- -if [[ "$1" == "-h" ]] + + +#----------------------------------------------------------------------------------------------------------------------------------- +# Includes +#----------------------------------------------------------------------------------------------------------------------------------- + +: "${RX3_LIB_DIR:=/usr/lib/rx3}" +. "${RX3_LIB_DIR}/music_tools.bash" + + + + + +#----------------------------------------------------------------------------------------------------------------------------------- +# Global Variables +#----------------------------------------------------------------------------------------------------------------------------------- + +declare -g VERSION="1.0.0" +declare -g NAME="album_rename" +declare -g HELP="usage: [-h | --help] | [-V | --version] | [-T | --test] [-v | --verbose] " + +declare -g SOURCE_DIR="" +declare -g TARGET_DIR="" +declare -g ALBUM_NAME="" + +declare -g MODE="DEFAULT" +declare -g VERBOSE="FALSE" +declare -g DRY_RUN="FALSE" + + + + + +#----------------------------------------------------------------------------------------------------------------------------------- +# Version Print +#----------------------------------------------------------------------------------------------------------------------------------- + +ar_version_print() +{ + version_print +} + + + + + +#----------------------------------------------------------------------------------------------------------------------------------- +# Help Print +#----------------------------------------------------------------------------------------------------------------------------------- + +ar_help_print() +{ + ar_version_print + help_print +} + + + + + +#----------------------------------------------------------------------------------------------------------------------------------- +# Arg Parse +#----------------------------------------------------------------------------------------------------------------------------------- + +ar_args_parse() +{ + tmp_args=$(getopt -o ThVv --long test,help,version,verbose -n "${NAME}" -- "$@") + + if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi + + # Note the quotes around `$TEMP': they are essential! + eval set -- "${tmp_args}" + + while true + do + case "$1" in + # Options + + # Mode switches + -T|--test) MODE="TEST"; shift;; + -h|--help) MODE="EXIT"; ar_help_print; shift;; + -V|--version) MODE="EXIT"; ar_version_print; shift;; + + # Global options + -v|--verbose) VERBOSE="TRUE"; shift;; + + # End of options + --) shift; break;; + *) echo "args_parse internal error [$1] !"; exit 1;; + esac + done + + if [[ "${MODE}" != "EXIT" ]] + then + if [[ "${#}" != "3" ]] + then + if [[ "${#}" -lt "3" ]] + then + echo_error "Not enough args!" + else + echo_error "Too many args!" + fi + + MODE="EXIT" + ar_help_print + else + SOURCE_DIR="$1" + TARGET_DIR="$2" + ALBUM_NAME="$3" + fi + fi +} + + + + + +#----------------------------------------------------------------------------------------------------------------------------------- +# Main +#----------------------------------------------------------------------------------------------------------------------------------- + +ar_args_parse "$@" + + + +if [[ "${MODE}" == "EXIT" ]] then - echo "album_rename [-h] | " - exit + exit 0 +else + if [[ "${MODE}" == "TEST" ]] + then + DRY_RUN="TRUE" + fi fi -source_dir="$1" -target_dir="$2" -album_name="$3" -for file in ${source_dir}/*.flac + +echo_error "${NAME}: Mode: [${MODE}] Verbose: [${VERBOSE}] Source_Dir: [${SOURCE_DIR}] Target_Dir: [${TARGET_DIR}] Album_Name: [${ALBUM_NAME}]" + +if [[ ! -d "${TARGET_DIR}" ]] +then + echo_error "Target directory doesn't exist!" + exit -1 +fi + +for file in "${SOURCE_DIR}"/*@(.flac|.mp3) do - target_file="${target_dir}/$(basename $file)" + target_file="${TARGET_DIR}/$(basename "${file}")" - cp "${file}" "${target_file}" - metaflac --remove-tag=ALBUM --set-tag="ALBUM=${album_name}" "${target_file}" - - i=$(($i+1)) + cmd_exec cp "${file}" "${target_file}" + mt_tag_delete "${target_file}" "ALBUM" + mt_tag_write "${target_file}" "ALBUM" "${ALBUM_NAME}" done diff --git a/bin/album_renum b/bin/album_renum index da88c70..b6521eb 100755 --- a/bin/album_renum +++ b/bin/album_renum @@ -1,146 +1,183 @@ #!/bin/bash +#----------------------------------------------------------------------------------------------------------------------------------- +# +# Album Renum +# +# Copyright (C) 2016-2026 Arnaud G. GIBERT +# mailto:arnaud@rx3.net +# +# This is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; If not, see +# . +# +#----------------------------------------------------------------------------------------------------------------------------------- + + +#----------------------------------------------------------------------------------------------------------------------------------- # Includes #----------------------------------------------------------------------------------------------------------------------------------- -. /usr/global/lib/music.bash +: "${RX3_LIB_DIR:=/usr/lib/rx3}" +. "${RX3_LIB_DIR}/music_tools.bash" - -# System Constants +#----------------------------------------------------------------------------------------------------------------------------------- +# Global Variables #----------------------------------------------------------------------------------------------------------------------------------- - AR_NAME="album_renum" -AR_VERSION="$Name: album_renum-1_0_0-1 $" +declare -g VERSION="1.0.0" +declare -g NAME="album_renum" +declare -g HELP="usage: [-h | --help] | [-V | --version] | [-T | --test] [-v | --verbose] [-f | --first_number ] [-d | --number_of_digit ] " + +declare -g SOURCE_DIR="" +declare -g TARGET_DIR="" + +declare -g FIRST_NUMBER="1" +declare -g NUMBER_OF_DIGIT="2" + +declare -g MODE="DEFAULT" +declare -g VERBOSE="FALSE" +declare -g DRY_RUN="FALSE" - -# Print Version +#----------------------------------------------------------------------------------------------------------------------------------- +# Version Print #----------------------------------------------------------------------------------------------------------------------------------- -function version_print() +ar_version_print() { - echo ${AR_VERSION} | sed -e 's/.*: //' -e 's/-/ /' -e 's/_/\./g' -e 's/\$$//' + version_print } - -# Prin Help +#----------------------------------------------------------------------------------------------------------------------------------- +# Help Print #----------------------------------------------------------------------------------------------------------------------------------- -function help_print() +ar_help_print() { - echo "${AR_NAME} [-h | --help] | [-V | --version] | [-T | --test] [-v | --verbose] [ -f | --first_number ] [ -d | --number_of_digit ] " + ar_version_print + help_print } - +#----------------------------------------------------------------------------------------------------------------------------------- # Arg Parse #----------------------------------------------------------------------------------------------------------------------------------- -function args_parse() +ar_args_parse() { - mode="default" - verbose="false" - source_dir="" - target_dir="" - first_number="1" - number_of_digit="2" - - tmp_args=$(getopt -o f:d:ThVv --long first_number:,number_of_digit:,test,help,version,verbose -n "${AR_NAME}" -- "$@") + tmp_args=$(getopt -o f:d:ThVv --long first_number:,number_of_digit:,test,help,version,verbose -n "${NAME}" -- "$@") if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi # Note the quotes around `$TEMP': they are essential! eval set -- "${tmp_args}" - while true ; do + while true + do case "$1" in # Options - -f|--first_number) shift; first_number="$1"; shift;; - -d|--number_of_digit) shift; number_of_digit="$1"; shift;; + -f|--first_number) shift; FIRST_NUMBER="$1"; shift;; + -d|--number_of_digit) shift; NUMBER_OF_DIGIT="$1"; shift;; # Mode switches - -T|--test) mode="test"; shift;; - -h|--help) mode="exit"; help_print; shift;; - -V|--version) mode="exit"; version_print; shift;; + -T|--test) MODE="TEST"; shift;; + -h|--help) MODE="EXIT"; ar_help_print; shift;; + -V|--version) MODE="EXIT"; ar_version_print; shift;; # Global options - -v|--verbose) verbose="true"; shift;; + -v|--verbose) VERBOSE="TRUE"; shift;; - # - --) shift; break;; - *) echo "args_parse internal error [$1] !"; exit 1;; + # End of options + --) shift; break;; + *) echo "args_parse internal error [$1] !"; exit 1;; esac done - if [[ "${#}" != "2" ]] + if [[ "${MODE}" != "EXIT" ]] then - if [[ "${#}" -lt "2" ]] + if [[ "${#}" != "2" ]] then - echo "Not enough args!" - else - echo "Too many args!" - fi + if [[ "${#}" -lt "2" ]] + then + echo_error "Not enough args!" + else + echo_error "Too many args!" + fi - mode="exit" - help_print - else - source_dir="$1" - target_dir="$2" + MODE="EXIT" + ar_help_print + else + SOURCE_DIR="$1" + TARGET_DIR="$2" + fi fi } - +#----------------------------------------------------------------------------------------------------------------------------------- # Main #----------------------------------------------------------------------------------------------------------------------------------- -shopt -s extglob +ar_args_parse "$@" -args_parse "$@" -if [[ ${mode} == "exit" ]] + +if [[ "${MODE}" == "EXIT" ]] then exit 0 else - if [[ ${mode} == "test" ]] + if [[ "${MODE}" == "TEST" ]] then - dry_run=true - else - dry_run=flase + DRY_RUN="TRUE" fi fi -echo "mode: [${mode}] verbose: [${verbose}] source_dir: [${source_dir}] target_dir: [${target_dir}] first_number: [${first_number}] number_of_digit: [${number_of_digit}]" 1>&2 +echo_error "${NAME}: Mode: [${MODE}] Verbose: [${VERBOSE}] Source_Dir: [${SOURCE_DIR}] Target_Dir: [${TARGET_DIR}] First_Number: [${FIRST_NUMBER}] Number_Of_Digit: [${NUMBER_OF_DIGIT}]" -i="${first_number}" +if [[ ! -d "${TARGET_DIR}" ]] +then + echo_error "Target directory doesn't exist !" + exit -1 +fi -for file in "${source_dir}"/*@(.flac|.mp3) +i="${FIRST_NUMBER}" + +for file in "${SOURCE_DIR}"/*@(.flac|.mp3) do + j=$(printf "%0${NUMBER_OF_DIGIT}d" "${i}") + target_file="${TARGET_DIR}/$(basename "${file}" | sed -e "s/^[0-9]*-/$j-/")" - j=$(printf "%0${number_of_digit}d" $i) - target_file="${target_dir}/$(echo $(basename ${file}) | sed -e "s/^[0-9]*-/$j-/")"; + cmd_exec cp "${file}" "${target_file}" - cmd="cp \"${file}\" \"${target_file}\"" - exec_cmd "${cmd}" + mt_tag_delete "${target_file}" "TRACKNUMBER" + mt_tag_delete "${target_file}" "DISCNUMBER" + mt_tag_delete "${target_file}" "DISCTOTAL" + mt_tag_write "${target_file}" "TRACKNUMBER" "${j}" - tag_delete "${target_file}" "TRACKNUMBER" - tag_delete "${target_file}" "DISCNUMBER" - tag_delete "${target_file}" "DISCTOTAL" - tag_write "${target_file}" "TRACKNUMBER" "$j" - - i=$(($i+1)) + i=$((i+1)) done diff --git a/etc/bash_completion.d/album_convert b/etc/bash_completion.d/album_convert index 60e6b14..61b2e98 100644 --- a/etc/bash_completion.d/album_convert +++ b/etc/bash_completion.d/album_convert @@ -25,25 +25,67 @@ +#----------------------------------------------------------------------------------------------------------------------------------- +# Album Convert Completion +#----------------------------------------------------------------------------------------------------------------------------------- + _album_convert_completion() { - local cur prev opts - COMPREPLY=() - cur="${COMP_WORDS[COMP_CWORD]}" - prev="${COMP_WORDS[COMP_CWORD-1]}" - opts="-h --help -V --version -T --test -v --verbose -r --resample -d --downsampled_tag" + local cur="${COMP_WORDS[COMP_CWORD]}" + local prev="${COMP_WORDS[COMP_CWORD-1]}" + local opts="-h --help -V --version -T --test -v --verbose -r --resample -d --downsampled_tag" - if [[ ${cur} == -* ]] ; then - COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) + local pos=0 + local i + + COMPREPLY=() + + # Complete options if current word starts with '-' + if [[ "${cur}" == -* ]] + then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) return 0 fi - # Handle directory completion for source_dir and target_dir - if [[ ${COMP_CWORD} -eq 1 ]] || [[ ${prev} != -* && ${COMP_CWORD} -eq 2 ]]; then - COMPREPLY=( $(compgen -d -- "${cur}") ) - fi + # Count non-option positional arguments already provided + for (( i=1; i. +# +#----------------------------------------------------------------------------------------------------------------------------------- +# -*- mode: shell; sh-basic-offset: 4; indent-tabs-mode: nil; -*- + + + +#----------------------------------------------------------------------------------------------------------------------------------- +# Album MetaData Save Completion +#----------------------------------------------------------------------------------------------------------------------------------- + +_album_metadata_save_completion() +{ + local cur prev opts + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD-1]}" + opts="-h --help -V --version -T --test -v --verbose -f --factoring -s --standardising" + + if [[ ${cur} == -* ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) + return 0 + fi +} + + + +complete -F _album_metadata_save_completion album_metadata_save diff --git a/etc/bash_completion.d/album_name_fix b/etc/bash_completion.d/album_name_fix index 9b64361..062ff99 100644 --- a/etc/bash_completion.d/album_name_fix +++ b/etc/bash_completion.d/album_name_fix @@ -25,6 +25,10 @@ +#----------------------------------------------------------------------------------------------------------------------------------- +# Album Name Fix Completion +#----------------------------------------------------------------------------------------------------------------------------------- + _album_name_fix_completion() { local cur prev opts COMPREPLY=() diff --git a/etc/bash_completion.d/album_rename b/etc/bash_completion.d/album_rename new file mode 100644 index 0000000..bce7966 --- /dev/null +++ b/etc/bash_completion.d/album_rename @@ -0,0 +1,96 @@ +#!/bin/bash +#----------------------------------------------------------------------------------------------------------------------------------- +# +# Album Rename Bash Completion +# +# Copyright (C) 2016-2026 Arnaud G. GIBERT +# mailto:arnaud@rx3.net +# +# This is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; If not, see +# . +# +#----------------------------------------------------------------------------------------------------------------------------------- +# -*- mode: shell; sh-basic-offset: 4; indent-tabs-mode: nil; -*- + + + +#----------------------------------------------------------------------------------------------------------------------------------- +# Album Rename Completion +#----------------------------------------------------------------------------------------------------------------------------------- + +_album_renam_completion() +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + local prev="${COMP_WORDS[COMP_CWORD-1]}" + local opts="-T --test -h --help -V --version -v --verbose" + + local pos=0 + local i + + COMPREPLY=() + + # Count non-option positional arguments already provided + for (( i=1; i. +# +#----------------------------------------------------------------------------------------------------------------------------------- + + + +#----------------------------------------------------------------------------------------------------------------------------------- +# Album Renum Completion +#----------------------------------------------------------------------------------------------------------------------------------- + +_album_renum_completion() +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + local prev="${COMP_WORDS[COMP_CWORD-1]}" + local opts="-h --help -V --version -T --test -v --verbose -f --first_number -d --number_of_digit" + + local pos=0 + local i + + COMPREPLY=() + + # Handle argument of options that take a value + case "${prev}" in + -f|--first_number) + COMPREPLY=() + return 0 + ;; + + -d|--number_of_digit) + COMPREPLY=() + return 0 + ;; + esac + + # Complete options if current word starts with '-' + if [[ "${cur}" == -* ]] + then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + + # Count non-option positional arguments already provided + for (( i=1; i