Skip to content

Commit 117fa49

Browse files
authored
v0.9 (alpha)
this pr change the way browsers are stored, this will add a little complexity but also remove some limitation on the way we can manipulate the browser list.
1 parent 05faa05 commit 117fa49

File tree

1 file changed

+74
-30
lines changed

1 file changed

+74
-30
lines changed

nbrowser

Lines changed: 74 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/usr/bin/env bash
2-
# nbrowser v0.8
2+
# nbrowser v0.9
33
# Requires bash 4+
44
# author : odnar-dev <https://github.com/odnar-dev>
55
# source : https://github.com/MyOS-ArchLinux/nbrowser
@@ -14,6 +14,10 @@ NBROWSER_SIMPLE_URL_HANDLER=${NBROWSER_SIMPLE_URL_HANDLER:-false}
1414

1515
declare -A ENGINES
1616

17+
declare -A BROWSER_NAME
18+
declare -A BROWSER_PATH
19+
declare -A BROWSER_ARGS
20+
1721
ENGINES=(
1822
["google"]="https://www.google.com/search?q="
1923
["g"]="https://www.google.com/search?q="
@@ -33,9 +37,9 @@ ENGINES=(
3337
["ytb"]="https://www.youtube.com/results?search_query="
3438
)
3539

36-
FIREFOX_BASED_BROWSERS=(librewolf firefox floorp icecat palemoon firedragon)
37-
CHROMIUM_BASED_BROWSERS=(google-chrome-stable chromium brave vivaldi-stable opera)
38-
OTHER_BASED_BROWSERS=(badwolf qutebrowser ephemeral)
40+
FIREFOX_BASED_BROWSERS=(LibreWolf FireFox Floorp IceCat Palemoon FireDragon)
41+
CHROMIUM_BASED_BROWSERS=(google-chrome-stable Chromium Brave Vivaldi-Stable Opera)
42+
OTHER_BASED_BROWSERS=(BadWolf qutebrowser Ephemeral)
3943

4044
has() {
4145
case "$(command -v "$1" 2>/dev/null)" in
@@ -79,34 +83,67 @@ fi
7983
## keep the first place to special action
8084
browser_count=1
8185

86+
# use: add_browser( browser_id, browser_name, browser_path, browser_args )
8287
add_browser(){
83-
local browser_name="${1:?}"
84-
local browser_path="${2:?}"
85-
browser_count=$((browser_count+1))
86-
installed_browsers[$browser_count]="${browser_name:?} : ${browser_path:?}"
88+
[ -z "${5}" ] && browser_count=$((browser_count+1))
89+
local _browser_id="${1}"
90+
BROWSER_LIST[${5:-$browser_count}]=${_browser_id}
91+
BROWSER_NAME[${_browser_id}]="${2:-$_browser_id}"
92+
BROWSER_PATH[${_browser_id}]="${3:-$(command -v $_browser_id )}"
93+
BROWSER_ARGS[${_browser_id}]="${4:-}"
94+
}
95+
96+
# use: rm_browser(browse_id, browser_id...)
97+
rm_browsers(){
98+
local _browsers_to_rm=($@)
99+
local _browser_id
100+
declare -A REMOVE_LIST
101+
for _browser_id in "${_browsers_to_rm[@]}" ; do REMOVE_LIST[$_browser_id]=1 ; done
102+
for k in "${!BROWSER_LIST[@]}" ; do
103+
if [ "${REMOVE_LIST[${BROWSER_LIST[$k]}]-}" ] ; then
104+
unset "BROWSER_NAME[${BROWSER_LIST[$k]}]" ; unset "BROWSER_PATH[${BROWSER_LIST[$k]}]"
105+
unset "BROWSER_ARGS[${BROWSER_LIST[$k]}]" ; unset 'BROWSER_LIST[k]'
106+
fi
107+
done
108+
BROWSER_LIST=("${BROWSER_LIST[@]}")
109+
}
110+
111+
ls_browsers(){
112+
local _browser_id
113+
for _browser_id in "${BROWSER_LIST[@]}" ; do
114+
[ -z "${BROWSER_NAME[${_browser_id}]}" ] && continue
115+
echo "${BROWSER_NAME[${_browser_id}]} : ${BROWSER_PATH[${_browser_id}]} ${BROWSER_ARGS[${_browser_id}]}"
116+
done | awk '!a[$0]++' | awk 'BEGIN { RS="\n"; FS=" : " } { print $1 "\t : " $2 }'| column -t -s $'\t'
117+
}
118+
119+
ls_browsers_table(){
120+
add_browser "id" "browser name" "browser path" "browser args" "0"
121+
local _browser_id
122+
for _browser_id in "${BROWSER_LIST[@]}" ; do
123+
[ -z "${BROWSER_NAME[${_browser_id}]}" ] && continue
124+
echo "| - ${_browser_id} | ${BROWSER_NAME[${_browser_id}]} : ${BROWSER_PATH[${_browser_id}]} | ${BROWSER_ARGS[${_browser_id}]:-} |"
125+
done | awk '!a[$0]++' | column -t -s $'\t'
87126
}
88127

89128
## firefox based browser
90-
for prog in ${FIREFOX_BASED_BROWSERS[*]}; do
91-
if has "$prog" ; then
92-
add_browser "$prog" "$(command -v $prog)"
93-
add_browser "$prog [Private]" "$(command -v $prog) --private-window"
129+
for prog in "${FIREFOX_BASED_BROWSERS[@]}"; do
130+
if has "${prog,,}" ; then
131+
add_browser "${prog,,}" "${prog}" "$(command -v ${prog,,})"
132+
add_browser "${prog,,}_prv" "${prog} [Private]" "$(command -v ${prog,,})" "--private-window"
94133
fi
95134
done
96-
97135
## chromium based browser
98-
for prog in ${CHROMIUM_BASED_BROWSERS[*]}; do
99-
if has "$prog" ; then
100-
add_browser "$prog" "$(command -v $prog)"
101-
# add private window
102-
add_browser "$prog [Private]" "$(command -v $prog) --incognito"
136+
for prog in "${CHROMIUM_BASED_BROWSERS[@]}"; do
137+
if has "${prog,,}" ; then
138+
add_browser "${prog,,}" "${prog}" "$(command -v ${prog,,})"
139+
add_browser "${prog,,}_prv" "${prog} [Private]" "$(command -v ${prog,,})" "--incognito"
103140
fi
104141
done
105142

106143
## other browsers
107-
for prog in ${OTHER_BASED_BROWSERS[*]} ; do
108-
if has "$prog" ; then
109-
add_browser "$prog" "$(command -v $prog)"
144+
for prog in "${OTHER_BASED_BROWSERS[@]}" ; do
145+
if has "${prog,,}" ; then
146+
add_browser "${prog,,}" "${prog}" "$(command -v ${prog,,})"
110147
fi
111148
done
112149

@@ -149,7 +186,7 @@ if ! has _copy_to_clipboard ;then
149186
fi
150187

151188
open_a_browser(){
152-
selected_browser=$(printf "%s\n" "${installed_browsers[@]}" | awk '!a[$0]++' | 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))")
189+
selected_browser=$(ls_browsers | rofi -dmenu -p 'nbrowser' -i -format "i s" -l "${#BROWSER_NAME[@]}")
153190

154191
[ -z "${selected_browser}" ] && exit 0
155192

@@ -238,17 +275,17 @@ open_in_browser(){
238275
current_win_pid=$(xdotool getwindowpid "$current_win_id" )
239276
current_win_name=$(ps -o comm= -p "$current_win_pid" || xdotool getwindowname "$current_win_id" )
240277
fi
241-
current_browser=$(printf "%s\n" "${installed_browsers[@]}" | awk -v current_win_name="${current_win_name:-}" 'BEGIN { RS="\n"; FS=" : " } $1 ~ current_win_name {p=1; exit} END {if(p) print $1 "\t:\t" $2 }')
242-
[ ! -z "${current_browser}" ] && installed_browsers[0]="${current_browser:-}"
278+
# current_browser=$(ls_browsers | awk -v current_win_name="${current_win_name:-}" 'BEGIN { RS="\n"; } $1 ~ current_win_name {p=1; exit} END {if(p) print $1}')
279+
# notify-send "current_browser: $current_browser"
280+
[ ! -z "${current_win_name}" ] && BROWSER_LIST[1]="${current_win_name}"
243281
fi
244282
# add clipboard
245283
if [ "${COPY_TO_CLIPBOARD_OPTION}" = true ]; then
246-
browser_count=$((browser_count+1))
247-
installed_browsers[$browser_count]="Copy to clipboard"
284+
add_browser "copy_to_clipboard" "Copy to clipboard" " " " " ""
248285
COPY_TO_CLIPBOARD_OPTION=false
249286
fi
250287

251-
selected_browser=$(printf "%s\n" "${installed_browsers[@]}" | awk '!a[$0]++' | awk 'BEGIN { RS="\n"; FS=" : " } { print $1 "\t : " $2 }'| column -t -s $'\t' | rofi -dmenu -p 'Open URL with' -mesg "${@//&/&amp;}" -i -l "$((browser_count-1))" )
288+
selected_browser=$(ls_browsers | rofi -dmenu -p 'Open URL with' -mesg "${@//&/&amp;}" -i -l "${#BROWSER_NAME[@]}" )
252289

253290
[ -z "${selected_browser}" ] && exit 0
254291

@@ -268,7 +305,7 @@ open_in_browser(){
268305
nbrowser_ubang "$*"
269306
fi
270307
;;
271-
"Copy to clipboard"*": ")
308+
"Copy to clipboard"*":"*)
272309
_copy_to_clipboard "$*"
273310
;;
274311
*)
@@ -316,10 +353,10 @@ main(){
316353
if [[ -e "${arg}" ]]; then
317354
case "${arg}" in
318355
*.pdf)
319-
[ -z "${NBROWSER_PDF_VIEWER}" ] || installed_browsers[0]="PDF Reader : ${NBROWSER_PDF_VIEWER}"
356+
[ -z "${NBROWSER_PDF_VIEWER}" ] || add_browser "pdf_reader" "PDF Reader" "${NBROWSER_PDF_VIEWER}" "${NBROWSER_PDF_VIEWER_ARGS:-}" "0"
320357
;;
321358
*)
322-
[ -z "${NBROWSER_HTML_EDITOR}" ] || installed_browsers[0]="Text Editor : ${NBROWSER_HTML_EDITOR}"
359+
[ -z "${NBROWSER_HTML_EDITOR}" ] || add_browser "text_editor" "Text Editor" "${NBROWSER_HTML_EDITOR}" "${NBROWSER_HTML_EDITOR_ARGS:-}" "0"
323360
;;
324361
esac
325362
open_in_browser "$*"
@@ -441,6 +478,13 @@ main(){
441478
fi
442479
}
443480

481+
case "${@}" in
482+
--ls-browsers|-lsb)
483+
ls_browsers_table
484+
exit
485+
;;
486+
esac
487+
444488
if [ -z "$1" ]; then
445489
open_a_browser;
446490
else

0 commit comments

Comments
 (0)