Merge 787ae2c4b30b6218917b1e51f249d741aa6b61d5 into f853f1884a8f0c244765192dc6f5a910a7e2b8e5

This commit is contained in:
Emre AKYÜZ 2025-04-12 05:16:40 +07:00 committed by GitHub
commit a116ab186a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -0,0 +1,71 @@
#!/bin/sh
f="${XDG_DATA_HOME}/urls"
am="@@"
d() { dmenu -i -l "${1}" -p "${2}"; }
no() { notify-send "Bookmarks" "${1}"; }
eno() { no "${1}"; exit; }
pr() { printf "%s\n" "${@}"; }
ch() {
[ -f "${f}" ] || {
no "${f} does not exist. Creating it now."
pr "SearXNG=https://searx.tiekoetter.com/search?q=" > "${f}"
pr "YouTube=https://www.youtube.com/results?search_query=" >> "${f}"
}
}
gs() { cut -d= -f1 "${f}" | d "${l}" "Bookmarks"; }
up() { sed -i "s|${1}.*$|${2}|" "${f}"; }
val() { pr "${1}" | grep -qE '^https?://[^\s/$.?#].[^\s]*$'; }
add() {
u="$(xclip -o)"
val "${u}" || eno "Clipboard not valid"
grep -q "=${u}$" "${f}" && eno "URL already saved"
n="$(pr "" | d "0" "Name")"
[ "${n}" ] && pr "${n}=${u}" >> "${f}" && no "'${n}' bookmarked"
}
del() {
n="$(gs)"
[ "${n}" ] || eno "Failed to delete bookmark"
sed -i "/^${n}=.*/d" "${f}"
[ -s "${f}" ] && grep -q "\S" "${f}" || rm "${f}"
no "'${n}' is deleted."
}
en() {
on="${1}"
nn="$(pr "" | d "0" "New Name")"
[ "${nn}" ] || exit
u="$(grep "^${on}=" "${f}" | cut -d= -f2)"
up "^${on}=" "${nn}=${u}"
}
eu() {
n="${1}"
nu="$(pr "" | d "0" "New URL")"
[ "${nu}" ] || exit
up "${n}=" "${n}=${nu}"
}
eb() {
n="$(gs)"
[ "${n}" ] || eno "Failed to edit bookmark"
fi="$(pr "NAME" "URL" | d "2" "Edit")"
case "${fi}" in "NAME") en "${n}" ;; "URL") eu "${n}" ;; esac
no "'${n}' is updated."
}
o() {
u="$(grep "^${s}=" "${f}" | cut -d= -f2-)"
[ "${u}" ] || eno "Bookmark not found"
case "${u}" in *"search"* | *"wiki"* | *"packages"*)
q="$(pr "" | d "0" "Search")"; u="${u}${q}" ;;
esac
"${BROWSER}" "${u}" || eno "Failed to open: ${u}"
}
ch
l="$(wc -l < "${f}")"
[ "${l}" -gt "21" ] && l="21"
s="$(gs)"
case "${s}" in
"${am}")
a="$(pr "Add" "Delete" "Edit" | d "3" "Action")"
case "${a}" in "Add") add ;; "Delete") del ;; "Edit") eb ;; esac
;;
"") exit ;;
*) o ;;
esac