* Adding olivetti to GNU ELPA @ 2019-04-25 8:32 Paul W. Rankin 2019-04-25 8:56 ` Eli Zaretskii 0 siblings, 1 reply; 35+ messages in thread From: Paul W. Rankin @ 2019-04-25 8:32 UTC (permalink / raw) To: emacs-devel Hello, I'd be quite happy if FSF would accept olivetti into GNU ELPA. I already have a copyright assignment with FSF for fountain-mode, and I think I listed olivetti on it at the same time. The repository is here: https://github.com/rnkn/olivetti The package is modestly popular (271 GitHub Likes) but it tends to run into issues when Emacs display code changes upon major releases, and unfortunately I don't have enough time to devote to continued maintenance. Thanks, I hope you'll take this little bird under your wing :) -- https://www.paulwrankin.com ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-04-25 8:32 Adding olivetti to GNU ELPA Paul W. Rankin @ 2019-04-25 8:56 ` Eli Zaretskii 2019-04-25 12:32 ` Paul W. Rankin 2019-04-26 1:17 ` Richard Stallman 0 siblings, 2 replies; 35+ messages in thread From: Eli Zaretskii @ 2019-04-25 8:56 UTC (permalink / raw) To: Paul W. Rankin; +Cc: emacs-devel > Date: Thu, 25 Apr 2019 04:32:39 -0400 > From: "Paul W. Rankin" <hello@paulwrankin.com> > > I'd be quite happy if FSF would accept olivetti into GNU ELPA. I already > have a copyright assignment with FSF for fountain-mode, and I think I > listed olivetti on it at the same time. Your assignment is for "past and future changes" to Emacs, not specifically to any package. I think the current procedure is that you should explicitly write that you contribute a package to Emacs, and then your assignment will cover that package as well. Thanks. ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-04-25 8:56 ` Eli Zaretskii @ 2019-04-25 12:32 ` Paul W. Rankin 2019-04-25 12:43 ` Eli Zaretskii 2019-04-26 1:17 ` Richard Stallman 1 sibling, 1 reply; 35+ messages in thread From: Paul W. Rankin @ 2019-04-25 12:32 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel On Thu, 25 Apr 2019, at 6:56 PM, Eli Zaretskii wrote: > Your assignment is for "past and future changes" to Emacs, not > specifically to any package. > > I think the current procedure is that you should explicitly write that > you contribute a package to Emacs, and then your assignment will cover > that package as well. I don't understand what you mean. Is my first email enough to cover olivetti? ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-04-25 12:32 ` Paul W. Rankin @ 2019-04-25 12:43 ` Eli Zaretskii 2019-04-25 13:01 ` Paul W. Rankin 0 siblings, 1 reply; 35+ messages in thread From: Eli Zaretskii @ 2019-04-25 12:43 UTC (permalink / raw) To: Paul W. Rankin; +Cc: emacs-devel > Date: Thu, 25 Apr 2019 08:32:16 -0400 > From: "Paul W. Rankin" <hello@paulwrankin.com> > Cc: emacs-devel@gnu.org > > > I think the current procedure is that you should explicitly write that > > you contribute a package to Emacs, and then your assignment will cover > > that package as well. > > I don't understand what you mean. Is my first email enough to cover olivetti? I think something more explicit is needed, not just a request to add olivetti to ELPA. The main issue here is that your assignment is for Emacs, and olivetti is not currently part of Emacs. We need some explicit wording to allow us to consider it part of Emacs, so that your copyright assignment would cover it. ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-04-25 12:43 ` Eli Zaretskii @ 2019-04-25 13:01 ` Paul W. Rankin 2019-04-25 14:30 ` Eli Zaretskii 0 siblings, 1 reply; 35+ messages in thread From: Paul W. Rankin @ 2019-04-25 13:01 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel On Thu, 25 Apr 2019, at 10:44 PM, Eli Zaretskii wrote: > I think something more explicit is needed, not just a request to add > olivetti to ELPA. The main issue here is that your assignment is for > Emacs, and olivetti is not currently part of Emacs. We need some > explicit wording to allow us to consider it part of Emacs, so that > your copyright assignment would cover it. I see. I've pushed a commit and tag that that explicitly says it's part of Emacs and (c) FSF, and signed that commit/tag. ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-04-25 13:01 ` Paul W. Rankin @ 2019-04-25 14:30 ` Eli Zaretskii 2019-05-08 4:07 ` Paul W. Rankin 0 siblings, 1 reply; 35+ messages in thread From: Eli Zaretskii @ 2019-04-25 14:30 UTC (permalink / raw) To: Paul W. Rankin; +Cc: emacs-devel > Date: Thu, 25 Apr 2019 09:01:01 -0400 > From: "Paul W. Rankin" <hello@paulwrankin.com> > Cc: emacs-devel@gnu.org > > On Thu, 25 Apr 2019, at 10:44 PM, Eli Zaretskii wrote: > > I think something more explicit is needed, not just a request to add > > olivetti to ELPA. The main issue here is that your assignment is for > > Emacs, and olivetti is not currently part of Emacs. We need some > > explicit wording to allow us to consider it part of Emacs, so that > > your copyright assignment would cover it. > > I see. I've pushed a commit and tag that that explicitly says it's part > of Emacs and (c) FSF, and signed that commit/tag. Thanks. ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-04-25 14:30 ` Eli Zaretskii @ 2019-05-08 4:07 ` Paul W. Rankin 2019-05-08 6:20 ` Eli Zaretskii ` (2 more replies) 0 siblings, 3 replies; 35+ messages in thread From: Paul W. Rankin @ 2019-05-08 4:07 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel I've pushed some changes provided by Stefan for compatibility with Emacs 27.x. I'm sorry to say but this goes a bit over my head... From Emacs 24 - 27 there seem to be three hooks that have shifting/overlapping capabilities. The hooks are: - window-configuration-change-hook - post-command-hook - window-size-change-functions When I first created the minor mode, window-configuration-change-hook was enough for all situations I encountered. With the introduction of display-line-numbers-mode, Eli suggested I change this to post-command-hook. This seemed not to cover a few window resize events, so I added window-configuration-change-hook back, but I've since received complaints from people experiencing laggy input, but then also errors with Emacs 27.x. At this point I've become too confused to find an adequate solution between the Three Hooks so I (and I'm sure those who use the minor mode) would love if someone more familiar with the changing nature of the Three Hooks could provide a solution... I *think* what is needed is a way to apply the hooks contingent on emacs-major-version <= 24 and <= 25 or 26(?) and <= 27. Much appreciation :) -- https://www.paulwrankin.com ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-08 4:07 ` Paul W. Rankin @ 2019-05-08 6:20 ` Eli Zaretskii 2019-05-09 6:54 ` Paul W. Rankin 2019-05-08 14:07 ` Stefan Monnier 2019-05-08 15:45 ` Stephen Leake 2 siblings, 1 reply; 35+ messages in thread From: Eli Zaretskii @ 2019-05-08 6:20 UTC (permalink / raw) To: Paul W. Rankin; +Cc: emacs-devel > From: "Paul W. Rankin" <hello@paulwrankin.com> > Cc: emacs-devel@gnu.org > Date: Wed, 08 May 2019 14:07:24 +1000 > > I'm sorry to say but this goes a bit over my head... From Emacs 24 - 27 > there seem to be three hooks that have shifting/overlapping > capabilities. The hooks are: > > - window-configuration-change-hook > - post-command-hook > - window-size-change-functions > > When I first created the minor mode, window-configuration-change-hook > was enough for all situations I encountered. > > With the introduction of display-line-numbers-mode, Eli suggested I > change this to post-command-hook. This seemed not to cover a few window > resize events, so I added window-configuration-change-hook back, but > I've since received complaints from people experiencing laggy input, but > then also errors with Emacs 27.x. > > At this point I've become too confused to find an adequate solution > between the Three Hooks so I (and I'm sure those who use the minor mode) > would love if someone more familiar with the changing nature of the > Three Hooks could provide a solution... I agree that we have a royal mess with these hooks. And if you think the above 3 are all of it, then, unfortunately, they aren't: there are also pre-redisplay-functions and window-scroll-functions -- those may be necessary if your mode needs to pay attention to when the screen space used by line numbers changes, either because the buffer is scrolled past the point where the line numbers need more or less digits than before, or because the user customizes the line-number face in a way which changes the font used by the face, with your mode already active. I'd like to try to help you, but I'm not sure I understand the problem well enough. Are you asking whether what you did could be simplified by using less hooks? Or are you saying that the current code doesn't yet handle well some situations? In the latter case, could you please describe those problematic situations? > I *think* what is needed is a way to apply the hooks contingent on > emacs-major-version <= 24 and <= 25 or 26(?) and <= 27. Yes, and there's nothing wrong with that for a package that wants to support multiple Emacs versions. Thanks. ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-08 6:20 ` Eli Zaretskii @ 2019-05-09 6:54 ` Paul W. Rankin 2019-05-09 7:53 ` Eli Zaretskii 2019-05-09 8:14 ` martin rudalics 0 siblings, 2 replies; 35+ messages in thread From: Paul W. Rankin @ 2019-05-09 6:54 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel On Wed, May 08 2019, Eli Zaretskii wrote: >> From: "Paul W. Rankin" <hello@paulwrankin.com> >> Cc: emacs-devel@gnu.org >> Date: Wed, 08 May 2019 14:07:24 +1000 >> >> I'm sorry to say but this goes a bit over my head... From Emacs 24 - >> 27 >> there seem to be three hooks that have shifting/overlapping >> capabilities. The hooks are: >> >> - window-configuration-change-hook >> - post-command-hook >> - window-size-change-functions >> >> When I first created the minor mode, window-configuration-change-hook >> was enough for all situations I encountered. > I agree that we have a royal mess with these hooks. And if you think > the above 3 are all of it, then, unfortunately, they aren't: there are > also pre-redisplay-functions and window-scroll-functions -- those may > be necessary if your mode needs to pay attention to when the screen > space used by line numbers changes, either because the buffer is > scrolled past the point where the line numbers need more or less > digits than before, or because the user customizes the line-number > face in a way which changes the font used by the face, with your mode > already active. > > I'd like to try to help you, but I'm not sure I understand the problem > well enough. Are you asking whether what you did could be simplified > by using less hooks? Or are you saying that the current code doesn't > yet handle well some situations? In the latter case, could you please > describe those problematic situations? I think there are three separate but perhaps related problems. At its most basic, olivetti is really just a single main function, which could be distilled to: (set-window-margins (current-window) (/ 2 (- (window-width) olivetti-body-width))) There are some other ancillary functions, but really it's just a case of running this function in all windows displaying the current buffer when olivetti-body-width changes or when the window width changes. For compatibility with changes in Emacs 25.x, we also reset the margins to 0 before any window splitting, to prevent the combined window width being too large to split. So the three problems I'm running into are: 1. Some users have complained of lagging input, which seems to be due to olivetti setting the margins too often, i.e. on too many hooks. So using the minimal number of hooks is preferable. 2. But I've experienced olivetti failing to set the margins during a few common cases, e.g.: - splitting window with icomplete "*Completions*" buffer - splitting window with ispell-word "*Choices*" buffer - splitting window with magit-status - splitting window vertically with any buffers in a side-window in the same frame (which results in window being too large to split -- I think this is a separate issue) It would be nice to achieve consistency with these. 3. Issues scrolling with display-line-numbers-mode, but I don't mind about this. >> I *think* what is needed is a way to apply the hooks contingent on >> emacs-major-version <= 24 and <= 25 or 26(?) and <= 27. > > Yes, and there's nothing wrong with that for a package that wants to > support multiple Emacs versions. My difficulty is that I don't understand enough how these hooks have changed from 24 -> 27. Stefan tried to explain it to me, but... I still didn't get it :( -- https://www.paulwrankin.com ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-09 6:54 ` Paul W. Rankin @ 2019-05-09 7:53 ` Eli Zaretskii 2019-05-09 8:14 ` martin rudalics 1 sibling, 0 replies; 35+ messages in thread From: Eli Zaretskii @ 2019-05-09 7:53 UTC (permalink / raw) To: Paul W. Rankin; +Cc: emacs-devel > From: "Paul W. Rankin" <hello@paulwrankin.com> > Cc: emacs-devel@gnu.org > Date: Thu, 09 May 2019 16:54:48 +1000 > > So the three problems I'm running into are: > > 1. Some users have complained of lagging input, which seems to be due to > olivetti setting the margins too often, i.e. on too many hooks. So using > the minimal number of hooks is preferable. > > 2. But I've experienced olivetti failing to set the margins during a few > common cases, e.g.: > - splitting window with icomplete "*Completions*" buffer > - splitting window with ispell-word "*Choices*" buffer > - splitting window with magit-status > - splitting window vertically with any buffers in a side-window in the > same frame (which results in window being too large to split -- I > think this is a separate issue) > > It would be nice to achieve consistency with these. > > 3. Issues scrolling with display-line-numbers-mode, but I don't mind > about this. > > >> I *think* what is needed is a way to apply the hooks contingent on > >> emacs-major-version <= 24 and <= 25 or 26(?) and <= 27. > > > > Yes, and there's nothing wrong with that for a package that wants to > > support multiple Emacs versions. > > My difficulty is that I don't understand enough how these hooks have > changed from 24 -> 27. Stefan tried to explain it to me, but... I still > didn't get it :( My suggestion would be to deal with each problem separately. Are these problems described somewhere in more detail, including perhaps reproduction recipes? If they are, just point to those descriptions, otherwise I suggest to file bug reports for them (or ask the users who complained to do so). Then we should ask Martin to look into that, since he's our best expert on this stuff. For Emacs 27, Stefan's recommendation is clear, I think: use only one hook he mentioned, and if there are any problems, have them reported, because they might be bugs in how we implemented that hook. HTH ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-09 6:54 ` Paul W. Rankin 2019-05-09 7:53 ` Eli Zaretskii @ 2019-05-09 8:14 ` martin rudalics 2019-05-09 13:30 ` Stefan Monnier 2019-05-14 5:16 ` Paul W. Rankin 1 sibling, 2 replies; 35+ messages in thread From: martin rudalics @ 2019-05-09 8:14 UTC (permalink / raw) To: Paul W. Rankin, Eli Zaretskii; +Cc: emacs-devel > (set-window-margins > (current-window) (/ 2 (- (window-width) olivetti-body-width))) What is 'current-window' and how does it relate to 'selected-window'? > There are some other ancillary functions, but really it's just a > case of running this function in all windows displaying the current > buffer when olivetti-body-width changes or when the window width > changes. What does "current buffer" refer to here? I suppose you want to run "this function" whenever the body width of a window showing a buffer with olivetti mode enabled changes. So with Emacs 27 it should suffice to add your function to `window-size-change-functions' for each buffer where olivetti mode is enabled > 1. Some users have complained of lagging input, which seems to be > due to olivetti setting the margins too often, i.e. on too many > hooks. So using the minimal number of hooks is preferable. 'set-window-margins' doesn't do much when margins don't change. So I suppose that for some reason olivetti mode wants margins to change too often. If so, could you try to find out why? > 2. But I've experienced olivetti failing to set the margins during a few common cases, e.g.: > - splitting window with icomplete "*Completions*" buffer > - splitting window with ispell-word "*Choices*" buffer > - splitting window with magit-status > - splitting window vertically with any buffers in a side-window in the same frame (which results in window being too large to split -- I think this is a separate issue) Too _large_ to split? > It would be nice to achieve consistency with these. Are these failures due to the fact that a releated hook is not run or are there other issues? martin ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-09 8:14 ` martin rudalics @ 2019-05-09 13:30 ` Stefan Monnier 2019-05-10 8:00 ` martin rudalics 2019-05-14 5:16 ` Paul W. Rankin 1 sibling, 1 reply; 35+ messages in thread From: Stefan Monnier @ 2019-05-09 13:30 UTC (permalink / raw) To: emacs-devel > 'set-window-margins' doesn't do much when margins don't change. So I > suppose that for some reason olivetti mode wants margins to change too > often. If so, could you try to find out why? I think the issue here is that even when margins "aren't modified", olivetti does change them, because it first sets them to 0 before setting them again to the previous value, as can be seen in olivetti--set-margins (which is function called for post-command-hook, window-size-change-functions, and friends): (defun olivetti--set-margins (&optional window-or-frame) [...] (olivetti-reset-window window-or-frame) [...] (set-window-margins window-or-frame left-margin right-margin)))) (defun olivetti-reset-window (window) [...] (set-window-margins window nil)) I don't know why it starts by calling olivetti-reset-window. But I think that for Emacs-27, it doesn't matter because it should only use window-size-change-functions so the extra (set-window-margins window nil) shouldn't be problematic. Stefan ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-09 13:30 ` Stefan Monnier @ 2019-05-10 8:00 ` martin rudalics 0 siblings, 0 replies; 35+ messages in thread From: martin rudalics @ 2019-05-10 8:00 UTC (permalink / raw) To: Stefan Monnier, emacs-devel > I think the issue here is that even when margins "aren't modified", > olivetti does change them, because it first sets them to 0 before > setting them again to the previous value, as can be seen in > olivetti--set-margins (which is function called for post-command-hook, > window-size-change-functions, and friends): > > (defun olivetti--set-margins (&optional window-or-frame) > [...] > (olivetti-reset-window window-or-frame) > [...] > (set-window-margins window-or-frame left-margin right-margin)))) > > (defun olivetti-reset-window (window) > [...] > (set-window-margins window nil)) > > I don't know why it starts by calling olivetti-reset-window. > But I think that for Emacs-27, it doesn't matter because it should only > use window-size-change-functions so the extra (set-window-margins window > nil) shouldn't be problematic. 'window-size-change-functions' gets also called when the total or text height of the window changes. In either of these cases, resetting the margins is gratuitous. martin ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-09 8:14 ` martin rudalics 2019-05-09 13:30 ` Stefan Monnier @ 2019-05-14 5:16 ` Paul W. Rankin 2019-05-14 7:04 ` Paul W. Rankin ` (3 more replies) 1 sibling, 4 replies; 35+ messages in thread From: Paul W. Rankin @ 2019-05-14 5:16 UTC (permalink / raw) To: martin rudalics; +Cc: Eli Zaretskii, Stefan Monnier, emacs-devel Sorry for my delayed reply... On Thu, May 09 2019, martin rudalics wrote: >> (set-window-margins >> (current-window) (/ 2 (- (window-width) olivetti-body-width))) > > What is 'current-window' and how does it relate to 'selected-window'? Sorry, this should be selected-window, and also window-width -> window-total-width. i.e. The kernel of the minor mode should just be computing when to run this: (set-window-margins (selected-window) (/ 2 (- (window-total-width) olivetti-body-width))) >> There are some other ancillary functions, but really it's just a >> case of running this function in all windows displaying the current >> buffer when olivetti-body-width changes or when the window width >> changes. > > What does "current buffer" refer to here? I suppose you want to run > "this function" whenever the body width of a window showing a buffer > with olivetti mode enabled changes. So with Emacs 27 it should > suffice to add your function to `window-size-change-functions' for > each buffer where olivetti mode is enabled I was thinking that current buffer is just the result of function current-buffer, but yes, your description is accurate. >> 1. Some users have complained of lagging input, which seems to be >> due to olivetti setting the margins too often, i.e. on too many >> hooks. So using the minimal number of hooks is preferable. > > 'set-window-margins' doesn't do much when margins don't change. So I > suppose that for some reason olivetti mode wants margins to change too > often. If so, could you try to find out why? The problem I ran into was with Emacs 25 the window splitting code changed such that windows with large margins would calculate as being too small to split and result in an error. So I needed to make olivetti first cycle through all "olivetti-ized windows" and reset all the margins to 0, then allow the desired window splitting to occur, then cycle through and set up the margins again. But also, the scenarios in which window-configuration-change-hook ran seemed to change too, so on Eli's recommendation I added the above function to post-command-hook (Eli, sorry again for my poor and argumentative communication back then). >> 2. But I've experienced olivetti failing to set the margins during a >> few common cases, e.g.: >> - splitting window with icomplete "*Completions*" buffer >> - splitting window with ispell-word "*Choices*" buffer >> - splitting window with magit-status >> - splitting window vertically with any buffers in a side-window in >> the same frame (which results in window being too large to split >> -- I think this is a separate issue) > > Too _large_ to split? Sorry, what I wrote was incorrect. I think this issue is wholly separate. It occurs when: 1. olivetti is active in two windows, split above/below 2. a call is made to display-buffer-in-side-window I've stepped through what's happening here and it seems to be when display-buffer-in-side-window calls split-window-no-error, which I think has something to do with olivetti wanting split-window or split-window-sensibly. But this is reaching the extent of my skills/knowledge. >> It would be nice to achieve consistency with these. > > Are these failures due to the fact that a releated hook is not run or > are there other issues? I am pretty sure it's because the right hook is not being called; from Stefan: > The old window-size-change-functions was fundamentally broken for your > use-case because it wasn't run in all cases where you needed it. > More specifically there were several different "missing" cases > (typically creation of new windows as well as changes in size that are > consequences of resizing *other* windows). So in Emacs<27, you need to > use the *global* part of window-size-change-functions (to react to > resizing in other windows) as well as (the local part of) > window-configuration-change-hook (to detect window creation) to cover > all relevant cases, AFAIK. > But with the changes in Emacs-27 the local part of > window-size-change-functions should be all you need in your case. [ > And in Emacs<27 you should be able to replace the use of > post-command-hook by the use of (the part of > window-configuration-change-hook). ] Stefan, sorry to be so dense, but I'm not exactly sure what you mean be the global/local distinction above. Does this refer to: olivetti--set-margins ;; <- global? olivetti--set-window-margins ;; <- local? As you've all said, for Emacs 27 it appears that this all should be solved with just window-size-change-functions, but the minor mode is supposed to be compatible with Emacs >= 24.5, so I think something like the following is needed: (cond ((<= emacs-major-version 24) (add-hook 'window-configuration-change-hook 'olivetti--??? t t)) ((<= emacs-major-version 26) (add-hook 'window-configuration-change-hook 'olivetti--??? t t) (add-hook 'window-size-change-functions 'olivetti--??? t t)) ((<= 27 emacs-major-version) (add-hook 'window-size-change-functions 'olivetti--??? t t))) But I'm not sure which of olivetti--set-margins or olivetti--set-window-margins should be used in every case, or the best solution for Emacs <= 26 (e.g. if window-configuration-change-hook should be replaced with post-command-hook there). Sorry for the lengthy email, and thanks for all your help :) -- https://www.paulwrankin.com ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-14 5:16 ` Paul W. Rankin @ 2019-05-14 7:04 ` Paul W. Rankin 2019-05-14 12:22 ` Stefan Monnier ` (2 subsequent siblings) 3 siblings, 0 replies; 35+ messages in thread From: Paul W. Rankin @ 2019-05-14 7:04 UTC (permalink / raw) To: Stefan Monnier; +Cc: martin rudalics, Eli Zaretskii, emacs-devel >> But with the changes in Emacs-27 the local part of >> window-size-change-functions should be all you need in your case. [ >> And in Emacs<27 you should be able to replace the use of >> post-command-hook by the use of (the part of >> window-configuration-change-hook). ] > > Stefan, sorry to be so dense, but I'm not exactly sure what you mean > be the global/local distinction above. Does this refer to: p.s. Sorry Stefan I just found what you were referring to by "global/local" in the window-configuration-change-hook documentation. -- https://www.paulwrankin.com ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-14 5:16 ` Paul W. Rankin 2019-05-14 7:04 ` Paul W. Rankin @ 2019-05-14 12:22 ` Stefan Monnier 2019-05-15 8:26 ` Paul W. Rankin 2019-05-14 16:05 ` Joost Kremers 2019-05-20 8:24 ` martin rudalics 3 siblings, 1 reply; 35+ messages in thread From: Stefan Monnier @ 2019-05-14 12:22 UTC (permalink / raw) To: Paul W. Rankin; +Cc: martin rudalics, Eli Zaretskii, emacs-devel > Stefan, sorry to be so dense, but I'm not exactly sure what you mean be the > global/local distinction above. Does this refer to: Every hook has a global part shared among all buffers and then in each buffer it has a local part, which can be different for each buffer. This is what the `local` argument to `add-hook` and `remove-hook` refer to. Stefan ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-14 12:22 ` Stefan Monnier @ 2019-05-15 8:26 ` Paul W. Rankin 0 siblings, 0 replies; 35+ messages in thread From: Paul W. Rankin @ 2019-05-15 8:26 UTC (permalink / raw) To: Stefan Monnier; +Cc: martin rudalics, Eli Zaretskii, emacs-devel I think the patch below should cover all the bases, from 24 -> 27, using window-configuration-change-hook and window-size-change-functions: - for Emacs 24, we just use window-configuration-change-hook - for Emacs 25 & 26 we use the combination architected by Stefan - for Emacs 27, just window-size-change-functions This doesn't cover for window size changes in Emacs 26 (25?) when display-line-numbers-mode scrolls from 99 to 100, but I spent hours trying to get that working a while back to no avail... *shrug* diff --git a/olivetti.el b/olivetti.el index a64607e..6e140ce 100644 --- a/olivetti.el +++ b/olivetti.el @@ -259,7 +259,7 @@ fraction of the window width." (read-number "Set text body width (integer or float): " olivetti-body-width)))) (setq olivetti-body-width n) - (olivetti-set-margins) + (olivetti-set-all-margins) (message "Text body width set to %s" olivetti-body-width)) (defun olivetti-expand (&optional arg) @@ -273,7 +273,7 @@ If prefixed with ARG, incrementally decrease." ((floatp olivetti-body-width) (+ olivetti-body-width (* 0.01 p)))))) (setq olivetti-body-width (olivetti-safe-width n (selected-window)))) - (olivetti-set-margins) + (olivetti-set-all-margins) (message "Text body width set to %s" olivetti-body-width) (set-transient-map (let ((map (make-sparse-keymap))) @@ -312,10 +312,17 @@ body width set with `olivetti-body-width'." :lighter olivetti-lighter (if olivetti-mode (progn - (add-hook 'window-size-change-functions - #'olivetti-set-margins t t) - (add-hook 'window-configuration-change-hook - 'olivetti-set-all-margins t t) + (cond ((<= emacs-major-version 24) + (add-hook 'window-configuration-change-hook + #'olivetti-set-all-margins t t)) + ((<= emacs-major-version 26) + (add-hook 'window-configuration-change-hook + #'olivetti-set-all-margins t t) + (add-hook 'window-size-change-functions + #'olivetti-set-margins t t)) + ((<= 27 emacs-major-version) + (add-hook 'window-size-change-functions + #'olivetti-set-margins t t))) (add-hook 'change-major-mode-hook #'olivetti-reset-all-windows nil t) (setq-local split-window-preferred-function -- https://www.paulwrankin.com ^ permalink raw reply related [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-14 5:16 ` Paul W. Rankin 2019-05-14 7:04 ` Paul W. Rankin 2019-05-14 12:22 ` Stefan Monnier @ 2019-05-14 16:05 ` Joost Kremers 2019-05-14 16:50 ` Stefan Monnier 2019-05-20 8:24 ` martin rudalics 3 siblings, 1 reply; 35+ messages in thread From: Joost Kremers @ 2019-05-14 16:05 UTC (permalink / raw) To: emacs-devel; +Cc: martin rudalics, Eli Zaretskii, Stefan Monnier On Tue, May 14 2019, Paul W. Rankin wrote: > (cond ((<= emacs-major-version 24) > (add-hook 'window-configuration-change-hook > 'olivetti--??? t t)) > ((<= emacs-major-version 26) > (add-hook 'window-configuration-change-hook > 'olivetti--??? t t) > (add-hook 'window-size-change-functions > 'olivetti--??? t t)) > ((<= 27 emacs-major-version) > (add-hook 'window-size-change-functions > 'olivetti--??? t t))) I have no idea if this helps (I'm not entirely sure if I correctly understand the issues you're facing), but FWIW, this is what I do in `visual-fill-column-mode` <https://github.com/joostkremers/visual-fill-column>, which must solve essentially the same problem: ``` (defun visual-fill-column-mode--enable () "Set up `visual-fill-column-mode' for the current buffer." (add-hook 'window-configuration-change-hook #'visual-fill-column--adjust-window 'append 'local) (if (>= emacs-major-version 26) (add-hook 'window-size-change-functions #'visual-fill-column--adjust-frame 'append)) (visual-fill-column--adjust-window)) ``` So I use `window-configuration-change-hook` in every Emacs version and `window-size-change-functions` in Emacs >= 26. ISTR that it's not possible to forego `window-configuration-change-hook` in Emacs 26, but I can't remember why... I have at least one report of this working on Emacs 27, but I must admit that I'm running Emacs 26 myself, so perhaps there are problems this particular user doesn't care about. `visual-fill-column--adjust-frame simply calls `visual-fill-column--adjust-window` for every window on the relevant frame. In Emacs 27, this function must be in the global part of `window-size-change-functions`, because Emacs 27 changed the way the local part is called. `visual-fill-column-mode` could of course be adapted to use the local part of the hook, but there are more hooks involved with window size/config changes in Emacs 27 and I haven't looked into which ones I should use. `visual-fill-column--adjust-window` does the following: ``` (defun visual-fill-column--adjust-window () "Adjust the window margins and fringes." ;; Only run when we're really looking at a buffer that has v-f-c-mode enabled. See #22. (when (buffer-local-value 'visual-fill-column-mode (window-buffer (selected-window))) (set-window-fringes (get-buffer-window (current-buffer)) nil nil visual-fill-column-fringes-outside-margins) (if (>= emacs-major-version 25) (set-window-parameter (get-buffer-window (current-buffer)) 'split-window #'visual-fill-column-split-window)) (visual-fill-column--set-margins))) ``` So it has additional code for Emacs >= 25 to set the window parameter `split-window` to `visual-fill-column-split-window`, which unsets the margins before calling `split-window`. In addition, there is a function `visual-fill-column-split-window-sensibly`, which can be used as the value of `split-window-preferred-function`. It handles virtual splitting of windows with wide margins. HTH -- Joost Kremers Life has its moments ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-14 16:05 ` Joost Kremers @ 2019-05-14 16:50 ` Stefan Monnier 2019-05-14 21:56 ` Joost Kremers 0 siblings, 1 reply; 35+ messages in thread From: Stefan Monnier @ 2019-05-14 16:50 UTC (permalink / raw) To: Joost Kremers; +Cc: martin rudalics, Eli Zaretskii, emacs-devel > (defun visual-fill-column-mode--enable () > "Set up `visual-fill-column-mode' for the current buffer." > (add-hook 'window-configuration-change-hook > #'visual-fill-column--adjust-window 'append 'local) > (if (>= emacs-major-version 26) > (add-hook 'window-size-change-functions > #'visual-fill-column--adjust-frame 'append)) > (visual-fill-column--adjust-window)) If you fundamentally only care about the size of the windows, then in Emacs-27 all you need is (add-hook 'window-size-change-functions #'visual-fill-column--adjust-window 'append 'local) > frame. In Emacs 27, this function must be in the global part of > `window-size-change-functions`, Not really: in Emacs-26, if it's on the local-part of the hook, then it will fail to be called when your window's size is changed as a side-effect of some other window being resized (this is fixed in Emacs-27). In Emacs-27, on the contrary it can be in the local part of the hook and can limit its action to the window passed as an argument rather than having to cycle through all windows on the selected frame, because the local part of the hook is run (separately) for every window whose size has changed. Stefan ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-14 16:50 ` Stefan Monnier @ 2019-05-14 21:56 ` Joost Kremers 2019-05-15 1:29 ` Stefan Monnier 0 siblings, 1 reply; 35+ messages in thread From: Joost Kremers @ 2019-05-14 21:56 UTC (permalink / raw) To: emacs-devel; +Cc: martin rudalics, Eli Zaretskii On Tue, May 14 2019, Stefan Monnier wrote: >> (defun visual-fill-column-mode--enable () >> "Set up `visual-fill-column-mode' for the current buffer." >> (add-hook 'window-configuration-change-hook >> #'visual-fill-column--adjust-window 'append 'local) >> (if (>= emacs-major-version 26) >> (add-hook 'window-size-change-functions >> #'visual-fill-column--adjust-frame 'append)) >> (visual-fill-column--adjust-window)) > > If you fundamentally only care about the size of the windows, Yes, specifically their width. > then in > Emacs-27 all you need is > > (add-hook 'window-size-change-functions > #'visual-fill-column--adjust-window 'append > 'local) > >> frame. In Emacs 27, this function must be in the global part of >> `window-size-change-functions`, > > Not really: in Emacs-26, if it's on the local-part of the hook, > then it > will fail to be called when your window's size is changed as > a side-effect of some other window being resized (this is fixed > in > Emacs-27). In Emacs-27, on the contrary it can be in the local > part of > the hook and can limit its action to the window passed as an > argument > rather than having to cycle through all windows on the selected > frame, > because the local part of the hook is run (separately) for every > window > whose size has changed. Ah, I see. The problem I ran into (and with prompted my remark above) was that in Emacs 26, the functions in window-size-change-functions are called with the frame as argument, even the functions in the local part of the hook. In Emacs 27, the functions in the global part are called with the frame as argument, while the functions in the local part are called with the window as argument. Since the function that `visual-fill-column-mode` puts in the hook assumes the frame as argument, the simplest change seemed to be to put it in the global part. It seems that wasn't the only solution, and arguably it's not the best solution either... I'll set up a VirtualBox so I can test it with Emacs 27 and make the change when I have some time. Thanks for the info. -- Joost Kremers Life has its moments ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-14 21:56 ` Joost Kremers @ 2019-05-15 1:29 ` Stefan Monnier 0 siblings, 0 replies; 35+ messages in thread From: Stefan Monnier @ 2019-05-15 1:29 UTC (permalink / raw) To: emacs-devel > The problem I ran into (and with prompted my remark above) was that in Emacs > 26, the functions in window-size-change-functions are called with the frame > as argument, even the functions in the local part of the hook. That's right: that's because it didn't actually pay any attention to the local part, instead it just ran the hook (both local and global parts) in the buffer that happened to be current at that point. Stefan ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-14 5:16 ` Paul W. Rankin ` (2 preceding siblings ...) 2019-05-14 16:05 ` Joost Kremers @ 2019-05-20 8:24 ` martin rudalics 2019-05-20 13:14 ` Paul W. Rankin 3 siblings, 1 reply; 35+ messages in thread From: martin rudalics @ 2019-05-20 8:24 UTC (permalink / raw) To: Paul W. Rankin; +Cc: Eli Zaretskii, Stefan Monnier, emacs-devel > The problem I ran into was with Emacs 25 the window splitting code > changed such that windows with large margins would calculate as > being too small to split and result in an error. So I needed to make > olivetti first cycle through all "olivetti-ized windows" and reset > all the margins to 0, then allow the desired window splitting to > occur, then cycle through and set up the margins again. Always resetting the margins is bad. I'd suggest you devise a special 'olivetti-split-window' function and set the 'split-window' parameter of every window displaying a buffer in olivetti mode to that function. 'olivetti-split-window' would reset the margins iff the window shall be split side-by-side, set the window's 'split-window' parameter temporarily to nil, call 'split-window' and assign the 'split-window' parameter again for all windows in question. martin ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-20 8:24 ` martin rudalics @ 2019-05-20 13:14 ` Paul W. Rankin 2019-05-21 7:32 ` martin rudalics 0 siblings, 1 reply; 35+ messages in thread From: Paul W. Rankin @ 2019-05-20 13:14 UTC (permalink / raw) To: martin rudalics; +Cc: Eli Zaretskii, Stefan Monnier, emacs-devel On Mon, May 20 2019, martin rudalics wrote: > Always resetting the margins is bad. I'd suggest you devise a > special > 'olivetti-split-window' function and set the 'split-window' > parameter > of every window displaying a buffer in olivetti mode to that > function. > > 'olivetti-split-window' would reset the margins iff the window > shall > be split side-by-side, set the window's 'split-window' parameter > temporarily to nil, call 'split-window' and assign the > 'split-window' > parameter again for all windows in question. Hmm this isn't it, the code already works this way (see L#191). -- https://www.paulwrankin.com ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-20 13:14 ` Paul W. Rankin @ 2019-05-21 7:32 ` martin rudalics 2019-05-21 7:38 ` Paul W. Rankin 0 siblings, 1 reply; 35+ messages in thread From: martin rudalics @ 2019-05-21 7:32 UTC (permalink / raw) To: Paul W. Rankin; +Cc: Eli Zaretskii, Stefan Monnier, emacs-devel > Hmm this isn't it, the code already works this way (see L#191). Sorry, what is L#191? martin ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-21 7:32 ` martin rudalics @ 2019-05-21 7:38 ` Paul W. Rankin 2019-05-21 7:45 ` martin rudalics 0 siblings, 1 reply; 35+ messages in thread From: Paul W. Rankin @ 2019-05-21 7:38 UTC (permalink / raw) To: martin rudalics; +Cc: Eli Zaretskii, Stefan Monnier, emacs-devel > Sorry, what is L#191? Line 191 ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-21 7:38 ` Paul W. Rankin @ 2019-05-21 7:45 ` martin rudalics 2019-05-21 9:05 ` Paul W. Rankin 0 siblings, 1 reply; 35+ messages in thread From: martin rudalics @ 2019-05-21 7:45 UTC (permalink / raw) To: Paul W. Rankin; +Cc: Eli Zaretskii, Stefan Monnier, emacs-devel >> Sorry, what is L#191? > > Line 191 I'm still too dense. Line 191 of what? martin ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-21 7:45 ` martin rudalics @ 2019-05-21 9:05 ` Paul W. Rankin 2019-05-21 10:04 ` martin rudalics 0 siblings, 1 reply; 35+ messages in thread From: Paul W. Rankin @ 2019-05-21 9:05 UTC (permalink / raw) To: martin rudalics; +Cc: Eli Zaretskii, Stefan Monnier, emacs-devel On Tue, May 21 2019, martin rudalics wrote: > I'm still too dense. Line 191 of what? It's line 191 of olivetti.el. It's in GNU ELPA on branch externals/olivetti. That's just the line with the function to reset the margins of a window if window-parameter split-window is olivetti-split-window. I think the main thing is how and when the window margin setting and resetting occurs. This is how olivetti now adds its hooks: (cond ((<= emacs-major-version 24) (add-hook 'window-configuration-change-hook #'olivetti-set-all-margins t t)) ((<= emacs-major-version 26) (add-hook 'window-configuration-change-hook #'olivetti-set-all-margins t t) (add-hook 'window-size-change-functions #'olivetti-set-margins t t)) ((<= 27 emacs-major-version) (add-hook 'window-size-change-functions #'olivetti-set-margins t t))) Which seems okay to me, but I'm a far cry from an authoritive voice. ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-21 9:05 ` Paul W. Rankin @ 2019-05-21 10:04 ` martin rudalics 2019-05-22 1:47 ` Paul W. Rankin 0 siblings, 1 reply; 35+ messages in thread From: martin rudalics @ 2019-05-21 10:04 UTC (permalink / raw) To: Paul W. Rankin; +Cc: Eli Zaretskii, Stefan Monnier, emacs-devel > It's line 191 of olivetti.el. It's in GNU ELPA on branch externals/olivetti. I see it now. Where do you reinstall the 'split-window' parameter after splitting? martin ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-21 10:04 ` martin rudalics @ 2019-05-22 1:47 ` Paul W. Rankin 2019-05-22 8:32 ` martin rudalics 0 siblings, 1 reply; 35+ messages in thread From: Paul W. Rankin @ 2019-05-22 1:47 UTC (permalink / raw) To: martin rudalics; +Cc: Eli Zaretskii, Stefan Monnier, emacs-devel On Tue, May 21 2019, martin rudalics wrote: > I see it now. Where do you reinstall the 'split-window' > parameter > after splitting? It's in the main function, olivetti-set-margins @ line 177. ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-22 1:47 ` Paul W. Rankin @ 2019-05-22 8:32 ` martin rudalics 2019-05-22 9:14 ` Paul W. Rankin 0 siblings, 1 reply; 35+ messages in thread From: martin rudalics @ 2019-05-22 8:32 UTC (permalink / raw) To: Paul W. Rankin; +Cc: Eli Zaretskii, Stefan Monnier, emacs-devel >> I see it now. Where do you reinstall the 'split-window' parameter >> after splitting? > > It's in the main function, olivetti-set-margins @ line 177. OK. Then I'm afraid you have to do the following: Whenever olivetti mode is active in at least _one_ live window on a frame you have to use 'olivetti-split-window' on _all_ internal windows of that frame too. You can use 'walk-window-tree' for setting and resetting this parameter and the margins of all olivetti mode windows. It should not be too much of a hassle (and tell me immediately when you encounter any problems). The reason is that 'split-window' may be called for internal windows too. For example, if you want to make a new window on the left or right side of a frame, Emacs may want to split the root window of that frame. In this case it will check the sizes of all live subwindows of the root window and if any of these windows has too large margins, the split may fail because of insufficient space for the new window. martin ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-22 8:32 ` martin rudalics @ 2019-05-22 9:14 ` Paul W. Rankin 0 siblings, 0 replies; 35+ messages in thread From: Paul W. Rankin @ 2019-05-22 9:14 UTC (permalink / raw) To: martin rudalics; +Cc: Eli Zaretskii, Stefan Monnier, emacs-devel On Wed, May 22 2019, martin rudalics wrote: > OK. Then I'm afraid you have to do the following: Whenever > olivetti > mode is active in at least _one_ live window on a frame you have > to > use 'olivetti-split-window' on _all_ internal windows of that > frame > too. You can use 'walk-window-tree' for setting and resetting > this > parameter and the margins of all olivetti mode windows. It > should not > be too much of a hassle (and tell me immediately when you > encounter > any problems). > > The reason is that 'split-window' may be called for internal > windows > too. For example, if you want to make a new window on the left > or > right side of a frame, Emacs may want to split the root window > of that > frame. In this case it will check the sizes of all live > subwindows of > the root window and if any of these windows has too large > margins, the > split may fail because of insufficient space for the new window. Ah awesome. Thanks Martin, I think this well end up solving the funny little peculiarities I've encountered, and also the problem I had with adding a side-window to a frame containing 2 x olivetti windows split horizontally (failing due to insufficient space). I appreciate your insights. ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-08 4:07 ` Paul W. Rankin 2019-05-08 6:20 ` Eli Zaretskii @ 2019-05-08 14:07 ` Stefan Monnier 2019-05-08 15:45 ` Stephen Leake 2 siblings, 0 replies; 35+ messages in thread From: Stefan Monnier @ 2019-05-08 14:07 UTC (permalink / raw) To: emacs-devel > At this point I've become too confused to find an adequate solution between > the Three Hooks so I (and I'm sure those who use the minor mode) would love > if someone more familiar with the changing nature of the Three Hooks could > provide a solution... AFAIK part of the purpose behind the change in the semantics of window-size-change-functions (and related hooks) in Emacs-27 is so that modes like yours can use window-size-change-functions and nothing else. So I'd recommend you use that in Emacs-27 and file a bug report if it's not sufficient. Stefan ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-08 4:07 ` Paul W. Rankin 2019-05-08 6:20 ` Eli Zaretskii 2019-05-08 14:07 ` Stefan Monnier @ 2019-05-08 15:45 ` Stephen Leake 2019-05-08 17:50 ` Eli Zaretskii 2 siblings, 1 reply; 35+ messages in thread From: Stephen Leake @ 2019-05-08 15:45 UTC (permalink / raw) To: emacs-devel "Paul W. Rankin" <hello@paulwrankin.com> writes: > I *think* what is needed is a way to apply the hooks contingent on > emacs-major-version <= 24 and <= 25 or 26(?) and <= 27. you can use the variables emacs-version (a string), emacs-major-version (an integer), emacs-minor-version (an integer). Something like: (cl-ecase emacs-major-version (23 (add-hook ...) ) (24 (add-hook ...) ... ) -- -- Stephe ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-05-08 15:45 ` Stephen Leake @ 2019-05-08 17:50 ` Eli Zaretskii 0 siblings, 0 replies; 35+ messages in thread From: Eli Zaretskii @ 2019-05-08 17:50 UTC (permalink / raw) To: Stephen Leake; +Cc: emacs-devel > From: Stephen Leake <stephen_leake@stephe-leake.org> > Date: Wed, 08 May 2019 07:45:04 -0800 > > you can use the variables emacs-version (a string), emacs-major-version > (an integer), emacs-minor-version (an integer). > > Something like: > > (cl-ecase emacs-major-version > (23 > (add-hook ...) > ) > > (24 > (add-hook ...) We have version-comparison functions in subr.el. ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: Adding olivetti to GNU ELPA 2019-04-25 8:56 ` Eli Zaretskii 2019-04-25 12:32 ` Paul W. Rankin @ 2019-04-26 1:17 ` Richard Stallman 1 sibling, 0 replies; 35+ messages in thread From: Richard Stallman @ 2019-04-26 1:17 UTC (permalink / raw) To: Eli Zaretskii; +Cc: hello, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > I think the current procedure is that you should explicitly write that > you contribute a package to Emacs, and then your assignment will cover > that package as well. Yes, that's sufficient. When we get that message we will send it to the FSF archives. -- Dr Richard Stallman President, Free Software Foundation (https://gnu.org, https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 35+ messages in thread
end of thread, other threads:[~2019-05-22 9:14 UTC | newest] Thread overview: 35+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-04-25 8:32 Adding olivetti to GNU ELPA Paul W. Rankin 2019-04-25 8:56 ` Eli Zaretskii 2019-04-25 12:32 ` Paul W. Rankin 2019-04-25 12:43 ` Eli Zaretskii 2019-04-25 13:01 ` Paul W. Rankin 2019-04-25 14:30 ` Eli Zaretskii 2019-05-08 4:07 ` Paul W. Rankin 2019-05-08 6:20 ` Eli Zaretskii 2019-05-09 6:54 ` Paul W. Rankin 2019-05-09 7:53 ` Eli Zaretskii 2019-05-09 8:14 ` martin rudalics 2019-05-09 13:30 ` Stefan Monnier 2019-05-10 8:00 ` martin rudalics 2019-05-14 5:16 ` Paul W. Rankin 2019-05-14 7:04 ` Paul W. Rankin 2019-05-14 12:22 ` Stefan Monnier 2019-05-15 8:26 ` Paul W. Rankin 2019-05-14 16:05 ` Joost Kremers 2019-05-14 16:50 ` Stefan Monnier 2019-05-14 21:56 ` Joost Kremers 2019-05-15 1:29 ` Stefan Monnier 2019-05-20 8:24 ` martin rudalics 2019-05-20 13:14 ` Paul W. Rankin 2019-05-21 7:32 ` martin rudalics 2019-05-21 7:38 ` Paul W. Rankin 2019-05-21 7:45 ` martin rudalics 2019-05-21 9:05 ` Paul W. Rankin 2019-05-21 10:04 ` martin rudalics 2019-05-22 1:47 ` Paul W. Rankin 2019-05-22 8:32 ` martin rudalics 2019-05-22 9:14 ` Paul W. Rankin 2019-05-08 14:07 ` Stefan Monnier 2019-05-08 15:45 ` Stephen Leake 2019-05-08 17:50 ` Eli Zaretskii 2019-04-26 1:17 ` Richard Stallman
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.