From edc449275b6c04445f58b108ca0937a87c1e8430 Mon Sep 17 00:00:00 2001 From: Aditya Date: Mon, 27 Feb 2023 20:04:56 +0530 Subject: add zsh --- oh-my-zsh/plugins/macos/music | 170 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 oh-my-zsh/plugins/macos/music (limited to 'oh-my-zsh/plugins/macos/music') diff --git a/oh-my-zsh/plugins/macos/music b/oh-my-zsh/plugins/macos/music new file mode 100644 index 0000000..5056679 --- /dev/null +++ b/oh-my-zsh/plugins/macos/music @@ -0,0 +1,170 @@ +#!/usr/bin/env zsh + +function music itunes() { + local APP_NAME=Music sw_vers=$(sw_vers -productVersion 2>/dev/null) + + autoload is-at-least + if [[ -z "$sw_vers" ]] || is-at-least 10.15 $sw_vers; then + if [[ $0 = itunes ]]; then + echo >&2 The itunes function name is deprecated. Use \'music\' instead. + return 1 + fi + else + APP_NAME=iTunes + fi + + local opt=$1 playlist=$2 + (( $# > 0 )) && shift + case "$opt" in + launch|play|pause|stop|rewind|resume|quit) + ;; + mute) + opt="set mute to true" + ;; + unmute) + opt="set mute to false" + ;; + next|previous) + opt="$opt track" + ;; + vol) + local new_volume volume=$(osascript -e "tell application \"$APP_NAME\" to get sound volume") + if [[ $# -eq 0 ]]; then + echo "Current volume is ${volume}." + return 0 + fi + case $1 in + up) new_volume=$((volume + 10 < 100 ? volume + 10 : 100)) ;; + down) new_volume=$((volume - 10 > 0 ? volume - 10 : 0)) ;; + <0-100>) new_volume=$1 ;; + *) echo "'$1' is not valid. Expected <0-100>, up or down." + return 1 ;; + esac + opt="set sound volume to ${new_volume}" + ;; + playlist) + # Inspired by: https://gist.github.com/nakajijapan/ac8b45371064ae98ea7f + if [[ -n "$playlist" ]]; then + osascript 2>/dev/null </dev/null 2>&1 </dev/null 2>&1 <" + echo "option:" + echo "\t-h|--help\tShow this message and exit" + echo "\tlaunch|play|pause|stop|rewind|resume|quit" + echo "\tmute|unmute\tMute or unmute $APP_NAME" + echo "\tnext|previous\tPlay next or previous track" + echo "\tshuf|shuffle [on|off|toggle]\tSet shuffled playback. Default: toggle. Note: toggle doesn't support the MiniPlayer." + echo "\tvol [0-100|up|down]\tGet or set the volume. 0 to 100 sets the volume. 'up' / 'down' increases / decreases by 10 points. No argument displays current volume." + echo "\tplaying|status\tShow what song is currently playing in Music." + echo "\tplaylist [playlist name]\t Play specific playlist" + return 0 + ;; + *) + print "Unknown option: $opt" + return 1 + ;; + esac + osascript -e "tell application \"$APP_NAME\" to $opt" +} + +function _music() { + local app_name + case "$words[1]" in + itunes) app_name="iTunes" ;; + music|*) app_name="Music" ;; + esac + + local -a cmds subcmds + cmds=( + "launch:Launch the ${app_name} app" + "play:Play ${app_name}" + "pause:Pause ${app_name}" + "stop:Stop ${app_name}" + "rewind:Rewind ${app_name}" + "resume:Resume ${app_name}" + "quit:Quit ${app_name}" + "mute:Mute the ${app_name} app" + "unmute:Unmute the ${app_name} app" + "next:Skip to the next song" + "previous:Skip to the previous song" + "vol:Change the volume" + "playlist:Play a specific playlist" + {playing,status}":Show what song is currently playing" + {shuf,shuff,shuffle}":Set shuffle mode" + {-h,--help}":Show usage" + ) + + if (( CURRENT == 2 )); then + _describe 'command' cmds + elif (( CURRENT == 3 )); then + case "$words[2]" in + vol) subcmds=( 'up:Raise the volume' 'down:Lower the volume' ) + _describe 'command' subcmds ;; + shuf|shuff|shuffle) subcmds=('on:Switch on shuffle mode' 'off:Switch off shuffle mode' 'toggle:Toggle shuffle mode (default)') + _describe 'command' subcmds ;; + esac + elif (( CURRENT == 4 )); then + case "$words[2]" in + playlist) subcmds=('play:Play the playlist (default)' 'stop:Stop the playlist') + _describe 'command' subcmds ;; + esac + fi + + return 0 +} + +compdef _music music itunes -- cgit v1.2.3