Permalink
Cannot retrieve contributors at this time
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
executable file
54 lines (42 sloc)
1.87 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
USAGE=" | |
$(basename $0) [-a add_file] query_files... | |
Copies a previous transaction to today. | |
Select a previous transaction by fuzzy matching on the titles. This | |
transaction is then copied to the end of the journal, uncleared and set | |
to the current date. Finally, it opens the end of the file in $EDITOR. | |
Bonus over 'hledger add': interactive matching it easier, and | |
transaction formatting is retained because it's just a copy. | |
add_file The transaction is appended to this file. | |
Default (if set): \$LEDGER_ADD_FILE | |
Default (otherwise): \$LEDGER_FILE | |
query_files A list of files to query for previous transactions. | |
Default: \$LEDGER_FILE | |
Depends on: | |
- skim (https://github.com/lotabout/skim) | |
- sponge (https://joeyh.name/code/moreutils/) | |
If you split files by year, it may be useful to alias (in 2020): | |
alias ladd='ladd -a .../2020/main.journal .../*/main.journal' | |
" | |
add_file="${LEDGER_ADD_FILE:-$LEDGER_FILE}" | |
while getopts a: f; do | |
case "$f" in | |
a) add_file="$OPTARG";; | |
\?) echo "$USAGE"; exit 1;; | |
esac | |
done | |
shift $((OPTIND - 1)) | |
# fuzzy select a transaction title | |
selection="$(sed -n 's/....-..-..\( [*!]\)\? //p' "${@:-$LEDGER_FILE}" | sort | uniq | sk)" | |
[ -z "$selection" ] && exit 0 # quit if escaped | |
sed -n "/....-..-..\( [*!]\)\? ${selection}\$/,/^\$/p" "${@:-$LEDGER_FILE}" | # print matching transactions | |
sed '${/^$/d}' | # remove trailing empty line | |
sed -n '/^$/{s/.*//;x;d};H;${x;p}' | # remove all before the last empty line | |
sed "s/^....-..-..\( [*!]\)\?/$(date +'%Y-%m-%d')/" | # replace date with today, remove marker | |
sponge -a "$add_file" # append to the file, use sponge in case it's also an input file | |
# review change: open end of the file (if I know how) | |
case "$EDITOR" in | |
vi*|nvi*) "$EDITOR" +\$ "$add_file" ;; | |
emacs) "$EDITOR" "$add_file" -f end-of-buffer ;; | |
*) "$EDITOR" "$add_file" ;; | |
esac |