diff options
Diffstat (limited to '.functions')
-rw-r--r-- | .functions | 257 |
1 files changed, 90 insertions, 167 deletions
@@ -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; } |