132 lines
4.6 KiB
Bash
Executable File
132 lines
4.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
add_bookmark() {
|
|
while : ; do
|
|
if [[ -r "${config}/surfraw/bookmarks" ]] && [[ -r "${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 Bookmark" ]]; then
|
|
newTitle="${title//[[:space:]]/_}"
|
|
yad --question --title="I38 - Bookmarks" --text="The title contains spaces, which have been converted to underscores: \"$newTitle\". 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 [[ "$bookmarkFile" == "Surfraw Bookmark" ]]; then
|
|
bookmarksFile="${config}/surfraw/bookmarks"
|
|
else
|
|
bookmarksFile="${config}/i3/bookmarks"
|
|
fi
|
|
else
|
|
bookmarksFile="${config}/i3/bookmarks"
|
|
fi
|
|
|
|
# Check for duplicates
|
|
if grep -q "$url" "$bookmarksFile" ; then
|
|
existingTitle=$(grep "$url" "$bookmarksFile" | cut -d' ' -f1)
|
|
yad --form --title="I38 - Bookmarks" --selectable-labels --field="This site is already bookmarked as \"$existingTitle\".":LBL --button="OK:0"
|
|
return
|
|
elif grep -qi "^$title " "$bookmarksFile"; then
|
|
yad --form --title="I38 - Bookmarks" --selectable-labels --field="A bookmark with the title \"$title\" already exists.":LBL --button="OK:0"
|
|
return
|
|
fi
|
|
|
|
# Add the new bookmark
|
|
echo "$title $url" >> "$bookmarksFile"
|
|
|
|
# Ensure no duplicates with sort -u
|
|
sort -u "$bookmarksFile" -o "$bookmarksFile"
|
|
yad --form --title="I38 - Bookmarks" --selectable-labels --field="Bookmark \"$title\" added successfully.":LBL --button="OK:0"
|
|
return
|
|
done
|
|
}
|
|
|
|
# Prepare environment and read bookmarks
|
|
declare -a bookmarks
|
|
config="${XDG_CONFIG_HOME:-${HOME}/.config}"
|
|
if [[ -r "${config}/surfraw/bookmarks" ]]; then
|
|
mapfile -t contents < "${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 < "${config}/i3/bookmarks"
|
|
for i in "${contents[@]}" ; do
|
|
bookmarks+=("${i% *}" "${i##* }")
|
|
done
|
|
fi
|
|
|
|
# Run yad to display the dialog
|
|
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
|
|
|