diff --git a/scripts/bookmarks.sh b/scripts/bookmarks.sh new file mode 100755 index 0000000..b7cdac7 --- /dev/null +++ b/scripts/bookmarks.sh @@ -0,0 +1,132 @@ +#!/usr/bin/env bash + +add_bookmark() { + while : ; do + if [[ -r ~/.config/surfraw/bookmarks ]] && [[ -f ~/.config/i3/bookmarks ]]; then + # Ask for the Bookmark Title, URL, and file selection using yad --form with radio buttons + input=$(yad --form \ + --title="I38 - Add Bookmark" \ + --text="New Bookmark:" \ + --field="Bookmark Title" \ + --field="URL" \ + --field="!Save As:CB" \ + --field="Surfraw Bookmark":CHK \ + --field="I38 Bookmark":CHK \ + --button="OK:0" \ + --button="Cancel:1" \ + --selectable-labels \ + --separator="|") + else + # Ask for the Bookmark Title and URL using yad --form without radio buttons + input=$(yad --form \ + --title="I38 - Add Bookmark" \ + --text="New Bookmark:" \ + --field="Bookmark Title" \ + --field="URL" \ + --button="OK:0" \ + --button="Cancel:1" \ + --selectable-labels \ + --separator="|") + fi + yadCode="$?" + + # Check if the user pressed Cancel + if [[ $yadCode -eq 1 ]]; then + exit 0 + fi + + # Split the input into components + IFS='|' read -r title url bookmarkFile <<< "$input" + + # Check if title or URL is empty + if [[ -z "$title" || -z "$url" ]]; then + yad --info --title="Add Bookmark" --text="Both Title and URL cannot be empty. Please try again." + continue + fi + + # Check for spaces in title and prompt user + if [[ "$title" =~ \ ]] && [[ "$bookmarkFile" =~ surfraw ]]; then + newTitle="${title//[[:space:]]/_}" + yad --question --title="I38 - Bookmarks" --text="The title contains spaces, which have been converted to underscores: \"$new_title\". Is this okay?" + yadCode="$?" + if [[ $yadCode -ne 0 ]]; then + continue + else + title="$newTitle" + fi + fi + + # Determine the bookmarks file based on radio button selection + if [ -f ~/.config/surfraw/bookmarks ] && [ -f ~/.config/i3/bookmarks ]; then + if [[ "$bookmark_file" == "Surfraw Bookmark" ]]; then + bookmarks_file=~/.config/surfraw/bookmarks + else + bookmarks_file=~/.config/i3/bookmarks + fi + else + bookmarks_file=~/.config/surfraw/bookmarks + [ -f ~/.config/i3/bookmarks ] && bookmarks_file=~/.config/i3/bookmarks + fi + + # Check for duplicates + if grep -q "$url" "$bookmarksFile" ; then + existingTitle=$(grep "$url" "$bookmarks_file" | cut -d' ' -f1) + yad --info --title="I38 - Bookmarks" --text="This site is already bookmarked as \"$existingTitle\"." + return + elif grep -qi "^$title " "$bookmarksFile"; then + yad --info --title="I38 Bookmarks" --text="A bookmark with the title \"$title\" already exists." + return + fi + + # Add the new bookmark + echo "$title $url" >> "$bookmarks_file" + + # Ensure no duplicates with sort -u + sort -u "$bookmarks_file" -o "$bookmarks_file" + yad --info --title="I38 - Bookmarks" --selectable-lables --text="Bookmark \"$title\" added successfully." + return + done +} + + + declare -a bookmarks +export config="${XDG_CONFIG_HOME:-${HOME}/.config}" +if [[ -r "${config}/surfraw/bookmarks" ]]; then + mapfile -t contents < <(cat "${config}/surfraw/bookmarks") + for i in "${contents[@]}" ; do + title="${i% *}" + title="${title//_/ }" + bookmarks+=("${title}") + bookmarks+=("${i##* }") + done +fi +if [[ -r "${config}/i3/bookmarks" ]]; then + mapfile -t contents < <(cat "${config}/i3/bookmarks") + for i in "${contents[@]}" ; do + bookmarks+=("${i% *}" "${i##* }") + done +fi +declare -a menuList + + +url=$(yad --list \ + --title="I38 - Bookmarks" \ + --text="Select a bookmark to open" \ + --column="Title" \ + --column="URL" \ + --button="Open Bookmark:0" \ + --button="Add Bookmark:1" \ + --button="Cancel:2" \ + --close-on-unfocus \ + --hide-column=2 \ + --search-column=1 \ + --skip-taskbar \ + "${bookmarks[@]}") +yadCode="$?" +url="${url%|*}" +url="${url##*|}" +case ${yadCode} in + 0) xdg-open "${url}";; + 1) add_bookmark;; + 2) exit 0;; +esac