#!/bin/sh # Vars {{{ readonly PROGNAME=$(basename "${0}") readonly NBARGS="${#}" ## Test if DEBUG is already defined (by parent script,…) [ -z "${DEBUG}" ] && DEBUG=1 ## 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] 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. --help Print this help message. EOF } # }}} define_vars() { # {{{ ## List of process pattern to monitor qutebrowser_proc_pattern="(qutebrowser)" ## Store selected content to a temp file choice_temp_file="$(mktemp -t ${PROGNAME}-XXXXXX.tmp)" } # }}} 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 } # }}} is_proc_running() { # {{{ local_proc_pattern="${1}" local_count_proc_pattern="$(pgrep -f -- "${local_proc_pattern}" | wc -l)" case "${local_count_proc_pattern}" in 0 ) ## No procs related to this pattern are running return_proc_running="1" ;; * ) ## At least one proc seems running return_proc_running="0" ;; esac ## Simple debug message to valid current variables debug_message "is_proc_running − \ procs running (with the pattern: ${RED}${local_proc_pattern}${COLOR_DEBUG}) on the current host: ${RED}${local_count_proc_pattern}${COLOR_DEBUG}." return "${return_proc_running}" } # }}} launch_qutebrowser() { # {{{ # Version with user's venv if [ -f ~/src/qutebrowser-venv/bin/python3 ]; then debug_message "launch_qutebrowser − \ Start qutebrowser from ${RED}venv${COLOR_DEBUG}." ~/src/qutebrowser-venv/bin/python3 -m qutebrowser fi # Version from APT package if dpkg -l | grep -q qutebrowser ; then debug_message "launch_qutebrowser − \ Start qutebrowser from ${RED}package${COLOR_DEBUG}." command qutebrowser fi # Version from Git repository if [ -f ~/repos/qutebrowser/qutebrowser.py ]; then debug_message "launch_qutebrowser − \ Start qutebrowser from ${RED}Git repository${COLOR_DEBUG}." ~/repos/qutebrowser/qutebrowser.py --backend webengine fi } # }}} goto_existing_qutebrowser() { # {{{ debug_message "goto_existing_qutebrowser − \ Try to open content in existing instance." search_qb_bookmark \ && open_in_qutebrowser } # }}} search_qb_bookmark() { # {{{ debug_message "search_qb_bookmark − \ Search in Qutebrowser's bookmarks." st -g 90x30+0+540 -n QuteBrowser -t QuteBrowser -e sh -c "cat ~/.config/qutebrowser/quickmarks ~/.config/qutebrowser/bookmarks/urls | fzf +m > ${choice_temp_file}" if [ -s "${choice_temp_file}" ]; then debug_message "search_qb_bookmark − \ Store results in ${choice_temp_file}." local_search_qb_bookmark_return="0" else debug_message "search_qb_bookmark − \ Search aborded or can't find matching bookmark." local_search_qb_bookmark_return="1" fi return "${local_search_qb_bookmark_return}" } # }}} open_in_qutebrowser() { # {{{ local_content=$(cat "${choice_temp_file}") debug_message "open_in_qutebrowser − \ Try to manage ${RED}$(cat "${choice_temp_file}")${COLOR_DEBUG}." case "${local_content}" in http* ) ## Classic bookmark local_url=$(printf "%s" "${local_content}" | sed -e "s;\(http.*\) .*;\1;") debug_message "open_in_qutebrowser − \ Try to open classic bookmark URL ${RED}${local_url}${COLOR_DEBUG}." ;; *http* ) ## Quickmark local_url=$(printf "%s" "${local_content}" | sed -e "s;.*\(http.*\);\1;") debug_message "open_in_qutebrowser − \ Try to open quickbookmark URL ${RED}${local_url}${COLOR_DEBUG}." ;; * ) debug_message "open_in_qutebrowser − \ Not yet managed." ;; esac ~/src/qutebrowser-venv/bin/python3 -m qutebrowser "${local_url}" } # }}} main() { # {{{ ## Define all vars according the selected options define_vars ## If nothing related to Qutebrowser is currently running ### Try to start qutebrowser ### Then exit with success is_proc_running "${qutebrowser_proc_pattern}" \ || launch_qutebrowser \ || exit 0 ## Manage existing instance goto_existing_qutebrowser } # }}} # 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" ;; -h|--help ) ## help usage ## Exit after help informations exit 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