diff options
Diffstat (limited to 'i3/blocks/scroll')
-rwxr-xr-x | i3/blocks/scroll | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/i3/blocks/scroll b/i3/blocks/scroll new file mode 100755 index 0000000..677a7fc --- /dev/null +++ b/i3/blocks/scroll @@ -0,0 +1,69 @@ +#!/bin/bash +# IMPORTANT: +# To make this block work, you have to edit your block-command. +# It should point to this file. For best performance, only use it on blocks +# which are wide and that you need to scroll. +# +# Example: +# command=~/.i3-blocks/blocks/scroll $BLOCK_NAME +# markup=pango +# interval=repeat + +PROG="${1}" + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BLOCK_PATH="${SCRIPT_DIR}/${PROG}" + +INTERVAL=0.17 +MAX_LENGTH=25 +ADD_STR=" | " +ADD_LENGTH=${#ADD_STR} + +if [[ -f "${BLOCK_PATH}" ]]; then + BLOCK_OUT=$(bash "${BLOCK_PATH}") + OUT_TEXT=$(echo "${BLOCK_OUT}" | tail -n 1) +elif [[ "${PROG}" != "" ]]; then + OUT_TEXT=$(${PROG}) + if [[ $? -ne 0 ]]; then + sleep 1 + echo "${PROG}" + echo "${PROG}" + exit 33 + fi +fi + +if [[ "${OUT_TEXT}" ]]; then + CHECK_SUM=$(echo "${PROG}-${BLOCK_INSTANCE}" | md5sum | awk '{print $1}') + + TMP_FILE="/tmp/.scroll-${CHECK_SUM}" + + if [[ -f "${TMP_FILE}" ]]; then + SCROLL_POS=$(cat "${TMP_FILE}") + else + SCROLL_POS=0 + fi + + TEXT_LENGTH=${#OUT_TEXT} + MAX_OFFSET=$((TEXT_LENGTH +ADD_LENGTH -1)) + + if [[ "${TEXT_LENGTH}" -lt "${MAX_LENGTH}" ]]; then + MAX_LENGTH="${TEXT_LENGTH}" + fi + + if [[ "${SCROLL_POS}" -gt "${MAX_OFFSET}" ]]; then + SCROLL_POS=0 + fi + + TEXT_LINE="${OUT_TEXT}${ADD_STR}${OUT_TEXT}${ADD_STR}${OUT_TEXT}" + TEXT_LINE=${TEXT_LINE:$SCROLL_POS:$MAX_LENGTH} + + echo "<span font_family='monospace'>${TEXT_LINE}</span>" + echo "<span font_family='monospace'>${TEXT_LINE}</span>" + + SCROLL_POS=$((SCROLL_POS +1)) + + echo "${SCROLL_POS}" > "${TMP_FILE}" + sleep "${INTERVAL}" +else + sleep 1 +fi |