#!/bin/bash # Kenny Phloggins v0.0002 # # ratfactor's phlog create/edit/preview/push script # # "Out along the edges / Always where I burn to be # The further on the edge / The hotter the intensity # Highway to the Danger Zone # Right into the Danger Zone" # -- Kenny Loggins, Danger Zone # echo echo "Kenny Phloggins says, \"Welcome to the Danger Zone!\"" echo SRC_MAINMAP=src/gophermap PUB_MAINMAP=publish/gophermap SRC_PHLOGDIR=src/phlog PUB_PHLOGDIR=publish/phlog FNAME="NONE" # selected phlog function list { local map=$SRC_PHLOGDIR/gophermap echo "Phlogs read from $map:" # get list from phlog gophermap! local phlog_list=$(awk 'BEGIN {ORS=" "} /^0/ {print $NF}' $map) PS3="Select a phlog to edit: " select selected in $phlog_list do FNAME=$selected break done } function new_phlog { printf "(Short) title for new phlog: " read title local date=$(date +%Y-%m-%d) local day=$(date +%d) FNAME="$date-$(echo "$title" | tr '[:upper:] ' '[:lower:]-')" echo echo "Title: $title" echo "Fname: $FNAME" echo "Hit return to fly into the Danger Zone!" read nothing # append title to phlog and phlog map echo "$title" >> $SRC_PHLOGDIR/$FNAME echo "======" >> $SRC_PHLOGDIR/$FNAME local phlogmap=$SRC_PHLOGDIR/gophermap echo "0$day $title $FNAME" >> $phlogmap vim $phlogmap cp $phlogmap $PUB_PHLOGDIR/gophermap less $PUB_PHLOGDIR/gophermap # update main site gophermap and review sed "s//$date/" $SRC_MAINMAP > $PUB_MAINMAP less $PUB_MAINMAP # first time in phlog club, you *have* to phlog! edit } function edit { if [[ $FNAME = 'NONE' ]] then echo "You must first select a phlog to edit!" return fi local src=$SRC_PHLOGDIR/$FNAME local pub=$PUB_PHLOGDIR/$FNAME vim $src # make immediate backup! cp $src "${src}_bak$(date +%s)" # format and review #fmt -w67 $src > $pub ttt $src > $pub less $pub echo echo "$FNAME edited and formatted." } #function push_helper { # this function re-tries scp copy thrice #for i in 1 2 3 #do # echo "Pushing $1 to $2..." # scp $1 $2 && break || sleep 5 #done #} function push { if [[ $FNAME = 'NONE' ]] then echo "You must first select a phlog to push!" return fi # This is totally specific to the author (Ratfactor) # You will definitely need to edit this to make it # work for you! # As best I understand it, updating the root gophermap # will cause the SDF phlogroll to detect the update. echo "put $PUB_PHLOGDIR/$FNAME gopher/phlog/ put $PUB_PHLOGDIR/gophermap gopher/phlog/ put $PUB_MAINMAP gopher/" | sftp sdf } while true do [[ $FNAME != NONE ]] && echo -e "Current entry: \e[33m$FNAME\e[0m" prompt="(n)ew (l)ist (v)iew (e)dit (p)ush (s)pellcheck (q)uit: " [[ $FNAME = NONE ]] && prompt="(n)ew (l)ist (q)uit: " echo -en "\e[32m$prompt\e[0m " read action case $action in n ) new_phlog ;; l ) list ;; v ) less $PUB_PHLOGDIR/$FNAME ;; e ) edit ;; p ) push ;; s ) ispell $SRC_PHLOGDIR/$FNAME ;; q ) echo "Leaving the Danger Zone!"; exit ;; * ) echo "What? ";; esac done