-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.functions
330 lines (275 loc) · 9.29 KB
/
.functions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
# Create a new directory and enter it
function md() {
mkdir -p "$@" && cd "$@"
}
# list internal IP address
function myip() {
ifconfig | grep 'inet 192'
}
# list MAC address
function mymac() {
ifconfig en1 | awk '/ether/{print $2}'
}
# find shorthand
function f() {
find . -name "$1"
}
function dash() {
# if you have Dash Documentation Tool installed (http://kapeli.com/dash)
# example: dash backbone model.save
open dash://$1:$2
}
function tc-start() {
/Library/Tomcat/bin/startup.sh
}
function tc-stop() {
/Library/Tomcat/bin/shutdown.sh
}
function cattail() {
tail -f /Library/tomcat/logs/catalina.out
}
# cd into whatever is the forefront Finder window.
cdf() { # short for cdfinder
cd "`osascript -e 'tell app "Finder" to POSIX path of (insertion location as alias)'`"
}
# show all terminal colors based on 256 tput setaf
tcolor() {
( x=`tput op` y=`printf %$((${COLUMNS}-6))s`;for i in {0..256};do o=00$i;echo -e ${o:${#o}-3:3} `tput setaf $i;tput setab $i`${y// /=}$x;done; )
}
wtf() {
say What the FUCK!
}
# lets toss an image onto my server and pbcopy that bitch.
function scpp() {
scp "$1" [email protected]:~/paulirish.com/i;
echo "http://paulirish.com/i/$1" | pbcopy;
echo "Copied to clipboard: http://paulirish.com/i/$1"
}
# Start an HTTP server from a directory, optionally specifying the port
function server() {
local port="${1:-8800}"
open "http://localhost:${port}/"
# Set the default Content-Type to `text/plain` instead of `application/octet-stream`
# And serve everything as UTF-8 (although not technically correct, this doesn’t break anything for binary files)
python -c $'import SimpleHTTPServer;\nmap = SimpleHTTPServer.SimpleHTTPRequestHandler.extensions_map;\nmap[""] = "text/plain";\nfor key, value in map.items():\n\tmap[key] = value + ";charset=UTF-8";\nSimpleHTTPServer.test();' "$port"
}
# git log with per-commit cmd-clickable GitHub URLs (iTerm)
function gf() {
local remote="$(git remote -v | awk '/^origin.*\(push\)$/ {print $2}')"
[[ "$remote" ]] || return
local user_repo="$(echo "$remote" | perl -pe 's/.*://;s/\.git$//')"
git log $* --name-status --color | awk "$(cat <<AWK
/^.*commit [0-9a-f]{40}/ {sha=substr(\$2,1,7)}
/^[MA]\t/ {printf "%s\thttps://github.com/$user_repo/blob/%s/%s\n", \$1, sha, \$2; next}
/.*/ {print \$0}
AWK
)" | less -F
}
# Copy w/ progress
cp_p () {
rsync -WavP --human-readable --progress $1 $2
}
# Test if HTTP compression (RFC 2616 + SDCH) is enabled for a given URL.
# Send a fake UA string for sites that sniff it instead of using the Accept-Encoding header. (Looking at you, ajax.googleapis.com!)
function httpcompression() {
encoding="$(curl -LIs -H 'User-Agent: Mozilla/5 Gecko' -H 'Accept-Encoding: gzip,deflate,compress,sdch' "$1" | grep '^Content-Encoding:')" && echo "$1 is encoded using ${encoding#* }" || echo "$1 is not using any encoding"
}
# Syntax-highlight JSON strings or files
function json() {
if [ -p /dev/stdin ]; then
# piping, e.g. `echo '{"foo":42}' | json`
python -mjson.tool | pygmentize -l javascript
else
# e.g. `json '{"foo":42}'`
python -mjson.tool <<< "$*" | pygmentize -l javascript
fi
}
# take this repo and copy it to somewhere else minus the .git stuff.
function gitexport(){
mkdir -p "$1"
git archive master | tar -x -C "$1"
}
# get gzipped size
function gz() {
echo "orig size (bytes): "
cat "$1" | wc -c
echo "gzipped size (bytes): "
gzip -c "$1" | wc -c
}
# All the dig info
function digga() {
dig +nocmd "$1" any +multiline +noall +answer
}
# Escape UTF-8 characters into their 3-byte format
function escape() {
printf "\\\x%s" $(printf "$@" | xxd -p -c1 -u)
echo # newline
}
# Decode \x{ABCD}-style Unicode escape sequences
function unidecode() {
perl -e "binmode(STDOUT, ':utf8'); print \"$@\""
echo # newline
}
# Extract archives - use: extract <file>
# Based on http://dotfiles.org/~pseup/.bashrc
function extract() {
if [ -f "$1" ] ; then
local filename=$(basename "$1")
local foldername="${filename%%.*}"
local fullpath=`perl -e 'use Cwd "abs_path";print abs_path(shift)' "$1"`
local didfolderexist=false
if [ -d "$foldername" ]; then
didfolderexist=true
read -p "$foldername already exists, do you want to overwrite it? (y/n) " -n 1
echo
if [[ $REPLY =~ ^[Nn]$ ]]; then
return
fi
fi
mkdir -p "$foldername" && cd "$foldername"
case $1 in
*.tar.bz2) tar xjf "$fullpath" ;;
*.tar.gz) tar xzf "$fullpath" ;;
*.tar.xz) tar Jxvf "$fullpath" ;;
*.tar.Z) tar xzf "$fullpath" ;;
*.tar) tar xf "$fullpath" ;;
*.taz) tar xzf "$fullpath" ;;
*.tb2) tar xjf "$fullpath" ;;
*.tbz) tar xjf "$fullpath" ;;
*.tbz2) tar xjf "$fullpath" ;;
*.tgz) tar xzf "$fullpath" ;;
*.txz) tar Jxvf "$fullpath" ;;
*.zip) unzip "$fullpath" ;;
*) echo "'$1' cannot be extracted via extract()" && cd .. && ! $didfolderexist && rm -r "$foldername" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
# animated gifs from any video
# from alex sexton gist.github.com/SlexAxton/4989674
gifify() {
if [[ -n "$1" ]]; then
if [[ $2 == '--good' ]]; then
ffmpeg -i $1 -r 10 -vcodec png out-static-%05d.png
time convert -verbose +dither -layers Optimize -resize 600x600\> out-static*.png GIF:- | gifsicle --colors 128 --delay=5 --loop --optimize=3 --multifile - > $1.gif
rm out-static*.png
else
ffmpeg -i $1 -s 600x400 -pix_fmt rgb24 -r 10 -f gif - | gifsicle --optimize=3 --delay=3 > $1.gif
fi
else
echo "proper usage: gifify <input_movie.mov>. You DO need to include extension."
fi
}
changeWorkspace() {
if [ $# -eq 0 ]
then
cd /Developer # current popular project you are working on
else
# common workspace (change 'Developer' to match your path) for project directories
cd /Developer/$1
fi
}
gitToggleMaster() {
if [ $oldGitBranch -z ]
then
oldGitBranch=$(git rev-parse --abbrev-ref HEAD)
git checkout master
else
git checkout $oldGitBranch
oldGitBranch=''
fi
}
gitclean() {
git fetch -p origin
DAYS=$1
if [ "$DAYS" == "" ]; then
DAYS=7
fi
date --version > /dev/null 2>&1
if [ $? == 0 ]; then
DATE=`date +%Y-%m-%d -d "-${DAYS}days"`
else
DATE=`date -v-${DAYS}d +%Y-%m-%d`
fi
REMOTE_BRANCHES=$(for k in `git branch -r --merged master | perl -pe 's/^..(.*?)( ->.*)?$/\1/'`; do echo -e `git log -1 --pretty=format:"%Cgreen%ci %Creset" --after="$DATE" $k -- | head -n 1`$k; done | sort -r | grep '^origin' | sed 's/ *origin\///')
LOCAL_BRANCHES=$(for k in `git branch --merged master | perl -pe 's/^..(.*?)( ->.*)?$/\1/'`; do echo -e `git log -1 --pretty=format:"%Cgreen%ci %Creset" --after="$DATE" $k -- | head -n 1`$k; done | sort -r | grep '^origin')
if [ "$REMOTE_BRANCHES" != "" ]; then
echo "The following remote branches are fully merged into master and older than $DAYS days and will be removed: $REMOTE_BRANCHES"
read -p "Continue (y/n)? "
if [ "$REPLY" == "y" ]; then
echo $REMOTE_BRANCHES | xargs git push origin --delete
echo "Done!, Obsolete branches are removed"
else
echo "Moving on...."
fi
else
echo "No remote branches"
fi
if [ "$LOCAL_BRANCHES" != "" ]; then
echo "The following local branches are fully merged into master and older than $DAYS days and will be removed: $LOCAL_BRANCHES"
read -p "Continue (y/n)? "
if [ "$REPLY" == "y" ]; then
echo $LOCAL_BRANCHES | xargs git branch -r -d
echo "Done!, Obsolete branches are removed"
else
echo "Moving on...."
fi
else
echo "No local branches"
fi
}
function hideallfiles(){
defaults write com.apple.finder AppleShowAllFiles -bool NO
killall Finder
}
function showallfiles(){
defaults write com.apple.finder AppleShowAllFiles -bool YES
killall Finder
}
# One step function to launch development build for BEER
function beer-build() {
# execute Gradle Build for Java Code
gradle build &&
# Copy the built WAR file to tomcat directory
cp -f ./build/libs/beer-prototype.war /Library/Tomcat/webapps/ROOT.war &&
# Connect to PostGres with a lame password of, "beer"
export PGPASSWORD=beer &&
# Drop old tables and recreate
psql -U beer --command 'drop schema public cascade; create schema public;' &&
# Load Seed Data, since above command dropped old tables
gradle seedDb
}
# get github user's email via username
function github-email(){
~/bin/github-email $1
}
# direct native use of osx built in notifications
function notify(){
osascript -e "display notification \"$1\" with title \"$2\" subtitle \"$3\""
}
# Sample use case for Alerter (a default osx notification wrapper) - https://github.com/vjeantet/alerter
function alertify(){
ANSWER="$(~/bin/alerter -message 'Start now ?' -closeLabel No -actions Yes,Maybe,'Remind me later...' -timeout 10)"
case $ANSWER in
"@TIMEOUT") echo "Timeout man, sorry" ;;
"@CLOSED") echo "You clicked on the default alert close button" ;;
"@CONTENTCLICKED") echo "You clicked the alert's content !" ;;
"@ACTIONCLICKED") echo "You clicked the alert default action button" ;;
"Maybe") echo "Action MAYBE" ;;
"No") echo "Action NO" ;;
"Yes") echo "Action YES" ;;
**) echo "? --> $ANSWER" ;;
esac
}
# shortcut to Alerter
function alerter(){
~/bin/alerter $@
}
function findServiceByPort(){
lsof -i TCP:$1
}
# Create a Build ID bases on the format of YY.DoY.<incrementing number passed by user>
function getBuildId(){
date +%y.%j.$1
}