* Run `window-configuration-change-hook` in Lisp code? @ 2024-11-06 19:40 Joost Kremers 2024-11-07 4:47 ` Stefan Monnier via Users list for the GNU Emacs text editor 0 siblings, 1 reply; 10+ messages in thread From: Joost Kremers @ 2024-11-06 19:40 UTC (permalink / raw) To: gnu-emacs-help Hi list, Something that just came up: is it OK to run `window-configuration-change-hook` in Lisp code? The doc string says "Functions called during redisplay when window configuration has changed", which gives me the impression that it's *only* meant to be run during redisplay, i.e., not during Lisp code. Is that a correct assumption? TIA -- Joost Kremers Life has its moments ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Run `window-configuration-change-hook` in Lisp code? 2024-11-06 19:40 Run `window-configuration-change-hook` in Lisp code? Joost Kremers @ 2024-11-07 4:47 ` Stefan Monnier via Users list for the GNU Emacs text editor 2024-11-07 5:35 ` James Cherti 2024-11-07 7:24 ` Eli Zaretskii 0 siblings, 2 replies; 10+ messages in thread From: Stefan Monnier via Users list for the GNU Emacs text editor @ 2024-11-07 4:47 UTC (permalink / raw) To: help-gnu-emacs > Something that just came up: is it OK to run > `window-configuration-change-hook` in Lisp code? The doc string says > "Functions called during redisplay when window configuration has changed", > which gives me the impression that it's *only* meant to be run during > redisplay, i.e., not during Lisp code. That description describes when the C code runs this hook. Do you want to run this hook yourself manually at other times? If so, why? Stefan ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Run `window-configuration-change-hook` in Lisp code? 2024-11-07 4:47 ` Stefan Monnier via Users list for the GNU Emacs text editor @ 2024-11-07 5:35 ` James Cherti 2024-11-08 14:12 ` Stefan Monnier via Users list for the GNU Emacs text editor 2024-11-07 7:24 ` Eli Zaretskii 1 sibling, 1 reply; 10+ messages in thread From: James Cherti @ 2024-11-07 5:35 UTC (permalink / raw) To: help-gnu-emacs Hello Stefan, Here is a summary of an email I sent to emacs-devel (Subject: Should text-scale trigger hooks?): I have identified an issue that affects Emacs packages such as eat (terminal) and visual-fill-column. Functions like `text-scale-increase`, `text-scale-decrease`, and `text-scale-set` do not trigger hooks like `window-configuration-change-hook`. As a result, the eat package does not immediately update the window when the text scale is changed, and visual-fill-column does not update the margin right away (it updates only after the window is resized). The workaround to fix this issue is to call the following after the text scale is changed: (run-hooks 'window-configuration-change-hook) OP wants to know whether it is good practice or bad practice to run the `window-configuration-change-hook` hooks from a third-party package in this situation, as a workaround to resolve the issue described above. (Check: https://codeberg.org/joostkremers/visual-fill-column/pulls/16 ). -- James Cherti https://www.jamescherti.com/ On 2024-11-06 23:47, Stefan Monnier via Users list for the GNU Emacs text editor wrote: >> Something that just came up: is it OK to run >> `window-configuration-change-hook` in Lisp code? The doc string says >> "Functions called during redisplay when window configuration has changed", >> which gives me the impression that it's *only* meant to be run during >> redisplay, i.e., not during Lisp code. > > That description describes when the C code runs this hook. > Do you want to run this hook yourself manually at other times? > If so, why? > > > Stefan > > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Run `window-configuration-change-hook` in Lisp code? 2024-11-07 5:35 ` James Cherti @ 2024-11-08 14:12 ` Stefan Monnier via Users list for the GNU Emacs text editor 2024-11-08 14:55 ` Joost Kremers 2024-11-08 15:51 ` James Cherti 0 siblings, 2 replies; 10+ messages in thread From: Stefan Monnier via Users list for the GNU Emacs text editor @ 2024-11-08 14:12 UTC (permalink / raw) To: help-gnu-emacs > The workaround to fix this issue is to call the following after the text > scale is changed (run-hooks 'window-configuration-change-hook) From where? The way I see it, another workaround is for those packages which depend strongly on such single-size monospace text to add the relevant function to `text-scale-mode-hook`. > OP wants to know whether it is good practice or bad practice to run the > `window-configuration-change-hook` hooks from a third-party package in this > situation, as a workaround to resolve the issue described above. (Check: > https://codeberg.org/joostkremers/visual-fill-column/pulls/16 ). I'd put it in the bad practice column (especially since that hook is documented to be run in a fairly special way which `run-hooks` doesn't follow). Then again, looking at that patch I can't understand why it would work. Does it work? If so how? That code is run only when `visual-fill-mode` is enabled, AFAICT, so whether it runs `window-configuration-change-hook` won't make any difference when text-scale is used. Stefan ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Run `window-configuration-change-hook` in Lisp code? 2024-11-08 14:12 ` Stefan Monnier via Users list for the GNU Emacs text editor @ 2024-11-08 14:55 ` Joost Kremers 2024-11-08 17:55 ` Stefan Monnier 2024-11-08 15:51 ` James Cherti 1 sibling, 1 reply; 10+ messages in thread From: Joost Kremers @ 2024-11-08 14:55 UTC (permalink / raw) To: Stefan Monnier via Users list for the GNU Emacs text editor Cc: Stefan Monnier On Fri, Nov 08 2024, Stefan Monnier via Users list for the GNU Emacs text editor wrote: > Then again, looking at that patch I can't understand why it would work. > Does it work? If so how? That code is run only when `visual-fill-mode` > is enabled, AFAICT, Yes, but that's the point. When `visual-fill-column-mode` is active, a change in text size should trigger a recalculation of the window margins by `visual-fill-column-mode`. Eli made two suggestions (`text-scale-mode-hook` and `add-variable-watcher` on `face-remap-alist`). I'll give them a try as soon as I find some time. -- Joost Kremers Life has its moments ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Run `window-configuration-change-hook` in Lisp code? 2024-11-08 14:55 ` Joost Kremers @ 2024-11-08 17:55 ` Stefan Monnier 0 siblings, 0 replies; 10+ messages in thread From: Stefan Monnier @ 2024-11-08 17:55 UTC (permalink / raw) To: Joost Kremers; +Cc: Stefan Monnier via Users list for the GNU Emacs text editor >> Then again, looking at that patch I can't understand why it would work. >> Does it work? If so how? That code is run only when `visual-fill-mode` >> is enabled, AFAICT, > Yes, but that's the point. When `visual-fill-column-mode` is active, a > change in text size should trigger a recalculation of the window margins by > `visual-fill-column-mode`. But the code is not run when the mode is active but when the mode is being activated. So I don't see how the patch helps: the previous code already called the relevant function in that case, AFAICT the new code just runs it N times redundantly (by running the N hooks on which we register that same function). Stefan ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Run `window-configuration-change-hook` in Lisp code? 2024-11-08 14:12 ` Stefan Monnier via Users list for the GNU Emacs text editor 2024-11-08 14:55 ` Joost Kremers @ 2024-11-08 15:51 ` James Cherti 2024-11-08 17:47 ` [External] : " Drew Adams 1 sibling, 1 reply; 10+ messages in thread From: James Cherti @ 2024-11-08 15:51 UTC (permalink / raw) To: help-gnu-emacs Thank you for confirming that you would place it in the 'bad practices' column. Yes, the patch works; however, I closed the pull request as it was too specific to another package I'm using, which restores persisted text scale through a hook in `window-configuration-change-hook`. In the general case, however, the need to run window-configuration-change-hook during text-scale-mode-hook is not particularly important. -- James Cherti https://www.jamescherti.com/ On 2024-11-08 09:12, Stefan Monnier via Users list for the GNU Emacs text editor wrote: >> The workaround to fix this issue is to call the following after the text >> scale is changed (run-hooks 'window-configuration-change-hook) > >>From where? > > The way I see it, another workaround is for those packages which depend > strongly on such single-size monospace text to add the relevant function > to `text-scale-mode-hook`. > >> OP wants to know whether it is good practice or bad practice to run the >> `window-configuration-change-hook` hooks from a third-party package in this >> situation, as a workaround to resolve the issue described above. (Check: >> https://codeberg.org/joostkremers/visual-fill-column/pulls/16 ). > > I'd put it in the bad practice column (especially since that hook > is documented to be run in a fairly special way which `run-hooks` > doesn't follow). > > Then again, looking at that patch I can't understand why it would work. > Does it work? If so how? That code is run only when `visual-fill-mode` > is enabled, AFAICT, so whether it runs > `window-configuration-change-hook` won't make any difference when > text-scale is used. > > > Stefan > > ^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [External] : Re: Run `window-configuration-change-hook` in Lisp code? 2024-11-08 15:51 ` James Cherti @ 2024-11-08 17:47 ` Drew Adams 0 siblings, 0 replies; 10+ messages in thread From: Drew Adams @ 2024-11-08 17:47 UTC (permalink / raw) To: James Cherti, help-gnu-emacs@gnu.org Coming late to this thread, and with nothing special to say about the specific trigger/hook question. But with something to offer perhaps for the original/underlying request of allowing a buffer in `visual-line-mode' to have its window change size to accommodate text scaling, i.e., keep the same visual-fill position. IOW, maybe think of the current discussion as possibly an X-Y question: you have an idea of what a solution to your original question might be, so you ask a question about that (trigger). If I've misunderstood something, then please ignore... ___ I brought up the original question decades ago, as soon as text-scaling was added to Emacs. Not wrt visual-line-mode, in particular (that didn't exist back then), but generally. I suggested that users should be able to choose whether the window gets automatically scaled in conjunction with text scaling, i.e., as an optional behavior. For one thing, this saves horizontal screen space when text is shrunk - wasted blank window space at line ends. This was roundly rejected by Eli at the time, IIRC, saying that no one would ever want such behavior. So I implemented it in a little library, `face-remap+.el' (back in 2009). I wouldn't be without it. It works with and without `visual-line-mode'. It really has _nothing to do with `visual-line-mode'_: the question/request is only about keeping the relation between the text size and the window size. It just so happens that with `visual-line-mode' lines are visually fit to the window width. The behavior is controlled by option `text-scale-resize-window': text-scale-resize-window is a variable defined in `face-remap+.el’. Non-nil means text scaling resizes the window or frame accordingly. For example, if you use ‘C-x C--’ (‘text-scale-decrease’)’ to make the text smaller, then the window or frame is made smaller by a similar factor. ___ You can choose to resize the window horizontally only, vertically only, both, or neither (off). (There's also a global minor mode, `text-scale-keep-mode', which when on keeps the same text-scaling when a buffer changes major mode. If off, you get the vanilla Emacs behavior that text-scaling is lost when the major mode changes.) ___ Apologetically, `face-remap+.el' redefines vanilla function `text-scale-increase', to respect option `text-scale-resize-window'. I'd still suggest that such an option be added to vanilla Emacs, FWIW. (Better late than never...) ___ https://www.emacswiki.org/emacs/download/face-remap%2b.el ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Run `window-configuration-change-hook` in Lisp code? 2024-11-07 4:47 ` Stefan Monnier via Users list for the GNU Emacs text editor 2024-11-07 5:35 ` James Cherti @ 2024-11-07 7:24 ` Eli Zaretskii 2024-11-07 8:01 ` Joost Kremers 1 sibling, 1 reply; 10+ messages in thread From: Eli Zaretskii @ 2024-11-07 7:24 UTC (permalink / raw) To: help-gnu-emacs > Date: Wed, 06 Nov 2024 23:47:02 -0500 > From: Stefan Monnier via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> > > > Something that just came up: is it OK to run > > `window-configuration-change-hook` in Lisp code? The doc string says > > "Functions called during redisplay when window configuration has changed", > > which gives me the impression that it's *only* meant to be run during > > redisplay, i.e., not during Lisp code. > > That description describes when the C code runs this hook. > Do you want to run this hook yourself manually at other times? > If so, why? Indeed, the idea is that whatever a Lisp program does, it eventually causes the display engine to make changes which trigger calls to this hook. So if that doesn't happen for some Lisp program, we need to understand what that program does, and why it expects this hook to be called. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Run `window-configuration-change-hook` in Lisp code? 2024-11-07 7:24 ` Eli Zaretskii @ 2024-11-07 8:01 ` Joost Kremers 0 siblings, 0 replies; 10+ messages in thread From: Joost Kremers @ 2024-11-07 8:01 UTC (permalink / raw) To: Eli Zaretskii; +Cc: help-gnu-emacs Hi Stefan & Eli, On Thu, Nov 07 2024, Eli Zaretskii wrote: >> Date: Wed, 06 Nov 2024 23:47:02 -0500 >> From: Stefan Monnier via Users list for the GNU Emacs text editor >> <help-gnu-emacs@gnu.org> >> >> > Something that just came up: is it OK to run >> > `window-configuration-change-hook` in Lisp code? The doc string says >> > "Functions called during redisplay when window configuration has >> > changed", >> > which gives me the impression that it's *only* meant to be run during >> > redisplay, i.e., not during Lisp code. >> >> That description describes when the C code runs this hook. >> Do you want to run this hook yourself manually at other times? >> If so, why? > > Indeed, the idea is that whatever a Lisp program does, it eventually > causes the display engine to make changes which trigger calls to this > hook. So if that doesn't happen for some Lisp program, we need to > understand what that program does, and why it expects this hook to be > called. I asked this question in relation to the issue that James Cherti posted about on emacs-devel <https://lists.gnu.org/archive/html/emacs-devel/2024-11/msg00208.html>. Perhaps we should continue the discussion there. -- Joost Kremers Life has its moments ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2024-11-08 17:55 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-11-06 19:40 Run `window-configuration-change-hook` in Lisp code? Joost Kremers 2024-11-07 4:47 ` Stefan Monnier via Users list for the GNU Emacs text editor 2024-11-07 5:35 ` James Cherti 2024-11-08 14:12 ` Stefan Monnier via Users list for the GNU Emacs text editor 2024-11-08 14:55 ` Joost Kremers 2024-11-08 17:55 ` Stefan Monnier 2024-11-08 15:51 ` James Cherti 2024-11-08 17:47 ` [External] : " Drew Adams 2024-11-07 7:24 ` Eli Zaretskii 2024-11-07 8:01 ` Joost Kremers
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).