Zshell version of the flasher function
The “flasher” function is just a small command which flashes your screen until you press any key. It is usually put at the end of a long running process in order to indicate that the job is finished.
$ crystal build c3po-protocols.cr --release; flasher
Without further ado, here is the function:
flasher () {
while true; do
printf "\e[?5h"
sleep 0.2
printf "\e[?5l"
read -sk -t1 && break
done
}
As you can see if you know the Bash version, it is not very different. The tricky part is when it reads because read
is a builtin and has different options. In fact if you run the Bash version, you'll get a bad option: -1
. That is because in zshell, the option for the number of keys you are expecting is -k
instead of -n
. If you don't pass a number, it will default to 1.
The way this function works is that it uses the terminal escape sequences \e[?5h
and \e[?5l
. They switch on and off reverse video in a loop. At the end of each cycle we try to read a character from the user with a timeout of 1 second. If no key is pressed after 1 second, it does another cycle. Pretty simple.