* frame-local variables weirdness @ 2006-12-05 13:41 Juanma Barranquero 2006-12-08 2:28 ` Juanma Barranquero ` (2 more replies) 0 siblings, 3 replies; 67+ messages in thread From: Juanma Barranquero @ 2006-12-05 13:41 UTC (permalink / raw) After making a variable frame-local, and then buffer-local (with `make-variable-buffer-local', not `make-local-variable') it is not possible to set a buffer-local value for the variable: ELISP> (setq foo 'default) default ELISP> (make-variable-frame-local 'foo) foo ELISP> (modify-frame-parameters nil '((foo . frame))) nil ELISP> foo frame ELISP> (make-variable-buffer-local 'foo) foo ELISP> (setq foo 'bug) bug ELISP> foo bug ELISP> (frame-parameter nil 'foo) bug ELISP> (local-variable-p 'foo) nil However, that doesn't happen if we first make it buffer-local, and then frame-local: ELISP> (setq bar 'default) default ELISP> (make-variable-buffer-local 'bar) bar ELISP> (setq bar 'buffer) buffer ELISP> (local-variable-p 'bar) t ELISP> (make-variable-frame-local 'bar) bar ELISP> (modify-frame-parameters nil '((bar . frame))) nil ELISP> bar buffer ELISP> (kill-local-variable 'bar) bar ELISP> bar frame BTW, is there a way to know when a variable is frame local? `frame-parameter' is not enough (it could be a frame parameter and yet not a frame local variable). /L/e/k/t/u ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2006-12-05 13:41 frame-local variables weirdness Juanma Barranquero @ 2006-12-08 2:28 ` Juanma Barranquero 2006-12-09 1:26 ` Richard Stallman 2007-10-11 9:42 ` Juanma Barranquero 2006-12-09 14:24 ` Juanma Barranquero 2006-12-11 14:59 ` Richard Stallman 2 siblings, 2 replies; 67+ messages in thread From: Juanma Barranquero @ 2006-12-08 2:28 UTC (permalink / raw) I've simplified the test. Apparently, getting the value of a frame-local variable negatively affects whether the variable will afterwards be able to turn automatically buffer-local. (defun test (sym bug) (set sym 'default) (make-variable-frame-local sym) (modify-frame-parameters nil (list (cons sym 'frame))) (when bug ;; Getting the value of sym changes the result (symbol-value sym)) (make-variable-buffer-local sym) (set sym 'local) (list (local-variable-p sym) ;; should be t (symbol-value sym) ;; should be 'local (frame-parameter nil sym))) ;; should be 'frame Note that passing t to the BUG argument only changes one thing: that (symbol-value sym) is run. (test 'foo nil) => (t local frame) (test 'bar t) => (nil local local) BTW, is there any easy way to remove a frame parameter? Testing this bug is a PITA because you've got to use different symbols each time... /L/e/k/t/u ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2006-12-08 2:28 ` Juanma Barranquero @ 2006-12-09 1:26 ` Richard Stallman 2006-12-09 14:11 ` Juanma Barranquero 2007-10-11 9:42 ` Juanma Barranquero 1 sibling, 1 reply; 67+ messages in thread From: Richard Stallman @ 2006-12-09 1:26 UTC (permalink / raw) Cc: emacs-devel I don't think that Emacs has any way to cancel what make-variable-frame-local does. We never tried to implement one. Likewise there is no way to cancel what make-variable-buffer-local does. I am not surprised that confusion happens if you try doing both to the same variable, because they are conflicting states. I don't think we should try to change this now. ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2006-12-09 1:26 ` Richard Stallman @ 2006-12-09 14:11 ` Juanma Barranquero 2006-12-10 4:24 ` Richard Stallman 0 siblings, 1 reply; 67+ messages in thread From: Juanma Barranquero @ 2006-12-09 14:11 UTC (permalink / raw) Cc: emacs-devel On 12/9/06, Richard Stallman <rms@gnu.org> wrote: > I don't think that Emacs has any way to cancel what > make-variable-frame-local does. We never tried to implement one. I was asking for a way to remove a frame parameter. I don't see any remove-frame-parameter, and `modify-frame-parameters' can add and modify values, but not remove them, IIUC. > I am not surprised that confusion happens if you try doing both > to the same variable, because they are conflicting states. They should not be conflicting. The docstring of `make-variable-frame-local' says: "Buffer-local bindings take precedence over frame-local bindings." I would expect that, after (make-variable-frame-local var) (make-variable-buffer-local var) any (set var VALUE) would set a buffer-local value. > I don't think we should try to change this now. It is a bug nonetheless. We should take note somewhere. /L/e/k/t/u ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2006-12-09 14:11 ` Juanma Barranquero @ 2006-12-10 4:24 ` Richard Stallman 2006-12-10 12:58 ` Juanma Barranquero 0 siblings, 1 reply; 67+ messages in thread From: Richard Stallman @ 2006-12-10 4:24 UTC (permalink / raw) Cc: emacs-devel I was asking for a way to remove a frame parameter. I don't see any remove-frame-parameter, and `modify-frame-parameters' can add and modify values, but not remove them, IIUC. That seems like something we can add now if you really need it. However, someone needs to check carefully that it interacts correctly with the local binding mechanism. ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2006-12-10 4:24 ` Richard Stallman @ 2006-12-10 12:58 ` Juanma Barranquero 0 siblings, 0 replies; 67+ messages in thread From: Juanma Barranquero @ 2006-12-10 12:58 UTC (permalink / raw) Cc: emacs-devel On 12/10/06, Richard Stallman <rms@gnu.org> wrote: > That seems like something we can add now if you really need it. No, I don't need it right now. But I think we should revisit the issue of frame-local variables post-22.1; as it stands, they are odd and seem a bit half-cooked. For example, without remove-frame-parameter there's no easy way to remove a frame-local binding once created. > However, someone needs to check carefully that it interacts > correctly with the local binding mechanism. Yes. That's why I agree it's better to leave the issue for now, even if there are real (though obscure) bugs. /L/e/k/t/u ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2006-12-08 2:28 ` Juanma Barranquero 2006-12-09 1:26 ` Richard Stallman @ 2007-10-11 9:42 ` Juanma Barranquero 2007-10-11 14:21 ` Stefan Monnier 2007-10-12 15:59 ` Richard Stallman 1 sibling, 2 replies; 67+ messages in thread From: Juanma Barranquero @ 2007-10-11 9:42 UTC (permalink / raw) To: Emacs Devel Another bug report from the pre-22.1 past. This one is an interaction between frame-local and buffer-local variables. (defun test (sym bug) ;; Default (global) value for the symbol (set sym 'default) (make-variable-frame-local sym) ;; Frame-local value (modify-frame-parameters nil (list (cons sym 'frame))) (when bug ;; Getting the value of sym changes the result (symbol-value sym)) ;; Buffer-local value (make-variable-buffer-local sym) (set sym 'local) ;; Now let's get back the local values (list (local-variable-p sym) ;; should be t (symbol-value sym) ;; should be 'local (frame-parameter nil sym))) ;; should be 'frame Note that passing t to the BUG argument only changes one thing: that (symbol-value sym) is run. (test 'foo nil) => (t local frame) ;; correct (test 'bar t) => (nil local local) ;; incorrect Richard proposed the attached patch, with fixes the test case but causes other problems. Juanma Index: src/data.c =================================================================== RCS file: /sources/emacs/emacs/src/data.c,v retrieving revision 1.278 diff -u -2 -r1.278 data.c --- src/data.c 10 Sep 2007 09:41:44 -0000 1.278 +++ src/data.c 11 Oct 2007 09:30:16 -0000 @@ -1238,7 +1238,8 @@ || (XBUFFER_LOCAL_VALUE (valcontents)->check_frame && !EQ (selected_frame, XBUFFER_LOCAL_VALUE (valcontents)->frame)) + /* After make-variable-buffer-local, if we haven't got a + buffer-local binding in place, we need to make one. */ || (BUFFER_LOCAL_VALUEP (valcontents) - && EQ (XCAR (current_alist_element), - current_alist_element))) + && ! XBUFFER_LOCAL_VALUE (valcontents)->found_for_buffer)) { /* The currently loaded binding is not necessarily valid. ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-11 9:42 ` Juanma Barranquero @ 2007-10-11 14:21 ` Stefan Monnier 2007-10-11 14:37 ` Juanma Barranquero 2007-10-12 15:59 ` Richard Stallman 1 sibling, 1 reply; 67+ messages in thread From: Stefan Monnier @ 2007-10-11 14:21 UTC (permalink / raw) To: Juanma Barranquero; +Cc: Emacs Devel > Another bug report from the pre-22.1 past. > This one is an interaction between frame-local and buffer-local variables. > (defun test (sym bug) > ;; Default (global) value for the symbol > (set sym 'default) > (make-variable-frame-local sym) > ;; Frame-local value > (modify-frame-parameters nil (list (cons sym 'frame))) > (when bug > ;; Getting the value of sym changes the result > (symbol-value sym)) > ;; Buffer-local value > (make-variable-buffer-local sym) > (set sym 'local) > ;; Now let's get back the local values > (list (local-variable-p sym) ;; should be t > (symbol-value sym) ;; should be 'local > (frame-parameter nil sym))) ;; should be 'frame > Note that passing t to the BUG argument only changes one thing: that > (symbol-value sym) is run. > (test 'foo nil) => (t local frame) ;; correct > (test 'bar t) => (nil local local) ;; incorrect > Richard proposed the attached patch, with fixes the test case but > causes other problems. I'd much rather disallow variables that are both buffer-local and frame-local. What is the use-case? Stefan > Index: src/data.c > =================================================================== > RCS file: /sources/emacs/emacs/src/data.c,v > retrieving revision 1.278 > diff -u -2 -r1.278 data.c > --- src/data.c 10 Sep 2007 09:41:44 -0000 1.278 > +++ src/data.c 11 Oct 2007 09:30:16 -0000 > @@ -1238,7 +1238,8 @@ > || (XBUFFER_LOCAL_VALUE (valcontents)->check_frame > && !EQ (selected_frame, XBUFFER_LOCAL_VALUE (valcontents)->frame)) > + /* After make-variable-buffer-local, if we haven't got a > + buffer-local binding in place, we need to make one. */ > || (BUFFER_LOCAL_VALUEP (valcontents) > - && EQ (XCAR (current_alist_element), > - current_alist_element))) > + && ! XBUFFER_LOCAL_VALUE (valcontents)->found_for_buffer)) > { > /* The currently loaded binding is not necessarily valid. > _______________________________________________ > Emacs-devel mailing list > Emacs-devel@gnu.org > http://lists.gnu.org/mailman/listinfo/emacs-devel ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-11 14:21 ` Stefan Monnier @ 2007-10-11 14:37 ` Juanma Barranquero 2007-10-11 17:33 ` Stefan Monnier 0 siblings, 1 reply; 67+ messages in thread From: Juanma Barranquero @ 2007-10-11 14:37 UTC (permalink / raw) To: Stefan Monnier; +Cc: Emacs Devel On 10/11/07, Stefan Monnier <monnier@iro.umontreal.ca> wrote: > I'd much rather disallow variables that are both buffer-local and frame-local. I think the problem is between frame-local and automatically buffer-local variables, not just buffer-local ones. > What is the use-case? I don't have a use case, and I don't really care one way or the other, but they have been documented to work for a long time. From "Frame-Local Variables": Buffer-local bindings take precedence over frame-local bindings. Thus, consider a variable `foo': if the current buffer has a buffer-local binding for `foo', that binding is active; otherwise, if the selected frame has a frame-local binding for `foo', that binding is active; otherwise, the default binding of `foo' is active. And they do work, if swap_in_symval_forwarding is not called before `make-variable-buffer-local'. How do you propose disallowing them? By fixing the documentation, or are you saying that setting a variable to be both will throw an error? Juanma ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-11 14:37 ` Juanma Barranquero @ 2007-10-11 17:33 ` Stefan Monnier 2007-10-11 19:00 ` Juanma Barranquero 0 siblings, 1 reply; 67+ messages in thread From: Stefan Monnier @ 2007-10-11 17:33 UTC (permalink / raw) To: Juanma Barranquero; +Cc: Emacs Devel >> I'd much rather disallow variables that are both buffer-local and >> frame-local. > I think the problem is between frame-local and automatically > buffer-local variables, not just buffer-local ones. I suggest to disallow mixing even with the weaker "buffer-local" flavor. >> What is the use-case? > I don't have a use case, and I don't really care one way or the other, > but they have been documented to work for a long time. From > "Frame-Local Variables": > Buffer-local bindings take precedence over frame-local bindings. > Thus, consider a variable `foo': if the current buffer has a > buffer-local binding for `foo', that binding is active; otherwise, if > the selected frame has a frame-local binding for `foo', that binding is > active; otherwise, the default binding of `foo' is active. > And they do work, if swap_in_symval_forwarding is not called before > `make-variable-buffer-local'. > How do you propose disallowing them? By fixing the documentation, or > are you saying that setting a variable to be both will throw an error? Signal an error when calling make-local-variable or make-variable-buffer-local if the variable is already frame-local, and signal an error in make-variable-frame-local if the variable has already been made buffer-local. Stefan "who'd even go as far as removing the notion of frame-local variables: the few uses of them could call frame-parameter explicitly just as easily" ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-11 17:33 ` Stefan Monnier @ 2007-10-11 19:00 ` Juanma Barranquero 0 siblings, 0 replies; 67+ messages in thread From: Juanma Barranquero @ 2007-10-11 19:00 UTC (permalink / raw) To: Stefan Monnier; +Cc: Emacs Devel On 10/11/07, Stefan Monnier <monnier@iro.umontreal.ca> wrote: > I suggest to disallow mixing even with the weaker "buffer-local" flavor. Aha. > Signal an error when calling make-local-variable or > make-variable-buffer-local if the variable is already frame-local, and > signal an error in make-variable-frame-local if the variable has already > been made buffer-local. OK. > Stefan "who'd even go as far as removing the notion of frame-local > variables: the few uses of them could call frame-parameter > explicitly just as easily" I think that's probably a good idea, assuming there's no much code out there which uses them. Juanma ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-11 9:42 ` Juanma Barranquero 2007-10-11 14:21 ` Stefan Monnier @ 2007-10-12 15:59 ` Richard Stallman 2007-10-12 16:33 ` Stefan Monnier 2007-10-12 16:41 ` Juanma Barranquero 1 sibling, 2 replies; 67+ messages in thread From: Richard Stallman @ 2007-10-12 15:59 UTC (permalink / raw) To: Juanma Barranquero; +Cc: emacs-devel Richard proposed the attached patch, with fixes the test case but causes other problems. What are those other problems? I could install that patch, so we can discover and fix the other problems. But if you have already seen them, let's debug them first. I'd much rather disallow variables that are both buffer-local and frame-local. We should not cavalierly disallow the use of features in combination just because there is a bug. Have you tried to fix those other problems? If not, you don't know that it is hard to do so. ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-12 15:59 ` Richard Stallman @ 2007-10-12 16:33 ` Stefan Monnier 2007-10-14 16:29 ` Richard Stallman 2007-10-12 16:41 ` Juanma Barranquero 1 sibling, 1 reply; 67+ messages in thread From: Stefan Monnier @ 2007-10-12 16:33 UTC (permalink / raw) To: rms; +Cc: Juanma Barranquero, emacs-devel > I'd much rather disallow variables that are both buffer-local and > frame-local. > We should not cavalierly disallow the use of features in combination > just because there is a bug. Have you tried to fix those other > problems? If not, you don't know that it is hard to do so. The interaction of buffer-local and let-bound variables is already tricky (and has suffered from several bugs over the years). When we add frame-local variables to that, it gets yet nastier so I think we should only support such a feature if there's a clear need for it. I don't see it. Stefan PS: As a matter of fact, I don't even see a need for frame-local variables at all: they *are* used currently, but only because they exist. The potential benefits of using frame-local variables rather than explicitly using `frame-parameter' are: - faster access thanks to caching. - ability to influence the behavior of code which didn't expect the variable to be frame-local. None of the uses I can see benefit from those. They'd be just as happy using explicit calls to frame-parameter, which would also simplify the specbind and Fsymbol_value code (a piece of code that's pretty complex as it stands), thus streamlining a heavily used code (especially compared to the rarely used (mis)feature)). ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-12 16:33 ` Stefan Monnier @ 2007-10-14 16:29 ` Richard Stallman 2007-10-14 17:13 ` Juanma Barranquero 2007-10-14 17:51 ` David Kastrup 0 siblings, 2 replies; 67+ messages in thread From: Richard Stallman @ 2007-10-14 16:29 UTC (permalink / raw) To: Stefan Monnier; +Cc: lekktu, emacs-devel PS: As a matter of fact, I don't even see a need for frame-local variables at all: they *are* used currently, but only because they exist. I see that currently they are not used very much. However, I would not have added the feature merely because it made sense. I would only have done so if it solved a problem. I would expect there was some discussion at the time about reasons to add the feature. Can someone find that discussion and see what the motive was? ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-14 16:29 ` Richard Stallman @ 2007-10-14 17:13 ` Juanma Barranquero 2007-10-14 17:51 ` David Kastrup 1 sibling, 0 replies; 67+ messages in thread From: Juanma Barranquero @ 2007-10-14 17:13 UTC (permalink / raw) To: rms; +Cc: Stefan Monnier, emacs-devel On 10/14/07, Richard Stallman <rms@gnu.org> wrote: > I see that currently they are not used very much. There are four elisp packages that use it currently on the trunk, and one of them is bs.el, where I added a frame-local variable but I will surely remove it because I now think it is the wrong fix for the problem I was solving. > I would expect there was some > discussion at the time about reasons to add the feature. Can someone find > that discussion and see what the motive was? That was over nine and a half years ago. The list archives of that time are not public, so it's a task for someone who was there at that moment. Juanma ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-14 16:29 ` Richard Stallman 2007-10-14 17:13 ` Juanma Barranquero @ 2007-10-14 17:51 ` David Kastrup 2007-10-15 16:04 ` Richard Stallman 1 sibling, 1 reply; 67+ messages in thread From: David Kastrup @ 2007-10-14 17:51 UTC (permalink / raw) To: rms; +Cc: lekktu, Stefan Monnier, emacs-devel Richard Stallman <rms@gnu.org> writes: > PS: As a matter of fact, I don't even see a need for frame-local variables > at all: they *are* used currently, but only because they exist. > > I see that currently they are not used very much. However, I would > not have added the feature merely because it made sense. I would > only have done so if it solved a problem. I would expect there was > some discussion at the time about reasons to add the feature. Can > someone find that discussion and see what the motive was? Maybe it is something better achieved by terminal-local variables. Those were not available at that time. Just a guess. -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-14 17:51 ` David Kastrup @ 2007-10-15 16:04 ` Richard Stallman 2007-10-15 17:50 ` Stefan Monnier 0 siblings, 1 reply; 67+ messages in thread From: Richard Stallman @ 2007-10-15 16:04 UTC (permalink / raw) To: David Kastrup; +Cc: lekktu, monnier, emacs-devel Maybe it is something better achieved by terminal-local variables. Those were not available at that time. Just a guess. Terminal-local variables were introduced in 1995, before frame-local variables. > I would expect there was some > discussion at the time about reasons to add the feature. Can someone find > that discussion and see what the motive was? That was over nine and a half years ago. The list archives of that time are not public, so it's a task for someone who was there at that moment. I found the discussion. I see that someone asked for a feature to display frame-specific data in the mode line, and I decided this general feature (with which the job could be done) was cleaner and simpler than a specific feature which could do only that one job. Since it isn't very useful, we can take it out if we cannot fix it. But first let's try to fix it. ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-15 16:04 ` Richard Stallman @ 2007-10-15 17:50 ` Stefan Monnier 2007-10-17 17:29 ` Stephen J. Turnbull 2007-10-17 23:53 ` Stefan Monnier 0 siblings, 2 replies; 67+ messages in thread From: Stefan Monnier @ 2007-10-15 17:50 UTC (permalink / raw) To: rms; +Cc: lekktu, emacs-devel > I found the discussion. I see that someone asked for a feature to > display frame-specific data in the mode line, and I decided this > general feature (with which the job could be done) was cleaner and > simpler than a specific feature which could do only that one job. That's a reasonable request, and indeed there are situations where we can lookup a variable but we cannot call a function which could potentially run arbitrary code. Maybe that's enough to keep the feature. > Since it isn't very useful, we can take it out if we cannot fix it. > But first let's try to fix it. But the above request does not mean we need to be able to mix&match let-bindings, buffer-local, and frame-local variables. If we disallowed the buffer-local&frame-local variables, the problem would disappear. This part of the language is already complex enough as it stands. Stefan ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-15 17:50 ` Stefan Monnier @ 2007-10-17 17:29 ` Stephen J. Turnbull 2007-10-17 18:05 ` Stefan Monnier 2007-10-17 21:03 ` David Kastrup 2007-10-17 23:53 ` Stefan Monnier 1 sibling, 2 replies; 67+ messages in thread From: Stephen J. Turnbull @ 2007-10-17 17:29 UTC (permalink / raw) To: Stefan Monnier; +Cc: lekktu, rms, emacs-devel FWIW, let me remind you that XEmacs has specifiers, which allow rather flexible mix and match of buffer-local, window-local, and frame-local properties. The point is that specifiers have a separate API, no unmarked magic. This has been a workable compromise for me in those cases where I want to use it (eg, faces, where specifiers implement flexibility very similar to Emacs's defface; XEmacs's faces are implemented as a wrapper around a set of specifiers containing display properties). There are a few other cases where I've enjoyed the flexibility (usually controlling behavior of functions associated with active regions in a display, and in controlling display elements such as toolbars, tabs, and scrollbars). David Kastrup may have an informative opinion, since he found XEmacs's glyph (~ Emacs image) API, uh, "annoying" (and even its author admits it's probably excessively complex and detailed). But I'm not sure whether he objects to the idea of such an API, or merely to XEmacs's implementation in glyphs. On 10/15/07, Stefan Monnier <monnier@iro.umontreal.ca> wrote: > > I found the discussion. I see that someone asked for a feature to > > display frame-specific data in the mode line, and I decided this > > general feature (with which the job could be done) was cleaner and > > simpler than a specific feature which could do only that one job. > > That's a reasonable request, and indeed there are situations where we can > lookup a variable but we cannot call a function which could potentially run > arbitrary code. > Maybe that's enough to keep the feature. > > > Since it isn't very useful, we can take it out if we cannot fix it. > > But first let's try to fix it. > > But the above request does not mean we need to be able to mix&match > let-bindings, buffer-local, and frame-local variables. If we disallowed the > buffer-local&frame-local variables, the problem would disappear. This part > of the language is already complex enough as it stands. > > > Stefan > > > _______________________________________________ > Emacs-devel mailing list > Emacs-devel@gnu.org > http://lists.gnu.org/mailman/listinfo/emacs-devel > ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-17 17:29 ` Stephen J. Turnbull @ 2007-10-17 18:05 ` Stefan Monnier 2007-10-18 5:03 ` Richard Stallman 2007-10-17 21:03 ` David Kastrup 1 sibling, 1 reply; 67+ messages in thread From: Stefan Monnier @ 2007-10-17 18:05 UTC (permalink / raw) To: Stephen J. Turnbull; +Cc: lekktu, rms, emacs-devel > FWIW, let me remind you that XEmacs has specifiers, which allow rather > flexible mix and match of buffer-local, window-local, and frame-local > properties. > The point is that specifiers have a separate API, no unmarked magic. Yes, I don't know much about specifiers, but indeed, I'd much rather have something different than just "variables". E.g. one of the benefits of "frame-local" variables over using `frame-parameter' is that the user-code doesn't have to know that the data is local to frames. So if we later decide to make it terminal-local or keyboard-local, or window-local the same code will work fine. So using a new function (get-local-data SYMBOL) we could take care of such problems. I suspect that is indeed what XEmacs's "specifiers" are for. Stefan ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-17 18:05 ` Stefan Monnier @ 2007-10-18 5:03 ` Richard Stallman 2007-10-18 13:53 ` Stefan Monnier 0 siblings, 1 reply; 67+ messages in thread From: Richard Stallman @ 2007-10-18 5:03 UTC (permalink / raw) To: Stefan Monnier; +Cc: lekktu, stephen, emacs-devel So using a new function (get-local-data SYMBOL) we could take care of such problems. I don't follow. What would that function do? ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-18 5:03 ` Richard Stallman @ 2007-10-18 13:53 ` Stefan Monnier 2007-10-19 5:40 ` Richard Stallman 0 siblings, 1 reply; 67+ messages in thread From: Stefan Monnier @ 2007-10-18 13:53 UTC (permalink / raw) To: rms; +Cc: lekktu, stephen, emacs-devel > So using a new function (get-local-data SYMBOL) we could take care of > such problems. > I don't follow. What would that function do? It would behave similarly to `symbol-value' now. The main difference is that it wouldn't be implicitly used just by using the SYMBOL because it wouldn't be considered as a normal variable. The main implication is that it wouldn't need to worry about interacting with let-binding and it wouldn't need to worry about being fast either. So we can use a much simpler implementation, less buggy, and much more maintainable and extensible (we could probably easily add any kind of localness we want: window-local, point-local, time-local, you name it). Stefan ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-18 13:53 ` Stefan Monnier @ 2007-10-19 5:40 ` Richard Stallman 2007-10-19 13:56 ` Stefan Monnier 0 siblings, 1 reply; 67+ messages in thread From: Richard Stallman @ 2007-10-19 5:40 UTC (permalink / raw) To: Stefan Monnier; +Cc: lekktu, stephen, emacs-devel > I don't follow. What would that function do? It would behave similarly to `symbol-value' now. I understand that, though it is rather general. The main difference is that it wouldn't be implicitly used just by using the SYMBOL because it wouldn't be considered as a normal variable. What wouldn't be considered as a normal variable? I am lost here. It sounds like a step backwards, though. If we can make the function work right, we can make it work right for variable values. ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-19 5:40 ` Richard Stallman @ 2007-10-19 13:56 ` Stefan Monnier 2007-10-20 3:30 ` Richard Stallman 0 siblings, 1 reply; 67+ messages in thread From: Stefan Monnier @ 2007-10-19 13:56 UTC (permalink / raw) To: rms; +Cc: lekktu, stephen, emacs-devel >> I don't follow. What would that function do? > It would behave similarly to `symbol-value' now. > I understand that, though it is rather general. > The main difference is that it wouldn't be implicitly used just by > using the SYMBOL because it wouldn't be considered as > a normal variable. > What wouldn't be considered as a normal variable? > I am lost here. I'm suggesting we introduce a new concept which we could call "specifier" or "localizable quasi variable". We could create them with: (defconst new-interprogram-cut-function (make-specifier 'x-select-text)) Now new-interprogram-cut-function is a normal global variable (actually a constant: we will never `setq' it). Its value is a "specifier". Then we get get the value of this specifier with: (specifier-value new-interprogram-cut-function) which would return `x-select-text' because it's currently its only value. But we could later on change its value on a per-frame basis via maybe: (specifier-set new-interprogram-cut-function <some-frame> 'my-fun) so that the `specifier-value' function returns `my-fun' if the selected frame is <some-frame> and `x-select-text' otherwise. > It sounds like a step backwards, though. If we can make the function work > right, we can make it work right for variable values. Again, because this is not a variable, it does not have to be optimized in the same way and it does not have to interact with let-binding so making it work correctly is a *lot* easier. But similarly to variables, we can make sure that `specifier-value' does not run any elisp code (or even allocate), so it can easily be used in places where full elisp is undesirable (e.g. the mode-line-format, although nowadays this accepts full elisp anyway), which was the original motivation for adding frame-local variables. Stefan ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-19 13:56 ` Stefan Monnier @ 2007-10-20 3:30 ` Richard Stallman 2007-10-20 13:15 ` Stefan Monnier 0 siblings, 1 reply; 67+ messages in thread From: Richard Stallman @ 2007-10-20 3:30 UTC (permalink / raw) To: Stefan Monnier; +Cc: lekktu, stephen, emacs-devel I'm suggesting we introduce a new concept which we could call "specifier" or "localizable quasi variable". We could create them with: (defconst new-interprogram-cut-function (make-specifier 'x-select-text)) Now new-interprogram-cut-function is a normal global variable (actually a constant: we will never `setq' it). Its value is a "specifier". Then we get get the value of this specifier with: (specifier-value new-interprogram-cut-function) What we have now, where the variable itself has different bindings in different contexts, is much cleaner. ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-20 3:30 ` Richard Stallman @ 2007-10-20 13:15 ` Stefan Monnier 2007-10-21 7:25 ` Richard Stallman 0 siblings, 1 reply; 67+ messages in thread From: Stefan Monnier @ 2007-10-20 13:15 UTC (permalink / raw) To: rms; +Cc: lekktu, stephen, emacs-devel > I'm suggesting we introduce a new concept which we could call "specifier" > or "localizable quasi variable". We could create them with: > (defconst new-interprogram-cut-function > (make-specifier 'x-select-text)) > Now new-interprogram-cut-function is a normal global variable (actually > a constant: we will never `setq' it). Its value is a "specifier". > Then we get get the value of this specifier with: > (specifier-value new-interprogram-cut-function) > What we have now, where the variable itself has different bindings in > different contexts, is much cleaner. Could you expand on what you think makes it cleaner? The above also gives it different bindings in different contexts: the only difference is that it's not a variable any more, so you can't let-bind it. Stefan ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-20 13:15 ` Stefan Monnier @ 2007-10-21 7:25 ` Richard Stallman 2007-10-21 14:24 ` Stefan Monnier 0 siblings, 1 reply; 67+ messages in thread From: Richard Stallman @ 2007-10-21 7:25 UTC (permalink / raw) To: Stefan Monnier; +Cc: lekktu, stephen, emacs-devel Could you expand on what you think makes it cleaner? The specifier approach requires new functions just to look at or set the value in the current binding. It also has the big limitation that all references to the value must be specially written to access a specifier. For these reasons I have decided not to go that way. ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-21 7:25 ` Richard Stallman @ 2007-10-21 14:24 ` Stefan Monnier 2007-10-21 14:56 ` Miles Bader 2007-10-22 9:01 ` Richard Stallman 0 siblings, 2 replies; 67+ messages in thread From: Stefan Monnier @ 2007-10-21 14:24 UTC (permalink / raw) To: rms; +Cc: lekktu, stephen, emacs-devel > Could you expand on what you think makes it cleaner? > The specifier approach requires new functions just to look at or > set the value in the current binding. You mean you have to use `specifier-set' and `specifier-value' instead of `set' and `symbol-value'? Well, yes. Doesn't seem like a big deal to me. > It also has the big limitation that all references to the value must be > specially written to access a specifier. Right, just like right now they're specifically written to access a variable. > For these reasons I have decided not to go that way. Too bad, Stefan ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-21 14:24 ` Stefan Monnier @ 2007-10-21 14:56 ` Miles Bader 2007-10-21 19:20 ` Stefan Monnier 2007-10-22 9:01 ` Richard Stallman 1 sibling, 1 reply; 67+ messages in thread From: Miles Bader @ 2007-10-21 14:56 UTC (permalink / raw) To: Stefan Monnier; +Cc: lekktu, stephen, rms, emacs-devel Stefan Monnier <monnier@iro.umontreal.ca> writes: >> It also has the big limitation that all references to the value must be >> specially written to access a specifier. > > Right, just like right now they're specifically written to access a variable. Er, well, isn't the point that that code is in general written to use variables, so that's _not_ a burden? The nice thing about these magic variables is that you can make something frame specific even though the designer of the code didn't think of that (he just used an ordinary global variable). If frame(etc)-specific values needed special syntax, either this would cease to be possible, or else a lot of code would needed to be changed, a lot of code authors would need to have their habits changed, and a lot of code would be come a fair bit uglier... -Miles -- "Don't just question authority, Don't forget to question me." -- Jello Biafra ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-21 14:56 ` Miles Bader @ 2007-10-21 19:20 ` Stefan Monnier 2007-10-22 2:26 ` Miles Bader 0 siblings, 1 reply; 67+ messages in thread From: Stefan Monnier @ 2007-10-21 19:20 UTC (permalink / raw) To: Miles Bader; +Cc: lekktu, stephen, rms, emacs-devel >>> It also has the big limitation that all references to the value must be >>> specially written to access a specifier. >> Right, just like right now they're specifically written to access a variable. > Er, well, isn't the point that that code is in general written to use > variables, so that's _not_ a burden? > The nice thing about these magic variables is that you can make > something frame specific even though the designer of the code didn't > think of that (he just used an ordinary global variable). Agreed. In this sense, specifiers are halfway between frame-local variables and using frame-parameter: like using frame-parameter they do require the programmer to expect that the variable is going to be made local to something, but like frame-local variables they do not require the programmer to know to what kind of thing it's going to be made local (it can be made buffer-local, frame-local, window-local, buffer-position-local, ... without changes to the code). Maybe a half-way between variables and specifiers would be to declare some variables as "specifiers": such variables can be read in the usual way (via symbol-value) and we could probably arange for setq to do something sensible as well, but let would be ruled out. Basically, this new proposal is trying to focus on the one issue which I believe is key: mixing object-local bindings with let-bindings is a source of pain and bugs. Stefan ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-21 19:20 ` Stefan Monnier @ 2007-10-22 2:26 ` Miles Bader 0 siblings, 0 replies; 67+ messages in thread From: Miles Bader @ 2007-10-22 2:26 UTC (permalink / raw) To: emacs-devel Stefan Monnier <monnier@iro.umontreal.ca> writes: > Agreed. In this sense, specifiers are halfway between frame-local variables > and using frame-parameter: like using frame-parameter they do require the > programmer to expect that the variable is going to be made local to > something, but like frame-local variables they do not require the programmer > to know to what kind of thing it's going to be made local (it can be made > buffer-local, frame-local, window-local, buffer-position-local, ... without > changes to the code). That's not "halfway" though. There's a huge leap from "bog standard global variable" to "special variable-like-form intended to accessed in a context-dependent way". I think most programmers will either not be aware of the issue, or will be reluctant to use such a special form in most cases (with good reason, if the result is less readable). In any case, the effect is the same, that the "availability" of variables for context-specific user customization of such a system will be much poorer than the current system. > Basically, this new proposal is trying to focus on the one issue which > I believe is key: mixing object-local bindings with let-bindings is a source > of pain and bugs. I don't really know the implementation details, so I can't really say. [Despite the fact that that elisp uses shallow binding, I still seem to assume deep binding in my mental model of how lisp variables work, and such mixed usage doesn't seem to be a problem for deep binding... :-] -Miles -- o The existentialist, not having a pillow, goes everywhere with the book by Sullivan, _I am going to spit on your graves_. ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-21 14:24 ` Stefan Monnier 2007-10-21 14:56 ` Miles Bader @ 2007-10-22 9:01 ` Richard Stallman 1 sibling, 0 replies; 67+ messages in thread From: Richard Stallman @ 2007-10-22 9:01 UTC (permalink / raw) To: Stefan Monnier; +Cc: lekktu, stephen, emacs-devel > The specifier approach requires new functions just to look at or > set the value in the current binding. You mean you have to use `specifier-set' and `specifier-value' instead of `set' and `symbol-value'? Well, yes. Doesn't seem like a big deal to me. It is an added inconvenience. > It also has the big limitation that all references to the value must be > specially written to access a specifier. Right, just like right now they're specifically written to access a variable. Accessing a variable is not "specifically written"; it is the normal thing to do in Emacs. I hope that this makes my decision clear, but in any case it is a firm decision. ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-17 17:29 ` Stephen J. Turnbull 2007-10-17 18:05 ` Stefan Monnier @ 2007-10-17 21:03 ` David Kastrup 2007-10-19 1:57 ` Stephen J. Turnbull 1 sibling, 1 reply; 67+ messages in thread From: David Kastrup @ 2007-10-17 21:03 UTC (permalink / raw) To: Stephen J. Turnbull; +Cc: lekktu, emacs-devel, Stefan Monnier, rms "Stephen J. Turnbull" <stephen@xemacs.org> writes: > FWIW, let me remind you that XEmacs has specifiers, which allow > rather flexible mix and match of buffer-local, window-local, and > frame-local properties. The point is that specifiers have a > separate API, no unmarked magic. And terminal-local and other stuff. > This has been a workable compromise for me in those cases where I > want to use it (eg, faces, where specifiers implement flexibility > very similar to Emacs's defface; XEmacs's faces are implemented as a > wrapper around a set of specifiers containing display properties). > There are a few other cases where I've enjoyed the flexibility > (usually controlling behavior of functions associated with active > regions in a display, and in controlling display elements such as > toolbars, tabs, and scrollbars). > > David Kastrup may have an informative opinion, since he found > XEmacs's glyph (~ Emacs image) API, uh, "annoying" (and even its > author admits it's probably excessively complex and detailed). But > I'm not sure whether he objects to the idea of such an API, or > merely to XEmacs's implementation in glyphs. You should use quote marks only around things you actually quote. I don't think I called them "annoying". I certainly was quite annoyed when I fought with understanding them, but my annoyance was more directed against their creators. "incomprehensible" would more likely be a word I would have used to describe them. My main problem with specifiers and locales and instantiators was (I am using the past tense here not because I have by now understood them, but because I have stopped investing any more time into them) that they more or less magically change from one form to another, and it is rather incomprehensible when they do which. I hear that the documentation is supposed to be more comprehensive by now, but the point is that the documentation needs to be (and is) all over the place. In contrast, the *-local variables of Emacs need just a single place in the manual to explain, giving all the _additional_ story while working like a normal bindings otherwise. And that is something which can be used and understood by non-magicians. It may be considered sort of amusing that the opaque frame/terminal variable mechanisms are used in the we-don't-want-opaque-data-structures Emacs and the all-internals-open specifiers in XEmacs. But the main problem in my book with the open XEmacs data structures actually is that there is no reasonably complete and actually employed API for accessing them. So one needs to acquire an understanding of the internal structure of them if one hopes to understand existing code, and mostly also for writing code of one's own. We have in preview-latex code like the following for XEmacs: ;;; [Courtesy Stephen J. Turnbull, with some modifications ;;; Message-ID: <87el9fglsj.fsf@tleepslib.sk.tsukuba.ac.jp> ;;; I could not have figured this out for the world] ;;; Hm, there really ought to be a way to get the spec that would be ;;; instantiated in a given domain (when preview-tb-icon (let ((tb (cdadar (or (specifier-spec-list default-toolbar (current-buffer)) (specifier-spec-list default-toolbar 'global))))) (unless (member preview-tb-icon tb) (set-specifier default-toolbar (append tb (list preview-tb-icon)) (current-buffer))))) There were actually quite a few more ugly examples with regard to images in earlier times, but I have rewritten the general functionality/API for the Emacs parts in order to make the worst XEmacs counterparts be cleaner. So basically my opinion is that one needs too many complex details in order to write or understand code involving specifiers. While the state of the documentation might have improved to a point where this information is no longer generally lacking or distributed across a maze of by-the-way entries, the main problem of the unavoidable complexity one needs to understand for doing simple tasks remains. -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-17 21:03 ` David Kastrup @ 2007-10-19 1:57 ` Stephen J. Turnbull 0 siblings, 0 replies; 67+ messages in thread From: Stephen J. Turnbull @ 2007-10-19 1:57 UTC (permalink / raw) To: David Kastrup; +Cc: lekktu, Stefan Monnier, rms, emacs-devel On 10/17/07, David Kastrup <dak@gnu.org> wrote: > "Stephen J. Turnbull" <stephen@xemacs.org> writes: > > David Kastrup may have an informative opinion, since he found > > XEmacs's glyph (~ Emacs image) API, uh, "annoying" (and even its > > author admits it's probably excessively complex and detailed). But > > I'm not sure whether he objects to the idea of such an API, or > > merely to XEmacs's implementation in glyphs. > > You should use quote marks only around things you actually quote. I > don't think I called them "annoying". Sorry. Quotation marks are generally used to mark variant usage of text, actual quotes being only a special case. Specifically, the `uh, "annoying"' form is quite commonly used to imply "the actual words he used are unrepeatable in polite company". > specifiers in XEmacs. But the main problem in my book with the open > XEmacs data structures actually is that there is no reasonably > complete and actually employed API for accessing them. So one needs > to acquire an understanding of the internal structure of them if one > hopes to understand existing code, and mostly also for writing code of > one's own. Mostly one doesn't. A buffer-local can be emulated by a specifier by using (set-specifier buffer-local-variable local-value (current-buffer)) to modify it, and accessing the current buffer's value with (specifier-instance buffer-local-variable) I don't recall why the arcane incantation I recommended to you was needed in your application. It may be that some version of specifier-instance would have been satisfactory but I didn't understand your need well enough to give a more precise answer. The situation is very similar to working with menus or Emacs-style keymaps. There are some conceptually simple tasks that the API makes unnecessarily hard to do. ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-15 17:50 ` Stefan Monnier 2007-10-17 17:29 ` Stephen J. Turnbull @ 2007-10-17 23:53 ` Stefan Monnier 2007-10-18 12:45 ` Juanma Barranquero ` (2 more replies) 1 sibling, 3 replies; 67+ messages in thread From: Stefan Monnier @ 2007-10-17 23:53 UTC (permalink / raw) To: rms; +Cc: lekktu, emacs-devel >> I found the discussion. I see that someone asked for a feature to >> display frame-specific data in the mode line, and I decided this >> general feature (with which the job could be done) was cleaner and >> simpler than a specific feature which could do only that one job. > That's a reasonable request, and indeed there are situations where we can > lookup a variable but we cannot call a function which could potentially run > arbitrary code. > Maybe that's enough to keep the feature. >> Since it isn't very useful, we can take it out if we cannot fix it. >> But first let's try to fix it. > But the above request does not mean we need to be able to mix&match > let-bindings, buffer-local, and frame-local variables. If we disallowed the > buffer-local&frame-local variables, the problem would disappear. This part > of the language is already complex enough as it stands. More specifically, I propose to change the manual to say that we cannot mix buffer-local and frame-local with a single variable (just like a variable cannot be both buffer-local and keyboard-local or keyboard-local and frame-local). This could come with the attached change in the code, which would fix the OP's problem by signalling the odd situation earlier. This would be installed on the 22 branch, since it's obviously safe. Stefan Index: data.c =================================================================== RCS file: /sources/emacs/emacs/src/data.c,v retrieving revision 1.280 diff -u -u -b -r1.280 data.c --- data.c 16 Oct 2007 15:42:58 -0000 1.280 +++ data.c 17 Oct 2007 23:47:34 -0000 @@ -1521,7 +1521,9 @@ variable = indirect_variable (variable); valcontents = SYMBOL_VALUE (variable); - if (EQ (variable, Qnil) || EQ (variable, Qt) || KBOARD_OBJFWDP (valcontents)) + if (XSYMBOL (variable)->constant || KBOARD_OBJFWDP (valcontents) + || (BUFFER_LOCAL_VALUEP (valcontents) + && XBUFFER_LOCAL_VALUE (valcontents)->check_frame)) error ("Symbol %s may not be buffer-local", SDATA (SYMBOL_NAME (variable))); if (BUFFER_OBJFWDP (valcontents)) @@ -1578,7 +1580,9 @@ variable = indirect_variable (variable); valcontents = SYMBOL_VALUE (variable); - if (EQ (variable, Qnil) || EQ (variable, Qt) || KBOARD_OBJFWDP (valcontents)) + if (XSYMBOL (variable)->constant || KBOARD_OBJFWDP (valcontents) + || (BUFFER_LOCAL_VALUEP (valcontents) + && XBUFFER_LOCAL_VALUE (valcontents)->check_frame)) error ("Symbol %s may not be buffer-local", SDATA (SYMBOL_NAME (variable))); if ((BUFFER_LOCAL_VALUEP (valcontents) @@ -1733,8 +1737,9 @@ variable = indirect_variable (variable); valcontents = SYMBOL_VALUE (variable); - if (EQ (variable, Qnil) || EQ (variable, Qt) || KBOARD_OBJFWDP (valcontents) - || BUFFER_OBJFWDP (valcontents)) + if (XSYMBOL (variable)->constant || KBOARD_OBJFWDP (valcontents) + || (BUFFER_LOCAL_VALUEP (valcontents) + && !XBUFFER_LOCAL_VALUE (valcontents)->check_frame)) error ("Symbol %s may not be frame-local", SDATA (SYMBOL_NAME (variable))); if (BUFFER_LOCAL_VALUEP (valcontents)) Diffs between working revision and workfile end here. ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-17 23:53 ` Stefan Monnier @ 2007-10-18 12:45 ` Juanma Barranquero 2007-10-18 13:38 ` Stefan Monnier 2007-10-19 17:42 ` Richard Stallman 2007-11-06 4:31 ` Chong Yidong 2 siblings, 1 reply; 67+ messages in thread From: Juanma Barranquero @ 2007-10-18 12:45 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-devel On 10/18/07, Stefan Monnier <monnier@iro.umontreal.ca> wrote: > I propose to change the manual to say that we cannot mix > buffer-local and frame-local with a single variable (just like a variable > cannot be both buffer-local and keyboard-local or keyboard-local and > frame-local). What is a keyboard-local variable? Juanma ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-18 12:45 ` Juanma Barranquero @ 2007-10-18 13:38 ` Stefan Monnier 2007-10-18 13:45 ` Juanma Barranquero 0 siblings, 1 reply; 67+ messages in thread From: Stefan Monnier @ 2007-10-18 13:38 UTC (permalink / raw) To: Juanma Barranquero; +Cc: emacs-devel >> I propose to change the manual to say that we cannot mix >> buffer-local and frame-local with a single variable (just like a variable >> cannot be both buffer-local and keyboard-local or keyboard-local and >> frame-local). > What is a keyboard-local variable? E.g. input-decode-map and local-function-key-map (there's a different one for each tty and each X11 display to which we're connected). Stefan ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-18 13:38 ` Stefan Monnier @ 2007-10-18 13:45 ` Juanma Barranquero 2007-10-18 14:10 ` Johan Bockgård 0 siblings, 1 reply; 67+ messages in thread From: Juanma Barranquero @ 2007-10-18 13:45 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-devel On 10/18/07, Stefan Monnier <monnier@iro.umontreal.ca> wrote: > E.g. input-decode-map and local-function-key-map (there's a different one > for each tty and each X11 display to which we're connected). Ah. "terminal-local" or "display-local" would seem a more accurate description... Thanks, Juanma ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-18 13:45 ` Juanma Barranquero @ 2007-10-18 14:10 ` Johan Bockgård 2007-10-18 16:40 ` Stefan Monnier 0 siblings, 1 reply; 67+ messages in thread From: Johan Bockgård @ 2007-10-18 14:10 UTC (permalink / raw) To: emacs-devel "Juanma Barranquero" <lekktu@gmail.com> writes: > On 10/18/07, Stefan Monnier <monnier@iro.umontreal.ca> wrote: > >> E.g. input-decode-map and local-function-key-map (there's a different >> one for each tty and each X11 display to which we're connected). > > Ah. > > "terminal-local" or "display-local" would seem a more accurate > description... The documentation indeed uses the term "terminal-local". -- Johan Bockgård ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-18 14:10 ` Johan Bockgård @ 2007-10-18 16:40 ` Stefan Monnier 0 siblings, 0 replies; 67+ messages in thread From: Stefan Monnier @ 2007-10-18 16:40 UTC (permalink / raw) To: emacs-devel >>> E.g. input-decode-map and local-function-key-map (there's a different >>> one for each tty and each X11 display to which we're connected). >> Ah. >> "terminal-local" or "display-local" would seem a more accurate >> description... > The documentation indeed uses the term "terminal-local". IIUC There's a bit of a mess here introduced by the multi-tty code: if you run an "emacsclient -t" on /dev/tty1, then suspend it and then run another one on that same tty, you apparently get two `terminal' objects but a single keyboard object. And the terminal objects are somewhat new in multi-tty, so the variables were really and still are keyboard-local rather than terminal-local (the C code identifiers clearly always referred to "keyboard" rather than "terminal"). This said, I'm not actually sure that this is the case: maybe every terminal has its own keyboard, really. If not, I believe we should "merge" keyboards and terminals so as to get rid of this distinction, if at all possible. Stefan ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-17 23:53 ` Stefan Monnier 2007-10-18 12:45 ` Juanma Barranquero @ 2007-10-19 17:42 ` Richard Stallman 2007-10-19 18:56 ` Stefan Monnier 2007-11-06 4:31 ` Chong Yidong 2 siblings, 1 reply; 67+ messages in thread From: Richard Stallman @ 2007-10-19 17:42 UTC (permalink / raw) To: Stefan Monnier; +Cc: lekktu, emacs-devel I don't like the idea of forbidding the mixing of frame-local and buffer-local bindings just because we haven't figured out the bug that makes them not work. If we understood the problem, and saw that fixing it would be hard, that could be a valid reason to document it instead of fix it. ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-19 17:42 ` Richard Stallman @ 2007-10-19 18:56 ` Stefan Monnier 2007-10-20 14:57 ` Richard Stallman 0 siblings, 1 reply; 67+ messages in thread From: Stefan Monnier @ 2007-10-19 18:56 UTC (permalink / raw) To: rms; +Cc: lekktu, emacs-devel > I don't like the idea of forbidding the mixing of frame-local and > buffer-local bindings just because we haven't figured out the bug > that makes them not work. > If we understood the problem, and saw that fixing it would be hard, > that could be a valid reason to document it instead of fix it. It's probably not hard to fix: but it'll take us time and energy for a feature that nobody has ever used. And the fix will probably make the code a bit more complex, require a few more fields in some structure, etc... I simply think we should move in the direction of dropping frame-local variables in favor of something else. A first step in that direction is to disallow the more complex aspects of frame-local variables which have never been used and thus do not deserve to be supported. Stefan ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-19 18:56 ` Stefan Monnier @ 2007-10-20 14:57 ` Richard Stallman 2007-10-21 2:03 ` Stefan Monnier 0 siblings, 1 reply; 67+ messages in thread From: Richard Stallman @ 2007-10-20 14:57 UTC (permalink / raw) To: Stefan Monnier; +Cc: lekktu, emacs-devel I simply think we should move in the direction of dropping frame-local variables in favor of something else. Maybe we should eliminate them, but I haven't decided yet that we should eliminate them, and the bug is not a good reason to do so. ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-20 14:57 ` Richard Stallman @ 2007-10-21 2:03 ` Stefan Monnier 2007-10-22 9:00 ` Richard Stallman 0 siblings, 1 reply; 67+ messages in thread From: Stefan Monnier @ 2007-10-21 2:03 UTC (permalink / raw) To: rms; +Cc: lekktu, emacs-devel > I simply think we should move in the direction of dropping frame-local > variables in favor of something else. > Maybe we should eliminate them, but I haven't decided yet that > we should eliminate them, and the bug is not a good reason to do so. But what about adding just the checks that make it impossilbe to mix buffer-localness and frame-localness on the same var? At least if people use this feature, we'll then know about it. Stefan ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-21 2:03 ` Stefan Monnier @ 2007-10-22 9:00 ` Richard Stallman 2007-10-22 15:28 ` Stefan Monnier 0 siblings, 1 reply; 67+ messages in thread From: Richard Stallman @ 2007-10-22 9:00 UTC (permalink / raw) To: Stefan Monnier; +Cc: lekktu, emacs-devel But what about adding just the checks that make it impossilbe to mix buffer-localness and frame-localness on the same var? As I said before, I don't like the idea of disallowing the mixing of two features just because there is a bug in it. Maybe we will have to disallow that; maybe we should delete frame-local bindings entirely if they don't seem useful enough to keep. But first let's try to debug the bug. ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-22 9:00 ` Richard Stallman @ 2007-10-22 15:28 ` Stefan Monnier 2007-10-22 15:47 ` Juanma Barranquero 0 siblings, 1 reply; 67+ messages in thread From: Stefan Monnier @ 2007-10-22 15:28 UTC (permalink / raw) To: rms; +Cc: lekktu, emacs-devel > But what about adding just the checks that make it impossilbe to mix > buffer-localness and frame-localness on the same var? > As I said before, I don't like the idea of disallowing the mixing of > two features just because there is a bug in it. Maybe we will have to > disallow that; maybe we should delete frame-local bindings entirely > if they don't seem useful enough to keep. But first let's try > to debug the bug. Go for it: I have better things to do than analyse hypothetical bugs. Stefan ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-22 15:28 ` Stefan Monnier @ 2007-10-22 15:47 ` Juanma Barranquero 2007-10-22 16:01 ` Stefan Monnier 0 siblings, 1 reply; 67+ messages in thread From: Juanma Barranquero @ 2007-10-22 15:47 UTC (permalink / raw) To: Stefan Monnier; +Cc: rms, emacs-devel On 10/22/07, Stefan Monnier <monnier@iro.umontreal.ca> wrote: > Go for it: I have better things to do than analyse hypothetical bugs. The bug is real enough, though I agree it's not worth the trouble to debug it. If frame-local variables have found so little use in nine years, they should be turned into an ex-feature ASAP. IMHO, etc. Juanma ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-22 15:47 ` Juanma Barranquero @ 2007-10-22 16:01 ` Stefan Monnier 2007-10-22 16:17 ` Juanma Barranquero 2007-10-23 10:38 ` Richard Stallman 0 siblings, 2 replies; 67+ messages in thread From: Stefan Monnier @ 2007-10-22 16:01 UTC (permalink / raw) To: Juanma Barranquero; +Cc: rms, emacs-devel >> Go for it: I have better things to do than analyse hypothetical bugs. > The bug is real enough, You mean it showed up in real use? Stefan ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-22 16:01 ` Stefan Monnier @ 2007-10-22 16:17 ` Juanma Barranquero 2007-10-23 10:38 ` Richard Stallman 1 sibling, 0 replies; 67+ messages in thread From: Juanma Barranquero @ 2007-10-22 16:17 UTC (permalink / raw) To: Stefan Monnier; +Cc: rms, emacs-devel On 10/22/07, Stefan Monnier <monnier@iro.umontreal.ca> wrote: > You mean it showed up in real use? Well, I wasn't looking for bugs or deliberately constructing convoluted test cases, I just happened to stumble upon it, but I don't remember anymore whether that was in a piece of code or just while trying to understand the implications of frame-local variables. The example I sent is a convoluted test case, though, designed to highlight the problem. Anyway, what I meant is that if we allow variables that can be both automatically-buffer local and frame-local, and we consider as a feature that a piece of code "works right" without knowing whether some variable has been made frame-local or not behind it's back, and add to it that what triggers the bug is a *read* of the variable's value at the wrong time... I'd say is a real bug of the "I won't encounter it in a million years, but the moment I do, I'll have an interesting time debugging it" variety. YMMV. All in all, I think in this case we're in violent agreement. Juanma ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-22 16:01 ` Stefan Monnier 2007-10-22 16:17 ` Juanma Barranquero @ 2007-10-23 10:38 ` Richard Stallman 2007-10-23 20:31 ` Stefan Monnier 2007-10-24 8:54 ` Johan Bockgård 1 sibling, 2 replies; 67+ messages in thread From: Richard Stallman @ 2007-10-23 10:38 UTC (permalink / raw) To: Stefan Monnier; +Cc: lekktu, emacs-devel When frame-local variables were first implemented, there was no other way to put frame-specific data in the mode line. But now there is, with :eval. Since they are hardly used, and the original motive for them no longer applies, we may as well delete the feature. Would you like to do that? ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-23 10:38 ` Richard Stallman @ 2007-10-23 20:31 ` Stefan Monnier 2007-10-24 8:33 ` Richard Stallman 2007-10-24 8:54 ` Johan Bockgård 1 sibling, 1 reply; 67+ messages in thread From: Stefan Monnier @ 2007-10-23 20:31 UTC (permalink / raw) To: rms; +Cc: lekktu, emacs-devel >>>>> "Richard" == Richard Stallman <rms@gnu.org> writes: > When frame-local variables were first implemented, there was no other > way to put frame-specific data in the mode line. But now there is, > with :eval. > Since they are hardly used, and the original motive for them > no longer applies, we may as well delete the feature. > Would you like to do that? Sure. I currently just marked it obsolete in the 22 branch (with a note in NEWS), see patch below. I'll change the pieces of code which make use of that feature on the trunk. If anybody wants to help out: feel free. Stefan Index: lisp/subr.el =================================================================== RCS file: /sources/emacs/emacs/lisp/subr.el,v retrieving revision 1.554.2.5 diff -u -r1.554.2.5 subr.el --- lisp/subr.el 23 Aug 2007 18:42:38 -0000 1.554.2.5 +++ lisp/subr.el 23 Oct 2007 20:26:55 -0000 @@ -944,7 +944,7 @@ (make-obsolete 'focus-frame "it does nothing." "22.1") (defalias 'unfocus-frame 'ignore "") (make-obsolete 'unfocus-frame "it does nothing." "22.1") - +(make-obsolete 'make-variable-frame-local "use a frame-parameter instead" "22.2") \f ;;;; Obsolescence declarations for variables, and aliases. @@ -988,7 +988,6 @@ (defalias 'search-backward-regexp (symbol-function 're-search-backward)) (defalias 'int-to-string 'number-to-string) (defalias 'store-match-data 'set-match-data) -(defalias 'make-variable-frame-localizable 'make-variable-frame-local) ;; These are the XEmacs names: (defalias 'point-at-eol 'line-end-position) (defalias 'point-at-bol 'line-beginning-position) ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-23 20:31 ` Stefan Monnier @ 2007-10-24 8:33 ` Richard Stallman 0 siblings, 0 replies; 67+ messages in thread From: Richard Stallman @ 2007-10-24 8:33 UTC (permalink / raw) To: Stefan Monnier; +Cc: lekktu, emacs-devel I will delete them from the Lisp manual. ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-23 10:38 ` Richard Stallman 2007-10-23 20:31 ` Stefan Monnier @ 2007-10-24 8:54 ` Johan Bockgård 1 sibling, 0 replies; 67+ messages in thread From: Johan Bockgård @ 2007-10-24 8:54 UTC (permalink / raw) To: emacs-devel Richard Stallman <rms@gnu.org> writes: > Since they are hardly used, and the original motive for them > no longer applies, we may as well delete the feature. FWIW, I have (ab)used frame local variables for creating a separate kill ring for each user during collaborative editing with make-frame-on-display. The result was somewhat quirky, admittedly. I will not object very strongly if they disappear, however. -- Johan Bockgård ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-17 23:53 ` Stefan Monnier 2007-10-18 12:45 ` Juanma Barranquero 2007-10-19 17:42 ` Richard Stallman @ 2007-11-06 4:31 ` Chong Yidong 2007-11-06 8:37 ` Stefan Monnier 2 siblings, 1 reply; 67+ messages in thread From: Chong Yidong @ 2007-11-06 4:31 UTC (permalink / raw) To: Stefan Monnier; +Cc: lekktu, rms, emacs-devel This bug seems to be the only one left to fix before the release (apart from the recent display regression described in another thread). What's the status? If it's not at all clear what needs to be done here, maybe we should postphone it till after 22.2. We could also check RMS's patch into the trunk and sort out the subtle bugs in font-lock that it reportedly causes. Then the changes can be backported into 22.3. ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-11-06 4:31 ` Chong Yidong @ 2007-11-06 8:37 ` Stefan Monnier 2007-11-06 10:48 ` Juanma Barranquero 0 siblings, 1 reply; 67+ messages in thread From: Stefan Monnier @ 2007-11-06 8:37 UTC (permalink / raw) To: Chong Yidong; +Cc: lekktu, rms, emacs-devel > This bug seems to be the only one left to fix before the release > (apart from the recent display regression described in another > thread). What's the status? If it's not at all clear what needs to > be done here, maybe we should postphone it till after 22.2. The status is that it has been deemed a non-bug and frame-local variables have been declared obsolete (on the 22 branch). Stefan ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-11-06 8:37 ` Stefan Monnier @ 2007-11-06 10:48 ` Juanma Barranquero 0 siblings, 0 replies; 67+ messages in thread From: Juanma Barranquero @ 2007-11-06 10:48 UTC (permalink / raw) To: Stefan Monnier; +Cc: Chong Yidong, rms, emacs-devel On 11/6/07, Stefan Monnier <monnier@iro.umontreal.ca> wrote: > The status is that it has been deemed a non-bug Yes, for some definition of non-bug. I agree, though, that we shouldn't fix it. > and frame-local variables > have been declared obsolete (on the 22 branch). Which reminds me: wouldn't stil be useful your patch that forbade making a buffer-local variable frame-local (and the other way around)? Juanma ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-12 15:59 ` Richard Stallman 2007-10-12 16:33 ` Stefan Monnier @ 2007-10-12 16:41 ` Juanma Barranquero 2007-10-13 6:41 ` Richard Stallman 1 sibling, 1 reply; 67+ messages in thread From: Juanma Barranquero @ 2007-10-12 16:41 UTC (permalink / raw) To: rms; +Cc: emacs-devel On 10/12/07, Richard Stallman <rms@gnu.org> wrote: > What are those other problems? > > I could install that patch, so we can discover and fix the > other problems. But if you have already seen them, let's > debug them first. I tried it a few days ago, and font-locking started acting erratically: it worked OK in some buffers, partially in other buffers, and not at all in some. And, IIRC, when you originally posted the patch it did work for me, but you reported problems with some of the mode line contents. > I'd much rather disallow variables that are both buffer-local and frame-local. > > We should not cavalierly disallow the use of features in combination > just because there is a bug. That quote is not mine, but Stefan's. I still agree with him, though, that there's not much gained with frame-local variables, over simple frame parameters. Juanma ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-12 16:41 ` Juanma Barranquero @ 2007-10-13 6:41 ` Richard Stallman 2007-10-13 23:06 ` Juanma Barranquero 0 siblings, 1 reply; 67+ messages in thread From: Richard Stallman @ 2007-10-13 6:41 UTC (permalink / raw) To: Juanma Barranquero; +Cc: emacs-devel I tried it a few days ago, and font-locking started acting erratically: it worked OK in some buffers, partially in other buffers, and not at all in some. Can you reproduce the problem? Can you figure out, perhaps with breakpoints on the changed code, which variables are actually affected? ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-13 6:41 ` Richard Stallman @ 2007-10-13 23:06 ` Juanma Barranquero 2007-10-18 12:44 ` Juanma Barranquero 0 siblings, 1 reply; 67+ messages in thread From: Juanma Barranquero @ 2007-10-13 23:06 UTC (permalink / raw) To: rms; +Cc: emacs-devel On 10/13/07, Richard Stallman <rms@gnu.org> wrote: > Can you reproduce the problem? > Can you figure out, perhaps with breakpoints on the changed code, > which variables are actually affected? I can try. Juanma ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-13 23:06 ` Juanma Barranquero @ 2007-10-18 12:44 ` Juanma Barranquero 2007-10-21 16:26 ` Richard Stallman 0 siblings, 1 reply; 67+ messages in thread From: Juanma Barranquero @ 2007-10-18 12:44 UTC (permalink / raw) To: rms; +Cc: emacs-devel > On 10/13/07, Richard Stallman <rms@gnu.org> wrote: > > Can you reproduce the problem? > Can you figure out, perhaps with breakpoints on the changed code, > which variables are actually affected? I think someone more experienced in that part of code would have to debug this. Apparently, with the patch applied the local variables (keymaps, font-locking, etc.) are bleeding from one buffer to another and Emacs turns quite difficult to use. A common occurrence in my tests is the minibuffer having the view-mode-map keymap, and another good one was the output of describe-function font-locked as it it was a C buffer (I was visiting data.c at the moment), with `for' and `default' highlighted :) But I think the most sensible thing is to apply Stefan's patch and just forbid mixed buffer-local / frame-local variables. Juanma ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-18 12:44 ` Juanma Barranquero @ 2007-10-21 16:26 ` Richard Stallman 2007-10-21 16:33 ` Juanma Barranquero 0 siblings, 1 reply; 67+ messages in thread From: Richard Stallman @ 2007-10-21 16:26 UTC (permalink / raw) To: Juanma Barranquero; +Cc: emacs-devel I think someone more experienced in that part of code would have to debug this. Apparently, with the patch applied the local variables (keymaps, font-locking, etc.) are bleeding from one buffer to another and Emacs turns quite difficult to use. Does this include variables which have no frame-local bindings? (It sounds like that is what you mean.) ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2007-10-21 16:26 ` Richard Stallman @ 2007-10-21 16:33 ` Juanma Barranquero 0 siblings, 0 replies; 67+ messages in thread From: Juanma Barranquero @ 2007-10-21 16:33 UTC (permalink / raw) To: rms; +Cc: emacs-devel On 10/21/07, Richard Stallman <rms@gnu.org> wrote: > Does this include variables which have no frame-local bindings? > (It sounds like that is what you mean.) I didn't check, but font-locking variables and mode maps are usually not frame-local. Juanma ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2006-12-05 13:41 frame-local variables weirdness Juanma Barranquero 2006-12-08 2:28 ` Juanma Barranquero @ 2006-12-09 14:24 ` Juanma Barranquero 2006-12-09 15:26 ` Stefan Monnier 2006-12-11 14:59 ` Richard Stallman 2 siblings, 1 reply; 67+ messages in thread From: Juanma Barranquero @ 2006-12-09 14:24 UTC (permalink / raw) [-- Attachment #1: Type: text/plain, Size: 514 bytes --] On 12/5/06, Juanma Barranquero <lekktu@gmail.com> wrote: > BTW, is there a way to know when a variable is frame local? > `frame-parameter' is not enough (it could be a frame parameter and yet > not a frame local variable). After asking that question I've found `variable-binding-locus', which allows a trivial implementation of `frame-local-variable-p' (à la `local-variable-p'), but I still don't see an easy way to implement a frame-local version of `local-variable-if-set-p'. /L/e/k/t/u [-- Attachment #2: Type: text/plain, Size: 142 bytes --] _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-devel ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2006-12-09 14:24 ` Juanma Barranquero @ 2006-12-09 15:26 ` Stefan Monnier 2006-12-09 17:59 ` Juanma Barranquero 0 siblings, 1 reply; 67+ messages in thread From: Stefan Monnier @ 2006-12-09 15:26 UTC (permalink / raw) Cc: Emacs Devel > `local-variable-p'), but I still don't see an easy way to implement a > frame-local version of `local-variable-if-set-p'. It's easy to implement: (defalias 'frame-local-variable-if-set-p 'frame-local-variable-p) make-variable-frame-local is not like make-variable-buffer-local: it does not cause `setq' to make the variabke frame-local. It only means that the variable setting may be changed on a frame-by-frame basis via frame-parameters. Stefan ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2006-12-09 15:26 ` Stefan Monnier @ 2006-12-09 17:59 ` Juanma Barranquero 0 siblings, 0 replies; 67+ messages in thread From: Juanma Barranquero @ 2006-12-09 17:59 UTC (permalink / raw) Cc: Emacs Devel On 12/9/06, Stefan Monnier <monnier@iro.umontreal.ca> wrote: > It's easy to implement: > > (defalias 'frame-local-variable-if-set-p 'frame-local-variable-p) Well, not exactly. frame-local-variable-p would mean that VAR has a local value. frame-local-variable-if-set-p (perhaps variable-is-frame-localizable-p is a better name) would mean that `make-variable-frame-local' has been applied to VAR (so the Lisp_Buffer_Local_Value has check_frame == 1). /L/e/k/t/u ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2006-12-05 13:41 frame-local variables weirdness Juanma Barranquero 2006-12-08 2:28 ` Juanma Barranquero 2006-12-09 14:24 ` Juanma Barranquero @ 2006-12-11 14:59 ` Richard Stallman 2006-12-11 15:57 ` Juanma Barranquero 2 siblings, 1 reply; 67+ messages in thread From: Richard Stallman @ 2006-12-11 14:59 UTC (permalink / raw) Cc: emacs-devel I think this should fix your problem. Does it work in general? *** data.c 12 Nov 2006 00:16:50 -0500 1.268 --- data.c 10 Dec 2006 23:05:35 -0500 *************** *** 1207,1215 **** || buf != XBUFFER (XBUFFER_LOCAL_VALUE (valcontents)->buffer) || (XBUFFER_LOCAL_VALUE (valcontents)->check_frame && !EQ (selected_frame, XBUFFER_LOCAL_VALUE (valcontents)->frame)) || (BUFFER_LOCAL_VALUEP (valcontents) ! && EQ (XCAR (current_alist_element), ! current_alist_element))) { /* The currently loaded binding is not necessarily valid. We need to unload it, and choose a new binding. */ --- 1207,1216 ---- || buf != XBUFFER (XBUFFER_LOCAL_VALUE (valcontents)->buffer) || (XBUFFER_LOCAL_VALUE (valcontents)->check_frame && !EQ (selected_frame, XBUFFER_LOCAL_VALUE (valcontents)->frame)) + /* After make-variable-buffer-local, if we haven't got a + buffer-local binding in place, we need to make one. */ || (BUFFER_LOCAL_VALUEP (valcontents) ! && ! XBUFFER_LOCAL_VALUE (valcontents)->found_for_buffer)) { /* The currently loaded binding is not necessarily valid. We need to unload it, and choose a new binding. */ *************** *** 1264,1270 **** XSETCAR (XBUFFER_LOCAL_VALUE (valcontents)->cdr, tem1); ! /* Set `buffer' and `frame' slots for thebinding now loaded. */ XSETBUFFER (XBUFFER_LOCAL_VALUE (valcontents)->buffer, buf); XBUFFER_LOCAL_VALUE (valcontents)->frame = selected_frame; } --- 1265,1271 ---- XSETCAR (XBUFFER_LOCAL_VALUE (valcontents)->cdr, tem1); ! /* Set `buffer' and `frame' slots for the binding now loaded. */ XSETBUFFER (XBUFFER_LOCAL_VALUE (valcontents)->buffer, buf); XBUFFER_LOCAL_VALUE (valcontents)->frame = selected_frame; } ^ permalink raw reply [flat|nested] 67+ messages in thread
* Re: frame-local variables weirdness 2006-12-11 14:59 ` Richard Stallman @ 2006-12-11 15:57 ` Juanma Barranquero 0 siblings, 0 replies; 67+ messages in thread From: Juanma Barranquero @ 2006-12-11 15:57 UTC (permalink / raw) Cc: emacs-devel On 12/11/06, Richard Stallman <rms@gnu.org> wrote: > I think this should fix your problem. Yes, thanks. > Does it work in general? I don't see any ill effect. /L/e/k/t/u ^ permalink raw reply [flat|nested] 67+ messages in thread
end of thread, other threads:[~2007-11-06 10:48 UTC | newest] Thread overview: 67+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2006-12-05 13:41 frame-local variables weirdness Juanma Barranquero 2006-12-08 2:28 ` Juanma Barranquero 2006-12-09 1:26 ` Richard Stallman 2006-12-09 14:11 ` Juanma Barranquero 2006-12-10 4:24 ` Richard Stallman 2006-12-10 12:58 ` Juanma Barranquero 2007-10-11 9:42 ` Juanma Barranquero 2007-10-11 14:21 ` Stefan Monnier 2007-10-11 14:37 ` Juanma Barranquero 2007-10-11 17:33 ` Stefan Monnier 2007-10-11 19:00 ` Juanma Barranquero 2007-10-12 15:59 ` Richard Stallman 2007-10-12 16:33 ` Stefan Monnier 2007-10-14 16:29 ` Richard Stallman 2007-10-14 17:13 ` Juanma Barranquero 2007-10-14 17:51 ` David Kastrup 2007-10-15 16:04 ` Richard Stallman 2007-10-15 17:50 ` Stefan Monnier 2007-10-17 17:29 ` Stephen J. Turnbull 2007-10-17 18:05 ` Stefan Monnier 2007-10-18 5:03 ` Richard Stallman 2007-10-18 13:53 ` Stefan Monnier 2007-10-19 5:40 ` Richard Stallman 2007-10-19 13:56 ` Stefan Monnier 2007-10-20 3:30 ` Richard Stallman 2007-10-20 13:15 ` Stefan Monnier 2007-10-21 7:25 ` Richard Stallman 2007-10-21 14:24 ` Stefan Monnier 2007-10-21 14:56 ` Miles Bader 2007-10-21 19:20 ` Stefan Monnier 2007-10-22 2:26 ` Miles Bader 2007-10-22 9:01 ` Richard Stallman 2007-10-17 21:03 ` David Kastrup 2007-10-19 1:57 ` Stephen J. Turnbull 2007-10-17 23:53 ` Stefan Monnier 2007-10-18 12:45 ` Juanma Barranquero 2007-10-18 13:38 ` Stefan Monnier 2007-10-18 13:45 ` Juanma Barranquero 2007-10-18 14:10 ` Johan Bockgård 2007-10-18 16:40 ` Stefan Monnier 2007-10-19 17:42 ` Richard Stallman 2007-10-19 18:56 ` Stefan Monnier 2007-10-20 14:57 ` Richard Stallman 2007-10-21 2:03 ` Stefan Monnier 2007-10-22 9:00 ` Richard Stallman 2007-10-22 15:28 ` Stefan Monnier 2007-10-22 15:47 ` Juanma Barranquero 2007-10-22 16:01 ` Stefan Monnier 2007-10-22 16:17 ` Juanma Barranquero 2007-10-23 10:38 ` Richard Stallman 2007-10-23 20:31 ` Stefan Monnier 2007-10-24 8:33 ` Richard Stallman 2007-10-24 8:54 ` Johan Bockgård 2007-11-06 4:31 ` Chong Yidong 2007-11-06 8:37 ` Stefan Monnier 2007-11-06 10:48 ` Juanma Barranquero 2007-10-12 16:41 ` Juanma Barranquero 2007-10-13 6:41 ` Richard Stallman 2007-10-13 23:06 ` Juanma Barranquero 2007-10-18 12:44 ` Juanma Barranquero 2007-10-21 16:26 ` Richard Stallman 2007-10-21 16:33 ` Juanma Barranquero 2006-12-09 14:24 ` Juanma Barranquero 2006-12-09 15:26 ` Stefan Monnier 2006-12-09 17:59 ` Juanma Barranquero 2006-12-11 14:59 ` Richard Stallman 2006-12-11 15:57 ` Juanma Barranquero
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).