#!/usr/bin/env bash # This is an attempt to replace xdg-open with something sane. # Source the config file. cfg_file="$HOME/.config/sx-open.cfg" [[ -f "$cfg_file" ]] && { source "$cfg_file"; } usage() { printf '%s \n' "${0##*/}"; } handle_uri() { local target="$1" for h in "${uri_handlers[@]}"; do IFS='=' read cmd regex <<< "$h" [[ "$target" =~ ${regex} ]] && { ${cmd} "$target" & return 0 } done return 1 } handle_mime() { target_mimetype=$(file -ib "$target") for m in "${mime_handlers[@]}"; do IFS='=' read cmd regex <<< "$m" [[ "$target_mimetype" =~ ${regex} ]] && { ${cmd} "$target" & return 0 } done return 1 } main() { target="$1" [[ "$target" ]] || { usage; exit; } handle_uri "$target" || { [[ "$target" =~ file://.+ ]] && { target="${target##*file://}"; } [[ -e "$target" ]] && { [[ "$target" =~ ^/.* ]] || { target="${PWD}/${target}"; } handle_mime "$target" } } [[ "$?" -gt 0 ]] && { printf "No handlers found for %s\n" "$target"; } return 0 } main "$@"