* [d.love@dl.ac.uk: x-font-family-list gives incomplete results] @ 2003-01-22 9:59 Richard Stallman 2003-02-16 18:39 ` Jan D. 0 siblings, 1 reply; 10+ messages in thread From: Richard Stallman @ 2003-01-22 9:59 UTC (permalink / raw) This seems like an important issue, so I am forwarding the message here. ------- Start of forwarded message ------- To: bug-gnu-emacs@gnu.org From: Dave Love <d.love@dl.ac.uk> Date: 20 Jan 2003 18:32:46 +0000 Subject: x-font-family-list gives incomplete results Sender: bug-gnu-emacs-bounces+rms=gnu.org@gnu.org `x-font-family-list' misses a lot, specifically fonts which are suitable for offering the user as the default. E.g. on a Debian stable system I have this: (x-font-family-list) => (("clean" . t) ("clearlyu") ("clearlyu alternate glyphs") ("clearlyu arabic extra") ("clearlyu ligature") ("clearlyu pua") ("fangsong ti" . t) ("fixed" . t) ("gothic" . t) ("mincho" . t) ("newspaper") ("nil" . t) ("open look cursor") ("open look glyph") ("song ti" . t) ("unifont" . t)) (face-font 'default) => "-B&H-LucidaTypewriter-Medium-R-Normal-Sans-12-120-75-75-M-70-ISO8859-1" Note that the lucidatypewriter I'm actually using isn't listed and I have 64 families according to xfontsel. The code implementing this looks superficially correct to me. Am I missing something? _______________________________________________ Bug-gnu-emacs mailing list Bug-gnu-emacs@gnu.org http://mail.gnu.org/mailman/listinfo/bug-gnu-emacs ------- End of forwarded message ------- ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [d.love@dl.ac.uk: x-font-family-list gives incomplete results] 2003-01-22 9:59 [d.love@dl.ac.uk: x-font-family-list gives incomplete results] Richard Stallman @ 2003-02-16 18:39 ` Jan D. 2003-02-16 19:20 ` Jan D. 0 siblings, 1 reply; 10+ messages in thread From: Jan D. @ 2003-02-16 18:39 UTC (permalink / raw) Cc: rms Richard Stallman wrote: > This seems like an important issue, so I am forwarding the message here. > > ------- Start of forwarded message ------- > To: bug-gnu-emacs@gnu.org > From: Dave Love <d.love@dl.ac.uk> > Date: 20 Jan 2003 18:32:46 +0000 > Subject: x-font-family-list gives incomplete results > Sender: bug-gnu-emacs-bounces+rms=gnu.org@gnu.org > > `x-font-family-list' misses a lot, specifically fonts which are > suitable for offering the user as the default. E.g. on a Debian > stable system I have this: > > (x-font-family-list) > => (("clean" . t) ("clearlyu") ("clearlyu alternate glyphs") ("clearlyu arabic extra") ("clearlyu ligature") ("clearlyu pua") ("fangsong ti" . t) ("fixed" . t) ("gothic" . t) ("mincho" . t) ("newspaper") ("nil" . t) ("open look cursor") ("open look glyph") ("song ti" . t) ("unifont" . t)) > > (face-font 'default) > => "-B&H-LucidaTypewriter-Medium-R-Normal-Sans-12-120-75-75-M-70-ISO8859-1" > > Note that the lucidatypewriter I'm actually using isn't listed and I > have 64 families according to xfontsel. > > The code implementing this looks superficially correct to me. Am I > missing something? There is a bug here. x-font-family-list does this: for (limit = 500;;) { specbind (intern ("font-list-limit"), make_number (limit)); nfonts = font_list (f, Qnil, Qnil, Qnil, &fonts); if (nfonts == limit) { free_font_names (fonts, nfonts); limit *= 2; } else break; } The problem is that font_list return a filtered list. For instance, duplicates are removed, and scalable fonts may also be removed (see variable scalable-fonts-allowed). If I do % xlsfonts | wc I get 9568, but if I do % xlsfonts | sort -u | wc I get 5690. So if there is just one duplicate or if scalable fonts are filtered, x-font-family-list stops increasing limit and stops reading font names. One alternative solution would be to make maxnames passed to x_list_fonts (xterm.c) mean "get all font names" if it is less than zero. This also affects w32 and mac, since those ports also have a function with this name. Making maxnames < 0 mean "all font names" should perhaps be propagated into Fx_list_fonts? Now it uses an arbitrary limit of 2000 if maximum is not given, which is too few on many machines. Jan D. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [d.love@dl.ac.uk: x-font-family-list gives incomplete results] 2003-02-16 18:39 ` Jan D. @ 2003-02-16 19:20 ` Jan D. 2003-02-16 22:30 ` Jason Rumney ` (2 more replies) 0 siblings, 3 replies; 10+ messages in thread From: Jan D. @ 2003-02-16 19:20 UTC (permalink / raw) Cc: d.love [-- Attachment #1: Type: text/plain, Size: 606 bytes --] Jan D. wrote: > One alternative solution would be to make maxnames passed to > x_list_fonts (xterm.c) mean "get all font names" if it is less than > zero. This also affects w32 and mac, since those ports also have a > function with this name. > > Making maxnames < 0 mean "all font names" should perhaps be propagated > into Fx_list_fonts? Now it uses an arbitrary limit of 2000 if maximum > is not given, which is too few on many machines. > Here is a proposed patch. Comments welcome. I can not do the mac and w32 parts, because I have no development environment on such systems. Jan D. [-- Attachment #2: listfont.diff --] [-- Type: text/plain, Size: 7626 bytes --] Index: src/xfaces.c =================================================================== RCS file: /cvsroot/emacs/emacs/src/xfaces.c,v retrieving revision 1.267 diff -c -r1.267 xfaces.c *** src/xfaces.c 4 Feb 2003 14:03:17 -0000 1.267 --- src/xfaces.c 16 Feb 2003 19:17:34 -0000 *************** *** 474,480 **** static int better_font_p P_ ((int *, struct font_name *, struct font_name *, int, int)); static int x_face_list_fonts P_ ((struct frame *, char *, ! struct font_name *, int, int)); static int font_scalable_p P_ ((struct font_name *)); static int get_lface_attributes P_ ((struct frame *, Lisp_Object, Lisp_Object *, int)); static int load_pixmap P_ ((struct frame *, Lisp_Object, unsigned *, unsigned *)); --- 474,480 ---- static int better_font_p P_ ((int *, struct font_name *, struct font_name *, int, int)); static int x_face_list_fonts P_ ((struct frame *, char *, ! struct font_name **, int, int)); static int font_scalable_p P_ ((struct font_name *)); static int get_lface_attributes P_ ((struct frame *, Lisp_Object, Lisp_Object *, int)); static int load_pixmap P_ ((struct frame *, Lisp_Object, unsigned *, unsigned *)); *************** *** 2435,2444 **** fonts that we can't parse. Value is the number of fonts found. */ static int ! x_face_list_fonts (f, pattern, fonts, nfonts, try_alternatives_p) struct frame *f; char *pattern; ! struct font_name *fonts; int nfonts, try_alternatives_p; { int n, nignored; --- 2435,2444 ---- fonts that we can't parse. Value is the number of fonts found. */ static int ! x_face_list_fonts (f, pattern, pfonts, nfonts, try_alternatives_p) struct frame *f; char *pattern; ! struct font_name **pfonts; int nfonts, try_alternatives_p; { int n, nignored; *************** *** 2447,2452 **** --- 2447,2454 ---- better to do it the other way around. */ Lisp_Object lfonts; Lisp_Object lpattern, tem; + struct font_name *fonts = 0; + int num_fonts = nfonts; lpattern = build_string (pattern); *************** *** 2459,2468 **** lfonts = x_list_fonts (f, lpattern, -1, nfonts); #endif /* Make a copy of the font names we got from X, and split them into fields. */ n = nignored = 0; ! for (tem = lfonts; CONSP (tem) && n < nfonts; tem = XCDR (tem)) { Lisp_Object elt, tail; const char *name = SDATA (XCAR (tem)); --- 2461,2473 ---- lfonts = x_list_fonts (f, lpattern, -1, nfonts); #endif + if (nfonts < 0 && CONSP (lfonts)) + num_fonts = Flength (lfonts); + /* Make a copy of the font names we got from X, and split them into fields. */ n = nignored = 0; ! for (tem = lfonts; CONSP (tem) && n < num_fonts; tem = XCDR (tem)) { Lisp_Object elt, tail; const char *name = SDATA (XCAR (tem)); *************** *** 2481,2486 **** --- 2486,2497 ---- continue; } + if (! fonts) + { + *pfonts = (struct font_name *) xmalloc (num_fonts * sizeof **pfonts); + fonts = *pfonts; + } + /* Make a copy of the font name. */ fonts[n].name = xstrdup (name); *************** *** 2504,2509 **** --- 2515,2522 ---- { Lisp_Object list = Valternate_fontname_alist; + if (fonts) xfree (fonts); + while (CONSP (list)) { Lisp_Object entry = XCAR (list); *************** *** 2527,2533 **** already with no success. */ && (strcmp (SDATA (name), pattern) == 0 || (n = x_face_list_fonts (f, SDATA (name), ! fonts, nfonts, 0), n == 0))) patterns = XCDR (patterns); } --- 2540,2546 ---- already with no success. */ && (strcmp (SDATA (name), pattern) == 0 || (n = x_face_list_fonts (f, SDATA (name), ! pfonts, nfonts, 0), n == 0))) patterns = XCDR (patterns); } *************** *** 2556,2566 **** /* Get the list of fonts matching pattern. 100 should suffice. */ nfonts = DEFAULT_FONT_LIST_LIMIT; ! if (INTEGERP (Vfont_list_limit) && XINT (Vfont_list_limit) > 0) ! nfonts = XFASTINT (Vfont_list_limit); ! *fonts = (struct font_name *) xmalloc (nfonts * sizeof **fonts); ! nfonts = x_face_list_fonts (f, pattern, *fonts, nfonts, 1); /* Sort the resulting array and return it in *FONTS. If no fonts were found, make sure to set *FONTS to null. */ --- 2569,2578 ---- /* Get the list of fonts matching pattern. 100 should suffice. */ nfonts = DEFAULT_FONT_LIST_LIMIT; ! if (INTEGERP (Vfont_list_limit)) ! nfonts = XINT (Vfont_list_limit); ! nfonts = x_face_list_fonts (f, pattern, fonts, nfonts, 1); /* Sort the resulting array and return it in *FONTS. If no fonts were found, make sure to set *FONTS to null. */ *************** *** 2834,2856 **** Lisp_Object result; struct gcpro gcpro1; int count = SPECPDL_INDEX (); - int limit; - - /* Let's consider all fonts. Increase the limit for matching - fonts until we have them all. */ - for (limit = 500;;) - { - specbind (intern ("font-list-limit"), make_number (limit)); - nfonts = font_list (f, Qnil, Qnil, Qnil, &fonts); ! if (nfonts == limit) ! { ! free_font_names (fonts, nfonts); ! limit *= 2; ! } ! else ! break; ! } result = Qnil; GCPRO1 (result); --- 2846,2855 ---- Lisp_Object result; struct gcpro gcpro1; int count = SPECPDL_INDEX (); ! /* Let's consider all fonts. */ ! specbind (intern ("font-list-limit"), make_number (-1)); ! nfonts = font_list (f, Qnil, Qnil, Qnil, &fonts); result = Qnil; GCPRO1 (result); *************** *** 2897,2903 **** CHECK_STRING (pattern); if (NILP (maximum)) ! maxnames = 2000; else { CHECK_NATNUM (maximum); --- 2896,2902 ---- CHECK_STRING (pattern); if (NILP (maximum)) ! maxnames = -1; else { CHECK_NATNUM (maximum); Index: src/xterm.c =================================================================== RCS file: /cvsroot/emacs/emacs/src/xterm.c,v retrieving revision 1.772 diff -c -r1.772 xterm.c *** src/xterm.c 8 Feb 2003 11:18:32 -0000 1.772 --- src/xterm.c 16 Feb 2003 19:17:45 -0000 *************** *** 14536,14543 **** { /* We try at least 10 fonts because XListFonts will return auto-scaled fonts at the head. */ ! names = XListFonts (dpy, SDATA (pattern), max (maxnames, 10), ! &num_fonts); if (x_had_errors_p (dpy)) { /* This error is perhaps due to insufficient memory on X --- 14536,14563 ---- { /* We try at least 10 fonts because XListFonts will return auto-scaled fonts at the head. */ ! if (maxnames < 0) ! { ! int limit; ! ! for (limit = 500;;) ! { ! names = XListFonts (dpy, SDATA (pattern), limit, &num_fonts); ! if (num_fonts == limit) ! { ! BLOCK_INPUT; ! XFreeFontNames (names); ! UNBLOCK_INPUT; ! limit *= 2; ! } ! else ! break; ! } ! } ! else ! names = XListFonts (dpy, SDATA (pattern), max (maxnames, 10), ! &num_fonts); ! if (x_had_errors_p (dpy)) { /* This error is perhaps due to insufficient memory on X [-- Attachment #3: Type: text/plain, Size: 142 bytes --] _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://mail.gnu.org/mailman/listinfo/emacs-devel ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [d.love@dl.ac.uk: x-font-family-list gives incomplete results] 2003-02-16 19:20 ` Jan D. @ 2003-02-16 22:30 ` Jason Rumney 2003-02-18 21:30 ` Jan D. 2003-02-18 16:49 ` Dave Love 2003-02-19 2:35 ` Kenichi Handa 2 siblings, 1 reply; 10+ messages in thread From: Jason Rumney @ 2003-02-16 22:30 UTC (permalink / raw) Cc: emacs-devel "Jan D." <jan.h.d@swipnet.se> writes: > Jan D. wrote: > > > One alternative solution would be to make maxnames passed to > > x_list_fonts (xterm.c) mean "get all font names" if it is less than > > zero. > > Here is a proposed patch. Comments welcome. I can not do the mac and > w32 parts, because I have no development environment on such systems. I have made the necessary change to w32_list_fonts to support this. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [d.love@dl.ac.uk: x-font-family-list gives incomplete results] 2003-02-16 22:30 ` Jason Rumney @ 2003-02-18 21:30 ` Jan D. 0 siblings, 0 replies; 10+ messages in thread From: Jan D. @ 2003-02-18 21:30 UTC (permalink / raw) Cc: emacs-devel > "Jan D." <jan.h.d@swipnet.se> writes: > > > Jan D. wrote: > > > > > One alternative solution would be to make maxnames passed to > > > x_list_fonts (xterm.c) mean "get all font names" if it is less than > > > zero. > > > > Here is a proposed patch. Comments welcome. I can not do the mac and > > w32 parts, because I have no development environment on such systems. > > I have made the necessary change to w32_list_fonts to support this. Thanks, I have now checked in xterm.c/xfaces.c with these changes. Jan D. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [d.love@dl.ac.uk: x-font-family-list gives incomplete results] 2003-02-16 19:20 ` Jan D. 2003-02-16 22:30 ` Jason Rumney @ 2003-02-18 16:49 ` Dave Love 2003-02-18 21:31 ` Jan D. 2003-02-19 2:35 ` Kenichi Handa 2 siblings, 1 reply; 10+ messages in thread From: Dave Love @ 2003-02-18 16:49 UTC (permalink / raw) Cc: emacs-devel "Jan D." <jan.h.d@swipnet.se> writes: > Here is a proposed patch. Comments welcome. I can not do the mac and > w32 parts, because I have no development environment on such systems. Thanks a lot for looking at it. Unfortunately with it I see the following at startup, which I don't have time to debug now: Program received signal SIGSEGV, Segmentation fault. free (mem=0x102bf6fc) at /net/pxfs5/home/fx/esrc/src/../malloc/malloc.c:3369 3369 if (chunk_is_mmapped(p)) /* release mmapped memory. */ (gdb) bt #0 free (mem=0x102bf6fc) at /net/pxfs5/home/fx/esrc/src/../malloc/malloc.c:3369 #1 0x00101f64 in emacs_blocked_free (ptr=0x102bf6fc) at /net/pxfs5/home/fx/esrc/src/alloc.c:694 #2 0x0016a234 in free (mem=0x0) at /net/pxfs5/home/fx/esrc/src/../malloc/malloc.c:3359 #3 0x00101cf0 in xfree (block=0x102bf6fc) at /net/pxfs5/home/fx/esrc/src/alloc.c:565 #4 0x00070ba0 in sorted_font_list (f=0x526580, pattern=0xefffc958 "-*-helv-*-ISO8859-1", cmpfn=0x70bac <cmp_font_names>, fonts=0xefffcb8c) at /net/pxfs5/home/fx/esrc/src/xfaces.c:2583 #5 0x00070dc0 in font_list_1 (f=0x526580, pattern=-268449448, family=2965540, registry=5939040, fonts=0xefffcb8c) at /net/pxfs5/home/fx/esrc/src/xfaces.c:2672 #6 0x00070e50 in font_list (f=0x526580, pattern=271316684, family=808725812, registry=811251612, fonts=0xefffcb8c) at /net/pxfs5/home/fx/esrc/src/xfaces.c:2717 #7 0x00078298 in try_alternative_families (f=0x526580, family=808725812, registry=811251612, fonts=0xefffcb8c) at /net/pxfs5/home/fx/esrc/src/xfaces.c:6301 #8 0x000783fc in try_font_list (f=0x526580, attrs=0x30342d34, family=811251596, registry=811251612, fonts=0xefffcb8c, prefer_face_family=1) at /net/pxfs5/home/fx/esrc/src/xfaces.c:6361 #9 0x00078604 in choose_face_font (f=0x526580, attrs=0x5a6ed8, fontset=14, c=0, needs_overstrike=0xefffcbfc) at /net/pxfs5/home/fx/esrc/src/xfaces.c:6456 #10 0x0006f68c in load_face_font (f=0x526580, face=0x5a6e90, c=0) at /net/pxfs5/home/fx/esrc/src/xfaces.c:1265 #11 0x0007916c in realize_face (cache=0x526580, attrs=0x102cc104, c=0, base_face=0x102cc104, former_face_id=271368452) at /net/pxfs5/home/fx/esrc/src/xfaces.c:6704 ... ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [d.love@dl.ac.uk: x-font-family-list gives incomplete results] 2003-02-18 16:49 ` Dave Love @ 2003-02-18 21:31 ` Jan D. 0 siblings, 0 replies; 10+ messages in thread From: Jan D. @ 2003-02-18 21:31 UTC (permalink / raw) Cc: emacs-devel > "Jan D." <jan.h.d@swipnet.se> writes: > > > Here is a proposed patch. Comments welcome. I can not do the mac and > > w32 parts, because I have no development environment on such systems. > > Thanks a lot for looking at it. > > Unfortunately with it I see the following at startup, which I don't > have time to debug now: The patch contained a bug. I have fixed that in the check in I just did. Jan D. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [d.love@dl.ac.uk: x-font-family-list gives incomplete results] 2003-02-16 19:20 ` Jan D. 2003-02-16 22:30 ` Jason Rumney 2003-02-18 16:49 ` Dave Love @ 2003-02-19 2:35 ` Kenichi Handa 2003-02-19 5:58 ` Jan D. 2 siblings, 1 reply; 10+ messages in thread From: Kenichi Handa @ 2003-02-19 2:35 UTC (permalink / raw) Cc: emacs-devel "Jan D." <jan.h.d@bogus.example.com> writes: > The patch contained a bug. I have fixed that in the check in I just did. With the latest CVS code, Emacs still crashes as below when I type C-h h. Program received signal SIGSEGV, Segmentation fault. 0x40354a90 in free () from /lib/libc.so.6 (gdb) bt #0 0x40354a90 in free () from /lib/libc.so.6 #1 0x08117c9a in emacs_blocked_free (ptr=0x8750400) at alloc.c:694 #2 0x40354a29 in free () from /lib/libc.so.6 #3 0x08117ab0 in xfree (block=0x8750400) at alloc.c:565 #4 0x0809c927 in sorted_font_list (f=0x851cd18, pattern=0xbfffe2e4 "-*-*-*-devanagari-cdac", cmpfn=0x809c938 <cmp_font_names>, fonts=0xbfffe418) at xfaces.c:2585 #5 0x0809cb1d in font_list_1 (f=0x851cd18, pattern=405469284, family=944773028, registry=944773044, fonts=0xbfffe418) at xfaces.c:2674 #6 0x0809cbd1 in font_list (f=0x851cd18, pattern=405469284, family=944773028, registry=944773044, fonts=0xbfffe418) at xfaces.c:2719 #7 0x080a2d57 in try_alternative_families (f=0x851cd18, family=944773028, registry=944773044, fonts=0xbfffe418) at xfaces.c:6303 #8 0x080a2e84 in try_font_list (f=0x851cd18, attrs=0x874adb8, family=944773028, registry=944773044, fonts=0xbfffe418, prefer_face_family=0) at xfaces.c:6363 #9 0x080a3039 in choose_face_font (f=0x851cd18, attrs=0x874adb8, fontset=11, c=266272, needs_overstrike=0xbfffe458) at xfaces.c:6458 #10 0x0809b70d in load_face_font (f=0x851cd18, face=0x874ad70, c=266272) at xfaces.c:1265 #11 0x080a3962 in realize_face (cache=0x851f9f0, attrs=0x8573528, c=266272, base_face=0x85734e0, former_face_id=-1) at xfaces.c:6706 #12 0x080a5bca in lookup_face (f=0x851cd18, attr=0x8573528, c=266272, base_face=0x85734e0) at xfaces.c:5641 #13 0x080d1ec7 in face_for_char (f=0x851cd18, face=0x85734e0, c=266272) at fontset.c:483 #14 0x080a82d7 in x_produce_glyphs (it=0xbfffe6b4) at xterm.c:2108 #15 0x0806f07d in display_line (it=0xbfffe6b4) at xdisp.c:13307 ... --- Ken'ichi HANDA handa@m17n.org ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [d.love@dl.ac.uk: x-font-family-list gives incomplete results] 2003-02-19 2:35 ` Kenichi Handa @ 2003-02-19 5:58 ` Jan D. 2003-02-19 6:15 ` Kenichi Handa 0 siblings, 1 reply; 10+ messages in thread From: Jan D. @ 2003-02-19 5:58 UTC (permalink / raw) Cc: emacs-devel > "Jan D." <jan.h.d@bogus.example.com> writes: > > The patch contained a bug. I have fixed that in the check in I just did. > > With the latest CVS code, Emacs still crashes as below when > I type C-h h. Sorry about that, checked in wrong version. I fixed that now. Jan D. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [d.love@dl.ac.uk: x-font-family-list gives incomplete results] 2003-02-19 5:58 ` Jan D. @ 2003-02-19 6:15 ` Kenichi Handa 0 siblings, 0 replies; 10+ messages in thread From: Kenichi Handa @ 2003-02-19 6:15 UTC (permalink / raw) Cc: emacs-devel In article <200302190652.h1J6qoFM020719@stubby.bodenonline.com>, "Jan D." <jan.h.d@swipnet.se> writes: >> "Jan D." <jan.h.d@bogus.example.com> writes: >> > The patch contained a bug. I have fixed that in the check in I just did. >> >> With the latest CVS code, Emacs still crashes as below when >> I type C-h h. > Sorry about that, checked in wrong version. I fixed that now. Thank you. I confirmed that the problem is fixed. --- Ken'ichi HANDA handa@m17n.org ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2003-02-19 6:15 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2003-01-22 9:59 [d.love@dl.ac.uk: x-font-family-list gives incomplete results] Richard Stallman 2003-02-16 18:39 ` Jan D. 2003-02-16 19:20 ` Jan D. 2003-02-16 22:30 ` Jason Rumney 2003-02-18 21:30 ` Jan D. 2003-02-18 16:49 ` Dave Love 2003-02-18 21:31 ` Jan D. 2003-02-19 2:35 ` Kenichi Handa 2003-02-19 5:58 ` Jan D. 2003-02-19 6:15 ` Kenichi Handa
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.