#!/bin/ksh # mkphlog - a utility to ease the creation of phlogs. # Organizes phlog posts in separate directories. # Created by octotep; anyone can distribute, modify, and # share this file however they please. # # Version 0.7 # # Please note, all date strings are in the form of mm/dd/yy(yy) # The base of the entire gopher site. # SDF default: $HOME/gopher gopherRoot="$HOME/gopher" # The name of the phlog directory (contained in $gopherHome) phlogDirName="phlog" # Current working directory of the script cwd=$(pwd) # File name for a post postFile="" # Default editor, unless the user has one specified in env editor=${EDITOR:-nano} # Default timezone, unless the user has one specified in env TZ=${TZ:-UTC} # Controls whether the post is automatically added to the main # phlog page. If so, Each entry looks like: "BlabBlabBlab (mm/dd/yy)", # otherwise, links will need to be manually added. addTitleToMain=true # Tells the script how many lines the title of the main page spans. # Used to insert the newest post at the top. # Titles created by mkphlog are 3 lines. # Isn't used if $addTitleToMain is false titleLineCount=3 # The URL your home gopher directory. Should contain # the $phlogDir. Ex. gopher://sdf.org/1/users/octotep/ gopherUrl="gopher://sdf.org/1/users/$(whoami)" # The URL of your phlog. Should probably be $gopherUrl/$phlogDir/ phlogUrl="$gopherUrl/$phlogDirName" #Command-line flags silentMode=false # Prints the help screen and exits DisplayHelp() { echo "mkphlog [-hs] [file_with_post] [title] " echo echo "Updates a phlog created in the mkphlog format" echo "Options:" echo " -s Run the script in silent mode. As long as a file" echo " with the post is specified, the script will publish" echo " the post without prompting the user for any information" echo " If no title is specified, the title is the filename." echo " (Underscore characters are considered spaces)." echo echo " -h Display this help" echo echo "Created by Chris Yealy (octotep)" echo "The newest version can be found at:" echo "gopher://sdf.org/1/users/octotep/dls/mkphlog" echo "or" echo "https://bitbucket.org/octotep/mkphlog/" exit 0 } # Tests for a gopher directory. Exits on failure. TestForGopherDirectory() { if [ -d $gopherRoot ] ; then cd $gopherRoot else echo "You don't have a gopherspace set-up. Please run the mkgopher utility." exit 1 fi } # Tests for a phlog directory. If one doesn't exist, create it. TestForPhlogDirectory() { if [ -d $phlogDirName ] ; then cd $phlogDirName else echo -n "Do you want to create a phlog directory? (y/n) " read phlogDirAns case $phlogDirAns in y* | Y* ) CreatePhlogDir ;; n* | N* ) exit 1 ;; * ) exit 1 ;; esac fi } # Creates the phlog directory if it dosen't already exist. CreatePhlogDir() { mkdir $phlogDirName chmod 755 $phlogDirName cd $phlogDirName echo -n "What would you like to name your phlog? " read phlogNameAns echo $phlogNameAns > gophermap echo "=======================================" >> gophermap echo >> gophermap chmod 644 $gopherRoot/$phlogDirName/gophermap echo "Phlog directory and main gophermap file created." } # Create phlog entry CreatePhlogEntry() { echo "Creating today's phlog entry..." # Touch the main gophermap, for the SDF phlogosphere touch $gopherRoot/gophermap entryDate=`date +%m-%d-%y` # Make sure there isn't a post for that day, lest we overwrite it. if [ ! -d $entryDate ]; then mkdir $entryDate chmod 755 $entryDate cd $entryDate touch gophermap chmod 644 gophermap else echo "There is already a post for today." AskToEdit fi } # Updates the main phlog listing. This is where the magic happens. UpdatePhlogListing() { ##echo "enter UpdatePhlogListing" # If the user wants the post automatically added to the # main page, do it. if [ $addTitleToMain = true ] ; then cd $gopherRoot/$phlogDirName/ # Break up the gophermap totalLineCount=$(wc -l gophermap | sed -e 's/ //g' -e 's/gophermap//') linesLeft=$(echo "$totalLineCount - $titleLineCount" | bc) head -n $titleLineCount gophermap > title.tmp tail -n $linesLeft gophermap > gophermap.tmp # Recreate the gophermap rm gophermap cat title.tmp > gophermap echo -e "1${postTitleAns} (${entryDate})\t./${entryDate}" >> gophermap cat gophermap.tmp >> gophermap rm title.tmp gophermap.tmp chmod 644 $gopherRoot/$phlogDirName/gophermap fi cd $gopherRoot/$phlogDirName/$entryDate/ echo $postTitleAns >> gophermap date "+%A %b %e %l:%M:%S %Y" >> gophermap echo "------------------------------" >> gophermap # If the user supplied a file with the text of the post, use it. if [ -f "$cwd/$postFile" ] ; then echo >> gophermap cat "$cwd/$postFile" >> gophermap fi echo >> gophermap } AskToEdit() { echo -n "Would you like to edit the post with $editor? (y/n) " read editorAns case $editorAns in y* | Y* ) $editor $gopherRoot/$phlogDirName/$entryDate/gophermap ;; n* | N* ) exit 0 ;; * ) exit 0 ;; esac exit 0 } #### Main script #### # Parse our options while getopts "sh" optionName; do case $optionName in s) silentMode=true ;; h) DisplayHelp ;; \?) echo "Unknown parameters. Please run mkphlog -h" ; exit 1 ;; esac done shift $((OPTIND-1)); OPTIND=1 postFile="$1" TestForGopherDirectory TestForPhlogDirectory # Different things for different modes if [ $silentMode = true ] ; then if [ ! -f "$cwd/$1" ] ; then echo "Post file does not exist." exit 1 fi # Just in case the user didn't specify a title if [ "$2" = "" ] ; then postTitleAns=$(echo $1 | sed -e 's/_/ /g') else postTitleAns=$2 fi CreatePhlogEntry UpdatePhlogListing else echo -n "Would you like to create a phlog entry for today? (y/n) " read phlogAns case $phlogAns in y* | Y* ) CreatePhlogEntry ;; n* | N* ) exit 0 ;; * ) exit 1 ;; esac if [ ! -f "$cwd/$1" ] ; then echo "Post file does not exist. Creating new post anyway." fi # Get a title if one isn't provided if [ "$2" = "" ] ; then echo -n "Title: " read postTitleAns else postTitleAns=$2 fi UpdatePhlogListing AskToEdit fi exit 0