Files
playerctl/data/playerctl.zsh
2021-06-24 22:52:10 -04:00

66 lines
2.5 KiB
Bash

#compdef playerctl
typeset -A opt_args
__playerctl() {
command playerctl "$@" 2>/dev/null
}
__playerctl_ctx() {
local -a player_opts=(
${(kv)opt_args[(I)-p|--player]}
${(kv)opt_args[(I)-i|--ignore-player]}
${(kv)opt_args[(I)-a|--all-players]}
)
__playerctl "$player_opts[@]" "$@"
}
local -a playercmd_loop=(/$'(none|track|playlist)\0'/ ':(none track playlist)')
local -a playercmd_shuffle=(/$'(on|off)\0'/ ':(on off)')
(( $+functions[_playerctl_players] )) ||
_playerctl_players() {
local -a players=( ${(@f)"$(__playerctl --list-all)"} )
players+=( "%all" )
compadd "$@" -a players
}
(( $+functions[_playerctl_metadata_keys] )) ||
_playerctl_metadata_keys() {
local -a keys
__playerctl_ctx metadata |
while read PLAYER KEY VALUE; do
keys+="$KEY"
done
_multi_parts "$@" -i ":" keys
}
local -a playerctl_command_metadata_keys=(/$'[^\0]#\0'/ ':keys:key:_playerctl_metadata_keys')
local -a playerctl_command
_regex_words commands 'playerctl command' \
'play:Command the player to play' \
'pause:Command the player to pause' \
'play-pause:Command the player to toggle between play/pause' \
'stop:Command the player to stop' \
'next:Command the player to skip to the next track' \
'previous:Command the player to skip to the previous track' \
'position:Command the player to go or seek to the position' \
'volume:Print or set the volume level from 0.0 to 1.0' \
'status:Get the play status of the player' \
'metadata:Print the metadata information for the current track:$playerctl_command_metadata_keys' \
'open:Command the player to open the given URI' \
'loop:Print or set the loop status:$playercmd_loop' \
'shuffle:Print or set the shuffle status:$playercmd_shuffle'
playerctl_command=( /$'[^\0]#\0'/ "$reply[@]" )
_regex_arguments _playerctl_command "$playerctl_command[@]"
_arguments -S -s\
'(-h --help)'{-h,--help}'[Show help message and quit]' \
'(-v --version)'{-v,--version}'[Print version information and quit]' \
'(-l --list-all)'{-l,--list-all}'[List all available players]' \
'(-F, --follow)'{-F,--follow}'[Bock and append the query to output when it changes]' \
'(-f --format)'{-f,--format=}'[Format string for printing properties and metadata]' \
'(-i --ignore-player)'{-i,--ignore-player=}'[Comma separated list of players to ignore]:players:_sequence _playerctl_players' \
'(-a --all-players)'{-a,--all-players}'[Control all players instead of just the first]' \
'(-p --player)'{-p,--player=}'[Comma separated list of players to control]:players:_sequence _playerctl_players' \
'*::playerctl command:= _playerctl_command'