From 6f0a133c984caa38580f25894227c5bb8f8e56f4 Mon Sep 17 00:00:00 2001 From: anon Date: Tue, 10 Dec 2024 20:39:02 +0100 Subject: [PATCH] Added 'Misc./terribly_old_scripts/openie' --- Misc./terribly_old_scripts/openie | 149 ++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100755 Misc./terribly_old_scripts/openie diff --git a/Misc./terribly_old_scripts/openie b/Misc./terribly_old_scripts/openie new file mode 100755 index 0000000..edc5725 --- /dev/null +++ b/Misc./terribly_old_scripts/openie @@ -0,0 +1,149 @@ +#!/bin/bash + +readonly USER_CONF="~/.openierc" +ENV_CONF="" +ENV_EXCLUSIVE=0 +CONF="" + +readonly RED="\33[31m" +readonly YELLOW="\33[33m" +readonly BOLD="\33[1m" +readonly NORMAL="\33[0m" + +enable -n echo + +usage(){ + echo -e " ${BOLD}Openie is a Bash script for making opening files\n with the user's prefered application not a pain in the ass.${NORMAL}" + echo "" + echo -e "${YELLOW} openie ([options] --) [command] [args]${NORMAL}" + echo " -h : print help message" + echo " -v : verbose" + echo " -q : quite; never prompt" + echo " -c [file] : append to rules from [file]" + echo " -o [file] : over write rules with the ones in [file]" + echo "" + echo -e "${YELLOW} Config:${NORMAL}" + echo " + the default config file is ${USER_CONF}" + echo " + comment with \"#\"" + echo " + whitespaces are ignored" + echo " + type can be either M for maching mimetype or S for matching file name" + echo -e " ${BOLD} : : ${NORMAL}" +} + +syn_error(){ + echo -e "${RED}Incoherent syntax.${NORMAL}" + exit 2 +} + +mimetype(){ + local type + type="$(file -b --mime-type "$1")" + if [[ "$type" == 'inode/symlink' ]]; then + mimetype "$(readlink -f "$1")" + fi + return $type +} + +prompt(){ + echo -e "${RED}No suitable rule was defined.${NORMAL}" + echo -e -n "${BOLD}Please enter a program name: ${NORMAL}" + read -r -s APP +} + +TRIM_SWAP="" +trim(){ + TRIM_SWAP="$(echo $1 | sed -e "s/^[[:space:]]*//g" -e "s/[[:space:]]*$//g")" +} + +VERBOSE=0 +QUITE=0 + +while getopts "hvc:o:" opt; do + case "$opt" in + h) usage; exit ;; + v) VERBOSE=1 ;; + q) QUITE=1 ;; + c) + ENV_CONF=${OPTARG} + ;; + o) + ENV_CONF=${OPTARG} + ENV_EXCLUSIVE=1 + ;; + *) syn_error ;; + esac +done + +shift $((OPTIND - 1)) # Get make subject file argument number 0 +if [[ $# -eq 0 ]]; then # throw if it doesnt exist + syn_error +fi + +if [[ $ENV_EXCLUSIVE -eq 0 ]]; then # Set user config + CONF=("${USER_CONF}" "${ENV_CONF}") +else + CONF=("${ENV_CONF}") +fi + +USER_VARS=() +IFS=':' +for i in $CONF; do + if ! [[ -e $CONF ]]; then # exist? + if [[ $QUITE -eq 0 ]]; then + echo -e "${YELLOW}Config file \"${CONF}\" doesn't exists, skipping.${NORMAL}" + fi + continue + fi + while read -r mtype regex APP; do + if [[ $mtype == "\#*" ]]; then # if comments + continue + fi + # Ignore whitespaces + trim $mtype + mtype=$TRIM_SWAP + trim $regex + regex=$TRIM_SWAP + trim $APP + APP=$TRIM_SWAP + #if [[ $APP == 'emacs' ]]; then + # echo -e " ${BOLD}${RED}Openie does NOT support faggotry." + # echo -e " Please use Vim instead.${NORMAL}" + # exit 69 + #fi + # Interpret variable + if [[ $mtype =~ var.* ]]; then + trim ${mtype:3} + echo "${YELLOW}var: $TRIM_SWAP added.${NORMAL}" + USER_VARS+=("$TRIM_SWAP") + continue + fi + # Interpret $mtype + if [[ $mtype == 'S' ]]; then # if: for file name + toMatch="$1" + #echo "S" + elif [[ $mtype == 'M' ]]; then # if: for mimetype + toMatch="$(mimetype $1)" + #echo "M" + else + continue # if syntax error + fi + # Match with $regex + if [[ $toMatch =~ $regex ]]; then + if [[ $QUITE -eq 0 ]]; then + echo "${APP} $*" + fi + # Supstitute $APP if its a variable + if [[ $APP =~ ^\$.* ]]; then + for h in ${USER_VARS[@]}; do + echo "${APP:1} vs ${h%=*}" + if [[ ${APP:1} == ${h%=*} ]]; then + APP=${h#*=} + break + fi + done + fi + ${APP} $* & disown + exit 0 + fi + done < "$i" + done