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
1515declare -A ENGINES
1616
17+ declare -A BROWSER_NAME
18+ declare -A BROWSER_PATH
19+ declare -A BROWSER_ARGS
20+
1721ENGINES=(
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
4044has () {
4145 case " $( command -v " $1 " 2> /dev/null) " in
7983# # keep the first place to special action
8084browser_count=1
8185
86+ # use: add_browser( browser_id, browser_name, browser_path, browser_args )
8287add_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
95134done
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
104141done
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
111148done
112149
@@ -149,7 +186,7 @@ if ! has _copy_to_clipboard ;then
149186fi
150187
151188open_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 " ${@// &/ &} " -i -l " $(( browser_count - 1 )) " )
288+ selected_browser=$( ls_browsers | rofi -dmenu -p ' Open URL with' -mesg " ${@// &/ &} " -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+
444488if [ -z " $1 " ]; then
445489 open_a_browser;
446490else
0 commit comments