mirror of
https://github.com/eth-p/bat-extras.git
synced 2024-12-13 17:50:56 +01:00
Add batwatch script
This commit is contained in:
parent
a472f1c651
commit
e02d0666f3
148
src/batwatch.sh
Executable file
148
src/batwatch.sh
Executable file
@ -0,0 +1,148 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# bat-extras | Copyright (C) 2019 eth-p | MIT License
|
||||||
|
#
|
||||||
|
# Repository: https://github.com/eth-p/bat-extras
|
||||||
|
# Issues: https://github.com/eth-p/bat-extras/issues
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
LIB="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/../lib"
|
||||||
|
BAT="bat"
|
||||||
|
DOCS_URL="https://github.com/eth-p/bat-extras/blob/master/doc"
|
||||||
|
source "${LIB}/opt.sh"
|
||||||
|
source "${LIB}/opt_hooks.sh"
|
||||||
|
source "${LIB}/print.sh"
|
||||||
|
source "${LIB}/pager.sh"
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Init:
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
hook_color
|
||||||
|
hook_pager
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Watchers:
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
WATCHERS=("entr")
|
||||||
|
|
||||||
|
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
||||||
|
watcher_entr_watch() {
|
||||||
|
ENTR_ARGS=()
|
||||||
|
|
||||||
|
if [[ "$OPT_CLEAR" = "true" ]]; then
|
||||||
|
ENTR_ARGS+=('-c')
|
||||||
|
fi
|
||||||
|
|
||||||
|
entr "${ENTR_ARGS[@]}" \
|
||||||
|
"$BAT" "${BAT_ARGS[@]}" \
|
||||||
|
--terminal-width="$TERM_WIDTH" \
|
||||||
|
--paging=never \
|
||||||
|
"$@" \
|
||||||
|
< <(printf "%s\n" "$@")
|
||||||
|
}
|
||||||
|
|
||||||
|
watcher_entr_supported() {
|
||||||
|
command -v entr &>/dev/null
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Functions:
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
determine_watcher() {
|
||||||
|
local watcher
|
||||||
|
for watcher in "${WATCHERS[@]}"; do
|
||||||
|
if "watcher_${watcher}_supported"; then
|
||||||
|
echo "$watcher"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Options:
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
BAT_ARGS=()
|
||||||
|
FILES=()
|
||||||
|
FILES_HAS_DIRECTORY=false
|
||||||
|
OPT_CLEAR=true
|
||||||
|
OPT_WATCHER=""
|
||||||
|
TERM_WIDTH="$(tput cols)"
|
||||||
|
|
||||||
|
# Set options based on tty.
|
||||||
|
if [[ -t 1 ]]; then
|
||||||
|
OPT_COLOR=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Parse arguments.
|
||||||
|
while shiftopt; do
|
||||||
|
case "$OPT" in
|
||||||
|
|
||||||
|
# Script Options
|
||||||
|
--watcher) shiftval; OPT_WATCHER="$OPT_VAL";;
|
||||||
|
--clear) OPT_CLEAR=true;;
|
||||||
|
--no-clear) OPT_CLEAR=false;;
|
||||||
|
--terminal-width) shiftval; TERM_WIDTH="$OPT_VAL";;
|
||||||
|
|
||||||
|
# Bat/Pager Options
|
||||||
|
-*) BAT_ARGS+=("$OPT=$OPT_VAL");;
|
||||||
|
|
||||||
|
# Files
|
||||||
|
*) {
|
||||||
|
FILES+=("$OPT")
|
||||||
|
};;
|
||||||
|
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -z "$FILES" ]]; then
|
||||||
|
print_error "no files provided"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
for file in "${FILES[@]}"; do
|
||||||
|
if ! [[ -e "$file" ]]; then
|
||||||
|
print_error "'%s' does not exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -d "$file" ]]; then
|
||||||
|
FILES_HAS_DIRECTORY=true
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Append bat arguments.
|
||||||
|
if "$OPT_COLOR"; then
|
||||||
|
BAT_ARGS+=("--color=always")
|
||||||
|
else
|
||||||
|
BAT_ARGS+=("--color=never")
|
||||||
|
fi
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Main:
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
main() {
|
||||||
|
if [[ -z "$OPT_WATCHER" ]]; then
|
||||||
|
OPT_WATCHER="$(determine_watcher)"
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
printc "%{RED}[%s error]%{CLEAR}: Your system does not have any supported watchers.\n" "$PROGRAM" 1>&2
|
||||||
|
printc "Please read the documentation at {BLUE}%s%{CLEAR} for more details.\n" "$DOCS_URL/batwatch.md" 1>&2
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! type "watcher_${OPT_WATCHER}_supported" &>/dev/null; then
|
||||||
|
printc "%{RED}[%s error]%{CLEAR}: Unknown watcher: '%s'\n" "$PROGRAM" "$OPT_WATCHER" 1>&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
"watcher_${OPT_WATCHER}_watch" "${FILES[@]}"
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
pager_exec main
|
||||||
|
exit $?
|
||||||
|
|
Loading…
Reference in New Issue
Block a user