# – $n times: draw_progress_bar
# – after: done_progress_bar
#
-# init_progress_bar trashes the EXIT signal handler!
+# init_progress_bar trashes the EXIT and SIGWINCH traps, which later
+# are cleared, again, by done_progress_bar.
# global variables used by this library
_cnt_progress_bar=0
global -i nlin_progress_bar=$LINES isin_progress_bar=1
trap 'done_progress_bar' EXIT
+ trap 'sigwinch_progress_bar' WINCH
+ # newline; up one line (to ensure we are not in the last line);
+ # save position; set scrolling region; restore position
+ print -n "\\n\\e[A\\e7\\e[1;$((# nlin_progress_bar - 1))r\\e8"
+}
+
+function sigwinch_progress_bar {
+ (( isin_progress_bar )) || return 0
+
+ # get new terminal size
+ nlin_progress_bar=$LINES
# newline; up one line (to ensure we are not in the last line);
# save position; set scrolling region; restore position
print -n "\\n\\e[A\\e7\\e[1;$((# nlin_progress_bar - 1))r\\e8"
# go to last line; delete line; restore position
print "\\e7\\e[0;0r\\e[$nlin_progress_bar;0H\\e[M\\e8"
isin_progress_bar=0
+ trap - WINCH
+ trap - EXIT
}
function draw_progress_bar {