diff --git a/xkcdlock b/xkcdlock
index 96c83f6..ef882d2 100755
--- a/xkcdlock
+++ b/xkcdlock
@@ -23,7 +23,9 @@
#
# TODO:
# - Make sure we do not exceed screen boundaries in x and y
-# - Prevent text overflow wrt tooltip
+# - Convert non-png to png
+# - Improve tooltip text border overflow prevention
+# wrt display resolution (and font size?)
# - Add support for other screen lockers
# - Parallelize downloads
@@ -44,8 +46,10 @@ IMG_PATH="${HOME}/Pictures/xkcd_comics"
IMG_DEFAULT="not_really_into_pokemon.png"
# background colour
BG_COLOUR="white"
+# Break tooltip every x char to prevent border overflow
+TOOLTIP_MAX_LINE_LEN=120
-declare -a DEPS=("xrandr" "awk" "curl" "convert" "recode")
+declare -a DEPS=("xrandr" "awk" "curl" "convert" "recode" "sed" "shuf")
declare -a DEPS_LOCKER=("i3lock" "swaylock")
DOWNLOAD_DISCLAIMER="\nThe downloaded images will end up in your current working directory.\n\
@@ -181,6 +185,23 @@ xkcd_get_img_tooltip() {
echo $(curl -sL $url | grep -A 1 '
' | awk -F "\"" '/src=/ {print $4}' | recode html..UTF8)
}
+xkcd_format_tooltip() {
+ local ntext=${#text}
+ local nbreaks=$((ntext / TOOLTIP_MAX_LINE_LEN))
+ local nbreak=$((ntext - TOOLTIP_MAX_LINE_LEN))
+ local m=$((nbreaks * TOOLTIP_MAX_LINE_LEN))
+ local nrest=$((ntext - m - 1))
+
+ if (( "$nbreak" > 0 )); then
+ local text_tok_start=${text:0:$nrest}
+ local text_tok_end=${text:ntok_end}
+ text_tok_end=`echo "$text_tok_end" | sed "s/.\{$TOOLTIP_MAX_LINE_LEN\}/&\\n/g"`
+ echo "${text_tok_start}\\n${text_tok_end}"
+ else
+ echo "$text"
+ fi
+}
+
get_nscreens() {
local nscreens=$(xrandr -q | awk '/ connected/ {count++} END {print count}')
echo "$nscreens"
@@ -256,7 +277,8 @@ prepare_image() {
local res=$(screen_get_highest_resolution)
local img_name=$(xkcd_get_img_name_from_file $img_fn)
local img_nr=$(xkcd_get_img_nr $img_name)
- local img_tooltip=$(xkcd_get_img_tooltip $img_nr)
+ local text=$(xkcd_get_img_tooltip $img_nr)
+ img_tooltip=$(xkcd_format_tooltip $text)
local tmp_file_r=$(resize_image $img_fn $res)
local tmp_file_c=$(center_image $tmp_file_r $res)