Subject: bug#27281: Fix nlinum missing line numbers.

From: Bryan Gilbert <[email-masked]>
Date: Sat, 10 Jun 2017 10:35:29 -0400

On 06/10/2017 07:51 AM, [email-masked] wrote:
 > William Gilbert <[email-masked]> writes:
 >
 >> I've been working to track to down a bug where line numbers are
 >> occasionally missing when using nlinum mode. Currently there is a 
package
 >> written to workaround the problem that has a picture and description 
of the
 >> problem: https://github.com/hlissner/emacs-nlinum-hl.
 >>
 >> After extensive debugging I've tracked the problem down to the
 >> 'nlinum--region' function. Specifically the while loop check that
 >> determines if '(point)' is less than the limit. I've found that the 
problem
 >> exists when '(point)' is exactly equal to 'limit'. In this scenario the
 >> loop terminates and the last line in the region is not provided with 
a line
 >> number.
 >
 > Do you know how to reproduce this scenario?

I don't know how to easily and reliably reproduce this problem. I 
normally encounter it at least once every few minutes. I've reproduced 
the problem in my configuration, which is a derivative of the doom 
configuration (https://github.com/hlissner/.emacs.d), and using 
spacemacs with nlinum enabled. I don't know if there is anything 
specific to those two configurations that makes the problem present 
itself more frequently, but using one of those setups you should see the 
problem relatively quickly.

I lucked out and had a saved perspective (persp-mode) that exhibited 
this problem every time I loaded it, which was what allowed me to 
reliably debug the problem.

 >
 >> I was able to remedy the problem by changing the condition from
 >> 'less than' to 'less than or equal to', which will allow the last 
line in
 >> the region to be properly assigned a line number.
 >
 > This sounds like a workaround, possibly to a bug in jit-lock. Or
 > perhaps we need to return a list of the form (jit-lock-bounds BEG END)
 > from nlinum--region?

I am not familiar with jit-lock and am still all around very much a 
novice with elisp and emacs. I essentially zeroed in on the problem, but 
instrumenting some of the nlinum functions with print messages. I still 
have the perspective and underlying files preserved that replicate this 
problem everytime I load them. If there is anything you would like me to 
test or debug, please let me know. I will try to dig a little deeper to 
understand nlinum's interaction with jit-lock.