#!/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