43a2e24c25
Added shuffle functionality to the itunes command in the OSX plugin. iTunes 12 doesn't support setting the "shuffle" property on the playlist from what I've read, so this simulates the user interacting with the iTunes interface. The toggle option "clicks" the shuffle button in the Now Playing area. This has the effect of toggling the shuffle setting on whatever is currently playing. The on and off options use the Shuffle menu bar items. Usage: itunes shuffle [on|off|toggle]
228 lines
5.9 KiB
Bash
228 lines
5.9 KiB
Bash
# ------------------------------------------------------------------------------
|
|
# FILE: osx.plugin.zsh
|
|
# DESCRIPTION: oh-my-zsh plugin file.
|
|
# AUTHOR: Sorin Ionescu (sorin.ionescu@gmail.com)
|
|
# VERSION: 1.1.0
|
|
# ------------------------------------------------------------------------------
|
|
|
|
function tab() {
|
|
local command="cd \\\"$PWD\\\"; clear; "
|
|
(( $# > 0 )) && command="${command}; $*"
|
|
|
|
the_app=$(
|
|
osascript 2>/dev/null <<EOF
|
|
tell application "System Events"
|
|
name of first item of (every process whose frontmost is true)
|
|
end tell
|
|
EOF
|
|
)
|
|
|
|
[[ "$the_app" == 'Terminal' ]] && {
|
|
osascript 2>/dev/null <<EOF
|
|
tell application "System Events"
|
|
tell process "Terminal" to keystroke "t" using command down
|
|
tell application "Terminal" to do script "${command}" in front window
|
|
end tell
|
|
EOF
|
|
}
|
|
|
|
[[ "$the_app" == 'iTerm' ]] && {
|
|
osascript 2>/dev/null <<EOF
|
|
tell application "iTerm"
|
|
set current_terminal to current terminal
|
|
tell current_terminal
|
|
launch session "Default Session"
|
|
set current_session to current session
|
|
tell current_session
|
|
write text "${command}"
|
|
end tell
|
|
end tell
|
|
end tell
|
|
EOF
|
|
}
|
|
}
|
|
|
|
function vsplit_tab() {
|
|
local command="cd \\\"$PWD\\\""
|
|
(( $# > 0 )) && command="${command}; $*"
|
|
|
|
the_app=$(
|
|
osascript 2>/dev/null <<EOF
|
|
tell application "System Events"
|
|
name of first item of (every process whose frontmost is true)
|
|
end tell
|
|
EOF
|
|
)
|
|
|
|
[[ "$the_app" == 'iTerm' ]] && {
|
|
osascript 2>/dev/null <<EOF
|
|
tell application "iTerm" to activate
|
|
|
|
tell application "System Events"
|
|
tell process "iTerm"
|
|
tell menu item "Split Vertically With Current Profile" of menu "Shell" of menu bar item "Shell" of menu bar 1
|
|
click
|
|
end tell
|
|
end tell
|
|
keystroke "${command}; clear;"
|
|
keystroke return
|
|
end tell
|
|
EOF
|
|
}
|
|
}
|
|
|
|
function split_tab() {
|
|
local command="cd \\\"$PWD\\\""
|
|
(( $# > 0 )) && command="${command}; $*"
|
|
|
|
the_app=$(
|
|
osascript 2>/dev/null <<EOF
|
|
tell application "System Events"
|
|
name of first item of (every process whose frontmost is true)
|
|
end tell
|
|
EOF
|
|
)
|
|
|
|
[[ "$the_app" == 'iTerm' ]] && {
|
|
osascript 2>/dev/null <<EOF
|
|
tell application "iTerm" to activate
|
|
|
|
tell application "System Events"
|
|
tell process "iTerm"
|
|
tell menu item "Split Horizontally With Current Profile" of menu "Shell" of menu bar item "Shell" of menu bar 1
|
|
click
|
|
end tell
|
|
end tell
|
|
keystroke "${command}; clear;"
|
|
keystroke return
|
|
end tell
|
|
EOF
|
|
}
|
|
}
|
|
|
|
function pfd() {
|
|
osascript 2>/dev/null <<EOF
|
|
tell application "Finder"
|
|
return POSIX path of (target of window 1 as alias)
|
|
end tell
|
|
EOF
|
|
}
|
|
|
|
function pfs() {
|
|
osascript 2>/dev/null <<EOF
|
|
set output to ""
|
|
tell application "Finder" to set the_selection to selection
|
|
set item_count to count the_selection
|
|
repeat with item_index from 1 to count the_selection
|
|
if item_index is less than item_count then set the_delimiter to "\n"
|
|
if item_index is item_count then set the_delimiter to ""
|
|
set output to output & ((item item_index of the_selection as alias)'s POSIX path) & the_delimiter
|
|
end repeat
|
|
EOF
|
|
}
|
|
|
|
function cdf() {
|
|
cd "$(pfd)"
|
|
}
|
|
|
|
function pushdf() {
|
|
pushd "$(pfd)"
|
|
}
|
|
|
|
function quick-look() {
|
|
(( $# > 0 )) && qlmanage -p $* &>/dev/null &
|
|
}
|
|
|
|
function man-preview() {
|
|
man -t "$@" | open -f -a Preview
|
|
}
|
|
|
|
function trash() {
|
|
local trash_dir="${HOME}/.Trash"
|
|
local temp_ifs="$IFS"
|
|
IFS=$'\n'
|
|
for item in "$@"; do
|
|
if [[ -e "$item" ]]; then
|
|
item_name="$(basename $item)"
|
|
if [[ -e "${trash_dir}/${item_name}" ]]; then
|
|
mv -f "$item" "${trash_dir}/${item_name} $(date "+%H-%M-%S")"
|
|
else
|
|
mv -f "$item" "${trash_dir}/"
|
|
fi
|
|
fi
|
|
done
|
|
IFS=$temp_ifs
|
|
}
|
|
|
|
function vncviewer() {
|
|
open vnc://$@
|
|
}
|
|
|
|
# iTunes control function
|
|
function itunes() {
|
|
local opt=$1
|
|
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)
|
|
opt="set sound volume to $1" #$1 Due to the shift
|
|
;;
|
|
shuf|shuff|shuffle)
|
|
# The shuffle property of current playlist can't be changed in iTunes 12,
|
|
# so this workaround uses AppleScript to simulate user input instead.
|
|
# Defaults to toggling when no options are given.
|
|
# The toggle option depends on the shuffle button being visible in the Now playing area.
|
|
# On and off use the menu bar items.
|
|
local state=$1
|
|
|
|
if [[ -n "$state" && ! "$state" =~ "^(on|off|toggle)$" ]]
|
|
then
|
|
print "Usage: itunes shuffle [on|off|toggle]. Invalid option."
|
|
return 1
|
|
fi
|
|
|
|
case "$state" in
|
|
on|off)
|
|
# Inspired by: http://stackoverflow.com/a/14675583
|
|
osascript 1>/dev/null 2>&1 <<-EOF
|
|
tell application "System Events" to perform action "AXPress" of (menu item "${state}" of menu "Shuffle" of menu item "Shuffle" of menu "Controls" of menu bar item "Controls" of menu bar 1 of application process "iTunes" )
|
|
EOF
|
|
return 0
|
|
;;
|
|
toggle|*)
|
|
osascript 1>/dev/null 2>&1 <<-EOF
|
|
tell application "System Events" to perform action "AXPress" of (button 2 of process "iTunes"'s window "iTunes"'s scroll area 1)
|
|
EOF
|
|
return 0
|
|
;;
|
|
esac
|
|
;;
|
|
""|-h|--help)
|
|
echo "Usage: itunes <option>"
|
|
echo "option:"
|
|
echo "\tlaunch|play|pause|stop|rewind|resume|quit"
|
|
echo "\tmute|unmute\tcontrol volume set"
|
|
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\tSet the volume, takes an argument from 0 to 100"
|
|
echo "\thelp\tshow this message and exit"
|
|
return 0
|
|
;;
|
|
*)
|
|
print "Unknown option: $opt"
|
|
return 1
|
|
;;
|
|
esac
|
|
osascript -e "tell application \"iTunes\" to $opt"
|
|
}
|