diff --git a/.local/bin/browser_bookmarks.sh b/.local/bin/browser_bookmarks.sh index 3cc3c47f..1199ecb6 100644 --- a/.local/bin/browser_bookmarks.sh +++ b/.local/bin/browser_bookmarks.sh @@ -1,117 +1,120 @@ #!/bin/dash -URLQUERY_FILE="$HOME/.local/share/urlquery" -CLIPBOARD="xclip -o" -ACTION_MENU='@@' +URLQUERY_FILE="${HOME}/.local/share/urlquery" +ACTION_MENU="@@" -# For additional search function, see information on open_bookmark function below +# For additional search function, see information on open_bookmark function below + +CLIPBOARD() { + xclip -o +} DMENU() { - dmenu -i -l $1 -p "$2" + dmenu -i -l "${1}" -p "${2}" } error_notify() { - notify-send "$1" - exit 1 + notify-send "${1}" + exit "1" } ensure_file_exists() { - [ -f "$URLQUERY_FILE" ] || { - notify-send "$URLQUERY_FILE does not exist. Creating it now." - echo "SearXNG=https://searx.tiekoetter.com/search?q=" > "$URLQUERY_FILE" - } + [ -f "${URLQUERY_FILE}" ] || { + notify-send "${URLQUERY_FILE} does not exist. Creating it now." + echo "SearXNG=https://searx.tiekoetter.com/search?q=" > "${URLQUERY_FILE}" + } } get_selection() { - cut -d= -f1 "$URLQUERY_FILE" | DMENU $LINE_COUNT "Bookmarks" + cut -d= -f1 "${URLQUERY_FILE}" | DMENU "${LINE_COUNT}" "Bookmarks" } update_file() { - pattern="$1" - replacement="$2" - sed "/$pattern/c\\ -$replacement" "$URLQUERY_FILE" > "$URLQUERY_FILE.tmp" && mv "$URLQUERY_FILE.tmp" "$URLQUERY_FILE" || - error_notify "Failed to update the file." + pattern="${1}" + replacement="${2}" + sed "/${pattern}/c\\ +${replacement}" "${URLQUERY_FILE}" > "${URLQUERY_FILE}.tmp" && mv "${URLQUERY_FILE}.tmp" "${URLQUERY_FILE}" || + error_notify "Failed to update the file." } is_valid_url() { - echo "$1" | grep -qE "^https?://[^[:space:]/?#][^[:space:]]+$" + echo "${1}" | grep -qE "^https?://[^[:space:]/?#][^[:space:]]+$" } add_bookmark() { - URL=$($CLIPBOARD) - is_valid_url "$URL" || error_notify "The clipboard content is not a valid URL." - grep -q "=$URL$" "$URLQUERY_FILE" && notify-send "The URL is already in the list." && return - NAME=$(echo "" | DMENU 0 "Name") - [ -n "$NAME" ] && echo "${NAME}=${URL}" >> "$URLQUERY_FILE" && notify-send "'$NAME' is bookmarked." + URL="$(CLIPBOARD)" + is_valid_url "${URL}" || error_notify "The clipboard content is not a valid URL." + grep -q "=${URL}$" "${URLQUERY_FILE}" && notify-send "The URL is already in the list." && return + NAME="$(echo "" | DMENU "0" "Name")" + [ -n "${NAME}" ] && echo "${NAME}=${URL}" >> "${URLQUERY_FILE}" && notify-send "'${NAME}' is bookmarked." } delete_bookmark() { - NAME=$(get_selection) - [ -z "$NAME" ] && error_notify "Failed to delete the bookmark." && return - sed "/^$NAME=/d" "$URLQUERY_FILE" > "$URLQUERY_FILE.tmp" - mv "$URLQUERY_FILE.tmp" "$URLQUERY_FILE" - [ ! -s "$URLQUERY_FILE" ] || ! grep -qE "\S" "$URLQUERY_FILE" && rm "$URLQUERY_FILE" - notify-send "'$NAME' is deleted." + NAME="$(get_selection)" + [ -z "${NAME}" ] && error_notify "Failed to delete the bookmark." && return + sed "/^${NAME}=/d" "${URLQUERY_FILE}" > "${URLQUERY_FILE}.tmp" + mv "${URLQUERY_FILE}.tmp" "${URLQUERY_FILE}" + [ ! -s "${URLQUERY_FILE}" ] || ! grep -qE "\S" "${URLQUERY_FILE}" && rm "${URLQUERY_FILE}" + notify-send "'${NAME}' is deleted." } edit_name() { - OLD_NAME="$1" - NEW_NAME=$(echo "" | DMENU 0 "New Name") - [ -z "$NEW_NAME" ] && return - URL=$(grep "^$OLD_NAME=" "$URLQUERY_FILE" | cut -d= -f2) - update_file "^$OLD_NAME=" "$NEW_NAME=$URL" + OLD_NAME="${1}" + NEW_NAME="$(echo "" | DMENU "0" "New Name")" + [ -z "${NEW_NAME}" ] && return + URL="$(grep "^${OLD_NAME}=" "${URLQUERY_FILE}" | cut -d= -f2)" + update_file "^${OLD_NAME}=" "${NEW_NAME}=${URL}" } edit_url() { - NAME="$1" - NEW_URL=$(echo "" | DMENU 0 "New URL") - [ -z "$NEW_URL" ] && return - update_file "^$NAME=.*" "$NAME=$NEW_URL" + NAME="${1}" + NEW_URL="$(echo "" | DMENU "0" "New URL")" + [ -z "${NEW_URL}" ] && return + update_file "^${NAME}=.*" "${NAME}=${NEW_URL}" } edit_bookmark() { - NAME=$(get_selection) - [ -z "$NAME" ] && error_notify "Failed to edit the bookmark." && return - FIELD=$(echo "Name\nURL" | DMENU 2 "Edit") - case "$FIELD" in - "Name") edit_name "$NAME" ;; - "URL") edit_url "$NAME" ;; - esac - notify-send "'$NAME' is updated." + NAME="$(get_selection)" + [ -z "${NAME}" ] && error_notify "Failed to edit the bookmark." && return + FIELD="$(echo "Name\nURL" | DMENU "2" "Edit")" + case "${FIELD}" in + "Name") edit_name "${NAME}" ;; + "URL") edit_url "${NAME}" ;; + esac + notify-send "'${NAME}' is updated." } open_bookmark() { - URL=$(grep "^$SELECTION=" "$URLQUERY_FILE" | cut -d= -f2-) - [ -z "$URL" ] && notify-send "Bookmark not found." && exit 1 - case "$URL" in - *"search"*|*"wiki"*|*"packages"*) # Add your additional search keywords here similarly. - QUERY=$(echo "" | DMENU 0 "Search") - URL="${URL}${QUERY}" - ;; - esac - $BROWSER "$URL" || notify-send "Failed to open the URL." + URL="$(grep "^${SELECTION}=" "${URLQUERY_FILE}" | cut -d= -f2-)" + [ -z "${URL}" ] && notify-send "Bookmark not found." && exit "1" + case "${URL}" in + *"search"* | *"wiki"* | *"packages"*) # Add your additional search keywords here similarly. + QUERY="$(echo "" | DMENU "0" "Search")" + URL="${URL}${QUERY}" + ;; + esac + "${BROWSER}" "${URL}" || notify-send "Failed to open the URL." } ensure_file_exists -LINE_COUNT=$(wc -l < "$URLQUERY_FILE") +LINE_COUNT="$(wc -l < "${URLQUERY_FILE}")" -[ "$LINE_COUNT" -ge "15" ] && LINE_COUNT="15" +[ "${LINE_COUNT}" -ge "15" ] && LINE_COUNT="15" -SELECTION=$(get_selection) -[ -z "$SELECTION" ] && exit +SELECTION="$(get_selection)" +[ -z "${SELECTION}" ] && exit -case "$SELECTION" in -"$ACTION_MENU") - ACTION=$(echo "Add\nDelete\nEdit" | DMENU 3 "Action") - case "$ACTION" in - "Add") add_bookmark ;; - "Delete") delete_bookmark ;; - "Edit") edit_bookmark ;; - esac - ;; -*) - open_bookmark - ;; +case "${SELECTION}" in + "${ACTION_MENU}") + ACTION="$(echo "Add\nDelete\nEdit" | DMENU "3" "Action")" + case "${ACTION}" in + "Add") add_bookmark ;; + "Delete") delete_bookmark ;; + "Edit") edit_bookmark ;; + esac + ;; + *) + open_bookmark + ;; esac