* How to get the actual face attribute? @ 2020-06-21 4:01 Yuan Fu 2020-06-21 14:52 ` Eli Zaretskii 2020-06-21 15:54 ` Stefan Monnier 0 siblings, 2 replies; 19+ messages in thread From: Yuan Fu @ 2020-06-21 4:01 UTC (permalink / raw To: help-gnu-emacs Hi, When writing my package I need to get height of the face at point. But `face-attribute` doesn’t take face remapping into account, which gives wrong answers. Is there a reliable way to get the actual face attribute that’s used for display? Thanks. Yuan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: How to get the actual face attribute? 2020-06-21 4:01 How to get the actual face attribute? Yuan Fu @ 2020-06-21 14:52 ` Eli Zaretskii 2020-06-21 14:55 ` Yuan Fu 2020-06-21 15:54 ` Stefan Monnier 1 sibling, 1 reply; 19+ messages in thread From: Eli Zaretskii @ 2020-06-21 14:52 UTC (permalink / raw To: help-gnu-emacs > From: Yuan Fu <casouri@gmail.com> > Date: Sun, 21 Jun 2020 00:01:37 -0400 > > When writing my package I need to get height of the face at point. But `face-attribute` doesn’t take face remapping into account, which gives wrong answers. Is there a reliable way to get the actual face attribute that’s used for display? Thanks. From Lisp or from C? In general, you cannot know that except by displaying that text or emulating its display, because the face is fully realized only while displaying text that is affected by the face. ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: How to get the actual face attribute? 2020-06-21 14:52 ` Eli Zaretskii @ 2020-06-21 14:55 ` Yuan Fu 2020-06-21 15:03 ` Eli Zaretskii 0 siblings, 1 reply; 19+ messages in thread From: Yuan Fu @ 2020-06-21 14:55 UTC (permalink / raw To: Eli Zaretskii; +Cc: help-gnu-emacs > On Jun 21, 2020, at 10:52 AM, Eli Zaretskii <eliz@gnu.org> wrote: > >> From: Yuan Fu <casouri@gmail.com> >> Date: Sun, 21 Jun 2020 00:01:37 -0400 >> >> When writing my package I need to get height of the face at point. But `face-attribute` doesn’t take face remapping into account, which gives wrong answers. Is there a reliable way to get the actual face attribute that’s used for display? Thanks. > > From Lisp or from C? From Lisp. > > In general, you cannot know that except by displaying that text or > emulating its display, because the face is fully realized only while > displaying text that is affected by the face. > I see, then I will use some ad-hoc check to produce a mostly-right answer. Thanks. Yuan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: How to get the actual face attribute? 2020-06-21 14:55 ` Yuan Fu @ 2020-06-21 15:03 ` Eli Zaretskii 0 siblings, 0 replies; 19+ messages in thread From: Eli Zaretskii @ 2020-06-21 15:03 UTC (permalink / raw To: help-gnu-emacs > From: Yuan Fu <casouri@gmail.com> > Date: Sun, 21 Jun 2020 10:55:38 -0400 > Cc: help-gnu-emacs@gnu.org > > >> When writing my package I need to get height of the face at point. But `face-attribute` doesn’t take face remapping into account, which gives wrong answers. Is there a reliable way to get the actual face attribute that’s used for display? Thanks. > > > > From Lisp or from C? > > From Lisp. You could try calling vertical-motion to move past that line, then use posn-at-point in the position where you arrived to see how many pixels you moved. (Completely untested.) ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: How to get the actual face attribute? 2020-06-21 4:01 How to get the actual face attribute? Yuan Fu 2020-06-21 14:52 ` Eli Zaretskii @ 2020-06-21 15:54 ` Stefan Monnier 2020-06-22 17:00 ` Yuan Fu 1 sibling, 1 reply; 19+ messages in thread From: Stefan Monnier @ 2020-06-21 15:54 UTC (permalink / raw To: help-gnu-emacs > When writing my package I need to get height of the face at point. Note that there may be simultaneously several different such heights if point is shown simultaneously in different frames. Stefan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: How to get the actual face attribute? 2020-06-21 15:54 ` Stefan Monnier @ 2020-06-22 17:00 ` Yuan Fu 2020-06-22 17:15 ` Perry Smith 0 siblings, 1 reply; 19+ messages in thread From: Yuan Fu @ 2020-06-22 17:00 UTC (permalink / raw To: Stefan Monnier; +Cc: help-gnu-emacs > On Jun 21, 2020, at 11:54 AM, Stefan Monnier <monnier@iro.umontreal.ca> wrote: > >> When writing my package I need to get height of the face at point. > > Note that there may be simultaneously several different such heights if > point is shown simultaneously in different frames. > > > Stefan > > Thanks. Unfortunately I think I asked an x-y question. What I really want to know is the width of the glyph and I thought I can just multiply the height factor to the original width of the glyph. It seems not to be the case. The multiplied result doesn’t match with the width on glass. More precisely :height * glyph width != posn of point after - posn of point. Is this expected? Also I can’t use posn for calculation since sometimes the text might not be on screen. Yuan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: How to get the actual face attribute? 2020-06-22 17:00 ` Yuan Fu @ 2020-06-22 17:15 ` Perry Smith 2020-06-22 17:21 ` Yuan Fu 0 siblings, 1 reply; 19+ messages in thread From: Perry Smith @ 2020-06-22 17:15 UTC (permalink / raw To: Yuan Fu; +Cc: help-gnu-emacs, Stefan Monnier > On Jun 22, 2020, at 12:00 PM, Yuan Fu <casouri@gmail.com> wrote: > > > >> On Jun 21, 2020, at 11:54 AM, Stefan Monnier <monnier@iro.umontreal.ca> wrote: >> >>> When writing my package I need to get height of the face at point. >> >> Note that there may be simultaneously several different such heights if >> point is shown simultaneously in different frames. >> > > Thanks. Unfortunately I think I asked an x-y question. What I really want to know is the width of the glyph and I thought I can just multiply the height factor to the original width of the glyph. It seems not to be the case. The multiplied result doesn’t match with the width on glass. More precisely :height * glyph width != posn of point after - posn of point. Is this expected? > > Also I can’t use posn for calculation since sometimes the text might not be on screen. It might help to explain what the bigger objective is. ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: How to get the actual face attribute? 2020-06-22 17:15 ` Perry Smith @ 2020-06-22 17:21 ` Yuan Fu 2020-06-22 18:47 ` Eli Zaretskii ` (2 more replies) 0 siblings, 3 replies; 19+ messages in thread From: Yuan Fu @ 2020-06-22 17:21 UTC (permalink / raw To: Perry Smith; +Cc: help-gnu-emacs, Stefan Monnier > On Jun 22, 2020, at 1:15 PM, Perry Smith <pedz@easesoftware.com> wrote: > > > >> On Jun 22, 2020, at 12:00 PM, Yuan Fu <casouri@gmail.com <mailto:casouri@gmail.com>> wrote: >> >> >> >>> On Jun 21, 2020, at 11:54 AM, Stefan Monnier <monnier@iro.umontreal.ca> wrote: >>> >>>> When writing my package I need to get height of the face at point. >>> >>> Note that there may be simultaneously several different such heights if >>> point is shown simultaneously in different frames. >>> >> >> Thanks. Unfortunately I think I asked an x-y question. What I really want to know is the width of the glyph and I thought I can just multiply the height factor to the original width of the glyph. It seems not to be the case. The multiplied result doesn’t match with the width on glass. More precisely :height * glyph width != posn of point after - posn of point. Is this expected? >> >> Also I can’t use posn for calculation since sometimes the text might not be on screen. > > It might help to explain what the bigger objective is. I have a package that aligns org tables even for variable pitch text, CJK text, images, etc are in the table: Some one reported that when they change the text size with text-scale-adjust, the alignment are messed up. That’s because the package aligns by calculating the pixel width of each cell, and when the text size are adjusted that width is no accurate anymore. I’m using this function to calculate the width of a glyph (which adds up to the width of a cell): (let* ((p (or point (point)))) (if (eq (char-after point) ?\t) (valign--tab-width (font-at p)) ;; (font-at 0 nil (buffer-substring p (1+ p))) doesn’t work, the ;; font is sometimes wrong. (font-at p) doesn’t work, because ;; it requires the buffer to be visible. (aref (aref (font-get-glyphs (font-at p) p (1+ p)) 0) 4))) Yuan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: How to get the actual face attribute? 2020-06-22 17:21 ` Yuan Fu @ 2020-06-22 18:47 ` Eli Zaretskii 2020-06-22 19:07 ` Yuan Fu 2020-06-22 18:56 ` Stefan Monnier 2020-06-22 21:27 ` Emanuel Berg via Users list for the GNU Emacs text editor 2 siblings, 1 reply; 19+ messages in thread From: Eli Zaretskii @ 2020-06-22 18:47 UTC (permalink / raw To: help-gnu-emacs > From: Yuan Fu <casouri@gmail.com> > Date: Mon, 22 Jun 2020 13:21:15 -0400 > Cc: help-gnu-emacs@gnu.org, Stefan Monnier <monnier@iro.umontreal.ca> > > I have a package that aligns org tables even for variable pitch text, CJK text, images, etc are in the table: > > > > Some one reported that when they change the text size with text-scale-adjust, the alignment are messed up. That’s because the package aligns by calculating the pixel width of each cell, and when the text size are adjusted that width is no accurate anymore. I’m using this function to calculate the width of a glyph (which adds up to the width of a cell): > > (let* ((p (or point (point)))) > (if (eq (char-after point) ?\t) > (valign--tab-width (font-at p)) > ;; (font-at 0 nil (buffer-substring p (1+ p))) doesn’t work, the > ;; font is sometimes wrong. (font-at p) doesn’t work, because > ;; it requires the buffer to be visible. > (aref (aref (font-get-glyphs (font-at p) p (1+ p)) 0) 4))) Did you try using window-text-pixel-size? ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: How to get the actual face attribute? 2020-06-22 18:47 ` Eli Zaretskii @ 2020-06-22 19:07 ` Yuan Fu 0 siblings, 0 replies; 19+ messages in thread From: Yuan Fu @ 2020-06-22 19:07 UTC (permalink / raw To: Eli Zaretskii; +Cc: help-gnu-emacs > > Did you try using window-text-pixel-size? > That requires the buffer to be in a live window so I decided to roll my own measuring function. Now it seems changing my package’s design to accommodate that will work better than using my custom function. (Posn can’t work because it requires all the text to be on glass, which my package can’t work with.) Thanks! Yuan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: How to get the actual face attribute? 2020-06-22 17:21 ` Yuan Fu 2020-06-22 18:47 ` Eli Zaretskii @ 2020-06-22 18:56 ` Stefan Monnier 2020-06-22 19:10 ` Yuan Fu 2020-06-22 21:27 ` Emanuel Berg via Users list for the GNU Emacs text editor 2 siblings, 1 reply; 19+ messages in thread From: Stefan Monnier @ 2020-06-22 18:56 UTC (permalink / raw To: Yuan Fu; +Cc: Perry Smith, help-gnu-emacs > Some one reported that when they change the text size with > text-scale-adjust, the alignment are messed up. If the alignment is done before changing the text-scale, then it's no big surprise, since text-scale won't scale everything by the same factor. IOW, when/where do you do the alignment and trigger re-alignment when things change (like text-scale, for example)? Stefan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: How to get the actual face attribute? 2020-06-22 18:56 ` Stefan Monnier @ 2020-06-22 19:10 ` Yuan Fu 2020-06-22 19:49 ` Stefan Monnier 0 siblings, 1 reply; 19+ messages in thread From: Yuan Fu @ 2020-06-22 19:10 UTC (permalink / raw To: Stefan Monnier; +Cc: Perry Smith, help-gnu-emacs > On Jun 22, 2020, at 2:56 PM, Stefan Monnier <monnier@iro.umontreal.ca> wrote: > >> Some one reported that when they change the text size with >> text-scale-adjust, the alignment are messed up. > > If the alignment is done before changing the text-scale, then it's no > big surprise, since text-scale won't scale everything by the same factor. > I see. I calculate the text size base on the assumption that the text scale is the same for all glyphs. That explains why my measuring are off. Yuan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: How to get the actual face attribute? 2020-06-22 19:10 ` Yuan Fu @ 2020-06-22 19:49 ` Stefan Monnier 2020-06-22 19:54 ` Yuan Fu 0 siblings, 1 reply; 19+ messages in thread From: Stefan Monnier @ 2020-06-22 19:49 UTC (permalink / raw To: help-gnu-emacs >>> Some one reported that when they change the text size with >>> text-scale-adjust, the alignment are messed up. >> If the alignment is done before changing the text-scale, then it's no >> big surprise, since text-scale won't scale everything by the same factor. > I see. I calculate the text size base on the assumption that the text scale > is the same for all glyphs. That explains why my measuring are off. I don't know what that means. The text-scale does apply globally. But it doesn't necessarily scale by the same factor horizontally and vertically, nor does it necessarily scale by the same factor for different fonts. It's "more or less equal" but not exactly. And of course, it won't affect those glyphs whose size is not relative to the base `default` face (e.g. images or glyphs to which a face is applied which sets an absolute rather than relative size). IOW it needs to be recomputed from scratch when the text-scale is changed. Stefan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: How to get the actual face attribute? 2020-06-22 19:49 ` Stefan Monnier @ 2020-06-22 19:54 ` Yuan Fu 2020-06-22 21:05 ` Stefan Monnier 0 siblings, 1 reply; 19+ messages in thread From: Yuan Fu @ 2020-06-22 19:54 UTC (permalink / raw To: Stefan Monnier; +Cc: help-gnu-emacs > On Jun 22, 2020, at 3:49 PM, Stefan Monnier <monnier@iro.umontreal.ca> wrote: > >>>> Some one reported that when they change the text size with >>>> text-scale-adjust, the alignment are messed up. >>> If the alignment is done before changing the text-scale, then it's no >>> big surprise, since text-scale won't scale everything by the same factor. >> I see. I calculate the text size base on the assumption that the text scale >> is the same for all glyphs. That explains why my measuring are off. > > I don't know what that means. The text-scale does apply globally. > But it doesn't necessarily scale by the same factor horizontally and > vertically, nor does it necessarily scale by the same factor for > different fonts. It's "more or less equal" but not exactly. And of > course, it won't affect those glyphs whose size is not relative to the > base `default` face (e.g. images or glyphs to which a face is applied > which sets an absolute rather than relative size). > > IOW it needs to be recomputed from scratch when the text-scale is changed. How should I recompute the text scale? Currently I calculate it from (expt text-scale-mode-step text-scale-mode-amount) Which is what text-scale-mode uses. (Face remap is hard to calculate so I thought I can just support text-scale-mode.) Yuan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: How to get the actual face attribute? 2020-06-22 19:54 ` Yuan Fu @ 2020-06-22 21:05 ` Stefan Monnier 2020-06-22 21:14 ` Emacs hackers all around the world (was: Re: How to get the actual face attribute?) Emanuel Berg via Users list for the GNU Emacs text editor 2020-06-24 4:13 ` How to get the actual face attribute? Yuan Fu 0 siblings, 2 replies; 19+ messages in thread From: Stefan Monnier @ 2020-06-22 21:05 UTC (permalink / raw To: Yuan Fu; +Cc: help-gnu-emacs > How should I recompute the text scale? Currently I calculate it from > > (expt text-scale-mode-step text-scale-mode-amount) > > Which is what text-scale-mode uses. (Face remap is hard to calculate so > I thought I can just support text-scale-mode.) You shouldn't look at `text-scale-*` at all and instead ask the display code which font it will use. [ But note that there's the issue of *computing* and then there's the issue of *re*computing (i.e. how to detect when it needs to be refreshed and how to make sure it is refreshed then). ] -- Stefan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Emacs hackers all around the world (was: Re: How to get the actual face attribute?) 2020-06-22 21:05 ` Stefan Monnier @ 2020-06-22 21:14 ` Emanuel Berg via Users list for the GNU Emacs text editor 2020-06-24 4:13 ` How to get the actual face attribute? Yuan Fu 1 sibling, 0 replies; 19+ messages in thread From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-06-22 21:14 UTC (permalink / raw To: help-gnu-emacs Stefan Monnier wrote: > [ But note that there's the issue of *computing* > and then there's the issue of *re*computing (i.e. > how to detect when it needs to be refreshed and > how to make sure it is refreshed then). ] That's difficult - recomputing - even Mr. Monnier would hesitate just a fraction's second before he did it :) My birthday's today, so love to all Emacs, Lisp, and C hackers all around the world <3 Amd as always, sorry if I did and said stupid things. When it comes to your .emacs and .gnus, but also .emanuel-berg actually, there is always room for improvements :) re: font colors, here is some inspiration. Black and white, just a little bit bold black, bright white, or aligned, tilted green, perhaps? https://dataswamp.org/~incal/pimgs/baw.png https://dataswamp.org/~incal/pimgs/black.jpg https://dataswamp.org/~incal/pimgs/champs.png https://dataswamp.org/~incal/pimgs/green.png -- underground experts united http://user.it.uu.se/~embe8573 https://dataswamp.org/~incal ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: How to get the actual face attribute? 2020-06-22 21:05 ` Stefan Monnier 2020-06-22 21:14 ` Emacs hackers all around the world (was: Re: How to get the actual face attribute?) Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-06-24 4:13 ` Yuan Fu 1 sibling, 0 replies; 19+ messages in thread From: Yuan Fu @ 2020-06-24 4:13 UTC (permalink / raw To: Stefan Monnier; +Cc: help-gnu-emacs > On Jun 22, 2020, at 5:05 PM, Stefan Monnier <monnier@iro.umontreal.ca> wrote: > >> How should I recompute the text scale? Currently I calculate it from >> >> (expt text-scale-mode-step text-scale-mode-amount) >> >> Which is what text-scale-mode uses. (Face remap is hard to calculate so >> I thought I can just support text-scale-mode.) > > You shouldn't look at `text-scale-*` at all and instead ask the display > code which font it will use. > > [ But note that there's the issue of *computing* and then there's the > issue of *re*computing (i.e. how to detect when it needs to be > refreshed and how to make sure it is refreshed then). ] > Right. I just advised text-scale functions for now. I think that should work for most of the use cases. Yuan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: How to get the actual face attribute? 2020-06-22 17:21 ` Yuan Fu 2020-06-22 18:47 ` Eli Zaretskii 2020-06-22 18:56 ` Stefan Monnier @ 2020-06-22 21:27 ` Emanuel Berg via Users list for the GNU Emacs text editor 2020-06-24 4:12 ` Yuan Fu 2 siblings, 1 reply; 19+ messages in thread From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-06-22 21:27 UTC (permalink / raw To: help-gnu-emacs Yuan Fu wrote: > (let* ((p (or point (point)))) > (if (eq (char-after point) ?\t) > (valign--tab-width (font-at p)) > ;; (font-at 0 nil (buffer-substring p (1+ p))) doesn’t work, the > ;; font is sometimes wrong. (font-at p) doesn’t work, because > ;; it requires the buffer to be visible. > (aref (aref (font-get-glyphs (font-at p) p (1+ p)) 0) 4))) Hello Yuan Fu, you have a cool name :) re: code, the byte compiler is always your friend: geh.el: In do-something: geh.el:10:17:Warning: reference to free variable ‘point’ In end of data: geh.el:110:1:Warning: the function ‘valign--tab-width’ is not known to be defined. Also style point #1: (aref (aref (font-get-glyphs (font-at p) p (1+ p)) 0) 4))) Suggestion, break it up, do more `let*'. ditto #2: (or point (point)) Straight long-ear [1] use of `or' :) However the particular point (point) is confusing IMO. ditto #3: ... 0) 4))) hard-coded data can also be put into `let*' to increase clarity, however if they only appear once one is allowed... heh :) one is allowed to have them hard-coded. if they ever appear twice names, variables/bindings are compulsory, with the possible exceptions of -1, 0, 1, nil and t :) Keep 'em coming... [1] https://en.wikipedia.org/wiki/Hanau_epe -- underground experts united http://user.it.uu.se/~embe8573 https://dataswamp.org/~incal ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: How to get the actual face attribute? 2020-06-22 21:27 ` Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-06-24 4:12 ` Yuan Fu 0 siblings, 0 replies; 19+ messages in thread From: Yuan Fu @ 2020-06-24 4:12 UTC (permalink / raw To: Emanuel Berg; +Cc: help-gnu-emacs > On Jun 22, 2020, at 5:27 PM, Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> wrote: > > Yuan Fu wrote: > >> (let* ((p (or point (point)))) >> (if (eq (char-after point) ?\t) >> (valign--tab-width (font-at p)) >> ;; (font-at 0 nil (buffer-substring p (1+ p))) doesn’t work, the >> ;; font is sometimes wrong. (font-at p) doesn’t work, because >> ;; it requires the buffer to be visible. >> (aref (aref (font-get-glyphs (font-at p) p (1+ p)) 0) 4))) > > Hello Yuan Fu, you have a cool name :) > > re: code, the byte compiler is always your friend: > > geh.el: > In do-something: > geh.el:10:17:Warning: reference to free variable ‘point’ > > In end of data: > geh.el:110:1:Warning: the function ‘valign--tab-width’ is not known to be > defined. > > Also style point #1: > > (aref (aref (font-get-glyphs (font-at p) p (1+ p)) 0) 4))) > > Suggestion, break it up, do more `let*'. > > ditto #2: > > (or point (point)) > > Straight long-ear [1] use of `or' :) However the > particular > > point (point) > > is confusing IMO. > It’s used to support optional argument POINT. > ditto #3: > > ... 0) 4))) > > hard-coded data can also be put into `let*' to > increase clarity, however if they only appear once > one is allowed... heh :) one is allowed to have them > hard-coded. if they ever appear twice names, > variables/bindings are compulsory, with the possible > exceptions of -1, 0, 1, nil and t :) Ok, I’ll use more let next time. Thanks! Yuan ^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2020-06-24 4:13 UTC | newest] Thread overview: 19+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-06-21 4:01 How to get the actual face attribute? Yuan Fu 2020-06-21 14:52 ` Eli Zaretskii 2020-06-21 14:55 ` Yuan Fu 2020-06-21 15:03 ` Eli Zaretskii 2020-06-21 15:54 ` Stefan Monnier 2020-06-22 17:00 ` Yuan Fu 2020-06-22 17:15 ` Perry Smith 2020-06-22 17:21 ` Yuan Fu 2020-06-22 18:47 ` Eli Zaretskii 2020-06-22 19:07 ` Yuan Fu 2020-06-22 18:56 ` Stefan Monnier 2020-06-22 19:10 ` Yuan Fu 2020-06-22 19:49 ` Stefan Monnier 2020-06-22 19:54 ` Yuan Fu 2020-06-22 21:05 ` Stefan Monnier 2020-06-22 21:14 ` Emacs hackers all around the world (was: Re: How to get the actual face attribute?) Emanuel Berg via Users list for the GNU Emacs text editor 2020-06-24 4:13 ` How to get the actual face attribute? Yuan Fu 2020-06-22 21:27 ` Emanuel Berg via Users list for the GNU Emacs text editor 2020-06-24 4:12 ` Yuan Fu
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.