#!/bin/sh # Media type csv caching cachedir="${XDG_CACHE_HOME:-$HOME/.cache}/mimewiz" mtypesrc="https://www.iana.org/assignments/media-types" mtypes="`grep -v '#'`" << TYPES #application audio font #example image #message #model #multipart text video TYPES nmtypes="`cat`" << TYPES pdf, spreadsheet ms-excel, wordprocessing ms-word, presentation ms-powerpoint, drawing, zip gzip, TYPES dlcsv() { curl -sS -C - -o "$2" "$1" || exit; } # Download all media type csv's if they're not avaliable mkdir -p "$cachedir" for mtype in $mtypes; do mtypefile="$cachedir/$mtype.csv" [ -e "$mtypefile" ] || dlcsv "$mtypesrc/$mtype.csv" "$mtypefile" done interactiveopt() { # Usage: interactiveopt "options" "prompt" "maxopts (if unset than equal to inf)" "col" # Purpose: give the user a numbered list of options. User can specify multiple choices. User can specify either the number or the name of the option. # Output: saved in variable "opt" unset opt # This won't be set if using recursion, do it in a while loop instead while [ -z $opt ] 2>/dev/null; do # Column option [ -n "$4" ] && [ "$4" = "col" ] \ && echo "$1" | nl -s': ' | column \ || echo "$1" | nl -s': ' # Parse user input read -p "$2" choices \ && choices="$(echo $choices | cut -d' ' -f1-$3)" for choice in $choices; do case "$choice" in [0-9]*) opt="$(echo "$1" | head -"$(echo $choice | tr -cd '[:digit:]')" | tail -1) $opt" ;; *) opt="$(echo "$1" | grep "^$choice$" 2>/dev/null) $opt" ;; esac || ( echo "Invalid option \"$choice\"" && undet opt && break ) # Why wont this unset opt or break??????? done done } # Choose mimetype: mtypes="$mtypes\n$(echo "$nmtypes" | cut -d',' -f1)" interactiveopt "$mtypes" "Choose mimetype: " 1 mtype="$(echo "$opt" | cut -d' ' -f1)" echo "$mtype" echo # Choose subtype mtypefile="$cachedir/$mtype.csv" [ -e "$mtypefile" ] && interactiveopt "all\n$(cut -d',' -f1 "$mtypefile" | tail -n +2)" "Choose $mtype subtype: " "" col echo # Choose program interactiveopt "$(ls /usr/share/applications | sed 's/\.desktop//')" "Choose program to open with: " "" col program="$opt" echo "$program" echo # Xdg-mime commands #echo "All $mtype Types\n$(cut -d',' -f1 "$cachedir/image.csv" | tail -n +2)" #cut -d',' -f2 "$cachedir/image.csv" #[ -n "$mimetype" ] && xdg-mime default $application.desktop $mimetype