#!/usr/bin/env bash set -o pipefail IFS= read -rd '' USAGE < "$ZID/index.adoc" edit_file "$ZID/index.adoc" on_save "$ZID" } delete_zettel() { [[ -d "$ZID" ]] && rm -fr "$ZID" commit_zettel "$ZID" } edit_file() { "$EDITOR" "$1" } edit_zet() { edit_file "$1/index.adoc" on_save "$1" } generate_links() { echo "$1" | while IFS= read -r line; do id="${line%% *}" title="${line#* }" echo "* link:../${id}/index.adoc[${title}]" done } get_latest_zettel() { find . -maxdepth 1 -type d -name '[0-9]*' -printf '%f\n' | sort -nr | head -n 1 } get_title() { get_title_from_file "$1/index.adoc" } get_title_from_file() { head -n 1 "$1" | sed -e 's/^[#=] //' } main() { case "$1" in create | new | c | n) shift 1 cmd_create "$@" ;; edit | e) shift 1 cmd_edit "$@" ;; help | h) show_usage ;; id) shift 1 cmd_id "$@" ;; latest) ZID="$(get_latest_zettel)" edit_zet "$ZID" ;; links | l) shift 1 cmd_links "$@" ;; view | v) shift 1 cmd_view "$@" ;; *) cmd_search "$@" ;; esac } new_zid() { EXISTING_ZETTELS=$(find . -maxdepth 1 -type d -regex './[0-9]+' | wc -l) echo $((EXISTING_ZETTELS + 1)) } on_save() { ZID="$1" if [[ -s "$ZID/index.adoc" ]]; then TITLE=$(get_title "$ZID") commit_zettel "$ZID" "$TITLE" else echo "Deleting empty zettel: $ZID" delete_zettel "$ZID" fi } parse_zet_list() { ZET_LIST=() while IFS= read -r ZID; do TITLE=$(get_title "$ZID") ZET_LIST+=("$ZID $TITLE") done } search_zettel() { if [[ "$*" == "latest" ]] || [[ "$*" == "l" ]]; then get_latest_zettel return fi QUERY="$*" grep_args=("--extended-regexp") [[ "$QUERY" != "" ]] && grep_args+=("--word-regex") git grep -i --name-only "${grep_args[@]}" "$QUERY" | grep -o -E '[0-9]+' | sort -un } select_zet() { if [[ "${#ZET_LIST[@]}" == 0 ]]; then echo "No zettels to select" exit 1 fi if [[ "${#ZET_LIST[@]}" == 1 ]]; then SELECTED_ZET=$(awk '{ print $1 }' <<<"${ZET_LIST[0]}") return fi selector if [[ -z "$SELECTED_ZET" ]]; then echo "No zet selected" exit 1 fi } selector() { ITEM=$(printf "%s\n" "${ZET_LIST[@]}" | fzf --prompt="Select a zet: ") SELECTED_ZET=$(awk '{ print $1 }' <<< "$ITEM") } show_usage() { echo "$USAGE" } view_zettel() { cat "$1/index.adoc" } (cd "$ZET_DIR" && main "$@")