X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/xdg-ninja.git/blobdiff_plain/fbd143278844fdf82060ba0454e2a7d946a702cc..9891866d01ed22bd3e26fbc92c6bac17ab7d7d6e:/xdg-ninja.sh diff --git a/xdg-ninja.sh b/xdg-ninja.sh index 8332207..7a0b29e 100755 --- a/xdg-ninja.sh +++ b/xdg-ninja.sh @@ -63,11 +63,14 @@ help() { ${FX_ITALIC}--skip-ok${FX_RESET} ${FX_BOLD}Don't display anything for files that do not exist (default)${FX_RESET} + ${FX_ITALIC}--skip-unsupported${FX_RESET} ${FX_BOLD}Don't display anything for files that do not have fixes available${FX_RESET} + """ - printf "%b" "$HELPSTRING" + printf "%b\n" "$HELPSTRING" } SKIP_OK=true +SKIP_UNSUPPORTED=false for i in "$@"; do if [ "$i" = "--help" ] || [ "$i" = "-h" ]; then help @@ -76,6 +79,8 @@ for i in "$@"; do SKIP_OK=true elif [ "$i" = "--no-skip-ok" ]; then SKIP_OK=false + elif [ "$i" = "--skip-unsupported" ]; then + SKIP_UNSUPPORTED=true elif [ "$i" = "-v" ]; then SKIP_OK=false fi @@ -118,14 +123,32 @@ apply_shell_expansion() { eval "$command" } -# Returns 0 if the path doesn't lead anywhere -# Returns 1 if the path leads to something -check_if_file_exists() { - FILE_PATH=$(apply_shell_expansion "$1") - if [ -e "$FILE_PATH" ]; then +# Function to check if a string contains shell pattern matching +has_pattern() { + case $1 in + *\** | *\?* | *\[*\]*) + return 0 + ;; + *) return 1 + ;; + esac +} + +# Returns the actual name of the given file that is on the user's disk +# This command applies shell pattern matching and return the actual filename +retrieve_existing_filename() { + FILE_PATH=$(apply_shell_expansion "$1") + + # return filename if found, nothing else + if has_pattern "$FILE_PATH"; then + dir="$(dirname "$FILE_PATH")" + part="$(basename "$FILE_PATH")" + find "$dir" -maxdepth 1 -name "$part" -print -quit 2>/dev/null else - return 0 + if [ -e "$FILE_PATH" ]; then + printf "%s" "$FILE_PATH" + fi fi } @@ -154,7 +177,8 @@ log() { ;; WARN) - printf '[%b%s%b]: %b%s%b\n' "${FX_BOLD}${FG_YELLOW}" "$NAME" "${FX_RESET}" "${FX_BOLD}${FX_ITALIC}" "$FILENAME" "${FX_RESET}" + [ "$SKIP_UNSUPPORTED" = false ] && + printf '[%b%s%b]: %b%s%b\n' "${FX_BOLD}${FG_YELLOW}" "$NAME" "${FX_RESET}" "${FX_BOLD}${FX_ITALIC}" "$FILENAME" "${FX_RESET}" ;; INFO) @@ -180,28 +204,24 @@ check_file() { MOVABLE="$3" HELP="$4" - check_if_file_exists "$FILENAME" - - case $? in + file=$(retrieve_existing_filename "$FILENAME") - 0) - log SUCS "$NAME" "$FILENAME" "$HELP" - ;; - - 1) + if [ "$file" ]; then if [ "$MOVABLE" = true ]; then - log ERR "$NAME" "$FILENAME" "$HELP" + log ERR "$NAME" "$file" "$HELP" else - log WARN "$NAME" "$FILENAME" "$HELP" + log WARN "$NAME" "$file" "$HELP" fi if [ "$HELP" ]; then - log HELP "$NAME" "$FILENAME" "$HELP" + if [ "$MOVABLE" = true ] || [ "$SKIP_UNSUPPORTED" = false ]; then + log HELP "$NAME" "$file" "$HELP" + fi else - log HELP "$NAME" "$FILENAME" "_No help available._" + log HELP "$NAME" "$file" "_No help available._" fi - ;; - - esac + else + log SUCS "$NAME" "$file" "$HELP" + fi } # Reads files from programs/, calls check_file on each file specified for each program @@ -210,7 +230,7 @@ do_check_programs() { " read -r name; read -r filename; read -r movable; read -r help; do check_file "$name" "$filename" "$movable" "$help" done <