────────────────────────────────────
${FX_ITALIC}--help${FX_RESET} ${FX_BOLD}This help menu${FX_RESET}
- ${FX_ITALIC}-h\033${FX_RESET}
+ ${FX_ITALIC}-h${FX_RESET}
${FX_ITALIC}--no-skip-ok${FX_RESET} ${FX_BOLD}Display messages for all files checked (verbose)${FX_RESET}
${FX_ITALIC}-v${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
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
}
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
if [ "$MOVABLE" = true ] || [ "$SKIP_UNSUPPORTED" = false ]; then
- log HELP "$NAME" "$FILENAME" "$HELP"
+ 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
" read -r name; read -r filename; read -r movable; read -r help; do
check_file "$name" "$filename" "$movable" "$help"
done <<EOF
-$(jq 'inputs as $input | $input.files[] as $file | $input.name, $file.path, $file.movable, $file.help' "$(realpath "$0" | xargs dirname)"/programs/* | sed -e 's/^"//' -e 's/"$//')
+$(jq '.files[] as $file | .name, $file.path, $file.movable, $file.help' "$XN_PROGRAMS_DIR"/* | sed -e 's/^"//' -e 's/"$//')
EOF
# sed is to trim quotes
}
printf "\n"
}
+[ "$XN_PROGRAMS_DIR" ] ||
+ XN_PROGRAMS_DIR="$(realpath "$0" | xargs dirname | sed 's:/bin$:/share/xdg-ninja:g')/programs"
+
check_programs
if [ $FIXABLE -gt 100 ]; then
exit 101