scripts/qb

236 lines
5.7 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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