Skip to content

Commit b21f605

Browse files
authored
v0.5
- [X] moved engines.json to config dir (breaking changes) - [X] add gemini handler - [X] instead of showing error, list all available 'bangs' to chose from - [X] instead of showing error, list all available 'ubangs' to chose from - [X] instead of showing error, list all available 'engines' to chose from - [X] include $ENGINES - [X] include engines.json
1 parent 9aa9234 commit b21f605

File tree

1 file changed

+52
-23
lines changed

1 file changed

+52
-23
lines changed

nbrowser

Lines changed: 52 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/usr/bin/env bash
2-
# nbrowser v0.4
2+
# nbrowser v0.5
33
# author : odnar-dev <https://github.com/odnar-dev>
44
# source : https://github.com/MyOS-ArchLinux/nbrowser
55
# license: GPLv3 <https://gnu.org/licenses/gpl-3.0.html>
@@ -13,9 +13,11 @@ declare -A ENGINES
1313

1414
ENGINES=(
1515
["google"]="https://www.google.com/search?q="
16+
["g"]="https://www.google.com/search?q="
1617
["duckduckgo"]="https://duckduckgo.com/?q="
1718
["ddg"]="https://duckduckgo.com/?q="
1819
["startpage"]="https://www.startpage.com/do/search?query="
20+
["sp"]="https://www.startpage.com/do/search?query="
1921
["archwiki"]="https://wiki.archlinux.org/index.php?title=Special:Search&search="
2022
["aur"]="https://aur.archlinux.org/packages/?O=0&SeB=nd&outdated=&SB=n&SO=a&PP=50&do_Search=Go&K="
2123
["github"]="https://github.com/search?q="
@@ -25,6 +27,7 @@ ENGINES=(
2527
["tvdb"]="https://www.thetvdb.com/search?query="
2628
["mal"]="https://myanimelist.net/search/all?q="
2729
["youtube"]="https://www.youtube.com/results?search_query="
30+
["ytb"]="https://www.youtube.com/results?search_query="
2831
)
2932

3033
has() {
@@ -46,9 +49,16 @@ _choose(){
4649
rofi -dmenu -i -p 'Select Item ' -theme-str 'window {width: 95%;}' -l 10 -no-click-to-exit -filter "${@:-}"
4750
}
4851

52+
listfiles(){
53+
for file in ${NBROWSER_CONFIG_DIR}/$1/*; do
54+
[ -e "$file" ] || [ -L "$file" ] || continue
55+
[ -s "$file" ] && printf '%s\n' "${file##*/}"
56+
done
57+
}
58+
4959
# check if necessary programs are installed
5060
if ! has 'rofi'; then
51-
notify-send "nbrowser: you need to install rofi!"
61+
notify-send "nbrowser: rofi is not installed in your system!"
5262
exit 1
5363
fi
5464

@@ -87,7 +97,7 @@ for prog in badwolf qutebrowser ephemeral ; do
8797
done
8898

8999
# custom config
90-
[[ -f "${NBROWSER_CONFIG_DIR}/config" ]] && source "${NBROWSER_CONFIG_DIR}/config"
100+
[ -f "${NBROWSER_CONFIG_DIR}/config" ] && source "${NBROWSER_CONFIG_DIR}/config"
91101

92102
if ! has _clean_url ;then
93103
_clean_url(){
@@ -124,6 +134,12 @@ if ! has _copy_to_clipboard ;then
124134
}
125135
fi
126136

137+
if ! has _gemini_handler ;then
138+
_gemini_handler(){
139+
open_in_browser "https://proxy.vulpes.one/gemini/${1:9}"
140+
}
141+
fi
142+
127143
open_a_browser(){
128144
selected_browser=$(printf "%s\n" "${installed_browsers[@]}" | awk 'BEGIN { RS="\n"; FS=" : " } { print $1 "\t : " $2 }'| column -t -s $'\t' | rofi -dmenu -p 'nbrowser' -i -format "i s" -l "$((browser_count-1))")
129145

@@ -220,7 +236,11 @@ open_in_browser(){
220236
elif [[ "${selected_browser/?}" == "p" ]] ; then
221237
open_video_with "$*"
222238
else
223-
_pemx "ubang '${selected_browser/?}' not found!"
239+
ubang=$(listfiles ubangs | rofi -dmenu -p 'ubangs' -i -mesg "ubangs '${selected_browser/?}' not found!")
240+
[ -z "${ubang}" ] && exit
241+
source "${NBROWSER_CONFIG_DIR}/ubangs/${ubang}"
242+
has nbrowser_ubang || _pemx "couldn't find nbrowser_ubang() function in ${NBROWSER_CONFIG_DIR}/ubangs/${ubang}"
243+
nbrowser_ubang "$*"
224244
fi
225245
;;
226246
"Copy to clipboard"*": ")
@@ -241,7 +261,6 @@ url_handler(){
241261
if [ -f "${NBROWSER_CONFIG_DIR}/dbangs/${domain}" ] ; then
242262
source "${NBROWSER_CONFIG_DIR}/dbangs/${domain}"
243263
has nbrowser_dbang || _pemx "couldn't find nbrowser_dbang() function in ${NBROWSER_CONFIG_DIR}/dbangs/${domain}"
244-
shift
245264
nbrowser_dbang "$cleanurl"
246265
else
247266
case "$cleanurl" in
@@ -261,7 +280,7 @@ url_handler(){
261280
main(){
262281
case "$1" in
263282
gemini://*)
264-
open_in_browser "https://proxy.vulpes.one/gemini/${1:9}"
283+
_gemini_handler "$@"
265284
;;
266285
http://*|https://*)
267286
url_handler "$@"
@@ -296,39 +315,49 @@ main(){
296315
# bangs
297316
"!"*)
298317
local bang="${1/?}"
299-
if [ -f "${NBROWSER_CONFIG_DIR}/bangs/${bang}" ] ; then
300-
shift
301-
source "${NBROWSER_CONFIG_DIR}/bangs/${bang}"
302-
has nbrowser_bang || _pemx "couldn't find nbrowser_bang() function in ${NBROWSER_CONFIG_DIR}/bangs/${bang}"
303-
nbrowser_bang "$*"
304-
else
305-
_pemx "bang '${bang}' not found!"
318+
shift
319+
if [ ! -f "${NBROWSER_CONFIG_DIR}/bangs/${bang}" ] ; then
320+
bang=$(listfiles bangs | rofi -dmenu -p 'bangs' -i -mesg "bang '${bang}' not found!")
306321
fi
322+
[ -z "${bang}" ] && exit
323+
source "${NBROWSER_CONFIG_DIR}/bangs/${bang}"
324+
has nbrowser_bang || _pemx "couldn't find nbrowser_bang() function in ${NBROWSER_CONFIG_DIR}/bangs/${bang}"
325+
nbrowser_bang "$*"
307326
;;
308327

309328
# engines
310329
"?"*)
311330
local engine="${1/?}"
331+
shift
312332
if [ -f "${NBROWSER_CONFIG_DIR}/engines/${engine}" ] ; then
313-
shift
314333
source "${NBROWSER_CONFIG_DIR}/engines/${engine}"
315334
has nbrowser_search || _pemx "couldn't find nbrowser_search() function in ${NBROWSER_CONFIG_DIR}/engines/${engine}"
316335
[ -n "$1" ] && url_handler "$(nbrowser_search $*)"
317-
elif [ -n "${ENGINES[$engine]}" ]; then
318-
shift
336+
elif [ -n "${ENGINES[${engine:- }]}" ]; then
319337
url_handler "${ENGINES[$engine]}$*"
320-
elif [ -f "$NBROWSER_CONFIG_DIR/engines/engines.json" ]; then
321-
shift
322-
local url=$(jq -r ".[]|select( .t == \"$engine\" )|.u" "$NBROWSER_CONFIG_DIR/engines/engines.json" | sed "s/{{{s}}}/$*/g")
323-
[ -z "$url" ] && _pemx "engine '${engine}' not found!"
324-
url_handler "$url"
338+
elif [ -f "$NBROWSER_CONFIG_DIR/engines.json" ]; then
339+
local url=$(jq -r ".[]|select( .t == \"$engine\" )|.u" "$NBROWSER_CONFIG_DIR/engines.json" | sed "s/{{{s}}}/$*/g")
340+
if [ ! -z "$url" ] ; then
341+
url_handler "$url"
342+
else
343+
ENGINESLIST="$(listfiles engines)"
344+
ENGINESLIST+=" ${!ENGINES[@]}"
345+
ENGINESLIST+=" $(jq -r ".[]|.t" "$NBROWSER_CONFIG_DIR/engines.json")"
346+
engine=$(printf "%s\n" ${ENGINESLIST} | awk '!a[$0]++' | rofi -dmenu -p 'engines' -i -mesg "engine '${engine}' not found!")
347+
[ -z "$engine" ] && exit
348+
[ -n "$1" ] && main "?"$engine $*
349+
fi
325350
else
326-
_pemx "search engine '${engine}' not found!"
351+
ENGINESLIST="$(listfiles engines)"
352+
ENGINESLIST+=" ${!ENGINES[@]}"
353+
engine=$(printf "%s\n" ${ENGINESLIST} | awk '!a[$0]++' | rofi -dmenu -p 'engines' -i -mesg "engine '${engine}' not found!")
354+
[ -z "$engine" ] && exit
355+
[ -n "$1" ] && main "?"$engine $*
327356
fi
328357
;;
329358

330359
*)
331-
if [ -e "$*" ] ; then
360+
if [ -f "$*" ] ; then
332361
case $@ in
333362
*.pdf)
334363
# handle local pdf

0 commit comments

Comments
 (0)