diff --git a/.local/bin/browser_bookmarks.sh b/.local/bin/browser_bookmarks.sh index 1199ecb6..5710c49e 100644 --- a/.local/bin/browser_bookmarks.sh +++ b/.local/bin/browser_bookmarks.sh @@ -6,94 +6,116 @@ ACTION_MENU="@@" # For additional search function, see information on open_bookmark function below CLIPBOARD() { - xclip -o + 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." + printf "SearXNG=https://searx.tiekoetter.com/search?q=\n" > "${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:]]+$" + printf "%s\n" "${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="$(printf "" | DMENU "0" "Name")" + + [ -n "${NAME}" ] && printf "%s\n" "${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="$(printf "" | 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="$(printf "Name\nURL\n" | 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"*) QUERY="$(echo "" | DMENU "0" "Search")" + URL="${URL}${QUERY}" + ;; + esac + + "${BROWSER}" "${URL}" || notify-send "Failed to open the URL." } ensure_file_exists @@ -103,12 +125,14 @@ LINE_COUNT="$(wc -l < "${URLQUERY_FILE}")" [ "${LINE_COUNT}" -ge "15" ] && LINE_COUNT="15" SELECTION="$(get_selection)" + [ -z "${SELECTION}" ] && exit case "${SELECTION}" in "${ACTION_MENU}") - ACTION="$(echo "Add\nDelete\nEdit" | DMENU "3" "Action")" - case "${ACTION}" in + ACTION="$(printf "Add\nDelete\nEdit\n" | DMENU "3" "Action")" + + case "${ACTION}" in "Add") add_bookmark ;; "Delete") delete_bookmark ;; "Edit") edit_bookmark ;;