zettelkasten/ztlk

80 lines
1.7 KiB
Text
Raw Normal View History

2025-11-04 23:30:50 +01:00
!/bin/sh
yank_bibkey() {
echo -n "@$1" | wl-copy
}
2025-11-04 23:53:36 +01:00
BIB_FIL="/home/$USER/Documents/bib/*.bib"
PDF_DIR="/home/$USER/Documents/pdf/"
2025-11-04 23:30:50 +01:00
MENU_CMD="wmenu -i -N 000000 -n 888888 -M 020202 -m ffffff -S 020202 -s ffffff"
FONT="Iosevka Term Light 8"
PDF_CMD="sioyek"
formt_bib() {
awk '
BEGIN { RS="@"; FS="\n" }
/./ {
key = author = title = year = ""
key = $1
sub(/^[a-zA-Z0-9_]+\{/, "", key)
sub(/,$/, "", key)
for (i=2; i<=NF; i++) {
if ($i ~ /author[[:space:]]*=/) {
author = $i
sub(/.*=[[:space:]]*/, "", author)
} else if ($i ~ /^[[:space:]]*title[[:space:]]*=/) {
title = $i
sub(/.*=[[:space:]]*/, "", title)
} else if ($i ~ /year[[:space:]]*=/) {
year = $i
sub(/.*=[[:space:]]*/, "", year)
}
}
gsub(/[{"}]/, "", author); sub(/,$/, "", author); gsub(/^[ \t]+|[ \t]+$/, "", author)
gsub(/[{"}]/, "", title); sub(/,$/, "", title); gsub(/^[ \t]+|[ \t]+$/, "", title)
gsub(/[{"}]/, "", year); sub(/,$/, "", year); gsub(/^[ \t]+|[ \t]+$/, "", year)
if (key && author && title && year) printf "%s|%s|%s|[%s]\n", author, year, title, key
}' $BIB_FIL
}
main () {
while :; do
SEL_ENT=$(formt_bib | sort | column -t -s '|' -o ' ' | $MENU_CMD -f "$FONT" -l 30 -p ":bib")
[ -z "$SEL_ENT" ] && exit 0
BIB_KEY=$(echo "$SEL_ENT" | sed 's/.*\[//;s/\].*//')
PDF_PATH="${PDF_DIR}${BIB_KEY}.pdf"
if [ -f "$PDF_PATH" ]; then
SEL_MENU=$(printf "open\nyank $BIB_KEY\n.." | $MENU_CMD -f "$FONT" -l 3 -p ":$BIB_KEY")
case $SEL_MENU in
"open")
yank_bibkey "$BIB_KEY"
"$PDF_CMD" "$PDF_PATH" &
break
;;
yank*)
yank_bibkey "$BIB_KEY"
break
;;
"..")
continue
;;
*)
break
;;
esac
else
yank_bibkey "$BIB_KEY"
break
fi
done
}
main