#!/usr/bin/env bash # Open any of: quickmarks, bookmarks and browser history via dmenu (or rofi) # Handle open -s && open -t with bemenu # # Requires sqlite3 binary installed to traverse the history. #:bind o spawn --userscript /path/to/userscripts/qutedmenu open #:bind O spawn --userscript /path/to/userscripts/qutedmenu tab readonly confdir=${XDG_CONFIG_HOME:-$HOME/.config} readonly datadir=${XDG_DATA_HOME:-$HOME/.local/share} readonly optsfile=$confdir/dmenu/bemenucolors readonly QUTE_CONFIG_DIR="${QUTE_CONFIG_DIR:-$confdir/qutebrowser}" readonly QUTE_DATA_DIR="${QUTE_DATA_DIR:-$datadir/qutebrowser}" create_menu() { # Check quickmarks while read -r url; do printf -- '%s\n' "$url" done <"$QUTE_CONFIG_DIR"/quickmarks # Next bookmarks while read -r url _; do printf -- '%s\n' "$url" done <"$QUTE_CONFIG_DIR"/bookmarks/urls # Finally history printf -- '%s\n' "$(sqlite3 -separator ' ' "$QUTE_DATA_DIR/history.sqlite" 'select title, url from CompletionHistory')" } get_selection() { opts+=(-p qutebrowser) local launcher if exist bemenu; then launcher=bemenu elif exist dmenu; then launcher=dmenu fi create_menu | "$launcher" -l 10 "${opts[@]}" } # Main # https://github.com/halfwit/dotfiles/blob/master/.config/dmenu/font [[ -s $confdir/dmenu/font ]] && read -r font <"$confdir"/dmenu/font [[ -n $font ]] && opts+=(-fn "$font") # shellcheck source=/dev/null [[ -s $optsfile ]] && source "$optsfile" url=$(get_selection) url=${url/*http/http} # If no selection is made, exit (escape pressed, e.g.) [[ -z $url ]] && exit 0 case $1 in open) printf '%s' "open $url" >>"$QUTE_FIFO" || qutebrowser "$url" ;; tab | *) printf '%s' "open -t $url" >>"$QUTE_FIFO" || qutebrowser "$url" ;; esac