Rename environment variable user for base directory from JOURNAL_DIR to WAREHOUSE_BLOG_DIR so the name is clearer and project specific.
100 lines
3.6 KiB
Fish
Executable file
100 lines
3.6 KiB
Fish
Executable file
#!/bin/fish
|
|
|
|
# A script to create journal entries
|
|
# Default behavior is to create an entry for the current date. See "help" for usage and options.
|
|
# Unsafe script
|
|
|
|
function print-help-entry
|
|
echo "Usage: entry [OPTION…]"
|
|
echo ""
|
|
echo "WAREHOUSE_BLOG_DIR must be defined and point where the journal entry will be written. This can also be passed as an argument using -j/--journal option."
|
|
echo ""
|
|
echo " -a, --author author Change the author name in the created entry. Can be specified with WAREHOUSE_AUTHOR environment variable"
|
|
echo " -e, --edit Edit the entry file created using user defined editor. The editor is specified using the EDITOR environment variable. Does nothing if said variable is not defined"
|
|
echo " -h, --help Display this help message and exit."
|
|
echo " -n, --new [DATE] Create a new entry for the specified DATE (optional). If no date is specified, use current date. This is default behavior. DATE is expected in a format valid for the 'date' command"
|
|
end
|
|
|
|
# Open the entry file in the default editor. Requires the EDITOR variable to be defined
|
|
function edit_file
|
|
if ! set -qU EDITOR
|
|
echo No EDITOR defined
|
|
return 3
|
|
end
|
|
$EDITOR $argv[1]
|
|
end
|
|
|
|
function entry
|
|
set entry_date now
|
|
set entry_author $WAREHOUSE_AUTHOR
|
|
set journal_dir content/journal
|
|
|
|
argparse "a/author=" "e/edit" "h/help" "j/journal=" "n/new=" -- $argv
|
|
|
|
if set -ql _flag_help
|
|
print-help-entry
|
|
return 0
|
|
end
|
|
|
|
if test -z $WAREHOUSE_BLOG_DIR && ! set -ql _flag_journal
|
|
echo "You need to define WAREHOUSE_BLOG_DIR environment variable. See entry -h."
|
|
return 2
|
|
end
|
|
if set -ql _flag_journal
|
|
set journal_dir $_flag_journal
|
|
else
|
|
set journal_dir $WAREHOUSE_BLOG_DIR
|
|
end
|
|
|
|
if set -ql _flag_new
|
|
set entry_date $_flag_new
|
|
end
|
|
|
|
# Build variable related to the date. Need several info: year, mounth (number and name), day number and full date in YYYY-MM-DD format
|
|
set entry_date $(date +%Y-%m-%d -d $entry_date)
|
|
set entry_date_values $(string split -n " " $(date +'%Y %B %m %e' -d $entry_date))
|
|
set entry_year $entry_date_values[1]
|
|
set entry_mounth_name $(string replace -r '^(\w)' '\u$0' $entry_date_values[2])
|
|
set entry_mounth_number $entry_date_values[3]
|
|
set entry_day $entry_date_values[4]
|
|
|
|
# Build variables to write output
|
|
set mounth_dir $entry_mounth_number
|
|
set full_date $entry_day $entry_mounth_name $entry_year
|
|
set filename $entry_date.md
|
|
set output_dir $(path normalize $journal_dir/content/journal/$entry_year/$mounth_dir)
|
|
set output_path $(path normalize $output_dir/$filename)
|
|
|
|
if test -f $output_path
|
|
if set -ql _flag_edit
|
|
edit_file $output_path
|
|
return 0
|
|
else
|
|
echo "Error, $output_path: file exists"
|
|
return 1
|
|
end
|
|
end
|
|
|
|
if ! test -d "$output_dir"
|
|
echo "Creating necessary directories $output_dir"
|
|
mkdir -p "$output_dir"
|
|
if test $status -gt 0
|
|
echo "Couldn't create directory $output_dir"
|
|
return 1
|
|
end
|
|
end
|
|
|
|
echo "New template : $entry_date"
|
|
echo "Title: Journal du $argv$entry_day $entry_mounth_name $entry_year" >> $output_path
|
|
echo "Date: $entry_date" >> $output_path
|
|
echo "Author: $entry_author" >> $output_path
|
|
echo "Category: $entry_year" >> $output_path
|
|
echo "Tags:" >> $output_path
|
|
echo "" >> $output_path
|
|
echo "## Les bonnes choses" >> $output_path
|
|
echo \n- >> $output_path
|
|
|
|
if set -ql _flag_edit
|
|
edit_file $output_path
|
|
end
|
|
end
|