fix spinbox crash on unusual input

Spinbox changes its text_line sub-widget's buffer directly, casuing the
asynchrony between text_line's buffer and its ruler_cur, and the cursor
in text_line sub-widget would move beyond the text.

The solution was still ugly, changing the values directly, as text_line
widget still doesn't provide functions to change its text or update its
ruler properly. It seems that text_line_update_ruler() function is also
broken.

There are more fixes on spinbox to come.
improve spinbox's response on unusual input

Spinbox was displaying its old value when the user gives a very large or
very small number, which can be confusing.

It now displays the max value when a very large number is given,
and the minimum value when a very small number is given.