2016-06-16 06:03:37 +08:00
|
|
|
# Open the current directory in a Finder window
|
|
|
|
alias ofd='open_command $PWD'
|
|
|
|
|
2020-06-17 17:26:39 +08:00
|
|
|
# Show/hide hidden files in the Finder
|
|
|
|
alias showfiles="defaults write com.apple.finder AppleShowAllFiles -bool true && killall Finder"
|
|
|
|
alias hidefiles="defaults write com.apple.finder AppleShowAllFiles -bool false && killall Finder"
|
|
|
|
|
|
|
|
# Bluetooth restart
|
|
|
|
function btrestart() {
|
|
|
|
sudo kextunload -b com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport
|
|
|
|
sudo kextload -b com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport
|
|
|
|
}
|
|
|
|
|
2015-06-26 13:48:17 +08:00
|
|
|
function _omz_osx_get_frontmost_app() {
|
2020-06-17 17:26:39 +08:00
|
|
|
osascript 2>/dev/null <<EOF
|
|
|
|
tell application "System Events"
|
|
|
|
name of first item of (every process whose frontmost is true)
|
|
|
|
end tell
|
2011-02-23 12:32:50 +08:00
|
|
|
EOF
|
2015-06-26 13:48:17 +08:00
|
|
|
}
|
2011-02-18 20:17:00 +08:00
|
|
|
|
2015-06-26 13:48:17 +08:00
|
|
|
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
|
2011-02-23 12:32:50 +08:00
|
|
|
tell application "System Events"
|
|
|
|
tell process "Terminal" to keystroke "t" using command down
|
|
|
|
end tell
|
2015-06-26 13:48:17 +08:00
|
|
|
tell application "Terminal" to do script "${command}" in front window
|
2010-06-04 03:55:07 +08:00
|
|
|
EOF
|
2015-06-26 13:48:17 +08:00
|
|
|
elif [[ "$the_app" == 'iTerm' ]]; then
|
|
|
|
osascript <<EOF
|
2011-02-23 12:32:50 +08:00
|
|
|
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
|
2013-06-14 06:36:37 +08:00
|
|
|
write text "${command}"
|
2011-12-28 11:02:31 +08:00
|
|
|
end tell
|
|
|
|
end tell
|
|
|
|
end tell
|
|
|
|
EOF
|
2016-03-08 20:17:23 +08:00
|
|
|
elif [[ "$the_app" == 'iTerm2' ]]; then
|
2020-06-17 17:26:39 +08:00
|
|
|
osascript <<EOF
|
|
|
|
tell application "iTerm2"
|
|
|
|
tell current window
|
|
|
|
create tab with default profile
|
|
|
|
tell current session to write text "${command}"
|
2016-03-08 20:17:23 +08:00
|
|
|
end tell
|
2020-06-17 17:26:39 +08:00
|
|
|
end tell
|
2016-03-08 20:17:23 +08:00
|
|
|
EOF
|
2019-04-09 20:05:53 +08:00
|
|
|
elif [[ "$the_app" == 'Hyper' ]]; then
|
|
|
|
osascript >/dev/null <<EOF
|
2020-06-17 17:26:39 +08:00
|
|
|
tell application "System Events"
|
|
|
|
tell process "Hyper" to keystroke "t" using command down
|
|
|
|
end tell
|
|
|
|
delay 1
|
|
|
|
tell application "System Events"
|
|
|
|
keystroke "${command}"
|
|
|
|
key code 36 #(presses enter)
|
|
|
|
end tell
|
2019-04-09 20:05:53 +08:00
|
|
|
EOF
|
2015-06-26 13:48:17 +08:00
|
|
|
else
|
2020-06-17 17:26:39 +08:00
|
|
|
echo "$0: unsupported terminal app: $the_app" >&2
|
|
|
|
return 1
|
2015-06-26 13:48:17 +08:00
|
|
|
fi
|
2011-12-28 11:02:31 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
function vsplit_tab() {
|
2015-06-26 13:48:17 +08:00
|
|
|
local command="cd \\\"$PWD\\\"; clear"
|
2011-12-28 11:02:31 +08:00
|
|
|
(( $# > 0 )) && command="${command}; $*"
|
|
|
|
|
2015-06-26 13:48:17 +08:00
|
|
|
local the_app=$(_omz_osx_get_frontmost_app)
|
2011-12-28 11:02:31 +08:00
|
|
|
|
2015-06-26 13:48:17 +08:00
|
|
|
if [[ "$the_app" == 'iTerm' ]]; then
|
|
|
|
osascript <<EOF
|
|
|
|
-- tell application "iTerm" to activate
|
2011-12-28 11:02:31 +08:00
|
|
|
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
|
2015-06-26 13:48:17 +08:00
|
|
|
keystroke "${command} \n"
|
2011-12-28 11:02:31 +08:00
|
|
|
end tell
|
|
|
|
EOF
|
2016-03-08 20:17:23 +08:00
|
|
|
elif [[ "$the_app" == 'iTerm2' ]]; then
|
2020-06-17 17:26:39 +08:00
|
|
|
osascript <<EOF
|
|
|
|
tell application "iTerm2"
|
|
|
|
tell current session of first window
|
|
|
|
set newSession to (split vertically with same profile)
|
|
|
|
tell newSession
|
|
|
|
write text "${command}"
|
|
|
|
select
|
2016-03-08 20:17:23 +08:00
|
|
|
end tell
|
|
|
|
end tell
|
2020-06-17 17:26:39 +08:00
|
|
|
end tell
|
2016-03-08 20:17:23 +08:00
|
|
|
EOF
|
2019-04-09 20:05:53 +08:00
|
|
|
elif [[ "$the_app" == 'Hyper' ]]; then
|
2020-06-17 17:26:39 +08:00
|
|
|
osascript >/dev/null <<EOF
|
|
|
|
tell application "System Events"
|
|
|
|
tell process "Hyper"
|
|
|
|
tell menu item "Split Vertically" of menu "Shell" of menu bar 1
|
|
|
|
click
|
2019-04-09 20:05:53 +08:00
|
|
|
end tell
|
|
|
|
end tell
|
2020-06-17 17:26:39 +08:00
|
|
|
delay 1
|
|
|
|
keystroke "${command} \n"
|
|
|
|
end tell
|
2019-04-09 20:05:53 +08:00
|
|
|
EOF
|
2015-06-26 13:48:17 +08:00
|
|
|
else
|
|
|
|
echo "$0: unsupported terminal app: $the_app" >&2
|
2020-06-17 17:26:39 +08:00
|
|
|
return 1
|
2015-06-26 13:48:17 +08:00
|
|
|
fi
|
2011-12-28 11:02:31 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
function split_tab() {
|
2015-06-26 13:48:17 +08:00
|
|
|
local command="cd \\\"$PWD\\\"; clear"
|
2011-12-28 11:02:31 +08:00
|
|
|
(( $# > 0 )) && command="${command}; $*"
|
|
|
|
|
2015-06-26 13:48:17 +08:00
|
|
|
local the_app=$(_omz_osx_get_frontmost_app)
|
2011-12-28 11:02:31 +08:00
|
|
|
|
2015-06-26 13:48:17 +08:00
|
|
|
if [[ "$the_app" == 'iTerm' ]]; then
|
2011-12-28 11:02:31 +08:00
|
|
|
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
|
2011-02-18 20:48:27 +08:00
|
|
|
end tell
|
|
|
|
end tell
|
2015-06-26 13:48:17 +08:00
|
|
|
keystroke "${command} \n"
|
2011-02-18 20:48:27 +08:00
|
|
|
end tell
|
2011-02-23 12:32:50 +08:00
|
|
|
EOF
|
2016-03-08 20:17:23 +08:00
|
|
|
elif [[ "$the_app" == 'iTerm2' ]]; then
|
2020-06-17 17:26:39 +08:00
|
|
|
osascript <<EOF
|
|
|
|
tell application "iTerm2"
|
|
|
|
tell current session of first window
|
|
|
|
set newSession to (split horizontally with same profile)
|
|
|
|
tell newSession
|
|
|
|
write text "${command}"
|
|
|
|
select
|
2016-03-08 20:17:23 +08:00
|
|
|
end tell
|
|
|
|
end tell
|
2020-06-17 17:26:39 +08:00
|
|
|
end tell
|
2016-03-08 20:17:23 +08:00
|
|
|
EOF
|
2019-04-09 20:05:53 +08:00
|
|
|
elif [[ "$the_app" == 'Hyper' ]]; then
|
2020-06-17 17:26:39 +08:00
|
|
|
osascript >/dev/null <<EOF
|
|
|
|
tell application "System Events"
|
|
|
|
tell process "Hyper"
|
|
|
|
tell menu item "Split Horizontally" of menu "Shell" of menu bar 1
|
|
|
|
click
|
2019-04-09 20:05:53 +08:00
|
|
|
end tell
|
|
|
|
end tell
|
2020-06-17 17:26:39 +08:00
|
|
|
delay 1
|
|
|
|
keystroke "${command} \n"
|
|
|
|
end tell
|
2019-04-09 20:05:53 +08:00
|
|
|
EOF
|
2015-06-26 13:48:17 +08:00
|
|
|
else
|
|
|
|
echo "$0: unsupported terminal app: $the_app" >&2
|
2020-06-17 17:26:39 +08:00
|
|
|
return 1
|
2015-06-26 13:48:17 +08:00
|
|
|
fi
|
2011-02-23 12:32:50 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
function pfd() {
|
|
|
|
osascript 2>/dev/null <<EOF
|
|
|
|
tell application "Finder"
|
2020-06-17 17:26:39 +08:00
|
|
|
return POSIX path of (insertion location as alias)
|
2011-02-18 20:48:27 +08:00
|
|
|
end tell
|
2011-02-23 12:32:50 +08:00
|
|
|
EOF
|
|
|
|
}
|
2011-02-18 20:48:27 +08:00
|
|
|
|
2011-02-23 12:32:50 +08:00
|
|
|
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
|
2011-02-18 20:48:27 +08:00
|
|
|
EOF
|
|
|
|
}
|
2011-02-23 12:32:50 +08:00
|
|
|
|
|
|
|
function cdf() {
|
|
|
|
cd "$(pfd)"
|
|
|
|
}
|
|
|
|
|
|
|
|
function pushdf() {
|
|
|
|
pushd "$(pfd)"
|
|
|
|
}
|
|
|
|
|
2020-06-17 17:26:39 +08:00
|
|
|
function pxd() {
|
|
|
|
dirname $(osascript 2>/dev/null <<EOF
|
|
|
|
if application "Xcode" is running then
|
|
|
|
tell application "Xcode"
|
|
|
|
return path of active workspace document
|
|
|
|
end tell
|
|
|
|
end if
|
|
|
|
EOF
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
function cdx() {
|
|
|
|
cd "$(pxd)"
|
|
|
|
}
|
|
|
|
|
2011-02-23 12:32:50 +08:00
|
|
|
function quick-look() {
|
|
|
|
(( $# > 0 )) && qlmanage -p $* &>/dev/null &
|
|
|
|
}
|
|
|
|
|
|
|
|
function man-preview() {
|
|
|
|
man -t "$@" | open -f -a Preview
|
|
|
|
}
|
2016-06-21 04:19:02 +08:00
|
|
|
compdef _man man-preview
|
2011-02-23 12:32:50 +08:00
|
|
|
|
2013-03-11 00:18:33 +08:00
|
|
|
function vncviewer() {
|
|
|
|
open vnc://$@
|
|
|
|
}
|
2013-10-16 16:43:03 +08:00
|
|
|
|
2018-09-11 02:10:31 +08:00
|
|
|
# Remove .DS_Store files recursively in a directory, default .
|
2018-11-28 05:58:36 +08:00
|
|
|
function rmdsstore() {
|
2020-06-17 17:26:39 +08:00
|
|
|
find "${@:-.}" -type f -name .DS_Store -delete
|
2018-09-11 02:10:31 +08:00
|
|
|
}
|
2020-06-17 17:26:39 +08:00
|
|
|
|
|
|
|
# Music / iTunes control function
|
|
|
|
source "${0:h:A}/music"
|
|
|
|
|
|
|
|
# Spotify control function
|
|
|
|
source "${0:h:A}/spotify"
|