#!/bin/sh set -eu for flag in "$@"; do case "$flag" in --) break ;; --help) usage help exit ;; *) ;; esac done while getopts 'hV' flag; do case "$flag" in h) usage help exit ;; *) usage >&2 exit 2 ;; esac done NAME='pb' usage() { cat <. Usage: $NAME [-|FILE [LANG]] Reads contents from [FILE], from stdin if '-' is given, and opens the editor on the content. Arguments: FULL_TITLE Full title of the pastebin Examples: $NAME 'My example pastebin title' $NAME 'My example pastebin title' file $NAME 'My example pastebin title' - < file cat file | $NAME 'My example pastebin title' - $NAME 'Title' file lang $NAME 'Title' - lang < file cat file | $NAME 'Title' - lang EOF } FULL_TITLE="${1:-}" [ -z "$FULL_TITLE" ] && { usage 'FULL_TITLE' exit 2 } # Derived from: # https://stackoverflow.com/questions/4009281/how-can-i-generate-url-slugs-in-perl/4009519#4009519 slugify() { echo "$1" | \ tr '[:upper:]' '[:lower:]' | \ perl -ne 'tr/\000-\177//cd; s/[^\w\s-]//g; s/^\s+|\s+$//g; s/[-\s]+/-/g; print;' } SLUG_TITLE="$(slugify "$FULL_TITLE")" PASTE_DATE="$(date -I)" OUT="_pastebins/$PASTE_DATE-$SLUG_TITLE.md" INPUT="${2:-}" PL="${3:-FIXME}" if [ -n "$INPUT" ]; then CONTENT=$(cat "$INPUT") else CONTENT='FIXME' fi cd ~/dev/libre/website > /dev/null [ -f "$OUT" ] && { echo "Pastebin named $OUT already exists." exit 1 } FILE="$(mktemp)" cat < "$FILE" --- title: ${FULL_TITLE} date: ${PASTE_DATE} layout: post lang: en ref: $SLUG_TITLE --- \`\`\`$PL $CONTENT \`\`\` EOF if [ "$PL" = FIXME ]; then vipe < "$FILE" > "$OUT" else cp "$FILE" "$OUT" fi git reset . git add "$OUT" git commit -m "pastebin: Auto-add $OUT" make clean publish URL="https://euandre.org/pastebin/$(echo "$PASTE_DATE" | tr '-' '/')/$SLUG_TITLE.html" open "$URL" printf "$URL" | xsel -ib echo 'Opened on the browser and copied URL to clipboard.' >&2 cd - > /dev/null