Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • rspencer/awit-zsh-superawesome
1 result
Show changes
Showing
with 0 additions and 2149 deletions
if [[ -x `which nc` ]]; then
alias nyan='nc -v nyancat.dakko.us 23' # nyan cat
fi
# OSX plugin
## Description
This plugin provides a few utilities to make it more enjoyable on OSX.
To start using it, add the `osx` plugin to your plugins array in `~/.zshrc`:
```zsh
plugins=(... osx)
```
Original author: [Sorin Ionescu](https://github.com/sorin-ionescu)
## Commands
| Command | Description |
| :-------------- | :----------------------------------------------- |
| `tab` | Open the current directory in a new tab |
| `split_tab` | Split the current terminal tab horizontally |
| `vsplit_tab` | Split the current terminal tab vertically |
| `ofd` | Open the current directory in a Finder window |
| `pfd` | Return the path of the frontmost Finder window |
| `pfs` | Return the current Finder selection |
| `cdf` | `cd` to the current Finder directory |
| `pushdf` | `pushd` to the current Finder directory |
| `quick-look` | Quick-Look a specified file |
| `man-preview` | Open a specified man page in Preview app |
| `showfiles` | Show hidden files |
| `hidefiles` | Hide the hidden files |
| `itunes` | Control iTunes. User `itunes -h` for usage details |
| `spotify` | Control Spotify and search by artist, album, track and etc.|
# Open the current directory in a Finder window
alias ofd='open_command $PWD'
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 "iTerm2"
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 "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
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 "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
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
}
compdef _man man-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"
}
# Spotify control function
function spotify() {
showHelp () {
echo "Usage:";
echo;
echo " $(basename "$0") <command>";
echo;
echo "Commands:";
echo;
echo " play # Resumes playback where Spotify last left off.";
echo " play [song name] # Finds a song by name and plays it.";
echo " play album [album name] # Finds an album by name and plays it.";
echo " play artist [artist name] # Finds an artist by name and plays it.";
echo " play list [playlist name] # Finds a playlist by name and plays it.";
echo " pause # Pauses Spotify playback.";
echo " next # Skips to the next song in a playlist.";
echo " prev # Returns to the previous song in a playlist.";
echo " pos [time] # Jumps to a time (in secs) in the current song.";
echo " quit # Stops playback and quits Spotify.";
echo;
echo " vol up # Increases the volume by 10%.";
echo " vol down # Decreases the volume by 10%.";
echo " vol [amount] # Sets the volume to an amount between 0 and 100.";
echo " vol show # Shows the current Spotify volume.";
echo;
echo " status # Shows the current player status.";
echo " share # Copies the current song URL to the clipboard."
echo " info # Shows Full Information about song that is playing.";
echo;
echo " toggle shuffle # Toggles shuffle playback mode.";
echo " toggle repeat # Toggles repeat playback mode.";
}
cecho(){
bold=$(tput bold);
green=$(tput setaf 2);
reset=$(tput sgr0);
echo "$bold$green$1$reset";
}
showStatus () {
state=$(osascript -e 'tell application "Spotify" to player state as string');
cecho "Spotify is currently $state.";
if [ "$state" = "playing" ]; then
artist=$(osascript -e 'tell application "Spotify" to artist of current track as string');
album=$(osascript -e 'tell application "Spotify" to album of current track as string');
track=$(osascript -e 'tell application "Spotify" to name of current track as string');
duration=$(osascript -e 'tell application "Spotify" to duration of current track as string');
duration=$(echo "scale=2; $duration / 60 / 1000" | bc);
position=$(osascript -e 'tell application "Spotify" to player position as string' | tr ',' '.');
position=$(echo "scale=2; $position / 60" | bc | awk '{printf "%0.2f", $0}');
printf "$reset""Artist: %s\nAlbum: %s\nTrack: %s \nPosition: %s / %s\n" "$artist" "$album" "$track" "$position" "$duration";
fi
}
if [ $# = 0 ]; then
showHelp;
else
if [ "$(osascript -e 'application "Spotify" is running')" = "false" ]; then
osascript -e 'tell application "Spotify" to activate'
sleep 2
fi
fi
while [ $# -gt 0 ]; do
arg=$1;
case $arg in
"play" )
if [ $# != 1 ]; then
# There are additional arguments, so find out how many
array=( $@ );
len=${#array[@]};
SPOTIFY_SEARCH_API="https://api.spotify.com/v1/search"
SPOTIFY_PLAY_URI="";
searchAndPlay() {
type="$1"
Q="$2"
cecho "Searching ${type}s for: $Q";
SPOTIFY_PLAY_URI=$( \
curl -s -G $SPOTIFY_SEARCH_API --data-urlencode "q=$Q" -d "type=$type&limit=1&offset=0" -H "Accept: application/json" \
| grep -E -o "spotify:$type:[a-zA-Z0-9]+" -m 1
)
}
case $2 in
"list" )
_args=${array[*]:2:$len};
Q=$_args;
cecho "Searching playlists for: $Q";
results=$( \
curl -s -G $SPOTIFY_SEARCH_API --data-urlencode "q=$Q" -d "type=playlist&limit=10&offset=0" -H "Accept: application/json" \
| grep -E -o "spotify:user:[a-zA-Z0-9_]+:playlist:[a-zA-Z0-9]+" -m 10 \
)
count=$( \
echo "$results" | grep -c "spotify:user" \
)
if [ "$count" -gt 0 ]; then
random=$(( RANDOM % count));
SPOTIFY_PLAY_URI=$( \
echo "$results" | awk -v random="$random" '/spotify:user:[a-zA-Z0-9]+:playlist:[a-zA-Z0-9]+/{i++}i==random{print; exit}' \
)
fi;;
"album" | "artist" | "track" )
_args=${array[*]:2:$len};
searchAndPlay "$2" "$_args";;
* )
_args=${array[*]:1:$len};
searchAndPlay track "$_args";;
esac
if [ "$SPOTIFY_PLAY_URI" != "" ]; then
cecho "Playing ($Q Search) -> Spotify URL: $SPOTIFY_PLAY_URI";
osascript -e "tell application \"Spotify\" to play track \"$SPOTIFY_PLAY_URI\"";
else
cecho "No results when searching for $Q";
fi
else
# play is the only param
cecho "Playing Spotify.";
osascript -e 'tell application "Spotify" to play';
fi
break ;;
"pause" )
state=$(osascript -e 'tell application "Spotify" to player state as string');
if [ "$state" = "playing" ]; then
cecho "Pausing Spotify.";
else
cecho "Playing Spotify.";
fi
osascript -e 'tell application "Spotify" to playpause';
break ;;
"quit" )
cecho "Quitting Spotify.";
osascript -e 'tell application "Spotify" to quit';
exit 1 ;;
"next" )
cecho "Going to next track." ;
osascript -e 'tell application "Spotify" to next track';
break ;;
"prev" )
cecho "Going to previous track.";
osascript -e 'tell application "Spotify" to previous track';
break ;;
"vol" )
vol=$(osascript -e 'tell application "Spotify" to sound volume as integer');
if [[ "$2" = "show" || "$2" = "" ]]; then
cecho "Current Spotify volume level is $vol.";
break ;
elif [ "$2" = "up" ]; then
if [ "$vol" -le 90 ]; then
newvol=$(( vol+10 ));
cecho "Increasing Spotify volume to $newvol.";
else
newvol=100;
cecho "Spotify volume level is at max.";
fi
elif [ "$2" = "down" ]; then
if [ "$vol" -ge 10 ]; then
newvol=$(( vol-10 ));
cecho "Reducing Spotify volume to $newvol.";
else
newvol=0;
cecho "Spotify volume level is at min.";
fi
elif [ "$2" -ge 0 ]; then
newvol=$2;
fi
osascript -e "tell application \"Spotify\" to set sound volume to $newvol";
break ;;
"toggle" )
if [ "$2" = "shuffle" ]; then
osascript -e 'tell application "Spotify" to set shuffling to not shuffling';
curr=$(osascript -e 'tell application "Spotify" to shuffling');
cecho "Spotify shuffling set to $curr";
elif [ "$2" = "repeat" ]; then
osascript -e 'tell application "Spotify" to set repeating to not repeating';
curr=$(osascript -e 'tell application "Spotify" to repeating');
cecho "Spotify repeating set to $curr";
fi
break ;;
"pos" )
cecho "Adjusting Spotify play position."
osascript -e "tell application \"Spotify\" to set player position to $2";
break;;
"status" )
showStatus;
break ;;
"info" )
info=$(osascript -e 'tell application "Spotify"
set tM to round (duration of current track / 60) rounding down
set tS to duration of current track mod 60
set pos to player position as text
set myTime to tM as text & "min " & tS as text & "s"
set nM to round (player position / 60) rounding down
set nS to round (player position mod 60) rounding down
set nowAt to nM as text & "min " & nS as text & "s"
set info to "" & "\nArtist: " & artist of current track
set info to info & "\nTrack: " & name of current track
set info to info & "\nAlbum Artist: " & album artist of current track
set info to info & "\nAlbum: " & album of current track
set info to info & "\nSeconds: " & duration of current track
set info to info & "\nSeconds played: " & pos
set info to info & "\nDuration: " & mytime
set info to info & "\nNow at: " & nowAt
set info to info & "\nPlayed Count: " & played count of current track
set info to info & "\nTrack Number: " & track number of current track
set info to info & "\nPopularity: " & popularity of current track
set info to info & "\nId: " & id of current track
set info to info & "\nSpotify URL: " & spotify url of current track
set info to info & "\nArtwork: " & artwork of current track
set info to info & "\nPlayer: " & player state
set info to info & "\nVolume: " & sound volume
set info to info & "\nShuffle: " & shuffling
set info to info & "\nRepeating: " & repeating
end tell
return info')
echo "$info";
break ;;
"share" )
url=$(osascript -e 'tell application "Spotify" to spotify url of current track');
remove='spotify:track:'
url=${url#$remove}
url="http://open.spotify.com/track/$url"
cecho "Share URL: $url";
cecho -n "$url" | pbcopy
break;;
-h|--help| *)
showHelp;
break ;;
esac
done
}
# 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"
#compdef pass
#autoload
# Copyright (C) 2012 - 2014:
# Johan Venant <jvenant@invicem.pro>
# Brian Mattern <rephorm@rephorm.com>
# Jason A. Donenfeld <Jason@zx2c4.com>.
# All Rights Reserved.
#
# This file is licensed under the GPLv2+.
# Please visit http://git.zx2c4.com/password-store/tree/COPYING for more information.
#
# Oh my zsh plugin maintainer: Santiago Borrazás <sanbor@gmail.com>
_pass () {
local cmd
if (( CURRENT > 2)); then
cmd=${words[2]}
# Set the context for the subcommand.
curcontext="${curcontext%:*:*}:pass-$cmd"
# Narrow the range of words we are looking at to exclude `pass'
(( CURRENT-- ))
shift words
# Run the completion for the subcommand
case "${cmd}" in
init)
_arguments : \
"-p[gpg-id will only be applied to this subfolder]" \
"--path[gpg-id will only be applied to this subfolder]"
_pass_complete_keys
;;
ls|list|edit)
_pass_complete_entries_with_subdirs
;;
insert)
_arguments : \
"-e[echo password to console]" \
"--echo[echo password to console]" \
"-m[multiline]" \
"--multiline[multiline]"
_pass_complete_entries_with_subdirs
;;
generate)
_arguments : \
"-n[don't include symbols in password]" \
"--no-symbols[don't include symbols in password]" \
"-c[copy password to the clipboard]" \
"--clip[copy password to the clipboard]" \
"-f[force overwrite]" \
"--force[force overwrite]" \
"-i[replace first line]" \
"--in-place[replace first line]"
_pass_complete_entries_with_subdirs
;;
cp|copy|mv|rename)
_arguments : \
"-f[force rename]" \
"--force[force rename]"
_pass_complete_entries_with_subdirs
;;
rm)
_arguments : \
"-f[force deletion]" \
"--force[force deletion]" \
"-r[recursively delete]" \
"--recursive[recursively delete]"
_pass_complete_entries_with_subdirs
;;
git)
local -a subcommands
subcommands=(
"init:Initialize git repository"
"push:Push to remote repository"
"pull:Pull from remote repository"
"config:Show git config"
"log:Show git log"
"reflog:Show git reflog"
)
_describe -t commands 'pass git' subcommands
;;
show|*)
_pass_cmd_show
;;
esac
else
local -a subcommands
subcommands=(
"init:Initialize new password storage"
"ls:List passwords"
"find:Find password files or directories based on pattern"
"grep:Search inside decrypted password files for matching pattern"
"show:Decrypt and print a password"
"insert:Insert a new password"
"generate:Generate a new password using pwgen"
"edit:Edit a password with \$EDITOR"
"mv:Rename the password"
"cp:Copy the password"
"rm:Remove the password"
"git:Call git on the password store"
"version:Output version information"
"help:Output help message"
)
_describe -t commands 'pass' subcommands
_arguments : \
"--version[Output version information]" \
"--help[Output help message]"
_pass_cmd_show
fi
}
_pass_cmd_show () {
_arguments : \
"-c[put it on the clipboard]" \
"--clip[put it on the clipboard]"
_pass_complete_entries
}
_pass_complete_entries_helper () {
local IFS=$'\n'
local prefix="${PASSWORD_STORE_DIR:-$HOME/.password-store}"
_values -C 'passwords' ${$(find -L "$prefix" \( -name .git -o -name .gpg-id \) -prune -o $@ -print 2>/dev/null | sed -e "s#${prefix}/\{0,1\}##" -e 's#\.gpg##' | sort):-""}
}
_pass_complete_entries_with_subdirs () {
_pass_complete_entries_helper
}
_pass_complete_entries () {
_pass_complete_entries_helper -type f
}
_pass_complete_keys () {
local IFS=$'\n'
# Extract names and email addresses from gpg --list-keys
_values 'gpg keys' $(gpg2 --list-secret-keys --with-colons | cut -d : -f 10 | sort -u | sed '/^$/d')
}
_pass
_paver_does_target_list_need_generating () {
[ ! -f .paver_targets ] && return 0;
[ pavement.py -nt .paver_targets ] && return 0;
return 1;
}
_paver () {
if [ -f pavement.py ]; then
if _paver_does_target_list_need_generating; then
paver --help 2>&1 |grep '-'|grep -v -e '--'|awk -F '-' '{print $1}'|tr -d ' ' > .paver_targets
fi
compadd `cat .paver_targets`
fi
}
compdef _paver paver
#compdef pep8
#
# this is zsh completion function file.
# generated by genzshcomp(ver: 0.5.1)
#
typeset -A opt_args
local context state line
_arguments -s -S \
"--help[show this help message and exit]:" \
"-h[show this help message and exit]:" \
"--version[show program's version number and exit]:" \
"--verbose[print status messages, or debug with -vv]" \
"-v[print status messages, or debug with -vv]" \
"--quiet[report only file names, or nothing with -qq]" \
"-q[report only file names, or nothing with -qq]" \
"--repeat[(obsolete) show all occurrences of the same error]" \
"-r[(obsolete) show all occurrences of the same error]" \
"--first[show first occurrence of each error]" \
"--exclude[exclude files or directories which match these comma separated patterns (default: .svn,CVS,.bzr,.hg,.git,__pycache__)]::patterns:_files" \
"--filename[when parsing directories, only check filenames matching these comma separated patterns (default: *.py)]::patterns:_files" \
"--select[select errors and warnings (e.g. E,W6)]::errors:_files" \
"--ignore[skip errors and warnings (e.g. E4,W)]::errors:_files" \
"--show-source[show source code for each error]" \
"--show-pep8[show text of PEP 8 for each error (implies --first)]" \
"--statistics[count errors and warnings]" \
"--count[print total number of errors and warnings to standard error and set exit code to 1 if total is not null]" \
"--max-line-length[set maximum allowed line length (default: 79)]::n:_files" \
"--format[set the error format \[default|pylint|<custom>\]]::format:_files" \
"--diff[report only lines changed according to the unified diff received on STDIN]" \
"--benchmark[measure processing speed are read from the \[pep8\] section of the tox.ini fg file located in any parent folder of the path(s) llowed options are: exclude, filename, select, ngth, count, format, quiet, show-pep8, show-source, .]" \
"--config[user config file location (default: /home/gsemet/.config/pep8)]::path:_files" \
"*::args:_files"
[Per-Directory-History][6]
=========================
Per directory history for zsh, as well as global history, and the
ability to toggle between them with ^G.
This is a implementation of per directory history for zsh, some
implementations of which exist in bash[1][],[2][]. It also implements
a per-directory-history-toggle-history function to change from using the
directory history to using the global history. In both cases the history is
always saved to both the global history and the directory history, so the
toggle state will not effect the saved histories. Being able to switch
between global and directory histories on the fly is a novel feature as far
as I am aware.
This is a standalone repository for the script, however it is also included in
[oh-my-zsh][4] as a plugin.
----------------------------------------------------------------------------
Usage
----------------------------------------------------------------------------
1. Load this script into your interactive ZSH session:
% source zsh-per-directory-history.zsh
2. The default mode if per directory history, interact with your history as normal.
3. Press ^G (the Control and G keys simultaneously) to toggle between local
and global histories. If you would prefer a different shortcut to toggle
set the PER_DIRECTORY_HISTORY_TOGGLE environment variable.
-------------------------------------------------------------------------------
Configuration
-------------------------------------------------------------------------------
* HISTORY_BASE a global variable that defines the base directory in which the
directory histories are stored
* per-directory-history-toggle-history is the function to toggle the history
-------------------------------------------------------------------------------
History
-------------------------------------------------------------------------------
The idea/inspiration for a per directory history is from [Stewart MacArthur][1]
and [Dieter][2], the implementation idea is from [Bart Schaefer][3]. The
implementation is by [Jim Hester][5] in September 2012.
[1]: http://www.compbiome.com/2010/07/bash-per-directory-bash-history.html
[2]: http://dieter.plaetinck.be/per_directory_bash
[3]: http://www.zsh.org/mla/users/1997/msg00226.html
[4]: https://github.com/robbyrussell/oh-my-zsh
[5]: http://jimhester.com
[6]: http://github.com/jimhester/per-directory-history
per-directory-history.zsh
\ No newline at end of file
#!/usr/bin/env zsh
#
# This is a implementation of per directory history for zsh, some
# implementations of which exist in bash[1,2]. It also implements
# a per-directory-history-toggle-history function to change from using the
# directory history to using the global history. In both cases the history is
# always saved to both the global history and the directory history, so the
# toggle state will not effect the saved histories. Being able to switch
# between global and directory histories on the fly is a novel feature as far
# as I am aware.
#
#-------------------------------------------------------------------------------
# Configuration
#-------------------------------------------------------------------------------
#
# HISTORY_BASE a global variable that defines the base directory in which the
# directory histories are stored
#
#-------------------------------------------------------------------------------
# History
#-------------------------------------------------------------------------------
#
# The idea/inspiration for a per directory history is from Stewart MacArthur[1]
# and Dieter[2], the implementation idea is from Bart Schaefer on the the zsh
# mailing list[3]. The implementation is by Jim Hester in September 2012.
#
# [1]: http://www.compbiome.com/2010/07/bash-per-directory-bash-history.html
# [2]: http://dieter.plaetinck.be/per_directory_bash
# [3]: http://www.zsh.org/mla/users/1997/msg00226.html
#
################################################################################
#
# Copyright (c) 2014 Jim Hester
#
# This software is provided 'as-is', without any express or implied warranty.
# In no event will the authors be held liable for any damages arising from the
# use of this software.
#
# Permission is granted to anyone to use this software for any purpose,
# including commercial applications, and to alter it and redistribute it
# freely, subject to the following restrictions:
#
# 1. The origin of this software must not be misrepresented; you must not claim
# that you wrote the original software. If you use this software in a product,
# an acknowledgment in the product documentation would be appreciated but is
# not required.
#
# 2. Altered source versions must be plainly marked as such, and must not be
# misrepresented as being the original software.
#
# 3. This notice may not be removed or altered from any source distribution..
#
################################################################################
#-------------------------------------------------------------------------------
# configuration, the base under which the directory histories are stored
#-------------------------------------------------------------------------------
[[ -z $HISTORY_BASE ]] && HISTORY_BASE="$HOME/.directory_history"
[[ -z $PER_DIRECTORY_HISTORY_TOGGLE ]] && PER_DIRECTORY_HISTORY_TOGGLE='^G'
#-------------------------------------------------------------------------------
# toggle global/directory history used for searching - ctrl-G by default
#-------------------------------------------------------------------------------
function per-directory-history-toggle-history() {
if [[ $_per_directory_history_is_global == true ]]; then
_per-directory-history-set-directory-history
print -n "\nusing local history"
else
_per-directory-history-set-global-history
print -n "\nusing global history"
fi
zle .push-line
zle .accept-line
}
autoload per-directory-history-toggle-history
zle -N per-directory-history-toggle-history
bindkey $PER_DIRECTORY_HISTORY_TOGGLE per-directory-history-toggle-history
#-------------------------------------------------------------------------------
# implementation details
#-------------------------------------------------------------------------------
_per_directory_history_directory="$HISTORY_BASE${PWD:A}/history"
function _per-directory-history-change-directory() {
_per_directory_history_directory="$HISTORY_BASE${PWD:A}/history"
mkdir -p ${_per_directory_history_directory:h}
if [[ $_per_directory_history_is_global == false ]]; then
#save to the global history
fc -AI $HISTFILE
#save history to previous file
local prev="$HISTORY_BASE${OLDPWD:A}/history"
mkdir -p ${prev:h}
fc -AI $prev
#discard previous directory's history
local original_histsize=$HISTSIZE
HISTSIZE=0
HISTSIZE=$original_histsize
#read history in new file
if [[ -e $_per_directory_history_directory ]]; then
fc -R $_per_directory_history_directory
fi
fi
}
function _per-directory-history-addhistory() {
print -Sr -- "${1%%$'\n'}"
fc -p $_per_directory_history_directory
}
function _per-directory-history-set-directory-history() {
if [[ $_per_directory_history_is_global == true ]]; then
fc -AI $HISTFILE
local original_histsize=$HISTSIZE
HISTSIZE=0
HISTSIZE=$original_histsize
if [[ -e "$_per_directory_history_directory" ]]; then
fc -R "$_per_directory_history_directory"
fi
fi
_per_directory_history_is_global=false
}
function _per-directory-history-set-global-history() {
if [[ $_per_directory_history_is_global == false ]]; then
fc -AI $_per_directory_history_directory
local original_histsize=$HISTSIZE
HISTSIZE=0
HISTSIZE=$original_histsize
if [[ -e "$HISTFILE" ]]; then
fc -R "$HISTFILE"
fi
fi
_per_directory_history_is_global=true
}
#add functions to the exec list for chpwd and zshaddhistory
autoload -U add-zsh-hook
add-zsh-hook chpwd _per-directory-history-change-directory
add-zsh-hook zshaddhistory _per-directory-history-addhistory
#start in directory mode
mkdir -p ${_per_directory_history_directory:h}
_per_directory_history_is_global=true
_per-directory-history-set-directory-history
# https://github.com/dbbolton
#
# Below are some useful Perl-related aliases/functions that I use with zsh.
# Aliases ###################################################################
# perlbrew ########
alias pbi='perlbrew install'
alias pbl='perlbrew list'
alias pbo='perlbrew off'
alias pbs='perlbrew switch'
alias pbu='perlbrew use'
# Perl ############
# perldoc`
alias pd='perldoc'
# use perl like awk/sed
alias ple='perl -wlne'
# show the latest stable release of Perl
alias latest-perl='curl -s http://www.perl.org/get.html | perl -wlne '\''if (/perl\-([\d\.]+)\.tar\.gz/) { print $1; exit;}'\'
# Functions #################################################################
# newpl - creates a basic Perl script file and opens it with $EDITOR
newpl () {
# set $EDITOR to 'vim' if it is undefined
[[ -z $EDITOR ]] && EDITOR=vim
# if the file exists, just open it
[[ -e $1 ]] && print "$1 exists; not modifying.\n" && $EDITOR $1
# if it doesn't, make it, and open it
[[ ! -e $1 ]] && print '#!/usr/bin/perl'"\n"'use strict;'"\n"'use warnings;'\
"\n\n" > $1 && $EDITOR $1
}
# pgs - Perl Global Substitution
# find pattern = 1st arg
# replace pattern = 2nd arg
# filename = 3rd arg
pgs() { # [find] [replace] [filename]
perl -i.orig -pe 's/'"$1"'/'"$2"'/g' "$3"
}
# Perl grep, because 'grep -P' is terrible. Lets you work with pipes or files.
prep() { # [pattern] [filename unless STDOUT]
perl -nle 'print if /'"$1"'/;' $2
}
## Perms
Plugin to handle some unix filesystem permissions quickly
### Usage
* `set755` recursively sets all directories located within the current working directory and sub directories to octal 755.
* `set644` recursively sets all files located within the current working directory and sub directories to octal 644.
* `fixperms` is a wrapper around `set755` and `set644` applied to a specified directory or the current directory otherwise. It also prompts prior to execution unlike the other two aliases.
\ No newline at end of file
# Some useful commands for setting permissions.
#
# Rory Hardy [GneatGeek]
# Andrew Janke [apjanke]
### Aliases
# Set all files' permissions to 644 recursively in a directory
alias set644='find . -type f ! -perm 644 -print0 | xargs -0 chmod 644'
# Set all directories' permissions to 755 recursively in a directory
alias set755='find . -type d ! -perm 755 -print0 | xargs -0 chmod 755'
### Functions
# fixperms - fix permissions on files and directories, with confirmation
# Returns 0 on success, nonzero if any errors occurred
fixperms () {
local opts confirm target exit_status chmod_opts use_slow_mode
zparseopts -E -D -a opts -help -slow v+=chmod_opts
if [[ $# > 1 || -n "${opts[(r)--help]}" ]]; then
cat <<EOF
Usage: fixperms [-v] [--help] [--slow] [target]
target is the file or directory to change permissions on. If omitted,
the current directory is taken to be the target.
-v enables verbose output (may be supplied multiple times)
--slow will use a slower but more robust mode, which is effective if
directories themselves have permissions that forbid you from
traversing them.
EOF
exit_status=$(( $# > 1 ))
return $exit_status
fi
if [[ $# == 0 ]]; then
target="."
else
target="$1"
fi
if [[ -n ${opts[(r)--slow]} ]]; then use_slow=true; else use_slow=false; fi
# Because this requires confirmation, bail in noninteractive shells
if [[ ! -o interactive ]]; then
echo "fixperms: cannot run in noninteractive shell"
return 1
fi
echo "Fixing perms on $target?"
printf '%s' "Proceed? (y|n) "
read confirm
if [[ "$confirm" != y ]]; then
# User aborted
return 1
fi
# This xargs form is faster than -exec chmod <N> {} \; but will encounter
# issues if the directories themselves have permissions such that you can't
# recurse in to them. If that happens, just rerun this a few times.
exit_status=0;
if [[ $use_slow == true ]]; then
# Process directories first so non-traversable ones are fixed as we go
find "$target" -type d ! -perm 755 -exec chmod $chmod_opts 755 {} \;
if [[ $? != 0 ]]; then exit_status=$?; fi
find "$target" -type f ! -perm 644 -exec chmod $chmod_opts 644 {} \;
if [[ $? != 0 ]]; then exit_status=$?; fi
else
find "$target" -type d ! -perm 755 -print0 | xargs -0 chmod $chmod_opts 755
if [[ $? != 0 ]]; then exit_status=$?; fi
find "$target" -type f ! -perm 644 -print0 | xargs -0 chmod $chmod_opts 644
if [[ $? != 0 ]]; then exit_status=$?; fi
fi
echo "Complete"
return $exit_status
}
_phing () {
if [ -f build.xml ]; then
compadd $(phing -l|grep -v "\[property\]"|grep -v "Buildfile"|sed 1d|grep -v ":$" |grep -v "^\-*$"|grep -v "Warning:"|awk '{print $1}')
fi
}
compdef _phing phing
#compdef pip pip2 pip-2.7 pip3 pip-3.2 pip-3.3 pip-3.4
#autoload
# pip zsh completion, based on last stable release (pip8)
# homebrew completion and backwards compatibility
_pip_all() {
# we cache the list of packages (originally from the macports plugin)
if (( ! $+piplist )); then
zsh-pip-cache-packages
piplist=($(cat $ZSH_PIP_CACHE_FILE))
fi
}
_pip_installed() {
installed_pkgs=(`pip freeze | cut -d '=' -f 1`)
}
local -a _1st_arguments
_1st_arguments=(
'install:install packages'
'download:download packages'
'uninstall:uninstall packages'
'freeze:output all currently installed packages (exact versions) to stdout'
'list:list installed packages'
'show:show information about installed packages'
'search:search PyPI'
'wheel:build individual wheel archives for your requirements and dependencies'
'hash:compute a hash of a local package archive'
'help:show available commands'
'bundle:create pybundles (archives containing multiple packages)(deprecated)'
'unzip:unzip individual packages(deprecated)'
'zip:zip individual packages(deprecated)'
)
local expl
local -a all_pkgs installed_pkgs
_arguments \
'(-h --help)'{-h,--help}'[show help]' \
'(--isolated)--isolated[run pip in isolated mode, ignores environment variables and user configuration]' \
'(-v --verbose)'{-v,--verbose}'[give more output]' \
'(-V --version)'{-V,--version}'[show version number of program and exit]' \
'(-q --quiet)'{-q,--quiet}'[give less output]' \
'(--log)--log[log file location]' \
'(--proxy)--proxy[proxy in form user:passwd@proxy.server:port]' \
'(--retries)--retries[max number of retries per connection (default 5 times)]' \
'(--timeout)--timeout[socket timeout (default 15s)]' \
'(--exists-action)--exists-action[default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup]' \
'(--trusted-host)--trusted-host[mark this host as trusted]' \
'(--cert)--cert[path to alternate CA bundle]' \
'(--client-cert)--client-cert[path to SSL client certificate]' \
'(--cache-dir)--cache-dir[store the cache data in specified directory]' \
'(--no-cache-dir)--no-cache-dir[disable de cache]' \
'(--disable-pip-version-check)--disable-pip-version-check[do not check periodically for new pip version downloads]' \
'(-E --environment)'{-E,--environment}'[virtualenv environment to run pip in (deprecated)]' \
'(-s --enable-site-packages)'{-s,--enable-site-packages}'[include site-packages in virtualenv (deprecated)]' \
'*:: :->subcmds' && return 0
if (( CURRENT == 1 )); then
_describe -t commands "pip subcommand" _1st_arguments
return
fi
case "$words[1]" in
search)
_arguments \
'(--index)--index[base URL of Python Package Index]' ;;
freeze)
_arguments \
'(-l --local)'{-l,--local}'[report only virtualenv packages]' ;;
install)
_arguments \
'(-U --upgrade)'{-U,--upgrade}'[upgrade all packages to the newest available version]' \
'(-f --find-links)'{-f,--find-links}'[URL for finding packages]' \
'(-r --requirement)'{-r,--requirement}'[Requirements file for packages to install]:File:_files' \
'(--no-deps --no-dependencies)'{--no-deps,--no-dependencies}'[iIgnore package dependencies]' \
'(--no-install)--no-install[only download packages]' \
'(--no-download)--no-download[only install downloaded packages]' \
'(--install-option)--install-option[extra arguments to be supplied to the setup.py]' \
'(--single-version-externally-managed)--single-version-externally-managed[do not download/install dependencies. requires --record or --root]'\
'(--root)--root[treat this path as a fake chroot, installing into it. implies --single-version-externally-managed]'\
'(--record)--record[file to record all installed files to.]'\
'(-r --requirement)'{-r,--requirement}'[requirements file]: :_files'\
'(-e --editable)'{-e,--editable}'[path of or url to source to link to instead of installing.]: :_files -/'\
'1: :->packages' && return 0
if [[ "$state" == packages ]]; then
_pip_all
_wanted piplist expl 'packages' compadd -a piplist
fi ;;
uninstall)
_pip_installed
_wanted installed_pkgs expl 'installed packages' compadd -a installed_pkgs ;;
show)
_pip_installed
_wanted installed_pkgs expl 'installed packages' compadd -a installed_pkgs ;;
esac
# Usage:
# Just add pip to your installed plugins.
# If you would like to change the cheeseshops used for autocomplete set
# ZSH_PIP_INDEXES in your zshrc. If one of your indexes are bogus you won't get
# any kind of error message, pip will just not autocomplete from them. Double
# check!
#
# If you would like to clear your cache, go ahead and do a
# "zsh-pip-clear-cache".
ZSH_PIP_CACHE_FILE=~/.pip/zsh-cache
ZSH_PIP_INDEXES=(https://pypi.python.org/simple/)
zsh-pip-clear-cache() {
rm $ZSH_PIP_CACHE_FILE
unset piplist
}
zsh-pip-clean-packages() {
sed -n '/<a href/ s/.*>\([^<]\{1,\}\).*/\1/p'
}
zsh-pip-cache-packages() {
if [[ ! -d ${ZSH_PIP_CACHE_FILE:h} ]]; then
mkdir -p ${ZSH_PIP_CACHE_FILE:h}
fi
if [[ ! -f $ZSH_PIP_CACHE_FILE ]]; then
echo -n "(...caching package index...)"
tmp_cache=/tmp/zsh_tmp_cache
for index in $ZSH_PIP_INDEXES ; do
# well... I've already got two problems
curl $index 2>/dev/null | \
zsh-pip-clean-packages \
>> $tmp_cache
done
sort $tmp_cache | uniq | tr '\n' ' ' > $ZSH_PIP_CACHE_FILE
rm $tmp_cache
fi
}
# A test function that validates the regex against known forms of the simple
# index. If you modify the regex to make it work for you, you should add a test
# case in here and make sure that your changes don't break things for someone
# else.
zsh-pip-test-clean-packages() {
local expected
local actual
expected="0x10c-asm
1009558_nester"
actual=$(echo -n "<html><head><title>Simple Index</title><meta name=\"api-version\" value=\"2\" /></head><body>
<a href='0x10c-asm'>0x10c-asm</a><br/>
<a href='1009558_nester'>1009558_nester</a><br/>
</body></html>" | zsh-pip-clean-packages)
if [[ $actual != $expected ]] ; then
echo -e "python's simple index is broken:\n$actual\n !=\n$expected"
else
echo "python's simple index is fine"
fi
actual=$(echo -n '<html>
<head>
<title>Simple Package Index</title>
</head>
<body>
<a href="0x10c-asm">0x10c-asm</a><br/>
<a href="1009558_nester">1009558_nester</a><br/>
</body></html>' | zsh-pip-clean-packages)
if [[ $actual != $expected ]] ; then
echo -e "the djangopypi2 index is broken:\n$actual\n !=\n$expected"
else
echo "the djangopypi2 index is fine"
fi
}
alias pip="noglob pip" # allows square brackets for pip command invocation
# pj
The `pj` plugin (short for `Project Jump`) allows you to define several
folders where you store your projects, so that you can jump there directly
by just using the name of the project directory.
Original idea and code by Jan De Poorter ([@DefV](https://github.com/DefV))
Source: https://gist.github.com/pjaspers/368394#gistcomment-1016
## Usage
1. Enable the `pj` plugin:
```zsh
plugins=(... pj)
```
2. Set `$PROJECT_PATHS` in your ~/.zshrc:
```zsh
PROJECT_PATHS=(~/src ~/work ~/"dir with spaces")
```
You can now use one of the following commands:
##### `pj my-project`:
`cd` to the directory named "my-project" found in one of the `$PROJECT_PATHS`
directories. If there are several directories named the same, the first one
to appear in `$PROJECT_PATHS` has preference.
For example:
```zsh
PROJECT_PATHS=(~/code ~/work)
$ ls ~/code # ~/code/blog ~/code/react
$ ls ~/work # ~/work/blog ~/work/project
$ pj blog # <-- will cd to ~/code/blog
```
##### `pjo my-project`
Open the project directory with your defined `$EDITOR`. This follows the same
directory rules as the `pj` command above.
Note: `pjo` is an alias of `pj open`.
alias pjo="pj open"
pj () {
emulate -L zsh
cmd="cd"
project=$1
if [[ "open" == "$project" ]]; then
shift
project=$*
cmd=${=EDITOR}
else
project=$*
fi
for basedir ($PROJECT_PATHS); do
if [[ -d "$basedir/$project" ]]; then
$cmd "$basedir/$project"
return
fi
done
echo "No such project '${project}'."
}
_pj () {
emulate -L zsh
typeset -a projects
for basedir ($PROJECT_PATHS); do
projects+=(${basedir}/*(/N))
done
compadd ${projects:t}
}
compdef _pj pj
#compdef pod
#autoload
# setopt XTRACE VERBOSE
# vim: ft=zsh sw=2 ts=2 et
# -----------------------------------------------------------------------------
# FILE: _pod
# DESCRIPTION: Cocoapods (0.33.1) autocomplete plugin for Oh-My-Zsh
# http://cocoapods.org
# Generated with `pod --completion-script
# AUTHOR: Alexandre Joly (alexandre.joly@mekanics.ch)
# GITHUB: https://github.com/mekanics
# TWITTER: @jolyAlexandre
# VERSION: 0.0.5
# -----------------------------------------------------------------------------
local -a _subcommands
local -a _options
case "$words[2]" in
help)
case "$words[3]" in
*) # pod help
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod help options" _options
;;
esac
;;
ipc)
case "$words[3]" in
list)
case "$words[4]" in
*) # pod ipc list
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod ipc list options" _options
;;
esac
;;
podfile)
case "$words[4]" in
*) # pod ipc podfile
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod ipc podfile options" _options
;;
esac
;;
repl)
case "$words[4]" in
*) # pod ipc repl
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod ipc repl options" _options
;;
esac
;;
spec)
case "$words[4]" in
*) # pod ipc spec
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod ipc spec options" _options
;;
esac
;;
update-search-index)
case "$words[4]" in
*) # pod ipc update-search-index
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod ipc update-search-index options" _options
;;
esac
;;
*) # pod ipc
_subcommands=(
"list:Lists the specifications known to CocoaPods."
"podfile:Converts a Podfile to YAML."
"repl:The repl listens to commands on standard input."
"spec:Converts a podspec to JSON."
"update-search-index:Updates the search index."
)
_describe -t commands "pod ipc subcommands" _subcommands
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod ipc options" _options
;;
esac
;;
init)
case "$words[3]" in
*) # pod init
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod init options" _options
;;
esac
;;
install)
case "$words[3]" in
*) # pod install
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--no-clean:Leave SCM dirs like \`.git\` and \`.svn\` intact after downloading"
"--no-integrate:Skip integration of the Pods libraries in the Xcode project(s)"
"--no-repo-update:Skip running \`pod repo update\` before install"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod install options" _options
;;
esac
;;
lib)
case "$words[3]" in
create)
case "$words[4]" in
*) # pod lib create
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod lib create options" _options
;;
esac
;;
lint)
case "$words[4]" in
*) # pod lib lint
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--no-clean:Lint leaves the build directory intact for inspection"
"--no-subspecs:Lint skips validation of subspecs"
"--only-errors:Lint validates even if warnings are present"
"--quick:Lint skips checks that would require to download and build the spec"
"--silent:Show nothing"
"--subspec=NAME:Lint validates only the given subspec"
"--verbose:Show more debugging information"
)
_describe -t options "pod lib lint options" _options
;;
esac
;;
*) # pod lib
_subcommands=(
"create:Creates a new Pod"
"lint:Validates a Pod"
)
_describe -t commands "pod lib subcommands" _subcommands
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod lib options" _options
;;
esac
;;
list)
case "$words[3]" in
new)
case "$words[4]" in
*) # pod list new
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--update:Run \`pod repo update\` before listing"
"--verbose:Show more debugging information"
)
_describe -t options "pod list new options" _options
;;
esac
;;
*) # pod list
_subcommands=(
"new:Lists pods introduced in the master spec-repo since the last check"
)
_describe -t commands "pod list subcommands" _subcommands
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--update:Run \`pod repo update\` before listing"
"--verbose:Show more debugging information"
)
_describe -t options "pod list options" _options
;;
esac
;;
outdated)
case "$words[3]" in
*) # pod outdated
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--no-repo-update:Skip running \`pod repo update\` before install"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod outdated options" _options
;;
esac
;;
plugins)
case "$words[3]" in
create)
case "$words[4]" in
*) # pod plugins create
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod plugins create options" _options
;;
esac
;;
list)
case "$words[4]" in
*) # pod plugins list
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--verbose:Show more debugging information"
)
_describe -t options "pod plugins list options" _options
;;
esac
;;
search)
case "$words[4]" in
*) # pod plugins search
_options=(
"--full:Search by name, author, and description"
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--verbose:Show more debugging information"
)
_describe -t options "pod plugins search options" _options
;;
esac
;;
*) # pod plugins
_subcommands=(
"create:Creates a new plugin"
"list:List all known plugins"
"search:Search for known plugins"
)
_describe -t commands "pod plugins subcommands" _subcommands
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod plugins options" _options
;;
esac
;;
push)
case "$words[3]" in
*) # pod push
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod push options" _options
;;
esac
;;
repo)
case "$words[3]" in
add)
case "$words[4]" in
*) # pod repo add
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--shallow:Create a shallow clone (fast clone, but no push capabilities)"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod repo add options" _options
;;
esac
;;
lint)
case "$words[4]" in
*) # pod repo lint
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--only-errors:Lint presents only the errors"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod repo lint options" _options
;;
esac
;;
push)
case "$words[4]" in
*) # pod repo push
_options=(
"--allow-warnings:Allows pushing even if there are warnings"
"--help:Show help banner of specified command"
"--local-only:Does not perform the step of pushing REPO to its remote"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod repo push options" _options
;;
esac
;;
remove)
case "$words[4]" in
*) # pod repo remove
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod repo remove options" _options
;;
esac
;;
update)
case "$words[4]" in
*) # pod repo update
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod repo update options" _options
;;
esac
;;
*) # pod repo
_subcommands=(
"add:Add a spec repo."
"lint:Validates all specs in a repo."
"push:Push new specifications to a spec-repo"
"remove:Remove a spec repo"
"update:Update a spec repo."
)
_describe -t commands "pod repo subcommands" _subcommands
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod repo options" _options
;;
esac
;;
search)
case "$words[3]" in
*) # pod search
_options=(
"--full:Search by name, summary, and description"
"--help:Show help banner of specified command"
"--ios:Restricts the search to Pods supported on iOS"
"--no-ansi:Show output without ANSI codes"
"--osx:Restricts the search to Pods supported on OS X"
"--stats:Show additional stats (like GitHub watchers and forks)"
"--verbose:Show more debugging information"
"--web:Searches on cocoapods.org"
)
_describe -t options "pod search options" _options
;;
esac
;;
setup)
case "$words[3]" in
*) # pod setup
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--no-shallow:Clone full history so push will work"
"--push:Use this option to enable push access once granted"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod setup options" _options
;;
esac
;;
spec)
case "$words[3]" in
cat)
case "$words[4]" in
*) # pod spec cat
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--show-all:Pick from all versions of the given podspec"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod spec cat options" _options
;;
esac
;;
create)
case "$words[4]" in
*) # pod spec create
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod spec create options" _options
;;
esac
;;
edit)
case "$words[4]" in
*) # pod spec edit
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--show-all:Pick which spec to edit from all available versions of the given podspec"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod spec edit options" _options
;;
esac
;;
lint)
case "$words[4]" in
*) # pod spec lint
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--no-clean:Lint leaves the build directory intact for inspection"
"--no-subspecs:Lint skips validation of subspecs"
"--only-errors:Lint validates even if warnings are present"
"--quick:Lint skips checks that would require to download and build the spec"
"--silent:Show nothing"
"--subspec=NAME:Lint validates only the given subspec"
"--verbose:Show more debugging information"
)
_describe -t options "pod spec lint options" _options
;;
esac
;;
which)
case "$words[4]" in
*) # pod spec which
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--show-all:Print all versions of the given podspec"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod spec which options" _options
;;
esac
;;
*) # pod spec
_subcommands=(
"cat:Prints a spec file."
"create:Create spec file stub."
"edit:Edit a spec file."
"lint:Validates a spec file."
"which:Prints the path of the given spec."
)
_describe -t commands "pod spec subcommands" _subcommands
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod spec options" _options
;;
esac
;;
trunk)
case "$words[3]" in
add-owner)
case "$words[4]" in
*) # pod trunk add-owner
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod trunk add-owner options" _options
;;
esac
;;
me)
case "$words[4]" in
clean-sessions)
case "$words[5]" in
*) # pod trunk me clean-sessions
_options=(
"--all:Removes all your sessions, except for the current one"
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod trunk me clean-sessions options" _options
;;
esac
;;
*) # pod trunk me
_subcommands=(
"clean-sessions:Remove sessions"
)
_describe -t commands "pod trunk me subcommands" _subcommands
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod trunk me options" _options
;;
esac
;;
push)
case "$words[4]" in
*) # pod trunk push
_options=(
"--allow-warnings:Allows push even if there are lint warnings"
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod trunk push options" _options
;;
esac
;;
register)
case "$words[4]" in
*) # pod trunk register
_options=(
"--description=DESCRIPTION:An arbitrary description to easily identify your session later on."
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod trunk register options" _options
;;
esac
;;
*) # pod trunk
_subcommands=(
"add-owner:Add an owner to a pod"
"me:Display information about your sessions"
"push:Publish a podspec"
"register:Manage sessions"
)
_describe -t commands "pod trunk subcommands" _subcommands
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod trunk options" _options
;;
esac
;;
try)
case "$words[3]" in
*) # pod try
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod try options" _options
;;
esac
;;
update)
case "$words[3]" in
*) # pod update
_options=(
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--no-clean:Leave SCM dirs like \`.git\` and \`.svn\` intact after downloading"
"--no-integrate:Skip integration of the Pods libraries in the Xcode project(s)"
"--no-repo-update:Skip running \`pod repo update\` before install"
"--silent:Show nothing"
"--verbose:Show more debugging information"
)
_describe -t options "pod update options" _options
;;
esac
;;
*) # pod
_subcommands=(
"help:Show help for the given command."
"ipc:Inter-process communication"
"init:Generate a Podfile for the current directory."
"install:Install project dependencies"
"lib:Develop pods"
"list:List pods"
"outdated:Show outdated project dependencies"
"plugins:Show available CocoaPods plugins"
"push:Temporary alias for the \`pod repo push\` command"
"repo:Manage spec-repositories"
"search:Searches for pods"
"setup:Setup the CocoaPods environment"
"spec:Manage pod specs"
"trunk:Interact with the CocoaPods API (e.g. publishing new specs)"
"try:Try a Pod!"
"update:Update outdated project dependencies"
)
_describe -t commands "pod subcommands" _subcommands
_options=(
"--completion-script:Print the auto-completion script"
"--help:Show help banner of specified command"
"--no-ansi:Show output without ANSI codes"
"--silent:Show nothing"
"--verbose:Show more debugging information"
"--version:Show the version of the tool"
)
_describe -t options "pod options" _options
;;
esac
# Aliases to control Postgres
# Paths noted below are for Postgres installed via Homebrew on OSX
alias startpost='pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start'
alias stoppost='pg_ctl -D /usr/local/var/postgres stop -s -m fast'
alias restartpost='stoppost && sleep 1 && startpost'
alias reloadpost='pg_ctl reload -D /usr/local/var/postgres -s'
alias statuspost='pg_ctl status -D /usr/local/var/postgres -s'
\ No newline at end of file
# Restart a rack app running under pow
# http://pow.cx/
#
# Adds a kapow command that will restart an app
#
# $ kapow myapp
#
# Supports command completion.
#
# If you are not already using completion you might need to enable it with
#
# autoload -U compinit compinit
#
# Changes:
#
# Defaults to the current application, and will walk up the tree to find
# a config.ru file and restart the corresponding app
#
# Will Detect if a app does not exist in pow and print a (slightly) helpful
# error message
rack_root(){
setopt chaselinks
local orgdir="$PWD"
local basedir="$PWD"
while [[ $basedir != '/' ]]; do
test -e "$basedir/config.ru" && break
builtin cd ".." 2>/dev/null
basedir="$PWD"
done
builtin cd "$orgdir" 2>/dev/null
[[ ${basedir} == "/" ]] && return 1
echo $basedir
}
rack_root_detect(){
basedir=$(rack_root)
echo `basename $basedir | sed -E "s/.(com|net|org)//"`
}
kapow(){
local vhost=$1
[ ! -n "$vhost" ] && vhost=$(rack_root_detect)
if [ ! -h ~/.pow/$vhost ]
then
echo "pow: This domain isn’t set up yet. Symlink your application to ${vhost} first."
return 1
fi
[ ! -d ~/.pow/${vhost}/tmp ] && mkdir -p ~/.pow/$vhost/tmp
touch ~/.pow/$vhost/tmp/restart.txt;
[ $? -eq 0 ] && echo "pow: restarting $vhost.dev"
}
compctl -W ~/.pow -/ kapow
powit(){
local basedir="$PWD"
local vhost=$1
[ ! -n "$vhost" ] && vhost=$(rack_root_detect)
if [ ! -h ~/.pow/$vhost ]
then
echo "pow: Symlinking your app with pow. ${vhost}"
[ ! -d ~/.pow/${vhost} ] && ln -s "$basedir" ~/.pow/$vhost
return 1
fi
}
powed(){
local basedir="$(rack_root)"
find ~/.pow/ -type l -lname "*$basedir*" -exec basename {}'.dev' \;
}
# Restart pow process
# taken from http://www.matthewratzloff.com/blog/2011/12/23/restarting-pow-when-dns-stops-responding
repow(){
lsof | grep 20560 | awk '{print $2}' | xargs kill -9
launchctl unload ~/Library/LaunchAgents/cx.pow.powd.plist
launchctl load ~/Library/LaunchAgents/cx.pow.powd.plist
echo "restarted pow"
}
# View the standard out (puts) from any pow app
alias kaput="tail -f ~/Library/Logs/Pow/apps/*"