123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- # ------------------------------------------------------------------------------
- # FILE: osx.plugin.zsh
- # DESCRIPTION: oh-my-zsh plugin file.
- # AUTHOR: Sorin Ionescu (sorin.ionescu@gmail.com)
- # VERSION: 1.1.0
- # ------------------------------------------------------------------------------
- function _omz_osx_get_frontmost_app() {
- local 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
- )
- echo "$the_app"
- }
- function tab() {
- # Must not have trailing semicolon, for iTerm compatibility
- local command="cd \\\"$PWD\\\"; clear"
- (( $# > 0 )) && command="${command}; $*"
- local the_app=$(_omz_osx_get_frontmost_app)
- if [[ "$the_app" == 'Terminal' ]]; then
- # Discarding stdout to quash "tab N of window id XXX" output
- osascript >/dev/null <<EOF
- tell application "System Events"
- tell process "Terminal" to keystroke "t" using command down
- end tell
- tell application "Terminal" to do script "${command}" in front window
- EOF
- elif [[ "$the_app" == 'iTerm' ]]; then
- osascript <<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
- elif [[ "$the_app" == 'iTerm2' ]]; then
- osascript <<EOF
- tell application "iTerm"
- tell current window
- create tab with default profile
- tell current session to write text "${command}"
- end tell
- end tell
- EOF
- else
- echo "tab: unsupported terminal app: $the_app"
- false
- fi
- }
- function vsplit_tab() {
- local command="cd \\\"$PWD\\\"; clear"
- (( $# > 0 )) && command="${command}; $*"
- local the_app=$(_omz_osx_get_frontmost_app)
- if [[ "$the_app" == 'iTerm' ]]; then
- osascript <<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} \n"
- end tell
- EOF
- elif [[ "$the_app" == 'iTerm2' ]]; then
- osascript <<EOF
- tell application "iTerm"
- tell current session of first window
- set newSession to (split vertically with same profile)
- tell newSession
- write text "${command}"
- select
- end tell
- end tell
- end tell
- EOF
- else
- echo "$0: unsupported terminal app: $the_app" >&2
- false
- fi
- }
- function split_tab() {
- local command="cd \\\"$PWD\\\"; clear"
- (( $# > 0 )) && command="${command}; $*"
- local the_app=$(_omz_osx_get_frontmost_app)
- if [[ "$the_app" == 'iTerm' ]]; then
- 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} \n"
- end tell
- EOF
- elif [[ "$the_app" == 'iTerm2' ]]; then
- osascript <<EOF
- tell application "iTerm"
- tell current session of first window
- set newSession to (split horizontally with same profile)
- tell newSession
- write text "${command}"
- select
- end tell
- end tell
- end tell
- EOF
- else
- echo "$0: unsupported terminal app: $the_app" >&2
- false
- fi
- }
- 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 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
- ;;
- playing|status)
- local state=`osascript -e 'tell application "iTunes" to player state as string'`
- if [[ "$state" = "playing" ]]; then
- currenttrack=`osascript -e 'tell application "iTunes" to name of current track as string'`
- currentartist=`osascript -e 'tell application "iTunes" to artist of current track as string'`
- echo -E "Listening to $fg[yellow]$currenttrack$reset_color by $fg[yellow]$currentartist$reset_color";
- else
- echo "iTunes is" $state;
- fi
- return 0
- ;;
- 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 "\tplaying|status\tShow what song is currently playing in iTunes."
- echo "\thelp\tshow this message and exit"
- return 0
- ;;
- *)
- print "Unknown option: $opt"
- return 1
- ;;
- esac
- osascript -e "tell application \"iTunes\" to $opt"
- }
|