next-line is very slow, and this is creating problems. I'll give some background then explain why.
By default, linum.el treats a wrapped line as a single line, and it takes into account hidden lines when numbering. I need it to number visual lines only - i.e. it should ignore hidden lines, and count wrapped lines as multiple lines.
For example, this is how it works by default:
1 This is a line. 2 This is a long line which has been auto-wrapped >by emacs. 3 This is another line.
This is the behaviour I want:
1 This is a line. 2 This is a long line which has been auto-wrapped 3>by emacs. 4 This is another line.
I have this behaviour working, but it's very slow. By default, linum.el uses
forward-line to number each line. This is the code that actually moves down by one line and increments the line counter:
(let ((inhibit-point-motion-hooks t)) (forward-line)) (setq line (1+ line))
I modified it to use
(let ((inhibit-point-motion-hooks t)) ;; (forward-line) (next-line)) (setq line (1+ line))
This works, but
next-line is very slow in comparison to
forward-line. Line numbers must be updated frequently so this slows down Emacs considerably.
I don't actually need to number every line. I am happy to use
forward-line and number only the beginning of lines, as so:
1 This is a line. 2 This is a long line which has been auto-wrapped >by emacs. 4 This is another line.
But if I want to do this, I need to be able to check how many screen lines I moved when I called
Does anyone have any ideas on how to solve this?