#!/bin/sh -eu date=$(date +%s) program=$(basename "$0") key="QdUEdQBncNzJgIJqTA30" hxnormalize="hxnormalize -l 99999999 -x" items=/tmp/bookmarks_items_$key titles=/tmp/bookmarks_titles_$key anchors=/tmp/bookmarks_anchors_$key dependencies="$(command -V xmlstarlet hxnormalize paste \ hxselect hxincl xdg-open rofi basename \ | awk '{ print $1, $3 }' | column -t)" base=\ " Bookmarks

Bookmarks

" bookmarks_help() { { [ "${1:-}" = "-h" ] || [ "${1:-}" = "--help" ] || [ "$#" = 0 ]; } && printf \ " Usage: %s [FLAGS]... [ARGUMENTS]... The program $program shall execute basic operations on Netscape Bookmark HTML files. Command List: $program compile [FILES]... Combine two or more bookmark.html files. $program show [FILE] Show list of bookmarks. $program check Check dependencies. $program -h --help Show this help menu. " "$program" && exit; printf "Error: Unknown argument '%s'.\n" "$@" && exit 1; } bookmarks_combine () { for file in "$@" do $hxnormalize "$file" | sed 's/&/&/g' \ | xmlstarlet edit -S \ --delete '//a/@add_date' \ --delete '//a/@icon' \ --delete '//a/@icon_uri' \ --delete '//a/@last_charset' \ --delete '//a/@last_modified' \ --delete '//a/@last_modified' \ --delete '//a/@tags' \ | $hxnormalize | hxselect -i -s '\n' dt; done | sort | awk '!removeDuplicates[$0]++' >> "$items"; printf "%s" "$base" | hxincl -f -x > "bookmarks-$date.html"; realpath "bookmarks-$date.html"; } bookmarks_show () { $hxnormalize "${1:-}" | hxselect -c -i -s '\n' 'a::attr(href)' > "$anchors" $hxnormalize "${1:-}" | hxselect -c -i -s '\n' 'a' > "$titles" xdg-open "$(paste -d' ' "$anchors" "$titles" \ | rofi -font "sans 12" -matching regex -padding 20 -dmenu -i -p 'Bookmarks' \ | awk '{ print $1 }')"; } [ "${1:-}" = "show" ] && shift 1 && bookmarks_show "$@" && exit; [ "${1:-}" = "combine" ] && shift 1 && bookmarks_combine "$@" && exit; [ "${1:-}" = "check" ] && shift 1 && printf '%s\n' "$dependencies" && exit; bookmarks_help "$@";