213 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			213 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
#!/bin/sh
 | 
						||
 | 
						||
# Vars {{{
 | 
						||
readonly PROGNAME=$(basename "${0}")
 | 
						||
readonly PROGDIR=$(readlink -m $(dirname "${0}"))
 | 
						||
readonly ARGS="${*}"
 | 
						||
readonly NBARGS="${#}"
 | 
						||
[ -z "${DEBUG}" ] && DEBUG=0
 | 
						||
## Export DEBUG for sub-script
 | 
						||
export DEBUG
 | 
						||
 | 
						||
## Colors
 | 
						||
readonly PURPLE='\033[1;35m'
 | 
						||
readonly RED='\033[0;31m'
 | 
						||
readonly RESET='\033[0m'
 | 
						||
readonly COLOR_DEBUG="${PURPLE}"
 | 
						||
# }}}
 | 
						||
usage() {                                                       # {{{
 | 
						||
 | 
						||
	cat <<- EOF
 | 
						||
usage: $PROGNAME [--debug,--help] [--git,--package,--venv]
 | 
						||
 | 
						||
Try to launch the most appropriate qutebrowser binary :
 | 
						||
  1. From venv
 | 
						||
  2. From APT package
 | 
						||
  3. From Git repository
 | 
						||
 | 
						||
EXAMPLES :
 | 
						||
    - Launch qutebrowser
 | 
						||
        ${PROGNAME}
 | 
						||
 | 
						||
OPTIONS :
 | 
						||
    -d,--debug
 | 
						||
        Enable debug messages.
 | 
						||
 | 
						||
    --git
 | 
						||
        Force to use QuteBrowser from Git repository.
 | 
						||
 | 
						||
    --help
 | 
						||
        Print this help message.
 | 
						||
 | 
						||
    --package
 | 
						||
        Force to use QuteBrowser from package.
 | 
						||
 | 
						||
    --venv
 | 
						||
        Force to use QuteBrowser from Python Virtual ENVironment.
 | 
						||
 | 
						||
EOF
 | 
						||
 | 
						||
}
 | 
						||
# }}}
 | 
						||
define_vars() {                                                 # {{{
 | 
						||
 | 
						||
	## Use Qutebrowser from Python Virtual Environment by default
 | 
						||
	QB_VENV_MODE="0"
 | 
						||
 | 
						||
	## Qutebrowser possibles paths
 | 
						||
	QB_VENV_PYTHON_PATH="${HOME}/src/qutebrowser-venv/bin/python3"
 | 
						||
	QB_GIT_REPOSITORY="${HOME}/repos/qutebrowser"
 | 
						||
 | 
						||
}
 | 
						||
# }}}
 | 
						||
debug_message() {                                               # {{{
 | 
						||
 | 
						||
	local_debug_message="${1}"
 | 
						||
 | 
						||
	## Print message if DEBUG is enable (=0)
 | 
						||
	[ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6b\e[m\n' "DEBUG − ${PROGNAME} : ${local_debug_message}"
 | 
						||
 | 
						||
	return 0
 | 
						||
}
 | 
						||
# }}}
 | 
						||
error_message() {                                               # {{{
 | 
						||
 | 
						||
	local_error_message="${1}"
 | 
						||
	local_error_code="${2}"
 | 
						||
 | 
						||
	## Print message if DEBUG is enable (=0)
 | 
						||
	[ "${DEBUG}" -eq "0" ] && printf '%b\n' "ERROR − ${PROGNAME} : ${RED}${local_error_message}${RESET}"
 | 
						||
 | 
						||
	exit "${local_error_code:=66}"
 | 
						||
}
 | 
						||
# }}}
 | 
						||
get_qutebrowser_bin() {                                         # {{{
 | 
						||
 | 
						||
	return_get_qutebrowser_bin="1"
 | 
						||
 | 
						||
	## First try venv {{{
 | 
						||
	if [ "${QB_VENV_MODE}" -eq "0" ] && [ -f "${QB_VENV_PYTHON_PATH}" ]; then
 | 
						||
		debug_message "get_qutebrowser_bin − \
 | 
						||
Qutebrowser from ${RED}venv${COLOR_DEBUG} can be used."
 | 
						||
		QUTEBROWSER_BIN="${QB_VENV_PYTHON_PATH} -m qutebrowser"
 | 
						||
		return_get_qutebrowser_bin="0"
 | 
						||
		### Be sure to skip other MODE if not already defined
 | 
						||
		[ -z "${QB_PACKAGE_MODE}" ] && QB_PACKAGE_MODE="1"
 | 
						||
		[ -z "${QB_GIT_MODE}" ] && QB_GIT_MODE="1"
 | 
						||
	else
 | 
						||
		debug_message "get_qutebrowser_bin − \
 | 
						||
Qutebrowser from ${RED}venv${COLOR_DEBUG} not selected or can't be used."
 | 
						||
		### Be sure to test package MODE
 | 
						||
		QB_PACKAGE_MODE="0"
 | 
						||
	fi
 | 
						||
	## }}}
 | 
						||
 | 
						||
	## Then try package {{{
 | 
						||
	if [ "${QB_PACKAGE_MODE}" -eq "0" ] && dpkg -l | grep -q qutebrowser ; then
 | 
						||
		debug_message "get_qutebrowser_bin − \
 | 
						||
Qutebrowser from ${RED}package${COLOR_DEBUG} will be used."
 | 
						||
		QUTEBROWSER_BIN="$(command qutebrowser)"
 | 
						||
		return_get_qutebrowser_bin="0"
 | 
						||
		### Be sure to skip other MODE if not already defined
 | 
						||
		[ -z "${QB_GIT_MODE}" ] && QB_GIT_MODE="1"
 | 
						||
	else
 | 
						||
		debug_message "get_qutebrowser_bin − \
 | 
						||
Qutebrowser from ${RED}package${COLOR_DEBUG} not selected or can't be used."
 | 
						||
		### Allow to try last MODE if not already defined
 | 
						||
		[ -z "${QB_GIT_MODE}" ] && QB_GIT_MODE="0"
 | 
						||
	fi
 | 
						||
	## }}}
 | 
						||
 | 
						||
	## Finally, try git repository {{{
 | 
						||
	if [ "${QB_GIT_MODE}" -eq "0" ] && [ -f "${QB_GIT_REPOSITORY}/qutebrowser.py" ]; then
 | 
						||
		QUTEBROWSER_BIN="${QB_GIT_REPOSITORY}/qutebrowser.py --backend webengine"
 | 
						||
		debug_message "get_qutebrowser_bin − \
 | 
						||
Qutebrowser from ${RED}Git repository${COLOR_DEBUG} will finally be used."
 | 
						||
		return_get_qutebrowser_bin="0"
 | 
						||
	else
 | 
						||
		debug_message "get_qutebrowser_bin − \
 | 
						||
Qutebrowser from ${RED}git repository${COLOR_DEBUG} not selected or can't be used."
 | 
						||
	fi
 | 
						||
	## }}}
 | 
						||
 | 
						||
	return "${return_get_qutebrowser_bin}"
 | 
						||
 | 
						||
}
 | 
						||
# }}}
 | 
						||
main() {                                                        # {{{
 | 
						||
 | 
						||
	## Define all vars
 | 
						||
	define_vars
 | 
						||
 | 
						||
	## Try to get a working qutebrowser binary
 | 
						||
	### Or exit with error message and code 1
 | 
						||
	get_qutebrowser_bin \
 | 
						||
		|| error_message "Can't find a working qutebrowser binary." "1"
 | 
						||
 | 
						||
	## Open Qutebrowser (with arguments)
 | 
						||
	### And exit
 | 
						||
	sh -c "${QUTEBROWSER_BIN} ${ARGS}" \
 | 
						||
		exit 0
 | 
						||
 | 
						||
}
 | 
						||
# }}}
 | 
						||
 | 
						||
# Manage arguments                                                # {{{
 | 
						||
 | 
						||
## If there is argument(s)
 | 
						||
if [ ! "${NBARGS}" -eq "0" ]; then
 | 
						||
 | 
						||
	manage_arg="0"
 | 
						||
 | 
						||
	# Parse all options (start with a "-") one by one
 | 
						||
	while printf -- '%s' "${1}" | grep -q -E -- "^-+"; do
 | 
						||
 | 
						||
	case "${1}" in
 | 
						||
		-d|--debug )           ## Enable debug mode
 | 
						||
			## Enable DEBUG
 | 
						||
			DEBUG="0"
 | 
						||
			;;
 | 
						||
		--git )                ## Use Git repo
 | 
						||
			QB_GIT_MODE="0"
 | 
						||
			;;
 | 
						||
		-h|--help )            ## help
 | 
						||
			usage
 | 
						||
			## Exit after help informations
 | 
						||
			exit 0
 | 
						||
			;;
 | 
						||
		--package )            ## Use package
 | 
						||
			QB_PACKAGE_MODE="0"
 | 
						||
			;;
 | 
						||
		--venv )               ## Use Python venv
 | 
						||
			QB_VENV_MODE="0"
 | 
						||
			;;
 | 
						||
		* )                    ## unknow option
 | 
						||
			printf '%b\n' "${RED}Invalid option: ${1}${RESET}"
 | 
						||
			printf '%b\n' "---"
 | 
						||
			usage
 | 
						||
			exit 1
 | 
						||
			;;
 | 
						||
	esac
 | 
						||
 | 
						||
	debug_message "Arguments management − \
 | 
						||
${RED}${1}${COLOR_DEBUG} option managed."
 | 
						||
 | 
						||
	## Move to the next argument
 | 
						||
	shift
 | 
						||
	manage_arg=$((manage_arg+1))
 | 
						||
 | 
						||
	done
 | 
						||
 | 
						||
	debug_message "Arguments management − \
 | 
						||
${RED}${manage_arg}${COLOR_DEBUG} argument(s) successfully managed."
 | 
						||
else
 | 
						||
	debug_message "Arguments management − \
 | 
						||
No arguments/options to manage."
 | 
						||
fi
 | 
						||
 | 
						||
# }}}
 | 
						||
 | 
						||
main
 | 
						||
 | 
						||
exit 255
 |