187 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			187 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| # dexec_browser
 | |
| # A multi browser launcher
 | |
| #
 | |
| # 1. choose input source
 | |
| #       (filtered-, full history, clipboad, manual entry)
 | |
| # 2. choose how to handle the input
 | |
| #       (can suggest a matching default)
 | |
| # 3. choose which browser to use
 | |
| #       (can suggest a matching default)
 | |
| 
 | |
| HISTFILE="${HOME}/.browser_history"
 | |
| 
 | |
| test -f ${HOME}/.bin/_config \
 | |
|     && . ${HOME}/.bin/_config \
 | |
|     || DMENU_CMD=dmenu
 | |
| 
 | |
| test -f "${HISTFILE}" \
 | |
|     || touch "${HISTFILE}"
 | |
| 
 | |
| PICKLIST="\
 | |
| paste_from_clipboard
 | |
| $(< "${HISTFILE}")
 | |
| "
 | |
| 
 | |
| # show filtered history file
 | |
| # EXPECTS:  $PICKLIST $HISTFILE $DMENU_CMD
 | |
| # PROVIDES: $INPUT
 | |
| read_input() {
 | |
|     local S=$(printf '%s\n' "${PICKLIST}" \
 | |
|         | ${DMENU_CMD} -p "Bookmarks")
 | |
|     case "${S}" in
 | |
|         paste_from_clipboard)
 | |
|             S=$(xclip -o \
 | |
|                 | head -n 1) ;;
 | |
|     esac
 | |
|     [ -z "${S}" ] && exit 0
 | |
|     INPUT="${S}"
 | |
| }
 | |
| 
 | |
| # Decide how to open the thing
 | |
| # EXPECTS:  $INPUT $DMENU_CMD
 | |
| # PROVIDES: $URI
 | |
| choose_wrapper() {
 | |
| 
 | |
| local SE="OPEN URL
 | |
| Amazon
 | |
| CPAN
 | |
| Crates.io
 | |
| DuckDuckGo Web Search
 | |
| DuckDuckGo Image Search
 | |
| GLIB Documentation
 | |
| Github
 | |
| LibSOUP Documentation
 | |
| Marc Info MessageID
 | |
| Marc Info OpenBSD Misc List
 | |
| Marc Info OpenBSD Ports CVS
 | |
| Marc Info OpenBSD Ports List
 | |
| Marc Info OpenBSD Tech List
 | |
| PDF Viewer
 | |
| SearX Web Search
 | |
| SearX Image Search
 | |
| Torrent Leech
 | |
| Wikipedia DE
 | |
| Wikipedia EN
 | |
| InternetMovieDataBase (IMDB)
 | |
| OpenStreetMap (OSM)
 | |
| Grep.app
 | |
| Google Maps
 | |
| Youtube
 | |
| Zalando"
 | |
| 
 | |
|     local C="$(printf '%s' "${INPUT}" \
 | |
|                     | head -n 1)"
 | |
|     case "${C}" in
 | |
|         *::*) DEFAULT="CPAN (default)"; ;;
 | |
|         http*) DEFAULT="OPEN (default)"; ;;
 | |
|         192.168.*) DEFAULT="OPEN (default)"; C="http://${C}"; ;;
 | |
|         gopher*) DEFAULT="OPEN (default)"; ;;
 | |
|         g_*) DEFAULT="GLIB Documentation"; ;;
 | |
|         [Ss]oup_*) DEFAULT="LibSOUP Documentation"; ;;
 | |
|         www.*) DEFAULT="OPEN (default)"; C="http://${C}"; ;;
 | |
|         \<*@*\>) DEFAULT="Marc Info Message ID (default)"; ;;
 | |
|         *.com|*.de|*.net|*.org) DEFAULT="OPEN (default)"; C="http://${C}"; ;;
 | |
|         *.at|*.ch|*.social) DEFAULT="OPEN (default)"; C="http://${C}" ;;
 | |
|         *.io|*.sh|*.pw|*.party) DEFAULT="OPEN (default)"; C="http://${C}"; ;;
 | |
|         *.coffee|*.me|*.cloud) DEFAULT="OPEN (default)"; C="http://${C}"; ;;
 | |
|         *.[a-zA-Z]*/*) DEFAULT="OPEN (default)"; C="http://${C}"; ;;
 | |
|         *) DEFAULT="DuckDuckGo Web Search (default)"; ;;
 | |
|     esac
 | |
| 
 | |
|     local S="$(printf "%s\n%s" "${DEFAULT}" "${SE}" \
 | |
|                     | ${DMENU_CMD} -p "Search Where?")"
 | |
|     C=$(echo "$C" | sed 's/ /%20/g')
 | |
|     case "${S}" in
 | |
|         OPEN*)      URI="${C}"; ;;
 | |
|         Amazon*)    URI="https://www.amazon.de/s?k=${C}"; ;;
 | |
|         CPAN*)      URI="https://metacpan.org/search?q=${C}"; ;;
 | |
|         Crate*)     URI="https://crates.io/search?q=${C}"; ;;
 | |
|         Grep*)      URI="https://grep.app/search?q=${C}"; ;;
 | |
|         GLIB*)      URI="https://docs.gtk.org/glib/flags.UriFlags.html?q=${C}"; ;;
 | |
|         LibSOUP*)   URI="https://libsoup.org/libsoup-3.0/index.html?q=${C}"; ;;
 | |
|         Github)     URI="https://github.com/search?q=${C}"; ;;
 | |
|         D*Web*)     URI="https://html.duckduckgo.com/html?q=${C}"; ;;
 | |
|         D*Ima*)     URI="https://duckduckgo.com/?q=${C}&iax=images&ia=images"; ;;
 | |
|         S*Web*)     URI="https://searx.bar/search?q=${C}&category_general=on"; ;;
 | |
|         S*Ima*)     URI="https://searx.bar/search?q=${C}&category_images=on"; ;;
 | |
|         Tor*Lee*)   URI="https://www.torrentleech.org/torrents/browse/index/query/${C}"; ;;
 | |
|         W*DE*)      URI="https://de.m.wikipedia.org/wiki/Spezial:Suche/${C}"; ;;
 | |
|         W*EN*)      URI="https://en.m.wikipedia.org/wiki/Spezial:Search/${C}"; ;;
 | |
|         *IMDB*)     URI="https://www.imdb.com/find?q=${C}"; ;;
 | |
|         O*S*M*)     URI="https://www.openstreetmap.org/search?query=${C}"; ;;
 | |
|         G*Maps)     URI="https://www.google.com/maps/place/${C}"; ;;
 | |
|         You*be)     URI="https://m.youtube.com/results?sp=mAEA&search_query=${C}" ;;
 | |
|         M*I*ID*)    URI="https://marc.info/?i=$(printf '%s' "${C}" | tr -d '<>')"; ;;
 | |
|         M*I*P*List) URI="https://marc.info/?l=openbsd-ports&s=${C}&q=b"; ;;
 | |
|         M*I*T*List) URI="https://marc.info/?l=openbsd-tech&s=${C}&q=b"; ;;
 | |
|         M*I*M*List) URI="https://marc.info/?l=openbsd-misc&s=${C}&q=b"; ;;
 | |
|         M*I*P*CVS)  URI="https://marc.info/?l=openbsd-ports-cvs&s=${C}&q=b"; ;;
 | |
|         Zalando)    URI="https://www.zalando.de/herren/?q=${C}"; ;;
 | |
|         *) exit 0 ;;
 | |
|     esac
 | |
| }
 | |
| 
 | |
| # Which browser shall we use?
 | |
| # EXPECTS:  $URI $DMENU_CMD
 | |
| # PROVIDES: $BROWSER
 | |
| choose_browser() {
 | |
| 
 | |
|     case "${URI}" in
 | |
|         gopher://*)       DEFAULT="Lagrange (default)"; ;;
 | |
|         gemini://*)       DEFAULT="Lagrange (default)"; ;;
 | |
|         *.pdf|*.cb|*.ps)  DEFAULT="Zathura (default)"; ;;
 | |
|         192.168.*)        DEFAULT="Firefox (default)"; ;;
 | |
|         *github.com*)     DEFAULT="Firefox (default)"; ;;
 | |
|         *amazon.de*)      DEFAULT="Firefox (default)"; ;;
 | |
|         *twitter.com*)    DEFAULT="Firefox (default)"; ;;
 | |
|         *chaos.social*)   DEFAULT="Firefox (default)"; ;;
 | |
|         *hetzner.cloud*)  DEFAULT="Firefox (default)"; ;;
 | |
|         *hetzner.de*)     DEFAULT="Firefox (default)"; ;;
 | |
|         *duckduckgo.com/*images*) DEFAULT="Firefox (default)"; ;;
 | |
|         *codevoid.de*)    DEFAULT="Firefox (default)"; ;;
 | |
|         *google.*)        DEFAULT="Firefox (default)"; ;;
 | |
|         *youtube.com*)    DEFAULT="Firefox (default)"; ;;
 | |
|         *youtu.be*)       DEFAULT="Firefox (default)"; ;;
 | |
|         *bsd.network*)    DEFAULT="Firefox (default)"; ;;
 | |
|         *itch.io*)        DEFAULT="Firefox (default)"; ;;
 | |
|         *chat.uugrn.org*) DEFAULT="Firefox (default)"; ;;
 | |
|         *[./]amazon.*)    DEFAULT="Firefox (default)"; ;;
 | |
|         *comdirect.de*)   DEFAULT="Firefox (default)"; ;;
 | |
|         *motorradfreunde-rheinneckar.de*)   DEFAULT="Firefox (default)"; ;;
 | |
|         *polo-motorrad.com*)   DEFAULT="Firefox (default)"; ;;
 | |
|         *peek-cloppenburg.de*) DEFAULT="Firefox (default)"; ;;
 | |
|         *asos.com*)       DEFAULT="Firefox (default)"; ;;
 | |
|         *zalando.de*)     DEFAULT="Firefox (default)"; ;;
 | |
|         *) DEFAULT="Luakit (default)"; ;;
 | |
|     esac
 | |
| 
 | |
|     local S="${DEFAULT}\nLuakit\nFirefox\nChrome\nQutebrowser\nNetsurf\nTor-Browser"
 | |
|     case $(echo "${S}" | ${DMENU_CMD} -p "Browser") in
 | |
|         Netsurf*)  BROWSER=netsurf-gtk3 ;;
 | |
|         Vimb*)     BROWSER=vimb ;;
 | |
|         Quteb*r*)  BROWSER=qutebrowser ;;
 | |
|         Surf*)     BROWSER=surf ;;
 | |
|         Otter*r*)  BROWSER=otter-browser ;;
 | |
|         Luakit*)   BROWSER="luakit -Un" ;;
 | |
|         Chrome*)   BROWSER=chrome ;;
 | |
|         Firefox*)  BROWSER=firefox ;;
 | |
|         Tor-B*r*)  BROWSER=tor-browser ;;
 | |
|         Zathura*)  BROWSER=zathura ;;
 | |
|         Lagrange*) BROWSER=lagrange ;;
 | |
|         *) exit 0;;
 | |
|     esac
 | |
| }
 | |
| 
 | |
| save_history() {
 | |
|     printf '%s\n' "${INPUT}" >> "${HISTFILE}"
 | |
| }
 | |
| 
 | |
| # main program starts here.
 | |
| read_input
 | |
| choose_wrapper
 | |
| choose_browser
 | |
| save_history
 | |
| exec $BROWSER "$(printf '%s' "${URI}" | sed 's/ /%20/g')"
 | 
