#!/bin/sh
DB="${BUKU_DB:-$HOME/.local/share/buku/bookmarks.db}"
DMENU_CMD="${DMENU_CMD:-dmenu -i -l 20 -p Bookmarks: -nb #737573 -nf #000000 -sb #005dbb -sf #ffffea}"
die() {
if command -v notify-send >/dev/null 2>&1; then
notify-send "links" "$1"
else
printf '%s\n' "$1" >&2
fi
exit 1
}
entries() {
[ -f "$DB" ] || die "No buku database found"
sqlite3 -separator ' ' "$DB" "
SELECT
id,
COALESCE(NULLIF(metadata, ''), URL),
trim(tags, ','),
URL,
replace(replace(desc, char(10), ' '), char(13), ' ')
FROM bookmarks
ORDER BY id;
" | awk -F ' ' '
{
line = "[" $1 "] " $2
if ($3 != "") {
line = line " #" $3
}
line = line " <" $4 ">"
if ($5 != "") {
line = line " " $5
}
print line
}
'
}
url_for_id() {
sqlite3 "$DB" "SELECT URL FROM bookmarks WHERE id = $1 LIMIT 1;"
}
case "${1:-open}" in
print|list)
entries
;;
open|"")
choice=$(entries | sh -c "$DMENU_CMD") || exit 0
[ -n "$choice" ] || exit 0
id=$(printf '%s\n' "$choice" | sed -n 's/^\[\([0-9][0-9]*\)\].*/\1/p')
[ -n "$id" ] || exit 0
url=$(url_for_id "$id")
[ -n "$url" ] || die "Bookmark not found"
linkhandler "$url"
;;
copy)
choice=$(entries | sh -c "$DMENU_CMD") || exit 0
[ -n "$choice" ] || exit 0
id=$(printf '%s\n' "$choice" | sed -n 's/^\[\([0-9][0-9]*\)\].*/\1/p')
[ -n "$id" ] || exit 0
url=$(url_for_id "$id")
[ -n "$url" ] || die "Bookmark not found"
printf '%s' "$url" | xclip -selection clipboard
notify-send "links" "Copied URL"
;;
*)
printf 'Usage: links [open|copy|print]\n' >&2
exit 1
;;
esac