* something like linum.el ought to be added @ 2007-09-09 10:04 Joe Wells 2007-09-09 10:43 ` Leo 2007-09-10 16:53 ` Richard Stallman 0 siblings, 2 replies; 46+ messages in thread From: Joe Wells @ 2007-09-09 10:04 UTC (permalink / raw) To: emacs-devel The approach to line numbering in linum.el seems to work well and seems to be fast and robust. I suggest it would be a good idea to officially add it, or something like it, to Emacs. This would allow line numbering like many other programs do, with a line number prefixed to each line on the left. The current line-number-mode is not what many users want. The linum.el file can be found at: http://stud4.tuwien.ac.at/~e0225855/linum/linum.html I suggest the following improvement to linum.el be considered: • The line number should be put in its own face; linum.el puts it in the face default. • The line number should be put in the display margins. This would allow better display of long lines that wrap around. The code in linum.el appears to be making some attempt to do this, but doesn't seem to actually use the margins. I hope this suggestion is useful. -- Joe ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-09 10:04 something like linum.el ought to be added Joe Wells @ 2007-09-09 10:43 ` Leo 2007-09-10 16:53 ` Richard Stallman 1 sibling, 0 replies; 46+ messages in thread From: Leo @ 2007-09-09 10:43 UTC (permalink / raw) To: emacs-devel On 2007-09-09 11:04 +0100, Joe Wells wrote: > The approach to line numbering in linum.el seems to work well and > seems to be fast and robust. I suggest it would be a good idea to > officially add it, or something like it, to Emacs. > > This would allow line numbering like many other programs do, with a > line number prefixed to each line on the left. The current > line-number-mode is not what many users want. > > The linum.el file can be found at: > > http://stud4.tuwien.ac.at/~e0225855/linum/linum.html I think it is an excellent addition to Emacs. This feature has been requested for many years now. > I suggest the following improvement to linum.el be considered: > > • The line number should be put in its own face; linum.el puts it in > the face default. > > • The line number should be put in the display margins. This would > allow better display of long lines that wrap around. The code in > linum.el appears to be making some attempt to do this, but doesn't > seem to actually use the margins. > > I hope this suggestion is useful. -- .: Leo :. [ sdl.web AT gmail.com ] .: [ GPG Key: 9283AA3F ] :. => "(require 'cl) considered harmful" considered harmful => http://dto.freeshell.org/blog/blog-2007-09-07-2323.html ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-09 10:04 something like linum.el ought to be added Joe Wells 2007-09-09 10:43 ` Leo @ 2007-09-10 16:53 ` Richard Stallman 2007-09-10 17:34 ` Markus Triska 2007-09-11 7:08 ` martin rudalics 1 sibling, 2 replies; 46+ messages in thread From: Richard Stallman @ 2007-09-10 16:53 UTC (permalink / raw) To: Joe Wells, Markus Triska; +Cc: emacs-devel The linum.el file can be found at: http://stud4.tuwien.ac.at/~e0225855/linum/linum.html It looks interesting. Is it efficient enough? It reassigns overlays to all the visible lines after every command, and that might be painfully slow. It might as well delete ALL the overlays it has made, rather than just those for the visible lines. Preserving overlays on the other parts of the buffer won't things speed up, and could waste a lot of space and maybe also cause slowdown by having so many overlays. It would be much better if it worked from after-change-functions, and reassigned overlays only for the lines that really need it. Anyone want to work on that? ? The line number should be put in its own face; linum.el puts it in the face default. ? The line number should be put in the display margins. This would allow better display of long lines that wrap around. The code in linum.el appears to be making some attempt to do this, but doesn't seem to actually use the margins. I agree those are good ideas. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-10 16:53 ` Richard Stallman @ 2007-09-10 17:34 ` Markus Triska 2007-09-10 20:00 ` David Kastrup ` (2 more replies) 2007-09-11 7:08 ` martin rudalics 1 sibling, 3 replies; 46+ messages in thread From: Markus Triska @ 2007-09-10 17:34 UTC (permalink / raw) To: rms; +Cc: Joe Wells, emacs-devel Richard Stallman <rms@gnu.org> writes: > Is it efficient enough? Many users have reported good success, and it works well for me too. Please let me know if it doesn't work for you. > Preserving overlays on the other parts of the buffer won't things > speed up Since those overlays can be reused when re-visiting the parts of the buffer they were created for, this can speed things up since it avoids re-creation of overlays and intermediate garbage collection. > It would be much better if it worked from after-change-functions, and > reassigned overlays only for the lines that really need it. Line numbers should also be updated after scrolling, M-x goto-line and many other functions that change the visible portion. The current method is more reliable and works, I hope, sufficiently well. > I agree those are good ideas. Implemented in version 0.9b, available from the given link. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-10 17:34 ` Markus Triska @ 2007-09-10 20:00 ` David Kastrup 2007-09-11 18:15 ` Markus Triska 2007-09-11 20:30 ` Richard Stallman 2007-09-11 20:31 ` Richard Stallman 2007-09-15 14:24 ` Juanma Barranquero 2 siblings, 2 replies; 46+ messages in thread From: David Kastrup @ 2007-09-10 20:00 UTC (permalink / raw) To: Markus Triska; +Cc: Joe Wells, rms, emacs-devel Markus Triska <markus.triska@gmx.at> writes: > Richard Stallman <rms@gnu.org> writes: > >> Is it efficient enough? > > Many users have reported good success, and it works well for me too. > Please let me know if it doesn't work for you. > >> Preserving overlays on the other parts of the buffer won't things >> speed up > > Since those overlays can be reused when re-visiting the parts of the > buffer they were created for, this can speed things up since it avoids > re-creation of overlays and intermediate garbage collection. A large number of overlays is slowing down every operation in the buffer. Having a set of 50 or so that is only adjusted upon redraw should be the fastest option for that reason. If the overlay creation is time-critical, one might move keep some off-screen overlays in a separate list for reuse and detach them from the buffer temporarily. But I doubt it would be worth the trouble. -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-10 20:00 ` David Kastrup @ 2007-09-11 18:15 ` Markus Triska 2007-09-11 20:27 ` Davis Herring 2007-09-12 8:47 ` Richard Stallman 2007-09-11 20:30 ` Richard Stallman 1 sibling, 2 replies; 46+ messages in thread From: Markus Triska @ 2007-09-11 18:15 UTC (permalink / raw) To: David Kastrup; +Cc: Joe Wells, rms, emacs-devel David Kastrup <dak@gnu.org> writes: > A large number of overlays is slowing down every operation in the > buffer. Having a set of 50 or so that is only adjusted upon redraw > should be the fastest option for that reason. I see what you mean; the main complication is that existing overlays can still be necessary in other windows that show the same buffer. So making all overlays available for (re-)consumption would entail walking all visible windows and adjusting (new or existing) overlays where necessary, which is not a clear improvement over the current approach (i.e., keeping overlays in place once they are created, and only changing those in the visible portion of the current window), in particular since the number of overlays seems to be no problem so far. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-11 18:15 ` Markus Triska @ 2007-09-11 20:27 ` Davis Herring 2007-09-11 21:24 ` Markus Triska 2007-09-12 8:47 ` Richard Stallman 1 sibling, 1 reply; 46+ messages in thread From: Davis Herring @ 2007-09-11 20:27 UTC (permalink / raw) To: Markus Triska; +Cc: emacs-devel, Joe Wells, rms > I see what you mean; the main complication is that existing overlays > can still be necessary in other windows that show the same buffer. So > making all overlays available for (re-)consumption would entail > walking all visible windows and adjusting (new or existing) overlays > where necessary, which is not a clear improvement over the current > approach (i.e., keeping overlays in place once they are created, and > only changing those in the visible portion of the current window), in > particular since the number of overlays seems to be no problem so far. If you only change them in the visible portion of the current window, does that mean that line-number overlays in other windows on the same buffer would never be updated (so long as they remained unselected)? Even if, say, an insertion had changed all the line numbers visible in another window? Davis -- This product is sold by volume, not by mass. If it appears too dense or too sparse, it is because mass-energy conversion has occurred during shipping. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-11 20:27 ` Davis Herring @ 2007-09-11 21:24 ` Markus Triska 0 siblings, 0 replies; 46+ messages in thread From: Markus Triska @ 2007-09-11 21:24 UTC (permalink / raw) To: herring; +Cc: emacs-devel, Joe Wells, rms "Davis Herring" <herring@lanl.gov> writes: > If you only change them in the visible portion of the current window, does > that mean that line-number overlays in other windows on the same buffer > would never be updated (so long as they remained unselected)? Yes, that's currently the case; I am now looking into what Richard suggests, which should solve this too. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-11 18:15 ` Markus Triska 2007-09-11 20:27 ` Davis Herring @ 2007-09-12 8:47 ` Richard Stallman 2007-09-12 9:14 ` Joe Wells 2007-09-13 17:06 ` Markus Triska 1 sibling, 2 replies; 46+ messages in thread From: Richard Stallman @ 2007-09-12 8:47 UTC (permalink / raw) To: Markus Triska; +Cc: jbw, emacs-devel I see what you mean; the main complication is that existing overlays can still be necessary in other windows that show the same buffer. That is true. So making all overlays available for (re-)consumption would entail walking all visible windows and adjusting (new or existing) overlays where necessary, Indeed, the after-change-functions hook will need to deal with all the windows. That is not very hard, with buffer-window-list. If each overlay records which windows it is meant for, the window-scroll-functions can could delete and redo only those that pertain to the current window. Each window will run the window-scroll-functions to recompute the overlays it needs. (We can add a primitive to select overlays based on a certain property value, to make that faster.) We could also add this as a display feature. It might not be very hard. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-12 8:47 ` Richard Stallman @ 2007-09-12 9:14 ` Joe Wells 2007-09-12 9:21 ` David Kastrup 2007-09-12 18:52 ` Richard Stallman 2007-09-13 17:06 ` Markus Triska 1 sibling, 2 replies; 46+ messages in thread From: Joe Wells @ 2007-09-12 9:14 UTC (permalink / raw) To: rms; +Cc: Markus Triska, emacs-devel Richard Stallman <rms@gnu.org> writes: > I see what you mean; the main complication is that existing overlays > can still be necessary in other windows that show the same buffer. > > That is true. > > So > making all overlays available for (re-)consumption would entail > walking all visible windows and adjusting (new or existing) overlays > where necessary, > > Indeed, the after-change-functions hook will need to deal with > all the windows. That is not very hard, with buffer-window-list. > > If each overlay records which windows it is meant for, the > window-scroll-functions can could delete and redo only those that > pertain to the current window. Each window will run the > window-scroll-functions to recompute the overlays it needs. And the “window” overlay property can allow the overlays for the different windows to be completely independent of each other. There could be two overlays for a given line and only one would be displayed in each window. > (We can add a primitive to select overlays based on a certain > property value, to make that faster.) Like next-single-property-change except for overlays instead of text properties? > We could also add this as a display feature. > It might not be very hard. By the way, it might help if there was an easier interface to the data returned by (format-mode-line "%l" WINDOW). That cached information is potentially a big speedup, but hard to access in a nice way. -- Joe ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-12 9:14 ` Joe Wells @ 2007-09-12 9:21 ` David Kastrup 2007-09-12 18:52 ` Richard Stallman 1 sibling, 0 replies; 46+ messages in thread From: David Kastrup @ 2007-09-12 9:21 UTC (permalink / raw) To: Joe Wells; +Cc: rms, Markus Triska, emacs-devel Joe Wells <jbw@macs.hw.ac.uk> writes: > Richard Stallman <rms@gnu.org> writes: > >> (We can add a primitive to select overlays based on a certain >> property value, to make that faster.) > > Like next-single-property-change except for overlays instead of text > properties? There is next-single-char-property-change. But maybe Richard was rather thinking about a more discriminative form of overlays-at. -- David Kastrup ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-12 9:14 ` Joe Wells 2007-09-12 9:21 ` David Kastrup @ 2007-09-12 18:52 ` Richard Stallman 1 sibling, 0 replies; 46+ messages in thread From: Richard Stallman @ 2007-09-12 18:52 UTC (permalink / raw) To: Joe Wells; +Cc: markus.triska, emacs-devel > If each overlay records which windows it is meant for, the > window-scroll-functions can could delete and redo only those that > pertain to the current window. Each window will run the > window-scroll-functions to recompute the overlays it needs. And the ?window? overlay property can allow the overlays for the different windows to be completely independent of each other. There could be two overlays for a given line and only one would be displayed in each window. It could be used for that, in another feature where that was needed. However, each line's number is the same in all windows, so linum doesn't need to do this. > (We can add a primitive to select overlays based on a certain > property value, to make that faster.) Like next-single-property-change except for overlays instead of text properties? The same basic idea, yes, but a different interface might be more suitable here. But maybe Richard was rather thinking about a more discriminative form of overlays-at. Rather, a more discriminative form of overlays-in. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-12 8:47 ` Richard Stallman 2007-09-12 9:14 ` Joe Wells @ 2007-09-13 17:06 ` Markus Triska 2007-09-14 13:59 ` Stefan Monnier 2007-09-14 15:04 ` brianjiang 1 sibling, 2 replies; 46+ messages in thread From: Markus Triska @ 2007-09-13 17:06 UTC (permalink / raw) To: rms; +Cc: jbw, emacs-devel Richard Stallman <rms@gnu.org> writes: > Indeed, the after-change-functions hook will need to deal with > all the windows. That is not very hard, with buffer-window-list. Yes, that's how I'm doing it now; update is now also added to several other hooks. One oversight in Emacs is, I think, that the functions in window-size-change-functions are invoked as regular functions in xdisp.c, therefore making the hook buffer-local currently results in an error (due to 't'). I'm thus modifying the global hook for now. > (We can add a primitive to select overlays based on a certain > property value, to make that faster.) Thanks; however, the current approach in version 0.9m is already so fast that no new primitives seem to be necessary (for linum.el). ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-13 17:06 ` Markus Triska @ 2007-09-14 13:59 ` Stefan Monnier 2007-09-14 16:15 ` Joe Wells 2007-09-15 2:09 ` something like linum.el ought to be added Richard Stallman 2007-09-14 15:04 ` brianjiang 1 sibling, 2 replies; 46+ messages in thread From: Stefan Monnier @ 2007-09-14 13:59 UTC (permalink / raw) To: Markus Triska; +Cc: jbw, rms, emacs-devel > Yes, that's how I'm doing it now; update is now also added to several > other hooks. One oversight in Emacs is, I think, that the functions in > window-size-change-functions are invoked as regular functions in > xdisp.c, therefore making the hook buffer-local currently results in > an error (due to 't'). I'm thus modifying the global hook for now. I think your code should rely on fontification-functions instead of fiddling with things like window-size-change-functions. It may very well be that fontification-functions doesn't work quite right for you, tho (basically it was defined for jit-lock and I believe that putting more than one function on it won't work right, so maybe you'd want to use jit-lock-register instead). Stefan ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-14 13:59 ` Stefan Monnier @ 2007-09-14 16:15 ` Joe Wells 2007-09-14 17:20 ` Stefan Monnier [not found] ` <m1bqajgpc8.fsf_-_@gmx.at> 2007-09-15 2:09 ` something like linum.el ought to be added Richard Stallman 1 sibling, 2 replies; 46+ messages in thread From: Joe Wells @ 2007-09-14 16:15 UTC (permalink / raw) To: Stefan Monnier; +Cc: rms, Markus Triska, emacs-devel Stefan Monnier <monnier@iro.umontreal.ca> writes: >> Yes, that's how I'm doing it now; update is now also added to several >> other hooks. One oversight in Emacs is, I think, that the functions in >> window-size-change-functions are invoked as regular functions in >> xdisp.c, therefore making the hook buffer-local currently results in >> an error (due to 't'). I'm thus modifying the global hook for now. > > I think your code should rely on fontification-functions instead of fiddling > with things like window-size-change-functions. It may very well be that > fontification-functions doesn't work quite right for you, tho (basically it > was defined for jit-lock and I believe that putting more than one function > on it won't work right, so maybe you'd want to use jit-lock-register > instead). Some comments on the idea of relying on fontification-functions: I think linum.el should work even if the user has font-locking turned off, so it shouldn't depend on jit-lock.el (unless jit-lock can be used without turning font-locking on?). Anyway, the whole font-locking subsystem is also quite hard to understand, so it seems unwise to me to get linum.el tied up in that complexity. And font-locking is oriented toward fontifying the entire buffer eventually while with line numbering you probably only want to keep active overlays for the displayed region. And it seems it would be hard for fontification-functions will work well with linum.el as a separate user from jit-lock.el, because they would both be competing for control of the same fontified property. So, for example, if stealth background fontification fontified some region, it would (I think?) place a non-nil value on the fontified property of that region, and then when that region was displayed by scrolling there would be nothing to trigger the line numbering. I hope these comments are helpful. -- Joe ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-14 16:15 ` Joe Wells @ 2007-09-14 17:20 ` Stefan Monnier [not found] ` <m1bqajgpc8.fsf_-_@gmx.at> 1 sibling, 0 replies; 46+ messages in thread From: Stefan Monnier @ 2007-09-14 17:20 UTC (permalink / raw) To: Joe Wells; +Cc: rms, Markus Triska, emacs-devel > Some comments on the idea of relying on fontification-functions: > I think linum.el should work even if the user has font-locking turned > off, so it shouldn't depend on jit-lock.el (unless jit-lock can be > used without turning font-locking on?). Anyway, the whole > font-locking subsystem is also quite hard to understand, so it seems > unwise to me to get linum.el tied up in that complexity. And > font-locking is oriented toward fontifying the entire buffer > eventually while with line numbering you probably only want to keep > active overlays for the displayed region. You may want to take another look at jit-lock-register. Or glasses-mode for that matter (the only other user of jit-lock currently besides font-lock). But yes: jit-lock is oriented towards fontifying the whole buffer, which is not what linum.el wants to do (and actually glasses-mode would probably rather be like linum.el). > And it seems it would be hard for fontification-functions will work > well with linum.el as a separate user from jit-lock.el, because they > would both be competing for control of the same fontified property. > So, for example, if stealth background fontification fontified some > region, it would (I think?) place a non-nil value on the fontified > property of that region, and then when that region was displayed by > scrolling there would be nothing to trigger the line numbering. Yes, that's the problem I hinted at which makes it pretty much impossible to use multiple functions on fontification-functions. So I think it's fine for linum.el to use something else, but I do think it's a good opportunity also to revisit this jit-lock and fontification-functions business to try and come up with a good solution. Maybe a solution is to change jit-lock by having it distinguish between clients that would rather keep everything fontified (full clients) and those that would rather only keep the displayed part fontified (light clients). Then add a jit-lock-clear-unused thingy that would go and flush all the non-displayed data of the light clients and then set fontified to nil (so that jit-lock gets to know when those need to be prepared for display), but also set jit-lock-fontified to t (so that jit-lock knows that this was already fontified w.r.t full clients, so only light clients need to be called). Stefan ^ permalink raw reply [flat|nested] 46+ messages in thread
[parent not found: <m1bqajgpc8.fsf_-_@gmx.at>]
* motivation for recent bug reports on overlays and properties like before-string, display, after-string, and face (was: linum.el and display properties) [not found] ` <m1bqajgpc8.fsf_-_@gmx.at> @ 2007-10-28 18:46 ` Joe Wells 0 siblings, 0 replies; 46+ messages in thread From: Joe Wells @ 2007-10-28 18:46 UTC (permalink / raw) To: Markus Triska; +Cc: emacs-devel Markus Triska <markus.triska@gmx.at> writes: > Hi Joe, > > I've been (loosely) following your recent bug-reports on > Emacs-devel; I hope you don't mind that I CC emacs-devel for my reply. I think it might help people to understand better why I've been trying to use this stuff. > is it correct that fixing these problems will also help linum.el? Possibly. I suspect linum.el is probably affected by the problem where an overlay's before-string is affected by the face of the character in the buffer after the overlay start (which isn't even inside the overlay in the case of a zero-length overlay like linum.el uses). > Also, what exactly is it that you want to do with LaTeX and folding? I've been making the code in tex-fold.el work better with the code in preview.el (latex-preview). (Both of these are part of AUCTeX.) The code in tex-fold allows viewing something like \textbf{XYZ \textit{ABC} 123} as: XYZ ABC 123 This picks up anything that font-latex.el has already done, so the appropriate fonts will be used. In this case, that means the XYZ and 123 will be in bold font, and the ABC will be in bold italic font. The code in preview.el allows viewing something like $\Omega^2_3$ as an image in the buffer, so you can see what the TeX typesetting will look like. It looks roughly like Ω²₃, except that the superscript will be directly above the subscript, and it will use the TeX fonts. However, without any of the changes I have been making, these don't work together, so you can get \textbf{XYZ $\Omega^2_3$ 123} to display as either XYZ $\Omega^2_3$ 123 (where the XYZ and 123 are in bold font) or as \textbf{XYZ Ω²₃ 123} but not as XYZ Ω²₃ 123 which is the most desired version. If you want to see for yourself, I posted a version of my changes to the auctex-devel mailing list. (I've continued to work on making them better since then.) > Thank you for pursuing these issues! Sure. I'm just trying to use the text and overlay properties as they are documented. :-) -- Joe ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-14 13:59 ` Stefan Monnier 2007-09-14 16:15 ` Joe Wells @ 2007-09-15 2:09 ` Richard Stallman 1 sibling, 0 replies; 46+ messages in thread From: Richard Stallman @ 2007-09-15 2:09 UTC (permalink / raw) To: Stefan Monnier; +Cc: jbw, markus.triska, emacs-devel I think your code should rely on fontification-functions instead of fiddling with things like window-size-change-functions. `fontification-functions' can't be used for linum because the C code checks explicitly for a `fontified' property before calling those functions. In effect, those functions have to put on `fontified' properties in order to make this mechanism work right. And they should only do that if they are doing fontification. If there is the existing hooks don't do the job well, it would be nice to improve them so as to make them better for programs like this ^ permalink raw reply [flat|nested] 46+ messages in thread
* RE: something like linum.el ought to be added 2007-09-13 17:06 ` Markus Triska 2007-09-14 13:59 ` Stefan Monnier @ 2007-09-14 15:04 ` brianjiang 2007-09-14 15:56 ` Markus Triska 1 sibling, 1 reply; 46+ messages in thread From: brianjiang @ 2007-09-14 15:04 UTC (permalink / raw) To: markus.triska, rms; +Cc: jbw, emacs-devel Hi Markus, I downloaded the newest version of the linum.el from the web (version 0.9n), and find that the line number doesn't work well in some folding function (e.g., outline mode). It can be reproduced by the following steps: 1. emacs -Q 2. load the linum.el 3. C-h n to open the NEW. 3. M-x linum-mode 4. Click menu: Hide -> Hide Sublevel Then some lines have no line number shown. Regards, Brian -----Original Message----- From: emacs-devel-bounces+brianjiang=gdnt.com.cn@gnu.org [mailto:emacs-devel-bounces+brianjiang=gdnt.com.cn@gnu.org] On Behalf Of Markus Triska Sent: 2007年9月14日 1:06 To: rms@gnu.org Cc: jbw@macs.hw.ac.uk; emacs-devel@gnu.org Subject: Re: something like linum.el ought to be added Richard Stallman <rms@gnu.org> writes: > Indeed, the after-change-functions hook will need to deal with all the > windows. That is not very hard, with buffer-window-list. Yes, that's how I'm doing it now; update is now also added to several other hooks. One oversight in Emacs is, I think, that the functions in window-size-change-functions are invoked as regular functions in xdisp.c, therefore making the hook buffer-local currently results in an error (due to 't'). I'm thus modifying the global hook for now. > (We can add a primitive to select overlays based on a certain property > value, to make that faster.) Thanks; however, the current approach in version 0.9m is already so fast that no new primitives seem to be necessary (for linum.el). _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-devel ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-14 15:04 ` brianjiang @ 2007-09-14 15:56 ` Markus Triska 2007-09-15 14:46 ` Juanma Barranquero 0 siblings, 1 reply; 46+ messages in thread From: Markus Triska @ 2007-09-14 15:56 UTC (permalink / raw) To: brianjiang; +Cc: jbw, rms, emacs-devel <brianjiang@gdnt.com.cn> writes: > Then some lines have no line number shown. Thanks, I can reproduce it; please try 0.9o, which should fix it. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-14 15:56 ` Markus Triska @ 2007-09-15 14:46 ` Juanma Barranquero 2007-09-15 16:12 ` Markus Triska 0 siblings, 1 reply; 46+ messages in thread From: Juanma Barranquero @ 2007-09-15 14:46 UTC (permalink / raw) To: Markus Triska; +Cc: emacs-devel Could I suggest also passing to the linum-format function (if any) the total number of lines in the buffer (or the visible region)? `linum-update-window' only needs to compute it once, while the linum-format function is called for each line and would have to do convoluted things to cache it (and somehow detect buffer changes). Juanma ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-15 14:46 ` Juanma Barranquero @ 2007-09-15 16:12 ` Markus Triska 2007-09-15 16:54 ` Juanma Barranquero 0 siblings, 1 reply; 46+ messages in thread From: Markus Triska @ 2007-09-15 16:12 UTC (permalink / raw) To: Juanma Barranquero; +Cc: emacs-devel "Juanma Barranquero" <lekktu@gmail.com> writes: > `linum-update-window' only needs to compute it once, while the > linum-format function is called for each line and would have to do > convoluted things to cache it (and somehow detect buffer changes). It need not be convoluted: What you probably want instead is a linum-before-line-numbering-hook, where users can compute everything their format function needs. Is that it? ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-15 16:12 ` Markus Triska @ 2007-09-15 16:54 ` Juanma Barranquero 0 siblings, 0 replies; 46+ messages in thread From: Juanma Barranquero @ 2007-09-15 16:54 UTC (permalink / raw) To: Markus Triska; +Cc: emacs-devel On 9/15/07, Markus Triska <markus.triska@gmx.at> wrote: > It need not be convoluted: What you probably want instead is a > linum-before-line-numbering-hook, where users can compute everything > their format function needs. Is that it? That would be even better, yes. Juanma ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-10 20:00 ` David Kastrup 2007-09-11 18:15 ` Markus Triska @ 2007-09-11 20:30 ` Richard Stallman 1 sibling, 0 replies; 46+ messages in thread From: Richard Stallman @ 2007-09-11 20:30 UTC (permalink / raw) To: David Kastrup; +Cc: jbw, markus.triska, emacs-devel >> Is it efficient enough? > > Many users have reported good success, and it works well for me too. > Please let me know if it doesn't work for you. I'd like some people here that have slow machines to try it and report whether it is fast enough to be usable for them. A large number of overlays is slowing down every operation in the buffer. Having a set of 50 or so that is only adjusted upon redraw should be the fastest option for that reason. If the overlay creation is time-critical, one might move keep some off-screen overlays in a separate list for reuse and detach them from the buffer temporarily. Those sound like improvements. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-10 17:34 ` Markus Triska 2007-09-10 20:00 ` David Kastrup @ 2007-09-11 20:31 ` Richard Stallman 2007-09-11 23:48 ` Markus Triska 2007-09-15 14:24 ` Juanma Barranquero 2 siblings, 1 reply; 46+ messages in thread From: Richard Stallman @ 2007-09-11 20:31 UTC (permalink / raw) To: Markus Triska; +Cc: jbw, emacs-devel > Preserving overlays on the other parts of the buffer won't things > speed up Since those overlays can be reused when re-visiting the parts of the buffer they were created for, this can speed things up since it avoids re-creation of overlays and intermediate garbage collection. Someone pointed out that you can use the same set of overlays regardless of the buffer position. Line numbers should also be updated after scrolling, M-x goto-line and many other functions that change the visible portion. That is true. But you can do that by putting a hook onto window-scroll-functions. That plus after-change-functions let you get a call for every event that could make it necessary. Take a look at jit-lock.el and see how it determines when to act and where. linum.el can do it the same way. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-11 20:31 ` Richard Stallman @ 2007-09-11 23:48 ` Markus Triska 2007-09-12 9:19 ` martin rudalics 0 siblings, 1 reply; 46+ messages in thread From: Markus Triska @ 2007-09-11 23:48 UTC (permalink / raw) To: rms; +Cc: jbw, emacs-devel There is a new version, 0.9f, which fixes all concerns raised so far in this thread. Please let me know if it breaks anything for you. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-11 23:48 ` Markus Triska @ 2007-09-12 9:19 ` martin rudalics 2007-09-12 11:17 ` Markus Triska 0 siblings, 1 reply; 46+ messages in thread From: martin rudalics @ 2007-09-12 9:19 UTC (permalink / raw) To: Markus Triska; +Cc: emacs-devel > There is a new version, 0.9f, which fixes all concerns raised so far > in this thread. Please let me know if it breaks anything for you. When the same buffer appears in more than one window the `walk-windows' in `linum-configuration-change' together with (mapc #'linum-update-window (get-buffer-window-list linum-buffer nil 'visible))) seems to update line numbers twice when the same buffer is displayed in more than one window. Why do you want to update numbers on any but the selected frame here? Also, after scrolling it should be sufficient to consider the scrolled window only. The `string-match' in `linum-after-change' should become `string-match-p' to avoid clobbering match data. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-12 9:19 ` martin rudalics @ 2007-09-12 11:17 ` Markus Triska 2007-09-12 12:09 ` martin rudalics 0 siblings, 1 reply; 46+ messages in thread From: Markus Triska @ 2007-09-12 11:17 UTC (permalink / raw) To: martin rudalics; +Cc: emacs-devel martin rudalics <rudalics@gmx.at> writes: > seems to update line numbers twice when the same buffer is displayed in > more than one window. Changed in 0.9h. > Why do you want to update numbers on any but the selected frame > here? Because I found cases where the previous command created a frame with a buffer that must have its line numbers shown, yet was not selected. > Also, after scrolling it should be sufficient to consider the > scrolled window only. No: The scrolled window can use overlays that another window needs. > The `string-match' in `linum-after-change' should become > `string-match-p' to avoid clobbering match data. Changed. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-12 11:17 ` Markus Triska @ 2007-09-12 12:09 ` martin rudalics 2007-09-12 12:55 ` Markus Triska 0 siblings, 1 reply; 46+ messages in thread From: martin rudalics @ 2007-09-12 12:09 UTC (permalink / raw) To: Markus Triska; +Cc: emacs-devel >>Why do you want to update numbers on any but the selected frame >>here? > > > Because I found cases where the previous command created a frame with > a buffer that must have its line numbers shown, yet was not selected. Then you'd have to update line numbers in `after-make-frame-functions' too. >>Also, after scrolling it should be sufficient to consider the >>scrolled window only. > > > No: The scrolled window can use overlays that another window needs. Not if the other window displays another buffer. For the same buffer this can be easily handled by giving overlays a window property. An aside: Sometimes configuration, buffer text, and some window start position change within one and the same command. Did you check whether this cause line number updating run two, three times after the command? ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-12 12:09 ` martin rudalics @ 2007-09-12 12:55 ` Markus Triska 0 siblings, 0 replies; 46+ messages in thread From: Markus Triska @ 2007-09-12 12:55 UTC (permalink / raw) To: martin rudalics; +Cc: emacs-devel martin rudalics <rudalics@gmx.at> writes: > Then you'd have to update line numbers in `after-make-frame-functions' Yes, that would also be an option; the current way subsumes more specialized cases like this with little overhead. > An aside: Sometimes configuration, buffer text, and some window start > position change within one and the same command. Did you check whether > this cause line number updating run two, three times after the command? No; generally, I found updates to be so fast that this, even if it should occur, is not a concern. Also, when line numbers for a window are updated twice in a row, all overlays are already created and in the right place, so it is even less noticable than starting anew. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-10 17:34 ` Markus Triska 2007-09-10 20:00 ` David Kastrup 2007-09-11 20:31 ` Richard Stallman @ 2007-09-15 14:24 ` Juanma Barranquero 2007-09-15 16:01 ` Markus Triska 2 siblings, 1 reply; 46+ messages in thread From: Juanma Barranquero @ 2007-09-15 14:24 UTC (permalink / raw) To: Markus Triska; +Cc: emacs-devel On 9/10/07, Markus Triska <markus.triska@gmx.at> wrote: > Line numbers should also be updated after scrolling, M-x goto-line and > many other functions that change the visible portion. The current > method is more reliable and works, I hope, sufficiently well. If you line-number a narrowed buffer and then widen it, the newly visible lines are not numbered until C-l or cursor movement, etc. Juanma ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-15 14:24 ` Juanma Barranquero @ 2007-09-15 16:01 ` Markus Triska 2007-09-15 16:14 ` Juanma Barranquero 2007-09-16 5:34 ` Richard Stallman 0 siblings, 2 replies; 46+ messages in thread From: Markus Triska @ 2007-09-15 16:01 UTC (permalink / raw) To: Juanma Barranquero; +Cc: emacs-devel "Juanma Barranquero" <lekktu@gmail.com> writes: > If you line-number a narrowed buffer and then widen it, the newly > visible lines are not numbered until C-l or cursor movement, etc. Yes, and I also found it's not enough to update line numbers in window-size-change-functions, configuration-change-hook, and after-change-functions; one should also do it in hs-...-hook, allout-..., outline-..., and many others. I have for now reinstated the original behaviour: Line numbers are (also) updated in post-command-hook. However, one can set linum-eager to `nil' to obtain more conservative updates, at the price of potentially missing some changes. Use C-l or scroll in such cases. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-15 16:01 ` Markus Triska @ 2007-09-15 16:14 ` Juanma Barranquero 2007-09-16 5:34 ` Richard Stallman 1 sibling, 0 replies; 46+ messages in thread From: Juanma Barranquero @ 2007-09-15 16:14 UTC (permalink / raw) To: Markus Triska; +Cc: emacs-devel On 9/15/07, Markus Triska <markus.triska@gmx.at> wrote: > I have for now reinstated the original behaviour: Line numbers are > (also) updated in post-command-hook. Aha, it works now. All in all, linum seems to work quite well. It should be committed to the repository (IMHO). Juanma ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-15 16:01 ` Markus Triska 2007-09-15 16:14 ` Juanma Barranquero @ 2007-09-16 5:34 ` Richard Stallman 2007-09-16 15:57 ` Markus Triska 2007-09-16 23:04 ` Stefan Monnier 1 sibling, 2 replies; 46+ messages in thread From: Richard Stallman @ 2007-09-16 5:34 UTC (permalink / raw) To: Markus Triska; +Cc: lekktu, emacs-devel Yes, and I also found it's not enough to update line numbers in window-size-change-functions, configuration-change-hook, and after-change-functions; one should also do it in hs-...-hook, allout-..., outline-..., and many others. I think that means we need to add a suitable hook which redisplay can call to inform Lisp code that visibility changes may have altered the position of the bottom of the window. The hook could be called by redisplay_window, if current_matrix_up_to_date_p is zero. Would someone like to try implementing this? ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-16 5:34 ` Richard Stallman @ 2007-09-16 15:57 ` Markus Triska 2007-09-17 3:58 ` Richard Stallman 2007-09-16 23:04 ` Stefan Monnier 1 sibling, 1 reply; 46+ messages in thread From: Markus Triska @ 2007-09-16 15:57 UTC (permalink / raw) To: rms; +Cc: lekktu, emacs-devel Richard Stallman <rms@gnu.org> writes: > Would someone like to try implementing this? A first try follows. In addition, here is a version of linum.el that depends on the patch and seems to work as intended: http://stud4.tuwien.ac.at/~e0225855/linum/linum-cvs.el Other versions are of course still available from the project page. 2007-09-16 Markus Triska <markus.triska@gmx.at> * xdisp.c (redisplay_window): Invoke new hook, window-bottom-change-functions, when visibility changes may have altered the position of the bottom of the window. (syms_of_xdisp): add window-bottom-change-functions diff --git a/src/xdisp.c b/src/xdisp.c index 618a538..80b973c 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -232,6 +232,7 @@ extern Lisp_Object Qhelp_echo; Lisp_Object Qoverriding_local_map, Qoverriding_terminal_local_map; Lisp_Object Qwindow_scroll_functions, Vwindow_scroll_functions; +Lisp_Object Qwindow_bottom_change_functions, Vwindow_bottom_change_functions; Lisp_Object Qredisplay_end_trigger_functions, Vredisplay_end_trigger_functions; Lisp_Object Qinhibit_point_motion_hooks; Lisp_Object QCeval, QCfile, QCdata, QCpropertize; @@ -12880,6 +12881,10 @@ redisplay_window (window, just_this_one_p) && XFASTINT (w->last_modified) >= MODIFF && XFASTINT (w->last_overlay_modified) >= OVERLAY_MODIFF); + if (!current_matrix_up_to_date_p + && !NILP(Vwindow_bottom_change_functions)) + safe_run_hooks (Qwindow_bottom_change_functions); + buffer_unchanged_p = (!NILP (w->window_end_valid) && !current_buffer->clip_changed @@ -23866,6 +23871,9 @@ syms_of_xdisp () staticpro (&Qwindow_scroll_functions); Qwindow_scroll_functions = intern ("window-scroll-functions"); + staticpro (&Qwindow_bottom_change_functions); + Qwindow_bottom_change_functions = intern ("window-bottom-change-functions"); + staticpro (&Qredisplay_end_trigger_functions); Qredisplay_end_trigger_functions = intern ("redisplay-end-trigger-functions"); @@ -24173,6 +24181,11 @@ and its new display-start position. Note that the value of `window-end' is not valid when these functions are called. */); Vwindow_scroll_functions = Qnil; + DEFVAR_LISP ("window-bottom-change-functions", &Vwindow_bottom_change_functions, + doc: /* List of functions to call when visibility changes may have altered +the position of the bottom of the window. */); + Vwindow_bottom_change_functions = Qnil; + DEFVAR_LISP ("redisplay-end-trigger-functions", &Vredisplay_end_trigger_functions, doc: /* Functions called when redisplay of a window reaches the end trigger. Each function is called with two arguments, the window and the end trigger value. ^ permalink raw reply related [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-16 15:57 ` Markus Triska @ 2007-09-17 3:58 ` Richard Stallman 0 siblings, 0 replies; 46+ messages in thread From: Richard Stallman @ 2007-09-17 3:58 UTC (permalink / raw) To: Markus Triska; +Cc: lekktu, emacs-devel It looks good, except for minor nits. It can be installed, with these nits fixed. + if (!current_matrix_up_to_date_p + && !NILP(Vwindow_bottom_change_functions)) + safe_run_hooks (Qwindow_bottom_change_functions); It needs a space between NILP and the paren. + DEFVAR_LISP ("window-bottom-change-functions", &Vwindow_bottom_change_functions, + doc: /* List of functions to call when visibility changes may have altered +the position of the bottom of the window. */); The first line of that doc string (like every doc string) should stand on its own. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-16 5:34 ` Richard Stallman 2007-09-16 15:57 ` Markus Triska @ 2007-09-16 23:04 ` Stefan Monnier 2007-09-17 3:58 ` Richard Stallman 1 sibling, 1 reply; 46+ messages in thread From: Stefan Monnier @ 2007-09-16 23:04 UTC (permalink / raw) To: rms; +Cc: lekktu, Markus Triska, emacs-devel > Yes, and I also found it's not enough to update line numbers in > window-size-change-functions, configuration-change-hook, and > after-change-functions; one should also do it in hs-...-hook, > allout-..., outline-..., and many others. > I think that means we need to add a suitable hook which redisplay can > call to inform Lisp code that visibility changes may have altered the > position of the bottom of the window. OTOH, using jit-lock would make this unnecessary. After all, the progression of linum.el follows the one from lazy-lock.el to jit-lock.el (lazy-lock suffered from the same problems with outline-mode, as a matter of fact). Stefan ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-16 23:04 ` Stefan Monnier @ 2007-09-17 3:58 ` Richard Stallman 2007-09-17 5:12 ` brianjiang 2007-09-17 13:17 ` Stefan Monnier 0 siblings, 2 replies; 46+ messages in thread From: Richard Stallman @ 2007-09-17 3:58 UTC (permalink / raw) To: Stefan Monnier; +Cc: lekktu, markus.triska, emacs-devel > I think that means we need to add a suitable hook which redisplay can > call to inform Lisp code that visibility changes may have altered the > position of the bottom of the window. OTOH, using jit-lock would make this unnecessary. jit-lock implements a specific functionality, fontification, and nothing else. I thought that the hooks used by jit-lock ought to be sufficient for linum as well. But it turns out they are not, because the code to run Vfontification_functions checks specifically for the `fontified' property. We could add another similar hook, or a more general mechanism to implement similar hooks for various uses. But I think that is the wrong way to go, because it depends on putting text properties on the text, to indicate which parts have been processed. (Fontified, in the case of jit-lock.) We don't want linum to put on text properties to say where it has put the line numbers. So I think my idea of using the same hooks jit-lock uses was a mistake. We seem to have another solution, which I suggested and Markus Triska implemened. ^ permalink raw reply [flat|nested] 46+ messages in thread
* RE: something like linum.el ought to be added 2007-09-17 3:58 ` Richard Stallman @ 2007-09-17 5:12 ` brianjiang 2007-09-17 13:49 ` Stefan Monnier 2007-09-17 13:17 ` Stefan Monnier 1 sibling, 1 reply; 46+ messages in thread From: brianjiang @ 2007-09-17 5:12 UTC (permalink / raw) To: rms, monnier; +Cc: lekktu, markus.triska, emacs-devel sometimes we can use outline- or hs- and others functions to hide a lot of lines. it seems linum mode create/move overlays for every line between window-start and window-end. So even the line is already hide, linum still create/move overlay for it. If there are many line hiden within the window, it will consume a lot of memory, also impact the performance/efficience of the linum mode. Is it possible to avoid the create linum overly for the invisible line? -----Original Message----- From: emacs-devel-bounces+brianjiang=gdnt.com.cn@gnu.org [mailto:emacs-devel-bounces+brianjiang=gdnt.com.cn@gnu.org] On Behalf Of Richard Stallman Sent: 2007年9月17日 11:59 To: Stefan Monnier Cc: lekktu@gmail.com; markus.triska@gmx.at; emacs-devel@gnu.org Subject: Re: something like linum.el ought to be added > I think that means we need to add a suitable hook which redisplay can > call to inform Lisp code that visibility changes may have altered the > position of the bottom of the window. OTOH, using jit-lock would make this unnecessary. jit-lock implements a specific functionality, fontification, and nothing else. I thought that the hooks used by jit-lock ought to be sufficient for linum as well. But it turns out they are not, because the code to run Vfontification_functions checks specifically for the `fontified' property. We could add another similar hook, or a more general mechanism to implement similar hooks for various uses. But I think that is the wrong way to go, because it depends on putting text properties on the text, to indicate which parts have been processed. (Fontified, in the case of jit-lock.) We don't want linum to put on text properties to say where it has put the line numbers. So I think my idea of using the same hooks jit-lock uses was a mistake. We seem to have another solution, which I suggested and Markus Triska implemened. _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-devel ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-17 5:12 ` brianjiang @ 2007-09-17 13:49 ` Stefan Monnier 0 siblings, 0 replies; 46+ messages in thread From: Stefan Monnier @ 2007-09-17 13:49 UTC (permalink / raw) To: brianjiang; +Cc: lekktu, rms, markus.triska, emacs-devel > sometimes we can use outline- or hs- and others functions to hide a lot of > lines. it seems linum mode create/move overlays for every line between > window-start and window-end. So even the line is already hide, linum still > create/move overlay for it. If there are many line hiden within the > window, it will consume a lot of memory, also impact the > performance/efficience of the linum mode. Is it possible to avoid the > create linum overly for the invisible line? Ahem.... can you say "jit-lock"? Stefan ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-17 3:58 ` Richard Stallman 2007-09-17 5:12 ` brianjiang @ 2007-09-17 13:17 ` Stefan Monnier 2007-09-17 22:24 ` Richard Stallman 1 sibling, 1 reply; 46+ messages in thread From: Stefan Monnier @ 2007-09-17 13:17 UTC (permalink / raw) To: rms; +Cc: lekktu, markus.triska, emacs-devel >> I think that means we need to add a suitable hook which redisplay can >> call to inform Lisp code that visibility changes may have altered the >> position of the bottom of the window. > OTOH, using jit-lock would make this unnecessary. > jit-lock implements a specific functionality, fontification, and > nothing else. Not exactly. It turns the low-level fontification-function functionality into a higher-level one that can then be used by font-lock to do fontification. It can also be used by other packages to do other things (e.g. glasses-mode). > I thought that the hooks used by jit-lock ought to be sufficient > for linum as well. But it turns out they are not, because > the code to run Vfontification_functions checks specifically > for the `fontified' property. I believe they are sufficient, but jit-lock needs to be extended to offer the feature required by linum.el. Stefan ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-17 13:17 ` Stefan Monnier @ 2007-09-17 22:24 ` Richard Stallman 2007-09-18 0:49 ` Stefan Monnier 0 siblings, 1 reply; 46+ messages in thread From: Richard Stallman @ 2007-09-17 22:24 UTC (permalink / raw) To: Stefan Monnier; +Cc: lekktu, markus.triska, emacs-devel > I thought that the hooks used by jit-lock ought to be sufficient > for linum as well. But it turns out they are not, because > the code to run Vfontification_functions checks specifically > for the `fontified' property. I believe they are sufficient, but jit-lock needs to be extended to offer the feature required by linum.el. jit-lock is controlled by the `fontified' property. We do not want linum to alter text properties, so it can't use jit-lock. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-17 22:24 ` Richard Stallman @ 2007-09-18 0:49 ` Stefan Monnier 2007-09-18 3:30 ` Richard Stallman 0 siblings, 1 reply; 46+ messages in thread From: Stefan Monnier @ 2007-09-18 0:49 UTC (permalink / raw) To: rms; +Cc: lekktu, markus.triska, emacs-devel >> I thought that the hooks used by jit-lock ought to be sufficient >> for linum as well. But it turns out they are not, because >> the code to run Vfontification_functions checks specifically >> for the `fontified' property. > I believe they are sufficient, but jit-lock needs to be extended to > offer the feature required by linum.el. > jit-lock is controlled by the `fontified' property. We do not want linum > to alter text properties, so it can't use jit-lock. I do not follow. I have a pretty good idea of how jit-lock could be modified to provide just the necessary functionality. linum.el would keep using overlays (just like glasses-mode does already in conjunction with jit-lock, by the way). Stefan ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-18 0:49 ` Stefan Monnier @ 2007-09-18 3:30 ` Richard Stallman 2007-09-18 14:31 ` Stefan Monnier 0 siblings, 1 reply; 46+ messages in thread From: Richard Stallman @ 2007-09-18 3:30 UTC (permalink / raw) To: Stefan Monnier; +Cc: lekktu, markus.triska, emacs-devel > jit-lock is controlled by the `fontified' property. We do not want linum > to alter text properties, so it can't use jit-lock. I do not follow. `jit-lock-function' is called from the hook `fontification-functions', which is run from `handle_fontified_prop', which is called when there is a change in the `fontified' property. So it seems that everything is caontrolled by that property. Did I misunderstand that code? I have a pretty good idea of how jit-lock could be modified to provide just the necessary functionality. How would you modify it? ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-18 3:30 ` Richard Stallman @ 2007-09-18 14:31 ` Stefan Monnier 0 siblings, 0 replies; 46+ messages in thread From: Stefan Monnier @ 2007-09-18 14:31 UTC (permalink / raw) To: rms; +Cc: lekktu, markus.triska, emacs-devel >> jit-lock is controlled by the `fontified' property. We do not want linum >> to alter text properties, so it can't use jit-lock. > I do not follow. > `jit-lock-function' is called from the hook `fontification-functions', > which is run from `handle_fontified_prop', which is called when > there is a change in the `fontified' property. So it seems that everything > is caontrolled by that property. > Did I misunderstand that code? No you have it right. But I don't think the conclusion follows from that. I don't have time right now to go into the details, Stefan ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: something like linum.el ought to be added 2007-09-10 16:53 ` Richard Stallman 2007-09-10 17:34 ` Markus Triska @ 2007-09-11 7:08 ` martin rudalics 1 sibling, 0 replies; 46+ messages in thread From: martin rudalics @ 2007-09-11 7:08 UTC (permalink / raw) To: rms; +Cc: emacs-devel > It looks interesting. Is it efficient enough? It reassigns overlays > to all the visible lines after every command, and that might be > painfully slow. The only way to make this fast is implementing it in the redisplay code. > It might as well delete ALL the overlays it has made, rather than just > those for the visible lines. Preserving overlays on the other parts > of the buffer won't things speed up, and could waste a lot of space > and maybe also cause slowdown by having so many overlays. I think the overlay handling part is OK and cannot be improved much. It might profit from recentering overlays but I'm not sure where. > It would be much better if it worked from after-change-functions, and > reassigned overlays only for the lines that really need it. The only way `after-change-functions' could be used here is to invalidate entries of a line numbers cache. Such a cache should be useful for `line-number-mode' too. If you have enabled both `linum-mode' and `line-number-mode' you'd `count-lines' twice from bob for each redisplay. ^ permalink raw reply [flat|nested] 46+ messages in thread
end of thread, other threads:[~2007-10-28 18:46 UTC | newest] Thread overview: 46+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-09-09 10:04 something like linum.el ought to be added Joe Wells 2007-09-09 10:43 ` Leo 2007-09-10 16:53 ` Richard Stallman 2007-09-10 17:34 ` Markus Triska 2007-09-10 20:00 ` David Kastrup 2007-09-11 18:15 ` Markus Triska 2007-09-11 20:27 ` Davis Herring 2007-09-11 21:24 ` Markus Triska 2007-09-12 8:47 ` Richard Stallman 2007-09-12 9:14 ` Joe Wells 2007-09-12 9:21 ` David Kastrup 2007-09-12 18:52 ` Richard Stallman 2007-09-13 17:06 ` Markus Triska 2007-09-14 13:59 ` Stefan Monnier 2007-09-14 16:15 ` Joe Wells 2007-09-14 17:20 ` Stefan Monnier [not found] ` <m1bqajgpc8.fsf_-_@gmx.at> 2007-10-28 18:46 ` motivation for recent bug reports on overlays and properties like before-string, display, after-string, and face (was: linum.el and display properties) Joe Wells 2007-09-15 2:09 ` something like linum.el ought to be added Richard Stallman 2007-09-14 15:04 ` brianjiang 2007-09-14 15:56 ` Markus Triska 2007-09-15 14:46 ` Juanma Barranquero 2007-09-15 16:12 ` Markus Triska 2007-09-15 16:54 ` Juanma Barranquero 2007-09-11 20:30 ` Richard Stallman 2007-09-11 20:31 ` Richard Stallman 2007-09-11 23:48 ` Markus Triska 2007-09-12 9:19 ` martin rudalics 2007-09-12 11:17 ` Markus Triska 2007-09-12 12:09 ` martin rudalics 2007-09-12 12:55 ` Markus Triska 2007-09-15 14:24 ` Juanma Barranquero 2007-09-15 16:01 ` Markus Triska 2007-09-15 16:14 ` Juanma Barranquero 2007-09-16 5:34 ` Richard Stallman 2007-09-16 15:57 ` Markus Triska 2007-09-17 3:58 ` Richard Stallman 2007-09-16 23:04 ` Stefan Monnier 2007-09-17 3:58 ` Richard Stallman 2007-09-17 5:12 ` brianjiang 2007-09-17 13:49 ` Stefan Monnier 2007-09-17 13:17 ` Stefan Monnier 2007-09-17 22:24 ` Richard Stallman 2007-09-18 0:49 ` Stefan Monnier 2007-09-18 3:30 ` Richard Stallman 2007-09-18 14:31 ` Stefan Monnier 2007-09-11 7:08 ` martin rudalics
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).