_id3v2: initial commit
This commit is contained in:
parent
513546f59f
commit
6c0e222b0c
|
@ -0,0 +1,113 @@
|
|||
#compdef id3v2
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Description
|
||||
# -----------
|
||||
#
|
||||
# Completion script for id3v2, based on v0.1.12
|
||||
#
|
||||
# Last updated: 05.04.2013
|
||||
#
|
||||
# ------------------------------------------------------------------------------
|
||||
# Authors
|
||||
# -------
|
||||
#
|
||||
# * Valodim ( https://github.com/Valodim )
|
||||
#
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
_id3v2_genre () {
|
||||
|
||||
setopt localoptions extendedglob
|
||||
|
||||
local -A _id3v2_genres
|
||||
# got them cached?
|
||||
if _cache_invalid id3v2-genres || ! _retrieve_cache id3v2-genres ; then
|
||||
|
||||
# generate from id3 -L otherwise
|
||||
local tmp
|
||||
for line in ${${${(f)"$(_call_program id3v2genres id3v2 -L)"}## #}}; do
|
||||
tmp=( ${(s,: ,)line} )
|
||||
_id3v2_genres[${tmp[1]}]=$tmp[2]
|
||||
# alternate display string, which I decided against in the end
|
||||
# to preserve reasonable alphabetic sorting
|
||||
# "${(l:3:: :)${tmp[1]}}: ${tmp[2]}"
|
||||
done
|
||||
|
||||
# store if we got any
|
||||
(( $#_id3v2_genres > 0 )) && _store_cache id3v2-genres _id3v2_genres
|
||||
fi
|
||||
|
||||
# bail if we don't
|
||||
(( $#_id3v2_genres > 0 )) || { _message "could not fetch genres"; return }
|
||||
|
||||
_wanted id3v2genres expl 'Genres' \
|
||||
compadd -d _id3v2_genres -k _id3v2_genres && return 0
|
||||
|
||||
}
|
||||
|
||||
# this function assumes _id3v2_frames is defined!
|
||||
_id3v2_frame () {
|
||||
|
||||
(( $#_id3v2_frames > 0 )) || { _message "could not fetch genres"; return }
|
||||
local -a framenames
|
||||
framenames=( ${_id3v2_frames#--} )
|
||||
_describe -t framenames 'id3v2 frames' framenames
|
||||
|
||||
}
|
||||
|
||||
_id3v2 () {
|
||||
|
||||
setopt localoptions extendedglob
|
||||
|
||||
# previous word was a frame name? this is an argument, then.
|
||||
if [[ $words[$CURRENT-1] == --[A-Z](#c4) ]]; then
|
||||
_message 'frame value'
|
||||
return 0
|
||||
fi
|
||||
|
||||
# load frame names
|
||||
local -a _id3v2_frames
|
||||
if _cache_invalid id3v2-frames || ! _retrieve_cache id3v2-frames ; then
|
||||
_id3v2_frames=( ${${${(f)"$(_call_program id3v2frames id3v2 -f)"}## #}/ /:} )
|
||||
(( $#_id3v2_frames > 0 )) && _store_cache id3v2-frames _id3v2_frames
|
||||
fi
|
||||
|
||||
local ret=1
|
||||
|
||||
# if we already have a -- prefix, show all those frames
|
||||
if [[ -prefix -- ]] && (( $#_id3v2_frames > 0 )); then
|
||||
_describe -t frames 'id3v2 frames' _id3v2_frames && ret=0
|
||||
fi
|
||||
|
||||
# regular arguments either way
|
||||
_arguments \
|
||||
- tagging \
|
||||
'(-s --delete-v1 -d --delete-v2)'{-s,--delete-v1}'[deletes id3v1 tags]' \
|
||||
'(-s --delete-v1 -d --delete-v2)'{-d,--delete-v2}'[deletes id3v2 tags]' \
|
||||
'(-C --convert)'{-C,--convert}'[converts id3v1 tag to id3v2]' \
|
||||
'(-1 --id3v1-only -2 --id3v2-only)'{-1,--id3v1-only}'[write only id3v1 tag]' \
|
||||
'(-1 --id3v1-only -2 --id3v2-only)'{-2,--id3v2-only}'[write only id3v2 tag]' \
|
||||
'(-r --remove-frame)'{-r,--remove-frame}'[removes specified id3v2 frame]:frame id:_id3v2_frame' \
|
||||
'(-a --artist)'{-a,--artist}'[set artist]:artist' \
|
||||
'(-A --album)'{-A,--album}'[set album title]:album' \
|
||||
'(-t --song)'{-t,--song}'[set song title]:song title' \
|
||||
'(-c --comment)'{-c,--comment}'[set comment field]' \
|
||||
'(-g --genre)'{-g,--genre}'[set the genre number]:genre:_id3v2_genre' \
|
||||
'(-y --year)'{-y,--year}'[set the year]:year' \
|
||||
'(-T --track)'{-T,--track}'[set the track number/(optional) total tracks]:track number (current/total)' \
|
||||
'(-R --list-rfc822)'{-R,--list-rfc822}'[lists using an rfc822-style format for output]' \
|
||||
'(-)'{-D,--delete-all}'[deletes both id3v1 and id3v2 tags]' \
|
||||
'(-)'{-l,--list}'[lists the tag(s) on the file(s)]' \
|
||||
'*:mp3 file:_files -g "*.mp3"' \
|
||||
- meta \
|
||||
'(- *)'{-f,--list-frames}'[display all possible frames for id3v2]' \
|
||||
'(- *)'{-L,--list-genres}'[lists all id3v1 genres]' \
|
||||
'(- *)'{-h,--help}'[display help and exit]' \
|
||||
'(- *)'{-v,--version}'[display version information and exit]' && ret=0
|
||||
|
||||
return ret
|
||||
|
||||
}
|
||||
|
||||
_id3v2 "$@"
|
Loading…
Reference in New Issue