aboutsummaryrefslogtreecommitdiff
path: root/bookmark-clip
diff options
context:
space:
mode:
Diffstat (limited to 'bookmark-clip')
-rwxr-xr-xbookmark-clip37
1 files changed, 37 insertions, 0 deletions
diff --git a/bookmark-clip b/bookmark-clip
new file mode 100755
index 0000000..57b14c7
--- /dev/null
+++ b/bookmark-clip
@@ -0,0 +1,37 @@
+#!/bin/sh
+set -eu
+
+file="$HOME/.bookmarks"
+touch "$file"
+
+has_notify=$(command -v notify-send >/dev/null 2>&1 && echo 1 || echo 0)
+notify() { [ "$has_notify" = 1 ] && notify-send -u "$1" "bookmark" "$2" || true; }
+
+# Primary selection first, fall back to clipboard
+bookmark="$(xclip -o -selection primary 2>/dev/null || true)"
+[ -z "$bookmark" ] && bookmark="$(xclip -o -selection clipboard 2>/dev/null || true)"
+
+bookmark="$(printf '%s' "$bookmark" | sed 's/[[:space:]]\+$//')"
+
+if [ -z "$bookmark" ]; then
+ notify critical "Nothing selected or in clipboard"
+ exit 1
+fi
+
+if awk -F'\t' '{print $1}' "$file" | grep -Fxq -- "$bookmark"; then
+ notify low "Already bookmarked"
+ exit 0
+fi
+
+bookmarkEdit="$(printf '%s' "$bookmark" | dmenu -p "Edit bookmark:")"
+out="${bookmarkEdit:-$bookmark}"
+
+comment="$(printf '' | dmenu -p "Add comment (optional):")"
+if [ -n "${comment:-}" ]; then
+ line="$(printf '%s\t# %s' "$out" "$comment")"
+else
+ line="$out"
+fi
+
+printf '%s\n' "$line" >> "$file"
+notify normal "Saved: $out"