#!/bin/bash # # smart browser wrapper experiment 0.02 # Christian Birchinger # # Priorities: # running prefered browser, first running browser, available prefered browser, first available browser # # Why so much debug? - To test what it does on other peoples setups # Things to try - Desktop (KDE, Gnome) environment dependant BROWSERS list (done?) # Probably to lazy for... - Handle X and non-X environments # Possible issues - command name != process name # User's preference PREFERED="${BROWSER}" WHO="${USER-`whoami`}" BROWSERS=( firefox-bin firefox mozilla-bin mozilla dillo ) pgrep -u ${WHO} -x kdeinit &>/dev/null && BROWSERS=( konqueror ${BROWSERS[@]} ) || BROWSERS=( ${BROWSERS[@]} konqueror ) pgrep -u ${WHO} -x gnome-session &>/dev/null && BROWSERS=( epiphany galeon ${BROWSERS[@]} ) || BROWSERS=( ${BROWSERS[@]} epiphany galeon ) debug() { [ -n "${debug}" ] && echo "DEBUG: $*"; } # Remove user prefered browser from the list and add it on top of it for (( i=0; $i < ${#BROWSERS[@]}; i++ )); do [ "${BROWSERS[${i}]}" = "${PREFERED##*/}" ] && unset BROWSERS[${i}] done BROWSERS=( ${PREFERED##*/} ${BROWSERS[@]} ) debug "browser test list: ${BROWSERS[@]}" debug "user preference (\$BROWSER): ${PREFERED:-none}" running=() for run in "${BROWSERS[@]}"; do pgrep -u ${WHO} -x ${run} &>/dev/null && running=( ${running[@]} "${run}" ) done debug "running browsers: ${running[@]-none}" best_browser='' if [ -n "${running[0]}" ]; then best_browser="${running[0]}" debug "using first running browser: ${best_browser}" else for available in "${BROWSERS[@]}"; do which ${available} &>/dev/null && best_browser="${available}" && break done debug "using first installed: ${best_browser}" fi [ -z "${best_browser}" ] && { echo "No usable browsers found." >&2 ; exit 1; } debug "starting: ${best_browser} $@" #exec ${best_browser} $@