- Only issue 'zo' if there is any fold at all.
- Correct possible bug, code was using 'start_lnum' var, but it
was changed/incremented which could lead to wrong results.
- Use bang with norm, to prevent user re-mapping interfere with
standard ones.
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).
Before the fix, tags file sorting was done alphabetically. That would
treat line numbers as strings, and so, for example, if the same tag was
placed on the same page on lines, say, 9 and 114, the order you would
get, 114 would go first, instead of 9.
Fix adds proper entries comparison to the sort function.
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.