* bug#17397: 24.4.50; REGRESSION: `temp-buffer-show-hook' is no longer invoked for `describe-variable' @ 2014-05-03 21:32 Drew Adams 2014-05-03 21:41 ` Drew Adams 2014-05-13 21:24 ` Drew Adams 0 siblings, 2 replies; 11+ messages in thread From: Drew Adams @ 2014-05-03 21:32 UTC (permalink / raw) To: 17397 emacs -Q M-: (add-hook 'temp-buffer-show-hook (lambda () (debug)) 'append) C-h v auto-mode-interpreter-regexp The hook is never invoked. It is invoked in all previous Emacs releases. Do the same thing in Emacs 24.3, for example, and you enter the debugger. This has an effect on my code and setup, where I have `fit-frame-if-one-window' on the hook: buffer *Help*, alone in its frame, must always be refit to the latest *Help* text. This is now broken. In GNU Emacs 24.4.50.1 (i686-pc-mingw32) of 2014-04-29 on ODIEONE Bzr revision: 117031 monnier@iro.umontreal.ca-20140429151607-qnkgbymwfaj5ut08 Windowing system distributor `Microsoft Corp.', version 6.1.7601 Configured using: `configure --prefix=/c/Devel/emacs/snapshot/trunk --enable-checking=yes,glyphs 'CFLAGS=-O0 -g3' LDFLAGS=-Lc:/Devel/emacs/lib 'CPPFLAGS=-DGC_MCHECK=1 -Ic:/Devel/emacs/include'' ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#17397: 24.4.50; REGRESSION: `temp-buffer-show-hook' is no longer invoked for `describe-variable' 2014-05-03 21:32 bug#17397: 24.4.50; REGRESSION: `temp-buffer-show-hook' is no longer invoked for `describe-variable' Drew Adams @ 2014-05-03 21:41 ` Drew Adams 2014-05-13 21:24 ` Drew Adams 1 sibling, 0 replies; 11+ messages in thread From: Drew Adams @ 2014-05-03 21:41 UTC (permalink / raw) To: 17397 Needless to say, this bug is present also in the 24.4 pretest. (I am using this development version at Stefan's request, to try to catch the crash of bug #17340 with his patch.) ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#17397: 24.4.50; REGRESSION: `temp-buffer-show-hook' is no longer invoked for `describe-variable' 2014-05-03 21:32 bug#17397: 24.4.50; REGRESSION: `temp-buffer-show-hook' is no longer invoked for `describe-variable' Drew Adams 2014-05-03 21:41 ` Drew Adams @ 2014-05-13 21:24 ` Drew Adams 2014-05-14 7:06 ` martin rudalics 1 sibling, 1 reply; 11+ messages in thread From: Drew Adams @ 2014-05-13 21:24 UTC (permalink / raw) To: 17397 I would really like to get some help with this. So far, no response at all. Help functions using buffer *Help* previously used `with-output-to-temp-buffer', which runs `temp-buffer-setup-hook' and `temp-buffer-show-hook'. And previously the setup hook usually put the buffer in help mode. Now, *Help* is set up by `with-help-window', and neither of those hooks is run by it. This is a regression, to me - any code or any user who relies on those hooks being run for *Help* buffers is up the creek without a paddle, AFAICS. So be it. But what is that code or that user supposed to do now? `with-help-window' invokes `with-temp-buffer-window', which runs `temp-buffer-window-setup-hook' and `temp-buffer-window-show-hook'. To get *Help* to DTRT for the code or user that previously used `temp-buffer-setup-hook' or `temp-buffer-show-hook, is it appropriate to put the same things on `temp-buffer-window-setup-hook' and `temp-buffer-window-show-hook' instead? Or will that maybe have unwanted effects because `with-temp-buffer-window' is perhaps used for more than just *Help*? Not clear to me. And I find no help in the doc or NEWS - or in this bug thread, so far. Should I be adding `fit-frame-if-one-window' to `temp-buffer-window' for Emacs 24.4, to get the effect it has in Emacs 24.3 (and prior) by being on `temp-buffer-show-hook'? If not, how to get the same effect? If yes, how to deal with other possible uses of `with-temp-buffer-window', which have nothing to do with *Help*? (In the case of `fit-frame-if-one-window', that would probably not hurt anything, but the question is more general.) -- The existing doc is anyway wrong in some cases, AFAICT: The doc string of `with-temp-buffer-window' says: This construct is similar to `with-output-to-temp-buffer' but, neither runs `temp-buffer-setup-hook' which usually puts the buffer in Help mode, nor `temp-buffer-show-function' (the ACTION argument replaces this). And the doc string of `temp-buffer-setup-hook', likewise, says: This hook is normally set up with a function to put the buffer in Help mode. I don't get the impression that either of those statements is true anymore. It seems like there is *no relation* anymore between such temp-buffer things and Help mode. Furthermore, grepping for `temp-buffer-setup-hook' in the Emacs sources shows that it is not used for this at all anymore. A little help, please. ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#17397: 24.4.50; REGRESSION: `temp-buffer-show-hook' is no longer invoked for `describe-variable' 2014-05-13 21:24 ` Drew Adams @ 2014-05-14 7:06 ` martin rudalics 2014-05-14 16:25 ` Drew Adams 0 siblings, 1 reply; 11+ messages in thread From: martin rudalics @ 2014-05-14 7:06 UTC (permalink / raw) To: Drew Adams, 17397 > To get *Help* to DTRT for the code or user that previously used > `temp-buffer-setup-hook' or `temp-buffer-show-hook, is it > appropriate to put the same things on `temp-buffer-window-setup-hook' > and `temp-buffer-window-show-hook' instead? Or will that maybe > have unwanted effects because `with-temp-buffer-window' is perhaps > used for more than just *Help*? Both `with-output-to-temp-buffer' and `with-temp-buffer-window' are and can be used for other things than displaying *Help*. > Not clear to me. And I find no help in the doc or NEWS - or in > this bug thread, so far. The manual says about `with-temp-buffer-window' that This macro uses the normal hooks `temp-buffer-window-setup-hook' and `temp-buffer-window-show-hook' in place of the analogous hooks run by `with-output-to-temp-buffer'. What else do you need? > Should I be adding `fit-frame-if-one-window' to `temp-buffer-window' > for Emacs 24.4, to get the effect it has in Emacs 24.3 (and prior) > by being on `temp-buffer-show-hook'? I suppose you want to add it to `temp-buffer-window-show-hook'. > If not, how to get the same effect? If yes, how to deal with other > possible uses of `with-temp-buffer-window', which have nothing to do > with *Help*? (In the case of `fit-frame-if-one-window', that would > probably not hurt anything, but the question is more general.) Emacs has a `temp-buffer-resize-mode' which is tied to temporary buffers and not to `help-mode'. To "deal with other possible uses" of temporary buffers, a function run by `temp-buffer-show-hook' or `temp-buffer-window-show-hook' should probably check whether the buffer is in help mode. In this regard nothing has changed wrt earlier version where a user removed `help-mode-setup' from `temp-buffer-setup-hook' and `help-mode-finish' from `temp-buffer-show-hook'. Maybe you could also use `help-mode-hook' to do something for help buffers exclusively and avoid other temporary buffers. > The existing doc is anyway wrong in some cases, AFAICT: The doc > string of `with-temp-buffer-window' says: > > This construct is similar to `with-output-to-temp-buffer' > but, neither runs `temp-buffer-setup-hook' which usually puts > the buffer in Help mode, nor `temp-buffer-show-function' (the > ACTION argument replaces this). What is wrong here? > And the doc string of `temp-buffer-setup-hook', likewise, says: > > This hook is normally set up with a function to put the buffer > in Help mode. This is still the case for the release version. IIRC Leo Liu changed it on the trunk so the doc-string should be probably updated there. > I don't get the impression that either of those statements is > true anymore. It seems like there is *no relation* anymore > between such temp-buffer things and Help mode. Furthermore, > grepping for `temp-buffer-setup-hook' in the Emacs sources > shows that it is not used for this at all anymore. The connection between temporary buffers and help mode is established by `with-help-window' which uses `with-temp-buffer-window'. martin ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#17397: 24.4.50; REGRESSION: `temp-buffer-show-hook' is no longer invoked for `describe-variable' 2014-05-14 7:06 ` martin rudalics @ 2014-05-14 16:25 ` Drew Adams 2014-05-14 17:33 ` martin rudalics 0 siblings, 1 reply; 11+ messages in thread From: Drew Adams @ 2014-05-14 16:25 UTC (permalink / raw) To: martin rudalics, 17397 > > To get *Help* to DTRT for the code or user that previously used > > `temp-buffer-setup-hook' or `temp-buffer-show-hook, is it > > appropriate to put the same things on `temp-buffer-window-setup-hook' > > and `temp-buffer-window-show-hook' instead? Or will that maybe > > have unwanted effects because `with-temp-buffer-window' is perhaps > > used for more than just *Help*? > > Both `with-output-to-temp-buffer' and `with-temp-buffer-window' are > and can be used for other things than displaying *Help*. For `with-output-to-temp-buffer': NOW, yes. Before, no - it was pretty much hardwired to help mode. So there will be users and existing 3rd-party code that depend on that behavior, which endured for 30 years or so. This is why I have argued that the right fix for that problem was not to change the behavior of `with-output-to-temp-buffer', and thus gratuitously break such code and user expectations, but to make a new macro for dealing with temporary buffer display that was not hardwired to help. Emacs itself could move to using that new macro, of course, but there should be no reason to break the longstanding behavior of `with-output-to-temp-buffer'. > > Not clear to me. And I find no help in the doc or NEWS - or in > > this bug thread, so far. > > The manual says about `with-temp-buffer-window' that > > This macro uses the normal hooks `temp-buffer-window-setup-hook' > and `temp-buffer-window-show-hook' in place of the analogous > hooks run by `with-output-to-temp-buffer'. > > What else do you need? What did I say? Yes, I read that in the manual. What about a function that has been on `temp-buffer-setup-hook' or `temp-buffer-show-hook', and that was specifically put there for help, i.e., that expects help mode? Is it necessarily appropriate to put that function on the *-window-* hooks, without modifying it to work around use in a non-help mode? I don't think that is the case, in general. And I don't see a hook that is analogous and specifically for help. In my case of `fit-frame-if-one-window', this is not a problem AFAICT - I added it to `temp-buffer-window-show-hook'. But in the general case there is a problem in moving a function from a temp-buffer hook to a temp-buffer-window hook, whenever that function is specifically aimed at help (expects help mode). Sure, users and libraries can also change such a function, so that it tests the buffer or mode to see whether it involves help. But this is gratuitous hassling, IMO - it should not be necessary. I made the further point that none of this is documented, AFAICT. Nothing about migrating one's use of temp-buffer stuff to whatever is appropriate for Emacs 24.4+. Nothing about incompatible behavior changes for the temp-buffer stuff. > > Should I be adding `fit-frame-if-one-window' to `temp-buffer-window' > > for Emacs 24.4, to get the effect it has in Emacs 24.3 (and prior) > > by being on `temp-buffer-show-hook'? > > I suppose you want to add it to `temp-buffer-window-show-hook'. I supposed so too, and I did. I asked the question several times, hoping to incite adding some migration explanation to the doc. But thanks anyway for confirming. I still hope someone updates the doc. But again, though that is OK for `fit-frame-if-one-window', since I want to invoke that regardless of which temp buffer is displayed, it is not OK in general for functions that have been on `temp-buffer-show-hook'. It is likely that at least some such functions are specific to help mode, since `temp-buffer-show-hook' was dedicated to help previously (and for so long). What do you tell library maintainers or users who have a function on `temp-buffer-show-hook' that is appropriate for help mode but not for other temp buffers? Such information should be in the doc, IMO. > > If not, how to get the same effect? If yes, how to deal with other > > possible uses of `with-temp-buffer-window', which have nothing to do > > with *Help*? (In the case of `fit-frame-if-one-window', that would > > probably not hurt anything, but the question is more general.) > > Emacs has a `temp-buffer-resize-mode' which is tied to temporary buffers > and not to `help-mode'. To "deal with other possible uses" of temporary > buffers, a function run by `temp-buffer-show-hook' or > `temp-buffer-window-show-hook' should probably check whether the buffer > is in help mode. It will have to, now. Too bad. > In this regard nothing has changed wrt earlier version where a user > removed `help-mode-setup' from `temp-buffer-setup-hook' and > `help-mode-finish' from `temp-buffer-show-hook'. That is a very roundabout way of saying that IF there previously were a user who for some reason coded things up to approximate what the code does now, THEN ... "Nothing has changed"! So-called temp-buffer display was previously coupled with help display. Functions on `temp-buffer-show-hook' in existing code or user setups could well depend on that behavior. It was expected that the temp buffer displayed would be in help mode - because it WAS - for 30 years. Sure, someone could have jumped through hoops to use `with-output-to-temp-buffer' without help mode. But that would have been relatively rare. What percentage of the uses of `with-output-to-temp-buffer' in the Emacs code corresponded to this? Not more than 1% would be my guess - maybe 0%. It is hardly the common use case of `with-output-to-temp-buffer'. To suggest that it is, that "nothing has changed", would be disingenuous. Yes, I note that you did not claim that in general - you qualified it as being the case only for such exceptional uses (without acknowledging that they are exceptional). But the impression can be got from a cursory reading that you are saying that nothing has changed in general, i.e., for most uses of `with-output-to-temp-buffer'. In fact, I have jumped through that hoop that in some of my code, so I do recognize such an exception: (defmacro bmkp-with-output-to-plain-temp-buffer (buf &rest body) "Like `with-output-to-temp-buffer', but with no *Help* navigation stuff." `(unwind-protect (progn (remove-hook 'temp-buffer-setup-hook 'help-mode-setup) (remove-hook 'temp-buffer-show-hook 'help-mode-finish) (with-output-to-temp-buffer ,buf ,@body)) (add-hook 'temp-buffer-setup-hook 'help-mode-setup) (add-hook 'temp-buffer-show-hook 'help-mode-finish))) But doing things like this was no doubt uncommon. That was the point of my original bug report asking that Emacs decouple temporary buffer display from help display, i.e., that it provide a real temp-buffer display that does not involve help (as does the macro above, in a workaround way). What was wrong was the way this decoupling was done in Emacs: changing the behavior of macro `with-output-to-temp-buffer'. That was misguided, IMHO, and not necessary. That boat has apparently sailed, however. > Maybe you could also use `help-mode-hook' to do something for help > buffers exclusively and avoid other temporary buffers. > > > The existing doc is anyway wrong in some cases, AFAICT: The doc > > string of `with-temp-buffer-window' says: > > > > This construct is similar to `with-output-to-temp-buffer' > > but, neither runs `temp-buffer-setup-hook' which usually puts > > the buffer in Help mode, nor `temp-buffer-show-function' (the > > ACTION argument replaces this). > > What is wrong here? `temp-buffer-setup-hook' no longer "usually puts the buffer in Help mode". > > And the doc string of `temp-buffer-setup-hook', likewise, says: > > > > This hook is normally set up with a function to put the buffer > > in Help mode. > > This is still the case for the release version. IIRC Leo Liu changed it > on the trunk so the doc-string should be probably updated there. The doc string is not updated in the trunk build I cited, from April 29. I don't have a more recent build. But yes, the doc should be updated - that was what I was pointing out. > > I don't get the impression that either of those statements is > > true anymore. It seems like there is *no relation* anymore > > between such temp-buffer things and Help mode. Furthermore, > > grepping for `temp-buffer-setup-hook' in the Emacs sources > > shows that it is not used for this at all anymore. > > The connection between temporary buffers and help mode is established > by `with-help-window' which uses `with-temp-buffer-window'. Yes, I know. And previously such a connection was hardwired in `with-output-to-temp-buffer'. That behavior should not have changed. Not because it was good to couple the two behaviors, but because they have been so coupled for a long time in `with-output-to-temp-buffers'. The right approach would have been to (a) leave `with-output-to-temp-buffer' the way it was, (b) decouple temp-buffer display from help mode by coming up with new macros, and (c) use the new macros in the Emacs source code (this has been done). That way, the Emacs code would no longer use `with-output-to-temp-buffer', and thus would no longer depend on a coupling of temp-buffer display with help, BUT users would not be bothered and existing 3rd-party code would not be broken by a change to `with-output-to-temp-buffer': it would continue to work as usual, coupling temp with help as before. Eventually, `with-output-to-temp-buffer' would be abandoned everywhere, naturally. I pointed this out in my original bug report. That is not what was done. We now have to live with the consequences of the incompatible change. That calls for doc that explains the change and how to deal with it. The doc (manual and/or NEWS) should clearly point out (a) what `with-output-to-temp-buffer' does now, and (b) that it does not do what it has always done before, and (c) this is how to migrate existing code that uses it: A, B, C,...Z. For Emacs's source code the change was trivial: replace uses of `with-output-to-temp-buffer' with uses of the new macro. But for 3rd-party code that supports multiple Emacs versions the change is not so trivial. It is too bad that we have arrived here, but we have. Now let's patch things up by at least letting users know about the damage done and how to make do with it. ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#17397: 24.4.50; REGRESSION: `temp-buffer-show-hook' is no longer invoked for `describe-variable' 2014-05-14 16:25 ` Drew Adams @ 2014-05-14 17:33 ` martin rudalics 2014-05-14 18:41 ` Drew Adams 0 siblings, 1 reply; 11+ messages in thread From: martin rudalics @ 2014-05-14 17:33 UTC (permalink / raw) To: Drew Adams, 17397 >> Both `with-output-to-temp-buffer' and `with-temp-buffer-window' are >> and can be used for other things than displaying *Help*. > > For `with-output-to-temp-buffer': NOW, yes. Before, no - it was > pretty much hardwired to help mode. > > So there will be users and existing 3rd-party code that depend on > that behavior, which endured for 30 years or so. > > This is why I have argued that the right fix for that problem was > not to change the behavior of `with-output-to-temp-buffer', and thus > gratuitously break such code and user expectations, but to make a > new macro for dealing with temporary buffer display that was not > hardwired to help. > > Emacs itself could move to using that new macro, of course, but there > should be no reason to break the longstanding behavior of > `with-output-to-temp-buffer'. It wasn't my intention to change the longstanding behavior of `with-output-to-temp-buffer'. > What did I say? Yes, I read that in the manual. What about a function > that has been on `temp-buffer-setup-hook' or `temp-buffer-show-hook', > and that was specifically put there for help, i.e., that expects help > mode? Generally assuming that a temporary buffer is always in help mode is wrong. Callers of `with-output-to-temp-buffer' can always change the mode as, for example, ediff does. > Is it necessarily appropriate to put that function on the *-window-* > hooks, without modifying it to work around use in a non-help mode? > I don't think that is the case, in general. And I don't see a hook > that is analogous and specifically for help. > > In my case of `fit-frame-if-one-window', this is not a problem AFAICT > - I added it to `temp-buffer-window-show-hook'. But in the general > case there is a problem in moving a function from a temp-buffer hook to > a temp-buffer-window hook, whenever that function is specifically aimed > at help (expects help mode). > > Sure, users and libraries can also change such a function, so that it > tests the buffer or mode to see whether it involves help. But this is > gratuitous hassling, IMO - it should not be necessary. > > I made the further point that none of this is documented, AFAICT. > Nothing about migrating one's use of temp-buffer stuff to whatever > is appropriate for Emacs 24.4+. Nothing about incompatible > behavior changes for the temp-buffer stuff. It was wrong to put a function on `temp-buffer-show-hook' without testing whether the associated buffer was in help mode when the intention is to run the function for help mode buffers only. >> > Should I be adding `fit-frame-if-one-window' to `temp-buffer-window' >> > for Emacs 24.4, to get the effect it has in Emacs 24.3 (and prior) >> > by being on `temp-buffer-show-hook'? >> >> I suppose you want to add it to `temp-buffer-window-show-hook'. > > I supposed so too, and I did. I asked the question several times, > hoping to incite adding some migration explanation to the doc. But > thanks anyway for confirming. I still hope someone updates the doc. > > But again, though that is OK for `fit-frame-if-one-window', since I > want to invoke that regardless of which temp buffer is displayed, it > is not OK in general for functions that have been on > `temp-buffer-show-hook'. > > It is likely that at least some such functions are specific to help > mode, since `temp-buffer-show-hook' was dedicated to help previously > (and for so long). Such functions were based on a wrong assumption. > What do you tell library maintainers or users who have a function on > `temp-buffer-show-hook' that is appropriate for help mode but not > for other temp buffers? Such information should be in the doc, IMO. I tell them here on this list that such a function should have tested whether the buffer is in help mode. >> Emacs has a `temp-buffer-resize-mode' which is tied to temporary buffers >> and not to `help-mode'. To "deal with other possible uses" of temporary >> buffers, a function run by `temp-buffer-show-hook' or >> `temp-buffer-window-show-hook' should probably check whether the buffer >> is in help mode. > > It will have to, now. Too bad. On the contrary. Older versions of Emacs running your code will benefit from more correct code. > That is a very roundabout way of saying that IF there previously were > a user who for some reason coded things up to approximate what the > code does now, THEN ... "Nothing has changed"! > > So-called temp-buffer display was previously coupled with help display. > Functions on `temp-buffer-show-hook' in existing code or user setups > could well depend on that behavior. It was expected that the temp > buffer displayed would be in help mode - because it WAS - for 30 years. > > Sure, someone could have jumped through hoops to use > `with-output-to-temp-buffer' without help mode. But that would have > been relatively rare. What percentage of the uses of > `with-output-to-temp-buffer' in the Emacs code corresponded to this? > Not more than 1% would be my guess - maybe 0%. > > It is hardly the common use case of `with-output-to-temp-buffer'. > > To suggest that it is, that "nothing has changed", would be > disingenuous. Yes, I note that you did not claim that in general - > you qualified it as being the case only for such exceptional uses > (without acknowledging that they are exceptional). But the > impression can be got from a cursory reading that you are saying > that nothing has changed in general, i.e., for most uses of > `with-output-to-temp-buffer'. > > In fact, I have jumped through that hoop that in some of my code, > so I do recognize such an exception: > > (defmacro bmkp-with-output-to-plain-temp-buffer (buf &rest body) > "Like `with-output-to-temp-buffer', but with no *Help* navigation stuff." > `(unwind-protect > (progn > (remove-hook 'temp-buffer-setup-hook 'help-mode-setup) > (remove-hook 'temp-buffer-show-hook 'help-mode-finish) > (with-output-to-temp-buffer ,buf ,@body)) > (add-hook 'temp-buffer-setup-hook 'help-mode-setup) > (add-hook 'temp-buffer-show-hook 'help-mode-finish))) > > But doing things like this was no doubt uncommon. That was the point > of my original bug report asking that Emacs decouple temporary buffer > display from help display, i.e., that it provide a real temp-buffer > display that does not involve help (as does the macro above, in a > workaround way). So you fit a frame shown by `bmkp-with-output-to-plain-temp-buffer' even if the buffer is not in help mode? > What was wrong was the way this decoupling was done in Emacs: > changing the behavior of macro `with-output-to-temp-buffer'. That > was misguided, IMHO, and not necessary. That boat has apparently > sailed, however. Maybe. >> > This construct is similar to `with-output-to-temp-buffer' >> > but, neither runs `temp-buffer-setup-hook' which usually puts >> > the buffer in Help mode, nor `temp-buffer-show-function' (the >> > ACTION argument replaces this). >> >> What is wrong here? > > `temp-buffer-setup-hook' no longer "usually puts the buffer in Help > mode". I see. This is due to Leo's change. >> > And the doc string of `temp-buffer-setup-hook', likewise, says: >> > >> > This hook is normally set up with a function to put the buffer >> > in Help mode. >> >> This is still the case for the release version. IIRC Leo Liu changed it >> on the trunk so the doc-string should be probably updated there. > > The doc string is not updated in the trunk build I cited, from April 29. > I don't have a more recent build. But yes, the doc should be updated - > that was what I was pointing out. Agreed. >> The connection between temporary buffers and help mode is established >> by `with-help-window' which uses `with-temp-buffer-window'. > > Yes, I know. > > And previously such a connection was hardwired in > `with-output-to-temp-buffer'. That behavior should not have changed. > Not because it was good to couple the two behaviors, but because they > have been so coupled for a long time in `with-output-to-temp-buffers'. > > The right approach would have been to (a) leave > `with-output-to-temp-buffer' the way it was, (b) decouple temp-buffer > display from help mode by coming up with new macros, and (c) use the > new macros in the Emacs source code (this has been done). > > That way, the Emacs code would no longer use `with-output-to-temp-buffer', > and thus would no longer depend on a coupling of temp-buffer display > with help, BUT users would not be bothered and existing 3rd-party code > would not be broken by a change to `with-output-to-temp-buffer': it would > continue to work as usual, coupling temp with help as before. Eventually, > `with-output-to-temp-buffer' would be abandoned everywhere, naturally. I might agree with you here. > I pointed this out in my original bug report. That is not what was > done. We now have to live with the consequences of the incompatible > change. That calls for doc that explains the change and how to deal > with it. > > The doc (manual and/or NEWS) should clearly point out (a) what > `with-output-to-temp-buffer' does now, Here ... > and (b) that it does not do what > it has always done before, and (c) this is how to migrate existing code > that uses it: A, B, C,...Z. > > For Emacs's source code the change was trivial: replace uses of > `with-output-to-temp-buffer' with uses of the new macro. ... and here ... > But for > 3rd-party code that supports multiple Emacs versions the change is not > so trivial. > > It is too bad that we have arrived here, but we have. Now let's patch > things up by at least letting users know about the damage done and how > to make do with it. ... you're lumping together a change in `with-help-window' with a change affecting `with-output-to-temp-buffer'. I can only address the former. martin ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#17397: 24.4.50; REGRESSION: `temp-buffer-show-hook' is no longer invoked for `describe-variable' 2014-05-14 17:33 ` martin rudalics @ 2014-05-14 18:41 ` Drew Adams 2014-05-15 7:50 ` martin rudalics 0 siblings, 1 reply; 11+ messages in thread From: Drew Adams @ 2014-05-14 18:41 UTC (permalink / raw) To: martin rudalics, 17397 > >> Both `with-output-to-temp-buffer' and `with-temp-buffer-window' are > >> and can be used for other things than displaying *Help*. > > > > For `with-output-to-temp-buffer': NOW, yes. Before, no - it was > > pretty much hardwired to help mode. > > > > So there will be users and existing 3rd-party code that depend on > > that behavior, which endured for 30 years or so. > > > > This is why I have argued that the right fix for that problem was > > not to change the behavior of `with-output-to-temp-buffer', and thus > > gratuitously break such code and user expectations, but to make a > > new macro for dealing with temporary buffer display that was not > > hardwired to help. > > > > Emacs itself could move to using that new macro, of course, but there > > should be no reason to break the longstanding behavior of > > `with-output-to-temp-buffer'. > > It wasn't my intention to change the longstanding behavior of > `with-output-to-temp-buffer'. Well, it's done. Is it your intention to revert that change? ;-) > > What did I say? Yes, I read that in the manual. What about a function > > that has been on `temp-buffer-setup-hook' or `temp-buffer-show-hook', > > and that was specifically put there for help, i.e., that expects help > > mode? > > Generally assuming that a temporary buffer is always in help mode is > wrong. Callers of `with-output-to-temp-buffer' can always change the > mode as, for example, ediff does. As we have discussed at length elsewhere, `with-output-to-temp-buffer' was NOT just about temporary buffers. In spite of its name, it was about a temporary buffer in help mode. That's a fact of life. I lamented the name-vs-behavior mismatch, and filed a bug about that, but that's the way it became over time, and it's been that way for a very long time now. > > Is it necessarily appropriate to put that function on the *-window-* > > hooks, without modifying it to work around use in a non-help mode? > > I don't think that is the case, in general. And I don't see a hook > > that is analogous and specifically for help. > > > > In my case of `fit-frame-if-one-window', this is not a problem AFAICT > > - I added it to `temp-buffer-window-show-hook'. But in the general > > case there is a problem in moving a function from a temp-buffer hook to > > a temp-buffer-window hook, whenever that function is specifically aimed > > at help (expects help mode). > > > > Sure, users and libraries can also change such a function, so that it > > tests the buffer or mode to see whether it involves help. But this is > > gratuitous hassling, IMO - it should not be necessary. > > > > I made the further point that none of this is documented, AFAICT. > > Nothing about migrating one's use of temp-buffer stuff to whatever > > is appropriate for Emacs 24.4+. Nothing about incompatible > > behavior changes for the temp-buffer stuff. > > It was wrong to put a function on `temp-buffer-show-hook' without > testing whether the associated buffer was in help mode when the > intention is to run the function for help mode buffers only. I disagree. `with-output-to-temp-buffer' simply has never (almost never; I cannot find an old enough version where it was ever the case) been about temp buffers other than help-mode buffers. You cannot just reinterpret things based on what the name suggests it should do. It has not done what its name says for 30 years now. On the contrary, in the very rare cases where someone actually tried to use `w-o-t-t-b' for something other than help mode, s?he had to jump through a hoop to get that behavior. It is not up to all functions that have been on that hook to test whether the buffer is in help mode. The behavior has been to ALWAYS put the buffer in help mode. To get a different behavior you needed to jump through a hoop (removing stuff from `temp-buffer-setup-hook'). > >> > Should I be adding `fit-frame-if-one-window' to `temp-buffer-window' > >> > for Emacs 24.4, to get the effect it has in Emacs 24.3 (and prior) > >> > by being on `temp-buffer-show-hook'? > >> > >> I suppose you want to add it to `temp-buffer-window-show-hook'. > > > > I supposed so too, and I did. I asked the question several times, > > hoping to incite adding some migration explanation to the doc. But > > thanks anyway for confirming. I still hope someone updates the doc. > > > > But again, though that is OK for `fit-frame-if-one-window', since I > > want to invoke that regardless of which temp buffer is displayed, it > > is not OK in general for functions that have been on > > `temp-buffer-show-hook'. > > > > It is likely that at least some such functions are specific to help > > mode, since `temp-buffer-show-hook' was dedicated to help previously > > (and for so long). > > Such functions were based on a wrong assumption. No, they were not. They were based on the longstanding and documented behavior of `with-output-to-temp-buffer'. See above. The macro was simply misnamed for what it did. And there unfortunately was no macro that did what its name suggests. That was the original bug I reported. > > What do you tell library maintainers or users who have a function on > > `temp-buffer-show-hook' that is appropriate for help mode but not > > for other temp buffers? Such information should be in the doc, IMO. > > I tell them here on this list that such a function should have tested > whether the buffer is in help mode. Not helpful, IMO. > >> Emacs has a `temp-buffer-resize-mode' which is tied to temporary buffers > >> and not to `help-mode'. To "deal with other possible uses" of temporary > >> buffers, a function run by `temp-buffer-show-hook' or > >> `temp-buffer-window-show-hook' should probably check whether the buffer > >> is in help mode. > > > > It will have to, now. Too bad. > > On the contrary. Older versions of Emacs running your code will benefit > from more correct code. "It", not "I". I don't have any such code. Anyway, that is not "on the contrary". You confirm that "It will have to, now." What is too bad is that the function code needs to be changed at all. There was no need to change the misnamed `with-output-to-temp-buffer' behavior. You even claimed above that that was not your intention. If the behavior had not been changed then there would be no "too bad" here - no need to change a function someone has on the hook. > So you fit a frame shown by `bmkp-with-output-to-plain-temp-buffer' even > if the buffer is not in help mode? Yes. I already made it clear that my use of `fit-frame-if-one-window' on `temp-buffer-show-hook' is not a problem for non-help modes. And I said clearly that I have added it to `temp-buffer-window-show-hook'. That will not be true in general for functions that users and libraries have on `with-output-to-temp-buffer'. That's the point here. > > What was wrong was the way this decoupling was done in Emacs: > > changing the behavior of macro `with-output-to-temp-buffer'. That > > was misguided, IMHO, and not necessary. That boat has apparently > > sailed, however. > > Maybe. You mean there's hope? > I see. This is due to Leo's change. > > The right approach would have been to (a) leave > > `with-output-to-temp-buffer' the way it was, (b) decouple temp-buffer > > display from help mode by coming up with new macros, and (c) use the > > new macros in the Emacs source code (this has been done). > > > > That way, the Emacs code would no longer use `with-output-to-temp- > > buffer', and thus would no longer depend on a coupling of temp-buffer > > display with help, BUT users would not be bothered and existing 3rd-party > > code would not be broken by a change to `with-output-to-temp-buffer': it > > would continue to work as usual, coupling temp with help as before. > > Eventually, `with-output-to-temp-buffer' would be abandoned everywhere, > > naturally. > > I might agree with you here. You mean there's hope? ;-) > > I pointed this out in my original bug report. That is not what was > > done. We now have to live with the consequences of the incompatible > > change. That calls for doc that explains the change and how to deal > > with it. > > > > The doc (manual and/or NEWS) should clearly point out (a) what > > `with-output-to-temp-buffer' does now, > > Here ... If you mean that it suffices to let users know about such things in a bug thread then I disagree. In particular, NEWS should mention incompatible changes and tell users how to migrate code to accommodate those changes. > > and (b) that it does not do what > > it has always done before, and (c) this is how to migrate existing code > > that uses it: A, B, C,...Z. > > > > For Emacs's source code the change was trivial: replace uses of > > `with-output-to-temp-buffer' with uses of the new macro. > > ... and here ... Dunno what you are saying here; sorry. "Here ... and here ..." what? > ... you're lumping together a change in `with-help-window' with a change > affecting `with-output-to-temp-buffer'. I can only address the former. Why do you say that? I have no problem with the creation of `with-help-window' and its use in Emacs code, including instead of `with-output-to-temp-buffer'. It is the incompatible change to `with-output-to-temp-buffer' that is the problem. That, and a lack of doc mentioning such things to users. ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#17397: 24.4.50; REGRESSION: `temp-buffer-show-hook' is no longer invoked for `describe-variable' 2014-05-14 18:41 ` Drew Adams @ 2014-05-15 7:50 ` martin rudalics 2014-05-15 14:02 ` Drew Adams 2021-10-10 23:01 ` Stefan Kangas 0 siblings, 2 replies; 11+ messages in thread From: martin rudalics @ 2014-05-15 7:50 UTC (permalink / raw) To: Drew Adams, 17397 >> It wasn't my intention to change the longstanding behavior of >> `with-output-to-temp-buffer'. > > Well, it's done. Is it your intention to revert that change? ;-) No. I'm too surprised that it didn't cause any misbehavior so far. > As we have discussed at length elsewhere, `with-output-to-temp-buffer' was > NOT just about temporary buffers. In spite of its name, it was about a > temporary buffer in help mode. That's a fact of life. I lamented the > name-vs-behavior mismatch, and filed a bug about that, but that's the way > it became over time, and it's been that way for a very long time now. Since after Leo has taken it out, I haven't seen any complaints yet. So even if it is a fact of life it apparently didn't have any real impact. Now if only all facts of life were like this ... > I disagree. `with-output-to-temp-buffer' simply has never (almost never; > I cannot find an old enough version where it was ever the case) been about > temp buffers other than help-mode buffers. > > You cannot just reinterpret things based on what the name suggests it > should do. It has not done what its name says for 30 years now. > > On the contrary, in the very rare cases where someone actually tried to > use `w-o-t-t-b' for something other than help mode, s?he had to jump > through a hoop to get that behavior. > > It is not up to all functions that have been on that hook to test whether > the buffer is in help mode. Obviously not. But if a function wants to act only upon buffers in help mode, that function should check whether the buffer is in help mode. > The behavior has been to ALWAYS put the buffer > in help mode. If the intention was to ALWAYS put the buffer in help mode, there would not have been any reason to do it with a hook. Rather, the `help-mode' call would have been hardcoded in `with-output-to-temp-buffer'. > To get a different behavior you needed to jump through a > hoop (removing stuff from `temp-buffer-setup-hook'). IIRC clients do that by simply changing the mode in the BODY of `with-output-to-temp-buffer'. >> > It is likely that at least some such functions are specific to help >> > mode, since `temp-buffer-show-hook' was dedicated to help previously >> > (and for so long). >> >> Such functions were based on a wrong assumption. > > No, they were not. They were based on the longstanding and documented > behavior of `with-output-to-temp-buffer'. See above. The macro was > simply misnamed for what it did. And there unfortunately was no macro > that did what its name suggests. That was the original bug I reported. I see only one manual reference for `temp-buffer-setup-hook' which says that "This hook is normally set up with a function to put the buffer in Help mode.". The term "normally" clearly implies that an application in order to be safe must handle behavior that is not normal. >> > What do you tell library maintainers or users who have a function on >> > `temp-buffer-show-hook' that is appropriate for help mode but not >> > for other temp buffers? Such information should be in the doc, IMO. >> >> I tell them here on this list that such a function should have tested >> whether the buffer is in help mode. > > Not helpful, IMO. Our opinions differ. >> >> Emacs has a `temp-buffer-resize-mode' which is tied to temporary buffers >> >> and not to `help-mode'. To "deal with other possible uses" of temporary >> >> buffers, a function run by `temp-buffer-show-hook' or >> >> `temp-buffer-window-show-hook' should probably check whether the buffer >> >> is in help mode. >> > >> > It will have to, now. Too bad. >> >> On the contrary. Older versions of Emacs running your code will benefit >> from more correct code. > > "It", not "I". I don't have any such code. Then I don't understand why you've been asking for help before. > Anyway, that is not "on the contrary". You confirm that "It will have to, > now." What is too bad is that the function code needs to be changed at all. It should never have been written that way. So "now" is a good occasion to fix this. > There was no need to change the misnamed `with-output-to-temp-buffer' > behavior. You even claimed above that that was not your intention. If the > behavior had not been changed then there would be no "too bad" here - no need > to change a function someone has on the hook. So let's delay this discussion until "someone" shows up. > You mean there's hope? That the `with-output-to-temp-buffer' change will be reverted? If someone finds a real problem in it, yes. >> I might agree with you here. > > You mean there's hope? ;-) See above. >> > I pointed this out in my original bug report. That is not what was >> > done. We now have to live with the consequences of the incompatible >> > change. That calls for doc that explains the change and how to deal >> > with it. >> > >> > The doc (manual and/or NEWS) should clearly point out (a) what >> > `with-output-to-temp-buffer' does now, >> >> Here ... > > If you mean that it suffices to let users know about such things in a > bug thread then I disagree. In particular, NEWS should mention incompatible > changes and tell users how to migrate code to accommodate those changes. > >> > and (b) that it does not do what >> > it has always done before, and (c) this is how to migrate existing code >> > that uses it: A, B, C,...Z. >> > >> > For Emacs's source code the change was trivial: replace uses of >> > `with-output-to-temp-buffer' with uses of the new macro. >> >> ... and here ... > > Dunno what you are saying here; sorry. "Here ... and here ..." what? > >> ... you're lumping together a change in `with-help-window' with a change >> affecting `with-output-to-temp-buffer'. I can only address the former. > > Why do you say that? I have no problem with the creation of > `with-help-window' and its use in Emacs code, including instead of > `with-output-to-temp-buffer'. It is the incompatible > change to `with-output-to-temp-buffer' that is the problem. That, and a > lack of doc mentioning such things to users. If you mean that we should document the removal of `help-mode' from `temp-buffer-setup-hook' then I obviously agree. I have no idea what else you mean to do. martin ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#17397: 24.4.50; REGRESSION: `temp-buffer-show-hook' is no longer invoked for `describe-variable' 2014-05-15 7:50 ` martin rudalics @ 2014-05-15 14:02 ` Drew Adams 2014-05-16 6:22 ` martin rudalics 2021-10-10 23:01 ` Stefan Kangas 1 sibling, 1 reply; 11+ messages in thread From: Drew Adams @ 2014-05-15 14:02 UTC (permalink / raw) To: martin rudalics, 17397 > >> It wasn't my intention to change the longstanding behavior of > >> `with-output-to-temp-buffer'. > > > > Well, it's done. Is it your intention to revert that change? ;-) > > No. I'm too surprised that it didn't cause any misbehavior so far. Bug reports of regressions don't count? > > As we have discussed at length elsewhere, `with-output-to-temp-buffer' > > was NOT just about temporary buffers. In spite of its name, it was about > > a temporary buffer in help mode. That's a fact of life. I lamented the > > name-vs-behavior mismatch, and filed a bug about that, but that's the way > > it became over time, and it's been that way for a very long time now. > > Since after Leo has taken it out, I haven't seen any complaints yet. So > even if it is a fact of life it apparently didn't have any real impact. > Now if only all facts of life were like this ... This and related bug reports are complaints. And they describe real impact. > > I disagree. `with-output-to-temp-buffer' simply has never (almost never; > > I cannot find an old enough version where it was ever the case) been > > about temp buffers other than help-mode buffers. > > > > You cannot just reinterpret things based on what the name suggests it > > should do. It has not done what its name says for 30 years now. > > > > On the contrary, in the very rare cases where someone actually tried to > > use `w-o-t-t-b' for something other than help mode, s?he had to jump > > through a hoop to get that behavior. > > > > It is not up to all functions that have been on that hook to test whether > > the buffer is in help mode. > > Obviously not. But if a function wants to act only upon buffers in help > mode, that function should check whether the buffer is in help mode. Not if the macro used is `with-output-to-temp-buffer', since it has always taken care of establishing help mode. Until now. > > The behavior has been to ALWAYS put the buffer in help mode. > > If the intention was to ALWAYS put the buffer in help mode, there would > not have been any reason to do it with a hook. Rather, the `help-mode' > call would have been hardcoded in `with-output-to-temp-buffer'. Do you really want to argue about what the original intentions were? `with-output-to-temp-buffer' was co-opted to serve only help, fairly early in its history. The name itself betrays a mismatch between its (longstanding) behavior and what its original intention might have been (as reflected by its name). You seem to be stretching, to find any justification whatsoever for this incompatible change to the behavior of `with-output-to-temp-buffer'. If you hide your eyes, of course you won't see - nothing I can do about that. > >> > It is likely that at least some such functions are specific to help > >> > mode, since `temp-buffer-show-hook' was dedicated to help previously > >> > (and for so long). > >> > >> Such functions were based on a wrong assumption. > > > > No, they were not. They were based on the longstanding and documented > > behavior of `with-output-to-temp-buffer'. See above. The macro was > > simply misnamed for what it did. And there unfortunately was no macro > > that did what its name suggests. That was the original bug I reported. > > I see only one manual reference for `temp-buffer-setup-hook' which says > that "This hook is normally set up with a function to put the buffer in > Help mode.". The term "normally" clearly implies that an application in > order to be safe must handle behavior that is not normal. You are ignoring reality. Code and users have had a reasonable expectation for 30 years about the behavior of `with-output-to-temp-buffer', and that has now been thrown out the window gratuitously. Gratuitously, because nothing was gained by it. Emacs could just as well have moved on to use new and different macros, without changing the `w-o-t-t-b' behavior. That was totally uncalled for and serves no purpose. Not necessary. > >> > What do you tell library maintainers or users who have a function on > >> > `temp-buffer-show-hook' that is appropriate for help mode but not > >> > for other temp buffers? Such information should be in the doc, IMO. > >> > >> I tell them here on this list that such a function should have tested > >> whether the buffer is in help mode. > > > > Not helpful, IMO. > > Our opinions differ. Yes. Some info from a developer that is only buried in some bug thread might be helpful to the few who read that thread. But not more useful than that. Emacs users deserve better communication. Especially about incompatible changes. Especially about behavior that has remained stable for 30 years. Not communicating such info properly is irresponsible, IMHO. > If you mean that we should document the removal of `help-mode' from > `temp-buffer-setup-hook' then I obviously agree. Good. And consequently from `with-output-to-temp-buffer-buffer', which is what users will see in their code. Start with that. Plus an explanation of how to migrate code that expects `with-output-to-temp-buffer-buffer' to establish help mode. (Mention `with-help-window', `with-temp-buffer-window', etc.) Better would of course be to not screw `with-output-to-temp-buffer' at all. Emacs gains nothing by messing with that, and would lose nothing by restoring its behavior. I've seen no argument showing a loss by doing that. Do you have such an argument? Changing `w-o-t-t-b' is not at all necessary to accomplish the clean separation of temp buffer setup from help buffer setup that was the goal (and which I was the one to propose, FWIW). ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#17397: 24.4.50; REGRESSION: `temp-buffer-show-hook' is no longer invoked for `describe-variable' 2014-05-15 14:02 ` Drew Adams @ 2014-05-16 6:22 ` martin rudalics 0 siblings, 0 replies; 11+ messages in thread From: martin rudalics @ 2014-05-16 6:22 UTC (permalink / raw) To: Drew Adams, 17397 > You are ignoring reality. Indeed. I'll stop doing that now. martin ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#17397: 24.4.50; REGRESSION: `temp-buffer-show-hook' is no longer invoked for `describe-variable' 2014-05-15 7:50 ` martin rudalics 2014-05-15 14:02 ` Drew Adams @ 2021-10-10 23:01 ` Stefan Kangas 1 sibling, 0 replies; 11+ messages in thread From: Stefan Kangas @ 2021-10-10 23:01 UTC (permalink / raw) To: martin rudalics; +Cc: 17397 tags 17397 + wontfix notabug close 17397 thanks martin rudalics <rudalics@gmx.at> writes: >>> It wasn't my intention to change the longstanding behavior of >>> `with-output-to-temp-buffer'. >> >> Well, it's done. Is it your intention to revert that change? ;-) > > No. I'm too surprised that it didn't cause any misbehavior so far. It's kind of hard to follow this bug report. From what I gather, it's about reverting some change that was made many years ago, and the conclusion was that we don't intend to do that. In any case, that's even more unlikely to happen now, seven years later, so it hardly makes sense to keep this open. I'm therefore closing this bug report. ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2021-10-10 23:01 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-05-03 21:32 bug#17397: 24.4.50; REGRESSION: `temp-buffer-show-hook' is no longer invoked for `describe-variable' Drew Adams 2014-05-03 21:41 ` Drew Adams 2014-05-13 21:24 ` Drew Adams 2014-05-14 7:06 ` martin rudalics 2014-05-14 16:25 ` Drew Adams 2014-05-14 17:33 ` martin rudalics 2014-05-14 18:41 ` Drew Adams 2014-05-15 7:50 ` martin rudalics 2014-05-15 14:02 ` Drew Adams 2014-05-16 6:22 ` martin rudalics 2021-10-10 23:01 ` Stefan Kangas
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.