diff --git a/ztlk b/ztlk new file mode 100755 index 0000000..1ae0ce4 --- /dev/null +++ b/ztlk @@ -0,0 +1,79 @@ +!/bin/sh + + +yank_bibkey() { + echo -n "@$1" | wl-copy +} + +BIB_FIL="/home/emanuel/Documents/bib/*.bib" +PDF_DIR="/home/emanuel/Documents/pdf/" +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