* Error during redisplay @ 2008-02-24 2:56 Juanma Barranquero 2008-02-26 1:48 ` Juanma Barranquero 2008-02-27 3:15 ` Bob Rogers 0 siblings, 2 replies; 15+ messages in thread From: Juanma Barranquero @ 2008-02-24 2:56 UTC (permalink / raw) To: Emacs Devel emacs -q --eval '(progn (ielm) (pop-to-buffer "*Messages*"))' => "Error during redisplay: (error Attempt to modify read-only object)" Juanma ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Error during redisplay 2008-02-24 2:56 Error during redisplay Juanma Barranquero @ 2008-02-26 1:48 ` Juanma Barranquero 2008-02-26 4:18 ` Kenichi Handa 2008-02-27 3:15 ` Bob Rogers 1 sibling, 1 reply; 15+ messages in thread From: Juanma Barranquero @ 2008-02-26 1:48 UTC (permalink / raw) To: Emacs Devel On Sun, Feb 24, 2008 at 3:56 AM, Juanma Barranquero <lekktu@gmail.com> wrote: > emacs -q --eval '(progn (ielm) (pop-to-buffer "*Messages*"))' > > => "Error during redisplay: (error Attempt to modify read-only object)" Seems like a consequence of auto-composition-mode. Adding (global-auto-composition-mode -1) to .emacs fixes the problem. Apparently, pure strings in mode-line-format don't like to be added auto-composed properties. Juanma ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Error during redisplay 2008-02-26 1:48 ` Juanma Barranquero @ 2008-02-26 4:18 ` Kenichi Handa 2008-02-26 4:55 ` Stefan Monnier 2008-02-26 23:46 ` Richard Stallman 0 siblings, 2 replies; 15+ messages in thread From: Kenichi Handa @ 2008-02-26 4:18 UTC (permalink / raw) To: Juanma Barranquero; +Cc: emacs-devel In article <f7ccd24b0802251748v7fa8478aue0ab6d347a8db1f6@mail.gmail.com>, "Juanma Barranquero" <lekktu@gmail.com> writes: > On Sun, Feb 24, 2008 at 3:56 AM, Juanma Barranquero <lekktu@gmail.com> wrote: > > emacs -q --eval '(progn (ielm) (pop-to-buffer "*Messages*"))' > > > > => "Error during redisplay: (error Attempt to modify read-only object)" > Seems like a consequence of auto-composition-mode. Adding > (global-auto-composition-mode -1) > to .emacs fixes the problem. Apparently, pure strings in > mode-line-format don't like to be added auto-composed properties. In auto-compose-chars, inhibit-read-only is bound to t while the code add auto-composed property. If it's still not allowed, are there anyway to detect that the string is pure? --- Kenichi Handa handa@ni.aist.go.jp ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Error during redisplay 2008-02-26 4:18 ` Kenichi Handa @ 2008-02-26 4:55 ` Stefan Monnier 2008-02-26 23:46 ` Richard Stallman 1 sibling, 0 replies; 15+ messages in thread From: Stefan Monnier @ 2008-02-26 4:55 UTC (permalink / raw) To: Kenichi Handa; +Cc: Juanma Barranquero, emacs-devel > In auto-compose-chars, inhibit-read-only is bound to t while > the code add auto-composed property. If it's still not > allowed, are there anyway to detect that the string is pure? The only way I can think of is to try it and catch the error signalled. Stefan ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Error during redisplay 2008-02-26 4:18 ` Kenichi Handa 2008-02-26 4:55 ` Stefan Monnier @ 2008-02-26 23:46 ` Richard Stallman 2008-02-27 1:28 ` Kenichi Handa 1 sibling, 1 reply; 15+ messages in thread From: Richard Stallman @ 2008-02-26 23:46 UTC (permalink / raw) To: Kenichi Handa; +Cc: lekktu, emacs-devel > to .emacs fixes the problem. Apparently, pure strings in > mode-line-format don't like to be added auto-composed properties. In auto-compose-chars, inhibit-read-only is bound to t while the code add auto-composed property. If it's still not allowed, are there anyway to detect that the string is pure? There is something not clean about trying to modify a string in mode-line-format when a user turns on a feature that doesn't intend to change the mode line. That seems like a flaw in the design of something. The strings in mode-line-format are supposed to be set up correct when Emacs is dumped. Should they have these properties, or not? That is the first question. If they SHOULD have these properties, probably we should make sure they have these properties from the start, or from an early point in building Emacs. If they SHOULD NOT have these properties, why is anything trying to give them these properties? Stefan wrote: > In auto-compose-chars, inhibit-read-only is bound to t while > the code add auto-composed property. If it's still not > allowed, are there anyway to detect that the string is pure? The only way I can think of is to try it and catch the error signalled. One possible solution is to avoid making those strings pure in the first place. But this could be papering over a design flaw, so first we should look at the questions above. ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Error during redisplay 2008-02-26 23:46 ` Richard Stallman @ 2008-02-27 1:28 ` Kenichi Handa 2008-02-27 6:59 ` David Kastrup 2008-02-27 16:07 ` Richard Stallman 0 siblings, 2 replies; 15+ messages in thread From: Kenichi Handa @ 2008-02-27 1:28 UTC (permalink / raw) To: rms; +Cc: lekktu, emacs-devel In article <E1JU9V5-0001nM-1x@fencepost.gnu.org>, Richard Stallman <rms@gnu.org> writes: > to .emacs fixes the problem. Apparently, pure strings in > mode-line-format don't like to be added auto-composed properties. > In auto-compose-chars, inhibit-read-only is bound to t while > the code add auto-composed property. If it's still not > allowed, are there anyway to detect that the string is pure? > There is something not clean about trying to modify a string in > mode-line-format when a user turns on a feature that doesn't intend to > change the mode line. That seems like a flaw in the design of > something. The current design requires to add `composition' property to a string to properly display the string if it contains, for instance, some of Indic characters, and to add `auto-composed' property to avoid the repeated generation of `composition' property. > The strings in mode-line-format are supposed to be set up correct when > Emacs is dumped. Should they have these properties, or not? That is > the first question. If mode-line-format has not been modified, I think it doesn't contain any characters that require composition (except for the case that we support such ligatures as "Fi" in the future). One way is to check if the string contains any such characters, and if not, avoid any composition processing. As the string tends to be short, doing that check repeatedly will not be that inefficient. > If they SHOULD have these properties, probably we should make sure they have > these properties from the start, or from an early point in building Emacs. That's impossible. How to compose them depends on which font to use. --- Kenichi Handa handa@ni.aist.go.jp ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Error during redisplay 2008-02-27 1:28 ` Kenichi Handa @ 2008-02-27 6:59 ` David Kastrup 2008-02-27 8:04 ` Kenichi Handa 2008-02-27 16:07 ` Richard Stallman 1 sibling, 1 reply; 15+ messages in thread From: David Kastrup @ 2008-02-27 6:59 UTC (permalink / raw) To: Kenichi Handa; +Cc: lekktu, rms, emacs-devel Kenichi Handa <handa@m17n.org> writes: > The current design requires to add `composition' property to a string > to properly display the string if it contains, for instance, some of > Indic characters, and to add `auto-composed' property to avoid the > repeated generation of `composition' property. > >> If they SHOULD have these properties, probably we should make sure they have >> these properties from the start, or from an early point in building Emacs. > > That's impossible. How to compose them depends on which > font to use. Since the same string can be displayed with different fonts simultaneously, this would look like a fault in the design. The composition property/whatever apparently needs to be associated with the actual display, not just the string. -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Error during redisplay 2008-02-27 6:59 ` David Kastrup @ 2008-02-27 8:04 ` Kenichi Handa 2008-02-27 8:34 ` David Kastrup 2008-02-27 16:06 ` Stefan Monnier 0 siblings, 2 replies; 15+ messages in thread From: Kenichi Handa @ 2008-02-27 8:04 UTC (permalink / raw) To: David Kastrup; +Cc: lekktu, rms, emacs-devel In article <85ir0aubo1.fsf@lola.goethe.zz>, David Kastrup <dak@gnu.org> writes: > Kenichi Handa <handa@m17n.org> writes: > > The current design requires to add `composition' property to a string > > to properly display the string if it contains, for instance, some of > > Indic characters, and to add `auto-composed' property to avoid the > > repeated generation of `composition' property. > > >>> If they SHOULD have these properties, probably we should make sure they have >>> these properties from the start, or from an early point in building Emacs. > > > > That's impossible. How to compose them depends on which > > font to use. > Since the same string can be displayed with different fonts > simultaneously, this would look like a fault in the design. The > composition property/whatever apparently needs to be associated with the > actual display, not just the string. In such a case, the composition property is generated each time. The same situation happens when you display the same portion of a buffer in two frames with different fonts. It may result in a little bit slower redisplay. If such a situation happens often and the slowness is so painful, perhaps the composition property must be an alist of fonts vs the current value. It's not that difficult to implement. By the way, I think the slowness is mainly because the property generation is done by Lisp code through the function in composition-function-table and that involves generating many Lisp objects. With unicode merge, the underling actual task of deciding glyphs and positions is mainly done by C functions of font-backends, and that should not be that slow. So, another way is to re-design the current redisplay engine to generate a composition glyph every time just by calling C functions. I think it's an interesting experiment. --- Kenichi Handa handa@ni.aist.go.jp ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Error during redisplay 2008-02-27 8:04 ` Kenichi Handa @ 2008-02-27 8:34 ` David Kastrup 2008-02-27 16:08 ` Richard Stallman 2008-02-27 16:06 ` Stefan Monnier 1 sibling, 1 reply; 15+ messages in thread From: David Kastrup @ 2008-02-27 8:34 UTC (permalink / raw) To: Kenichi Handa; +Cc: lekktu, rms, emacs-devel Kenichi Handa <handa@m17n.org> writes: > In article <85ir0aubo1.fsf@lola.goethe.zz>, David Kastrup <dak@gnu.org> writes: > >> Since the same string can be displayed with different fonts >> simultaneously, this would look like a fault in the design. The >> composition property/whatever apparently needs to be associated with >> the actual display, not just the string. > > In such a case, the composition property is generated each > time. The same situation happens when you display the same > portion of a buffer in two frames with different fonts. > > It may result in a little bit slower redisplay. If such a > situation happens often and the slowness is so painful, > perhaps the composition property must be an alist of fonts > vs the current value. It's not that difficult to implement. I still think it wrong to change the text according to where it is displayed. This would appear to call at most for overlays (which can be window specific and where changing them does not change the underlying text). So this sort of information probably belongs in the glyph matrix or whatever it is called. As far as I know, text properties are also subject to undo treatment. It just makes me queasy to think about this. > So, another way is to re-design the current redisplay engine > to generate a composition glyph every time just by calling C > functions. I think it's an interesting experiment. Sounds more like "sane" than "an interesting experiment" to me. But on the other hand, I have no relevant experience or knowledge whatsoever. -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Error during redisplay 2008-02-27 8:34 ` David Kastrup @ 2008-02-27 16:08 ` Richard Stallman 0 siblings, 0 replies; 15+ messages in thread From: Richard Stallman @ 2008-02-27 16:08 UTC (permalink / raw) To: David Kastrup; +Cc: lekktu, emacs-devel, handa I still think it wrong to change the text according to where it is displayed. I agree -- I get a very bad feeling about that. As far as I know, text properties are also subject to undo treatment. That is another good argument. This would appear to call at most for overlays At present, strings cannot have overlays. And I am not sure if overlays are really right for this data; just because text properties have a bad aspect, that doesn't mean overlays don't. There could be some other internal cache for this. It calls for more thought. > So, another way is to re-design the current redisplay engine > to generate a composition glyph every time just by calling C > functions. I think it's an interesting experiment. That is cleaner, for sure. It could also be slower, but how much? ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Error during redisplay 2008-02-27 8:04 ` Kenichi Handa 2008-02-27 8:34 ` David Kastrup @ 2008-02-27 16:06 ` Stefan Monnier 2008-02-28 6:36 ` Kenichi Handa 1 sibling, 1 reply; 15+ messages in thread From: Stefan Monnier @ 2008-02-27 16:06 UTC (permalink / raw) To: Kenichi Handa; +Cc: lekktu, rms, emacs-devel >> Since the same string can be displayed with different fonts >> simultaneously, this would look like a fault in the design. The >> composition property/whatever apparently needs to be associated with the >> actual display, not just the string. > In such a case, the composition property is generated each > time. The same situation happens when you display the same > portion of a buffer in two frames with different fonts. Hmm.. I'm confused. The auto-composed property is boolean, so at least the auto-composition-mode code should only run once and should hence generate a `composition' property value that does not depend on the font used. Maybe what you're saying is that this `composition' property is later changed by the redisplay code and this can be redone if the same text gets displayed with another font? > By the way, I think the slowness is mainly because the What slowness? > property generation is done by Lisp code through the > function in composition-function-table and that involves > generating many Lisp objects. By the way, it might be good to replace the composition-function-table (which is a char-table that maps chars to regexps and then to code) with a lex-style FSM. Such a thing would also be useful for syntax-tables to be able to deal with multi-char lexemes (like "begin" and "end"). > So, another way is to re-design the current redisplay engine > to generate a composition glyph every time just by calling C > functions. I think it's an interesting experiment. Might be worthwhile as well, tho I have no idea if there's an actual performance problem to solve here. Going through elisp is also convenient: I currently use font-lock in haskell-mode, sml-mode, and coq-mode to compose things like "->" into "→", but auto-composition-mode would seem like an even better fit. Stefan ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Error during redisplay 2008-02-27 16:06 ` Stefan Monnier @ 2008-02-28 6:36 ` Kenichi Handa 2008-02-28 16:44 ` Stefan Monnier 0 siblings, 1 reply; 15+ messages in thread From: Kenichi Handa @ 2008-02-28 6:36 UTC (permalink / raw) To: Stefan Monnier; +Cc: lekktu, rms, emacs-devel In article <jwvk5kq2y5p.fsf-monnier+emacs@gnu.org>, Stefan Monnier <monnier@IRO.UMontreal.CA> writes: > Hmm.. I'm confused. The auto-composed property is boolean, so at least > the auto-composition-mode code should only run once and should hence > generate a `composition' property value that does not depend on the > font used. > Maybe what you're saying is that this `composition' property is later > changed by the redisplay code and this can be redone if the same text > gets displayed with another font? Yes. > > By the way, I think the slowness is mainly because the > What slowness? Slowness of calculating composition properties. > > property generation is done by Lisp code through the > > function in composition-function-table and that involves > > generating many Lisp objects. > By the way, it might be good to replace the composition-function-table > (which is a char-table that maps chars to regexps and then to code) with > a lex-style FSM. Such a thing would also be useful for syntax-tables to > be able to deal with multi-char lexemes (like "begin" and "end"). Does FSM stands for Finit State Machine? Currently those regexps are very simple, and just an alist (((FROM-CHAR . TO-CHAR) FUNC) ...) will work. But, at the moment, I'm not sure that such a simple specification works for all scripts. > > So, another way is to re-design the current redisplay engine > > to generate a composition glyph every time just by calling C > > functions. I think it's an interesting experiment. > Might be worthwhile as well, tho I have no idea if there's an actual > performance problem to solve here. Going through elisp is also > convenient: I currently use font-lock in haskell-mode, sml-mode, and > coq-mode to compose things like "->" into "→", but auto-composition-mode > would seem like an even better fit. But, if we can't attach `auto-composed' and `composition' property to a buffer, the requirement for the speed will be higher. We have to do some experiment to check the performance. Another idea is to have an alist of (FRAME . INTERVAL-FOR-COMPOSITION) for each buffer. --- Kenichi Handa handa@ni.aist.go.jp ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Error during redisplay 2008-02-28 6:36 ` Kenichi Handa @ 2008-02-28 16:44 ` Stefan Monnier 0 siblings, 0 replies; 15+ messages in thread From: Stefan Monnier @ 2008-02-28 16:44 UTC (permalink / raw) To: Kenichi Handa; +Cc: lekktu, rms, emacs-devel >> Hmm.. I'm confused. The auto-composed property is boolean, so at least >> the auto-composition-mode code should only run once and should hence >> generate a `composition' property value that does not depend on the >> font used. >> Maybe what you're saying is that this `composition' property is later >> changed by the redisplay code and this can be redone if the same text >> gets displayed with another font? > Yes. I see. So this is not directly related to the auto-composition-mode. It can appear just as well with composition properties applied manually. >> > By the way, I think the slowness is mainly because the >> What slowness? > Slowness of calculating composition properties. I'm not sure whether by "calculating composition properties" you're talking about the work done by auto-composition-mode to add `composition' text properties where necessary, of the work done by the redisplay to compile those properties into some other representation (which I'd propose we call "compilation" of composition properties). Also, I still don't know what slowness you're talking about: in which circumstance is it slow? >> > property generation is done by Lisp code through the >> > function in composition-function-table and that involves >> > generating many Lisp objects. >> By the way, it might be good to replace the composition-function-table >> (which is a char-table that maps chars to regexps and then to code) with >> a lex-style FSM. Such a thing would also be useful for syntax-tables to >> be able to deal with multi-char lexemes (like "begin" and "end"). > Does FSM stands for Finit State Machine? Yes, I meant a deterministic finite state automaton (DFA). > Currently those regexps are very simple, and just an alist > (((FROM-CHAR . TO-CHAR) FUNC) ...) will work. But, at the > moment, I'm not sure that such a simple specification works > for all scripts. For my application this won't be sufficient because I do things like map "lambda" to λ (for example). Of course, I could just catch "la" and then use FUNC to do the rest of the matching. > But, if we can't attach `auto-composed' and `composition' property to > a buffer, the requirement for the speed will be higher. We have to do > some experiment to check the performance. > Another idea is to have an alist of > (FRAME . INTERVAL-FOR-COMPOSITION) > for each buffer. Not sure how this would work for strings. Stefan ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Error during redisplay 2008-02-27 1:28 ` Kenichi Handa 2008-02-27 6:59 ` David Kastrup @ 2008-02-27 16:07 ` Richard Stallman 1 sibling, 0 replies; 15+ messages in thread From: Richard Stallman @ 2008-02-27 16:07 UTC (permalink / raw) To: Kenichi Handa; +Cc: lekktu, emacs-devel The current design requires to add `composition' property to a string to properly display the string if it contains, for instance, some of Indic characters, and to add `auto-composed' property to avoid the repeated generation of `composition' property. It seems unclean to modify a string just because it gets used for redisplay. We do that for fontification, but that's an explicit add-on feature which is not part of mere correct display of some text. What happens with a read-only buffer? Does auto-composition modify the read-only buffer, or does the text display wrong? If mode-line-format has not been modified, I think it doesn't contain any characters that require composition (except for the case that we support such ligatures as "Fi" in the future). One way is to check if the string contains any such characters, and if not, avoid any composition processing. As the string tends to be short, doing that check repeatedly will not be that inefficient. That sounds like a good fix for this case, but it may not fix the whole problem. > If they SHOULD have these properties, probably we should make sure they have > these properties from the start, or from an early point in building Emacs. That's impossible. How to compose them depends on which font to use. Does this mean that redisplaying with different fonts will keep changing the composition properties in one string back and forth between different values? ^ permalink raw reply [flat|nested] 15+ messages in thread
* Error during redisplay 2008-02-24 2:56 Error during redisplay Juanma Barranquero 2008-02-26 1:48 ` Juanma Barranquero @ 2008-02-27 3:15 ` Bob Rogers 1 sibling, 0 replies; 15+ messages in thread From: Bob Rogers @ 2008-02-27 3:15 UTC (permalink / raw) To: Juanma Barranquero; +Cc: Emacs Devel From: "Juanma Barranquero" <lekktu@gmail.com> Date: Sun, 24 Feb 2008 03:56:36 +0100 emacs -q --eval '(progn (ielm) (pop-to-buffer "*Messages*"))' => "Error during redisplay: (error Attempt to modify read-only object)" Juanma I have a simpler way to reproduce what looks like the same problem: 1. emacs -Q 2. M-x shell RET 3. C-x C-b It appears that, for the *shell* buffer, mode-line-process is initialized to ":%s" in "define-derived-mode comint-mode" (comint.el line 622), and this particular value is what format-mode-line (called from list-buffers-noselect, buff-menu.el line 751) is complaining about. But I'm not sure how to debug it further. -- Bob Rogers http://rgrjr.dyndns.org/ ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2008-02-28 16:44 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-02-24 2:56 Error during redisplay Juanma Barranquero 2008-02-26 1:48 ` Juanma Barranquero 2008-02-26 4:18 ` Kenichi Handa 2008-02-26 4:55 ` Stefan Monnier 2008-02-26 23:46 ` Richard Stallman 2008-02-27 1:28 ` Kenichi Handa 2008-02-27 6:59 ` David Kastrup 2008-02-27 8:04 ` Kenichi Handa 2008-02-27 8:34 ` David Kastrup 2008-02-27 16:08 ` Richard Stallman 2008-02-27 16:06 ` Stefan Monnier 2008-02-28 6:36 ` Kenichi Handa 2008-02-28 16:44 ` Stefan Monnier 2008-02-27 16:07 ` Richard Stallman 2008-02-27 3:15 ` Bob Rogers
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).