During TOC update, screen sometimes scrolls -- most often I've seen this
when I'm working inside large enough fold (does not fit in one screen).
Fix uses winsaveview()/winrestview() instead of getpos()/setpos().
Winview pair would also manage scroll position on screen, not just
cursor position in text.
Since TOC is completely recreated, Vim loses its fold open/close status.
If your TOC was open, after you save it gets closed.
Fix will save fold status, and restore it after TOC is updated.
getpos()/setpos() combination does not account for changes of lines
count. So if you do getpos, then remove lines _above_ it, then do
setpos -- it's going to be off.
The fix calculates the "diff", and adjusts saved position for that diff
(if any).
If section title contains multibyte chars, the fold shortening function
often fails, because it works with text as array of bytes, not
characters (see strlen() doc for example).
This commit fixes this issue.