aboutsummaryrefslogtreecommitdiffstats
path: root/.functions
diff options
context:
space:
mode:
Diffstat (limited to '.functions')
-rw-r--r--.functions257
1 files changed, 90 insertions, 167 deletions
diff --git a/.functions b/.functions
index 40eba72..3f3ac9c 100644
--- a/.functions
+++ b/.functions
@@ -1,7 +1,7 @@
# Simple calculator
function calc() {
- local result=""
- result="$(printf "scale=10;$*\n" | bc --mathlib | tr -d '\\\n')"
+ local result="";
+ result="$(printf "scale=10;$*\n" | bc --mathlib | tr -d '\\\n')";
# └─ default (when `--mathlib` is used) is 20
#
if [[ "$result" == *.* ]]; then
@@ -9,171 +9,171 @@ function calc() {
printf "$result" |
sed -e 's/^\./0./' `# add "0" for cases like ".5"` \
-e 's/^-\./-0./' `# add "0" for cases like "-.5"`\
- -e 's/0*$//;s/\.$//' # remove trailing zeros
+ -e 's/0*$//;s/\.$//'; # remove trailing zeros
else
- printf "$result"
- fi
- printf "\n"
+ printf "$result";
+ fi;
+ printf "\n";
}
# Create a new directory and enter it
function mkd() {
- mkdir -p "$@" && cd "$@"
+ mkdir -p "$@" && cd "$@";
}
# Change working directory to the top-most Finder window location
function cdf() { # short for `cdfinder`
- cd "$(osascript -e 'tell app "Finder" to POSIX path of (insertion location as alias)')"
+ cd "$(osascript -e 'tell app "Finder" to POSIX path of (insertion location as alias)')";
}
# Create a .tar.gz archive, using `zopfli`, `pigz` or `gzip` for compression
function targz() {
- local tmpFile="${@%/}.tar"
- tar -cvf "${tmpFile}" --exclude=".DS_Store" "${@}" || return 1
+ local tmpFile="${@%/}.tar";
+ tar -cvf "${tmpFile}" --exclude=".DS_Store" "${@}" || return 1;
size=$(
stat -f"%z" "${tmpFile}" 2> /dev/null; # OS X `stat`
stat -c"%s" "${tmpFile}" 2> /dev/null # GNU `stat`
- )
+ );
- local cmd=""
+ local cmd="";
if (( size < 52428800 )) && hash zopfli 2> /dev/null; then
# the .tar file is smaller than 50 MB and Zopfli is available; use it
- cmd="zopfli"
+ cmd="zopfli";
else
if hash pigz 2> /dev/null; then
- cmd="pigz"
+ cmd="pigz";
else
- cmd="gzip"
- fi
- fi
+ cmd="gzip";
+ fi;
+ fi;
- echo "Compressing .tar using \`${cmd}\`…"
- "${cmd}" -v "${tmpFile}" || return 1
- [ -f "${tmpFile}" ] && rm "${tmpFile}"
- echo "${tmpFile}.gz created successfully."
+ echo "Compressing .tar using \`${cmd}\`…";
+ "${cmd}" -v "${tmpFile}" || return 1;
+ [ -f "${tmpFile}" ] && rm "${tmpFile}";
+ echo "${tmpFile}.gz created successfully.";
}
# Determine size of a file or total size of a directory
function fs() {
if du -b /dev/null > /dev/null 2>&1; then
- local arg=-sbh
+ local arg=-sbh;
else
- local arg=-sh
+ local arg=-sh;
fi
if [[ -n "$@" ]]; then
- du $arg -- "$@"
+ du $arg -- "$@";
else
- du $arg .[^.]* *
- fi
+ du $arg .[^.]* *;
+ fi;
}
# Use Git’s colored diff when available
-hash git &>/dev/null
+hash git &>/dev/null;
if [ $? -eq 0 ]; then
function diff() {
- git diff --no-index --color-words "$@"
+ git diff --no-index --color-words "$@";
}
-fi
+fi;
# Create a data URL from a file
function dataurl() {
- local mimeType=$(file -b --mime-type "$1")
+ local mimeType=$(file -b --mime-type "$1");
if [[ $mimeType == text/* ]]; then
- mimeType="${mimeType};charset=utf-8"
+ mimeType="${mimeType};charset=utf-8";
fi
- echo "data:${mimeType};base64,$(openssl base64 -in "$1" | tr -d '\n')"
+ echo "data:${mimeType};base64,$(openssl base64 -in "$1" | tr -d '\n')";
}
# Create a git.io short URL
function gitio() {
if [ -z "${1}" -o -z "${2}" ]; then
- echo "Usage: \`gitio slug url\`"
- return 1
- fi
- curl -i http://git.io/ -F "url=${2}" -F "code=${1}"
+ echo "Usage: \`gitio slug url\`";
+ return 1;
+ fi;
+ curl -i http://git.io/ -F "url=${2}" -F "code=${1}";
}
# Start an HTTP server from a directory, optionally specifying the port
function server() {
- local port="${1:-8000}"
+ local port="${1:-8000}";
sleep 1 && 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"
+ 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";
}
# Start a PHP server from a directory, optionally specifying the port
# (Requires PHP 5.4.0+.)
function phpserver() {
- local port="${1:-4000}"
- local ip=$(ipconfig getifaddr en1)
+ local port="${1:-4000}";
+ local ip=$(ipconfig getifaddr en1);
sleep 1 && open "http://${ip}:${port}/" &
- php -S "${ip}:${port}"
+ php -S "${ip}:${port}";
}
# Compare original and gzipped file size
function gz() {
- local origsize=$(wc -c < "$1")
- local gzipsize=$(gzip -c "$1" | wc -c)
- local ratio=$(echo "$gzipsize * 100/ $origsize" | bc -l)
- printf "orig: %d bytes\n" "$origsize"
- printf "gzip: %d bytes (%2.2f%%)\n" "$gzipsize" "$ratio"
+ local origsize=$(wc -c < "$1");
+ local gzipsize=$(gzip -c "$1" | wc -c);
+ local ratio=$(echo "$gzipsize * 100 / $origsize" | bc -l);
+ printf "orig: %d bytes\n" "$origsize";
+ printf "gzip: %d bytes (%2.2f%%)\n" "$gzipsize" "$ratio";
}
# Syntax-highlight JSON strings or files
# Usage: `json '{"foo":42}'` or `echo '{"foo":42}' | json`
function json() {
if [ -t 0 ]; then # argument
- python -mjson.tool <<< "$*" | pygmentize -l javascript
+ python -mjson.tool <<< "$*" | pygmentize -l javascript;
else # pipe
- python -mjson.tool | pygmentize -l javascript
- fi
+ python -mjson.tool | pygmentize -l javascript;
+ fi;
}
-# All the dig info
+# Run `dig` and display the most useful info
function digga() {
- dig +nocmd "$1" any +multiline +noall +answer
+ dig +nocmd "$1" any +multiline +noall +answer;
}
-# Escape UTF-8 characters into their 3-byte format
+# UTF-8-encode a string of Unicode symbols
function escape() {
- printf "\\\x%s" $(printf "$@" | xxd -p -c1 -u)
+ printf "\\\x%s" $(printf "$@" | xxd -p -c1 -u);
# print a newline unless we’re piping the output to another program
if [ -t 1 ]; then
- echo # newline
- fi
+ echo ""; # newline
+ fi;
}
# Decode \x{ABCD}-style Unicode escape sequences
function unidecode() {
- perl -e "binmode(STDOUT, ':utf8'); print \"$@\""
+ perl -e "binmode(STDOUT, ':utf8'); print \"$@\"";
# print a newline unless we’re piping the output to another program
if [ -t 1 ]; then
- echo # newline
- fi
+ echo ""; # newline
+ fi;
}
# Get a character’s Unicode code point
function codepoint() {
- perl -e "use utf8; print sprintf('U+%04X', ord(\"$@\"))"
+ perl -e "use utf8; print sprintf('U+%04X', ord(\"$@\"))";
# print a newline unless we’re piping the output to another program
if [ -t 1 ]; then
- echo # newline
- fi
+ echo ""; # newline
+ fi;
}
# Show all the names (CNs and SANs) listed in the SSL certificate
# for a given domain
function getcertnames() {
if [ -z "${1}" ]; then
- echo "ERROR: No domain specified."
- return 1
- fi
+ echo "ERROR: No domain specified.";
+ return 1;
+ fi;
- local domain="${1}"
- echo "Testing ${domain}…"
- echo # newline
+ local domain="${1}";
+ echo "Testing ${domain}…";
+ echo ""; # newline
local tmp=$(echo -e "GET / HTTP/1.0\nEOT" \
| openssl s_client -connect "${domain}:443" 2>&1);
@@ -182,136 +182,59 @@ function getcertnames() {
local certText=$(echo "${tmp}" \
| openssl x509 -text -certopt "no_header, no_serial, no_version, \
no_signame, no_validity, no_issuer, no_pubkey, no_sigdump, no_aux");
- echo "Common Name:"
- echo # newline
+ echo "Common Name:";
+ echo ""; # newline
echo "${certText}" | grep "Subject:" | sed -e "s/^.*CN=//";
- echo # newline
- echo "Subject Alternative Name(s):"
- echo # newline
+ echo ""; # newline
+ echo "Subject Alternative Name(s):";
+ echo ""; # newline
echo "${certText}" | grep -A 1 "Subject Alternative Name:" \
- | sed -e "2s/DNS://g" -e "s/ //g" | tr "," "\n" | tail -n +2
- return 0
+ | sed -e "2s/DNS://g" -e "s/ //g" | tr "," "\n" | tail -n +2;
+ return 0;
else
echo "ERROR: Certificate not found.";
- return 1
- fi
-}
-
-# Add note to Notes.app (OS X 10.8)
-# Usage: `note 'title' 'body'` or `echo 'body' | note`
-# Title is optional
-function note() {
- local title
- local body
- if [ -t 0 ]; then
- title="$1"
- body="$2"
- else
- title=$(cat)
- fi
- osascript >/dev/null <<EOF
-tell application "Notes"
- tell account "iCloud"
- tell folder "Notes"
- make new note with properties {name:"$title", body:"$title" & "<br><br>" & "$body"}
- end tell
- end tell
-end tell
-EOF
-}
-
-# Add reminder to Reminders.app (OS X 10.8)
-# Usage: `remind 'foo'` or `echo 'foo' | remind`
-function remind() {
- local text
- if [ -t 0 ]; then
- text="$1" # argument
- else
- text=$(cat) # pipe
- fi
- osascript >/dev/null <<EOF
-tell application "Reminders"
- tell the default list
- make new reminder with properties {name:"$text"}
- end tell
-end tell
-EOF
-}
-
-# Manually remove a downloaded app or file from the quarantine
-function unquarantine() {
- for attribute in com.apple.metadata:kMDItemDownloadedDate com.apple.metadata:kMDItemWhereFroms com.apple.quarantine; do
- xattr -r -d "$attribute" "$@"
- done
-}
-
-# Install Grunt plugins and add them as `devDependencies` to `package.json`
-# Usage: `gi contrib-watch contrib-uglify zopfli`
-function gi() {
- npm install --save-dev ${*/#/grunt-}
-}
-
-# `m` with no arguments opens the current directory in TextMate, otherwise
-# opens the given location
-function m() {
- if [ $# -eq 0 ]; then
- mate .
- else
- mate "$@"
- fi
+ return 1;
+ fi;
}
# `s` with no arguments opens the current directory in Sublime Text, otherwise
# opens the given location
function s() {
if [ $# -eq 0 ]; then
- subl .
+ subl .;
else
- subl "$@"
- fi
+ subl "$@";
+ fi;
}
# `a` with no arguments opens the current directory in Atom Editor, otherwise
# opens the given location
function a() {
if [ $# -eq 0 ]; then
- atom .
+ atom .;
else
- atom "$@"
- fi
+ atom "$@";
+ fi;
}
# `v` with no arguments opens the current directory in Vim, otherwise opens the
# given location
function v() {
if [ $# -eq 0 ]; then
- vim .
+ vim .;
else
- vim "$@"
- fi
+ vim "$@";
+ fi;
}
-# `o` with no arguments opens current directory, otherwise opens the given
+# `o` with no arguments opens the current directory, otherwise opens the given
# location
function o() {
if [ $# -eq 0 ]; then
- open .
+ open .;
else
- open "$@"
- fi
-}
-
-# `np` with an optional argument `patch`/`minor`/`major`/`<version>`
-# defaults to `patch`
-function np() {
- git pull --rebase && \
- rm -rf node_modules && \
- npm install && \
- npm test && \
- npm version ${1:=patch} && \
- npm publish && \
- git push origin master && \
- git push origin master --tags
+ open "$@";
+ fi;
}
# `tre` is a shorthand for `tree` with hidden files and color enabled, ignoring
@@ -319,5 +242,5 @@ function np() {
# `less` with options to preserve color and line numbers, unless the output is
# small enough for one screen.
function tre() {
- tree -aC -I '.git|node_modules|bower_components' --dirsfirst "$@" | less -FRNX
+ tree -aC -I '.git|node_modules|bower_components' --dirsfirst "$@" | less -FRNX;
}