diff options
author | Jonathan Batchelor <jmb@users.noreply.github.com> | 2021-11-05 23:40:38 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-05 16:40:38 -0700 |
commit | b2f35a7b98455b2bb8c7c3b11db6aa587e1d28bf (patch) | |
tree | 47fbe27ab692f7624a4b15e4db484335d7638d81 /plugins/macos/macos.plugin.zsh | |
parent | 7a2cb106258aa7a18bcd53e45df96c4871a03d5e (diff) | |
download | zsh-b2f35a7b98455b2bb8c7c3b11db6aa587e1d28bf.tar.gz zsh-b2f35a7b98455b2bb8c7c3b11db6aa587e1d28bf.tar.bz2 zsh-b2f35a7b98455b2bb8c7c3b11db6aa587e1d28bf.zip |
refactor(osx): Rename osx plugin to macos (#10341)
Apple changed the name of their operating system from OS X to macOS a number of years ago. This was overdue!
As per issue #10311
* refactor(osx): rename `osx` plugin to `macos`
* refactor(macos): Add symbolic link from old `osx` plugin name.
Diffstat (limited to 'plugins/macos/macos.plugin.zsh')
-rw-r--r-- | plugins/macos/macos.plugin.zsh | 269 |
1 files changed, 269 insertions, 0 deletions
diff --git a/plugins/macos/macos.plugin.zsh b/plugins/macos/macos.plugin.zsh new file mode 100644 index 000000000..4bcbbaead --- /dev/null +++ b/plugins/macos/macos.plugin.zsh @@ -0,0 +1,269 @@ +# Check if 'osx' is still in the plugins list and prompt to change to 'macos' +if [[ -n "${plugins[(r)osx]}" ]]; then + print ${(%):-"%F{yellow}The \`osx\` plugin is deprecated and has been renamed to \`macos\`."} + print ${(%):-"Please update your .zshrc to use the \`%Bmacos%b\` plugin instead.%f"} +fi + +# Open the current directory in a Finder window +alias ofd='open_command $PWD' + +# 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 +} + +function _omz_macos_get_frontmost_app() { + osascript 2>/dev/null <<EOF + tell application "System Events" + name of first item of (every process whose frontmost is true) + end tell +EOF +} + +function tab() { + # Must not have trailing semicolon, for iTerm compatibility + local command="cd \\\"$PWD\\\"; clear" + (( $# > 0 )) && command="${command}; $*" + + local the_app=$(_omz_macos_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 "iTerm2" + tell current window + create tab with default profile + tell current session to write text "${command}" + end tell + end tell +EOF + elif [[ "$the_app" == 'Hyper' ]]; then + osascript >/dev/null <<EOF + 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 +EOF + else + echo "$0: unsupported terminal app: $the_app" >&2 + return 1 + fi +} + +function vsplit_tab() { + local command="cd \\\"$PWD\\\"; clear" + (( $# > 0 )) && command="${command}; $*" + + local the_app=$(_omz_macos_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 "iTerm2" + 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 + elif [[ "$the_app" == 'Hyper' ]]; then + osascript >/dev/null <<EOF + tell application "System Events" + tell process "Hyper" + tell menu item "Split Vertically" of menu "Shell" of menu bar 1 + click + end tell + end tell + delay 1 + keystroke "${command} \n" + end tell +EOF + else + echo "$0: unsupported terminal app: $the_app" >&2 + return 1 + fi +} + +function split_tab() { + local command="cd \\\"$PWD\\\"; clear" + (( $# > 0 )) && command="${command}; $*" + + local the_app=$(_omz_macos_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 "iTerm2" + 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 + elif [[ "$the_app" == 'Hyper' ]]; then + osascript >/dev/null <<EOF + tell application "System Events" + tell process "Hyper" + tell menu item "Split Horizontally" of menu "Shell" of menu bar 1 + click + end tell + end tell + delay 1 + keystroke "${command} \n" + end tell +EOF + else + echo "$0: unsupported terminal app: $the_app" >&2 + return 1 + fi +} + +function pfd() { + osascript 2>/dev/null <<EOF + tell application "Finder" + return POSIX path of (insertion location 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 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)" +} + +function quick-look() { + (( $# > 0 )) && qlmanage -p $* &>/dev/null & +} + +function man-preview() { + # Don't let Preview.app steal focus if the man page doesn't exist + man -w "$@" &>/dev/null && man -t "$@" | open -f -a Preview || man "$@" +} +compdef _man man-preview + +function vncviewer() { + open vnc://$@ +} + +# Remove .DS_Store files recursively in a directory, default . +function rmdsstore() { + find "${@:-.}" -type f -name .DS_Store -delete +} + +# Erases purgeable disk space with 0s on the selected disk +function freespace(){ + if [[ -z "$1" ]]; then + echo "Usage: $0 <disk>" + echo "Example: $0 /dev/disk1s1" + echo + echo "Possible disks:" + df -h | awk 'NR == 1 || /^\/dev\/disk/' + return 1 + fi + + echo "Cleaning purgeable files from disk: $1 ...." + diskutil secureErase freespace 0 $1 +} + +_freespace() { + local -a disks + disks=("${(@f)"$(df | awk '/^\/dev\/disk/{ printf $1 ":"; for (i=9; i<=NF; i++) printf $i FS; print "" }')"}") + _describe disks disks +} + +compdef _freespace freespace + +# Music / iTunes control function +source "${0:h:A}/music" + +# Spotify control function +source "${0:h:A}/spotify" |