Compare commits

...

2 Commits

Author SHA1 Message Date
zegonix 726f316c83 (ghostty) disable warning on paste 2026-04-21 21:39:26 +02:00
scbj 0ae0eb1896 (scripts) fixed whitespace remover to keep line endings by default 2026-04-21 14:35:55 +02:00
2 changed files with 81 additions and 63 deletions
+2
View File
@@ -17,7 +17,9 @@ selection-invert-fg-bg = true
window-decoration = server
mouse-scroll-multiplier = 1.0
app-notifications = no-clipboard-copy
copy-on-select = false
clipboard-paste-protection = false
theme = zegonix
+77 -61
View File
@@ -1,105 +1,121 @@
#!/usr/bin/env bash
function remove-whitespace {
# exclude file types
# (ignore generated files/directories)
exclude_paths=(
"*/.git/*"
)
exclude_files=(
"*.lst"
"*.map"
"*.svd"
"*.sym"
)
unset line_endings
unset help
unset quiet
unset silent
unset no_action
unset path_args
unset file_args
unset ffunix
unset files
for arg in $@; do
case ${arg} in
"-e" | "--eol" | "--end-of-line")
line_endings="true"
"-u" | "--unix")
ffunix="true"
continue
;;
"-h" | "--help" | "-help")
help="true"
continue
;;
"-n" | "--quiet")
quiet="true"
"-n" | "--no-action")
no_action="true"
continue
;;
"-s" | "--silent")
silent="true"
continue
;;
*) ;;
esac
if [[ -f "${arg}" ]]; then
grep -Iq . "${arg}" && files=(${files} "${arg}")
continue
fi
if [[ -d "${arg}" ]]; then
files=(${files} $(find "${arg}" \
-not -path "*/.git/*" \
-not -name "*.lst" \
-not -name "*.map" \
-not -name "*.svd" \
-not -name "*.sym" \
-type f \
-exec grep -Iq . {} \; \
-print))
path_args+=("${arg}")
continue
elif [[ -f "${arg}" ]]; then
file_args+=("${arg}")
continue
fi
echo "(unrecognised argument: '${arg}')"
done
## search current directory if no argument is provided
if [[ -z "${files[@]}" ]]; then
files=($(find . \
-not -path "*/.git/*" \
-not -name "*.lst" \
-not -name "*.map" \
-not -name "*.svd" \
-not -name "*.sym" \
if [[ -n "${ffunix}" ]]; then
sed_cmd='s/[[:space:]]\+$//'
grep_regex=$'[[:space:]]+$'
else
sed_cmd='s/[[:blank:]]\+\(\r\?\)$/\1/'
grep_regex=$'[[:blank:]]+\r?$'
fi
for arg in ${path_args[@]}; do
files+=($(
find "${arg}" \
"${exclude_paths[@]/#/-not -path }" \
"${exclude_files[@]/#/-not -name }" \
-type f \
-exec grep -Iq . {} \; \
-print))
fi
-exec grep -EIq "${grep_regex}" {} \; \
-print
))
done
for arg in ${file_args[@]}; do
grep -EIq "${grep_regex}" ${arg} && files+=("${arg}")
done
if [[ -n "${dir_arg}" ]] && [[ -n "${file_arg}" ]]; then
help="true"
fi
if [[ -n "${help}" ]] || [[ -z "${files[@]}" ]]; then
cat <<EOF
Usage: remove-whitespace [-h] [-n] path [path]
if [[ -n "${help}" ]]; then
echo "Usage: remove-whitespace [-h] [-n] path [path]"
echo ""
echo "Remove trailing whitespace from plain text files."
echo "Path points to either a file or directory, or both."
echo "Directories are search recursively for non binary."
echo "If no paths are provided, the current working"
echo "directory is search for plain text files."
echo ""
echo "Options:"
echo " -e, --eol,"
echo " --end-of-line convert all line endings to unix style"
echo " line endings"
echo " -h, --help show this help"
echo " -n, --quiet suppress output"
Remove trailing whitespace from plain text files.
Path points to either a file or directory, or both.
Directories are searched recursively.
If no paths are provided, the current working
directory is searched.
Options:
-u, --unix convert all line endings to unix style
line endings
-h, --help show this help
-n, --no-action do not delete, only detect whitespace
-s, --silent suppress output
EOF
return 0
fi
unset trailing_whitespace
if [[ -z "${no_action}" ]]; then
for file in ${files[@]}; do
sed -i 's/\r$//' ${file}
if [[ -n "$(sed -ne '/[[:blank:]]\+\r\?$/p' ${file})" ]]; then
if [[ -n "${line_endings}" ]]; then
sed -i 's/[[:blank:]]\+\(\r\?\)$//' ${file}
if [[ -n "${ffunix}" ]]; then
sed -i "${sed_cmd}" ${file}
else
sed -i 's/[[:blank:]]\+\(\r\?\)$/\1/' ${file}
fi
trailing_whitespace+="${file}\n"
sed -i "${sed_cmd}" ${file}
fi
done
fi
echo ""
if [[ -z "${quiet}" ]] &&
[[ -n "${trailing_whitespace}" ]]; then
if [[ -z "${silent} ${no_action}" ]] &&
[[ -n "${files}" ]]; then
tput setaf 1
tput smso
echo "The following files contained whitespace:"
tput sgr0
echo -e "${trailing_whitespace}"
for file in ${files[@]}; do
echo "${file}"
done
fi
}