blob: 43a1de2aaf3b3709acb6ba3b27677236d508f19b (
plain) (
tree)
|
|
#!/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 <<EOF
Missing argument <$1>.
Usage:
$NAME <FULL_TITLE> [-|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 <<EOF > "$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
|