Refactor format_json userscript to not parse 'ls' output
The script now also works under MacOS
This commit is contained in:
parent
ccb8e74998
commit
22e4a800a1
@ -1,4 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
set -euo pipefail
|
||||||
#
|
#
|
||||||
# Behavior:
|
# Behavior:
|
||||||
# Userscript for qutebrowser which will take the raw JSON text of the current
|
# Userscript for qutebrowser which will take the raw JSON text of the current
|
||||||
@ -19,28 +20,23 @@
|
|||||||
#
|
#
|
||||||
# Bryan Gilbert, 2017
|
# Bryan Gilbert, 2017
|
||||||
|
|
||||||
|
# do not run pygmentize on files larger than this amount of bytes
|
||||||
|
MAX_SIZE_PRETTIFY=10485760 # 10 MB
|
||||||
# default style to monokai if none is provided
|
# default style to monokai if none is provided
|
||||||
STYLE=${1:-monokai}
|
STYLE=${1:-monokai}
|
||||||
# format json using jq
|
|
||||||
if ! FORMATTED_JSON="$(jq . "$QUTE_TEXT")" || [ -z "$FORMATTED_JSON" ]; then
|
TEMP_FILE="$(mktemp)"
|
||||||
echo "Invalid json, aborting..."
|
jq . "$QUTE_TEXT" >"$TEMP_FILE"
|
||||||
exit 1
|
|
||||||
|
# try GNU stat first and then OSX stat if the former fails
|
||||||
|
FILE_SIZE=$(
|
||||||
|
stat --printf="%s" "$TEMP_FILE" 2>/dev/null ||
|
||||||
|
stat -f%z "$TEMP_FILE" 2>/dev/null
|
||||||
|
)
|
||||||
|
if [ "$FILE_SIZE" -lt "$MAX_SIZE_PRETTIFY" ]; then
|
||||||
|
pygmentize -l json -f html -O full,style="$STYLE" <"$TEMP_FILE" >"${TEMP_FILE}_"
|
||||||
|
mv -f "${TEMP_FILE}_" "$TEMP_FILE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# calculate the filesize of the json document
|
|
||||||
# parsing the output of ls should be fine in this case since we set the block size
|
|
||||||
# shellcheck disable=SC2012
|
|
||||||
FILE_SIZE=$(ls -s --block-size=1048576 "$QUTE_TEXT" | cut -d' ' -f1)
|
|
||||||
|
|
||||||
# use pygments to pretty-up the json (syntax highlight) if file is less than 10MB
|
|
||||||
if [ "$FILE_SIZE" -lt "10" ]; then
|
|
||||||
FORMATTED_JSON="$(echo "$FORMATTED_JSON" | pygmentize -l json -f html -O full,style="$STYLE")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# create a temp file and write the formatted json to that file
|
|
||||||
TEMP_FILE="$(mktemp --suffix '.html')"
|
|
||||||
echo "$FORMATTED_JSON" > "$TEMP_FILE"
|
|
||||||
|
|
||||||
|
|
||||||
# send the command to qutebrowser to open the new file containing the formatted json
|
# send the command to qutebrowser to open the new file containing the formatted json
|
||||||
echo "open -t file://$TEMP_FILE" >> "$QUTE_FIFO"
|
echo "open -t file://$TEMP_FILE" >> "$QUTE_FIFO"
|
||||||
|
Loading…
Reference in New Issue
Block a user