* Is this "save practice" (setting default font scale)?
@ 2020-11-20 14:51 Arthur Miller
2020-11-20 15:06 ` Daniele Nicolodi
` (2 more replies)
0 siblings, 3 replies; 15+ messages in thread
From: Arthur Miller @ 2020-11-20 14:51 UTC (permalink / raw)
To: emacs-devel
For few years now I have been using this to set default font height
in my .emacs, as told by Mr. Eliz some few years ago in some social
media thread:
(add-hook 'after-make-frame-functions
(lambda (frame)
(set-face-attribute 'default nil :height 160)))
This also seem to be THE way to customize fonts as found on numerous
SX/Reddit/blogs/etc discussions. So far so good.
I have refactored my init file and trying to push some things to
early-init to save some load time. What I have found is that above
little code adds ~200 ms to the init time; take or give.
Maybe it shouldn't but I have profiled several times and it always add
to startup time.
Furthre investigation discovered a giant list of faces in Emacs:
face-new-frame-alist. Setting corresponding value in face vector for
'default seems to achieve exactly same, but without measurable
difference at startup:
(aset (cdr (assoc 'default face-new-frame-defaults)) 4 160)
So my question is, is this safe to do, any pitfals I am not aware of
(more then me poking into internals which may change in future)?
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Is this "save practice" (setting default font scale)?
2020-11-20 14:51 Is this "save practice" (setting default font scale)? Arthur Miller
@ 2020-11-20 15:06 ` Daniele Nicolodi
2020-11-20 15:26 ` Arthur Miller
2020-11-20 15:14 ` Eli Zaretskii
2020-11-20 15:52 ` Stefan Monnier
2 siblings, 1 reply; 15+ messages in thread
From: Daniele Nicolodi @ 2020-11-20 15:06 UTC (permalink / raw)
To: emacs-devel
On 20/11/2020 15:51, Arthur Miller wrote:
> For few years now I have been using this to set default font height
> in my .emacs, as told by Mr. Eliz some few years ago in some social
> media thread:
>
> (add-hook 'after-make-frame-functions
> (lambda (frame)
> (set-face-attribute 'default nil :height 160)))
>
> This also seem to be THE way to customize fonts as found on numerous
> SX/Reddit/blogs/etc discussions. So far so good.
>
> I have refactored my init file and trying to push some things to
> early-init to save some load time. What I have found is that above
> little code adds ~200 ms to the init time; take or give.
>
> Maybe it shouldn't but I have profiled several times and it always add
> to startup time.
>
> Furthre investigation discovered a giant list of faces in Emacs:
> face-new-frame-alist. Setting corresponding value in face vector for
> 'default seems to achieve exactly same, but without measurable
> difference at startup:
>
> (aset (cdr (assoc 'default face-new-frame-defaults)) 4 160)
>
> So my question is, is this safe to do, any pitfals I am not aware of
> (more then me poking into internals which may change in future)?
I think the recommended way to change face properties is via the
customize facility, thus through the the custom-set-faces function:
(custom-set-faces '(default ((t (:height 160)))))
Cheers,
Dan
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Is this "save practice" (setting default font scale)?
2020-11-20 15:06 ` Daniele Nicolodi
@ 2020-11-20 15:26 ` Arthur Miller
0 siblings, 0 replies; 15+ messages in thread
From: Arthur Miller @ 2020-11-20 15:26 UTC (permalink / raw)
To: Daniele Nicolodi; +Cc: emacs-devel
Daniele Nicolodi <daniele@grinta.net> writes:
> On 20/11/2020 15:51, Arthur Miller wrote:
>> For few years now I have been using this to set default font height
>> in my .emacs, as told by Mr. Eliz some few years ago in some social
>> media thread:
>>
>> (add-hook 'after-make-frame-functions
>> (lambda (frame)
>> (set-face-attribute 'default nil :height 160)))
>>
>> This also seem to be THE way to customize fonts as found on numerous
>> SX/Reddit/blogs/etc discussions. So far so good.
>>
>> I have refactored my init file and trying to push some things to
>> early-init to save some load time. What I have found is that above
>> little code adds ~200 ms to the init time; take or give.
>>
>> Maybe it shouldn't but I have profiled several times and it always add
>> to startup time.
>>
>> Furthre investigation discovered a giant list of faces in Emacs:
>> face-new-frame-alist. Setting corresponding value in face vector for
>> 'default seems to achieve exactly same, but without measurable
>> difference at startup:
>>
>> (aset (cdr (assoc 'default face-new-frame-defaults)) 4 160)
>>
>> So my question is, is this safe to do, any pitfals I am not aware of
>> (more then me poking into internals which may change in future)?
>
> I think the recommended way to change face properties is via the
> customize facility, thus through the the custom-set-faces function:
>
> (custom-set-faces '(default ((t (:height 160)))))
Oki, it seems to achieve same result at about same speed too.
It is slightly more complicated; it calls custom-theme-set-faces under
the hood, but at least on my computer I can't seem to be able to measure
the time difference. Seems that every startup varies somewhere around
~100 ms, with both versions I am getting startups 0.32 ~ 0.34 secs.
custom-set-faces seems to be slightly more descriptive, than setting
value directly so I'll probably go with it; thanks!
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Is this "save practice" (setting default font scale)?
2020-11-20 14:51 Is this "save practice" (setting default font scale)? Arthur Miller
2020-11-20 15:06 ` Daniele Nicolodi
@ 2020-11-20 15:14 ` Eli Zaretskii
2020-11-20 15:37 ` Arthur Miller
2020-11-20 15:52 ` Stefan Monnier
2 siblings, 1 reply; 15+ messages in thread
From: Eli Zaretskii @ 2020-11-20 15:14 UTC (permalink / raw)
To: Arthur Miller; +Cc: emacs-devel
> From: Arthur Miller <arthur.miller@live.com>
> Date: Fri, 20 Nov 2020 15:51:04 +0100
>
> Furthre investigation discovered a giant list of faces in Emacs:
> face-new-frame-alist. Setting corresponding value in face vector for
> 'default seems to achieve exactly same, but without measurable
> difference at startup:
>
> (aset (cdr (assoc 'default face-new-frame-defaults)) 4 160)
>
> So my question is, is this safe to do, any pitfals I am not aware of
> (more then me poking into internals which may change in future)?
The pitfall is that the change in the default face will not be
propagated to other faces that depend on 'default' (inherit from him
and don't specify their own size explicitly).
By "startup" do you mean a one-time occurrence, or do you see this
slowdown each time you create a new frame via emacslient? If the
latter, you could make this face change only once, the first time
Emacs creates its first frame.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Is this "save practice" (setting default font scale)?
2020-11-20 15:14 ` Eli Zaretskii
@ 2020-11-20 15:37 ` Arthur Miller
2020-11-20 20:05 ` Eli Zaretskii
2020-11-20 22:47 ` chad
0 siblings, 2 replies; 15+ messages in thread
From: Arthur Miller @ 2020-11-20 15:37 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: emacs-devel
Eli Zaretskii <eliz@gnu.org> writes:
>> From: Arthur Miller <arthur.miller@live.com>
>> Date: Fri, 20 Nov 2020 15:51:04 +0100
>>
>> Furthre investigation discovered a giant list of faces in Emacs:
>> face-new-frame-alist. Setting corresponding value in face vector for
>> 'default seems to achieve exactly same, but without measurable
>> difference at startup:
>>
>> (aset (cdr (assoc 'default face-new-frame-defaults)) 4 160)
>>
>> So my question is, is this safe to do, any pitfals I am not aware of
>> (more then me poking into internals which may change in future)?
>
> The pitfall is that the change in the default face will not be
> propagated to other faces that depend on 'default' (inherit from him
> and don't specify their own size explicitly).
Si, I understand. Does Daniel's answer (custom-set-face) have same problem?
> By "startup" do you mean a one-time occurrence, or do you see this
> slowdown each time you create a new frame via emacslient?
I have just measured startup time of Emacs; I almost never run multiple
frames, so I don't know.
I believe this would run after a new frame is created. This is the
original code, I have just refactored it somewhat since I really just
wanted to scale my fonts:
(defun my-after-frame (frame)
(if (display-graphic-p frame)
(progn
(add-to-list 'default-frame-alist '(font . "Anonymous Pro-16"))
(set-face-attribute 'default nil :font "Anonymous Pro-16")
(set-face-attribute 'default nil :height 160)
(set-frame-font "Anonymous Pro-16" nil t))))
(add-hook 'after-make-frame-functions 'my-after-frame)
I guess this hook will repeat itself after every make-frame call? I
haven't measured, so it is just me guessing.
~200ms should also be taken with a grain of salt. I think my machine is
showing difference of everything from ~50 to ~200 ms for same setup; but
with after-frame hook it is always at least ~100 ms higher then without it.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Is this "save practice" (setting default font scale)?
2020-11-20 15:37 ` Arthur Miller
@ 2020-11-20 20:05 ` Eli Zaretskii
2020-11-21 6:33 ` Arthur Miller
2020-11-20 22:47 ` chad
1 sibling, 1 reply; 15+ messages in thread
From: Eli Zaretskii @ 2020-11-20 20:05 UTC (permalink / raw)
To: Arthur Miller; +Cc: emacs-devel
> From: Arthur Miller <arthur.miller@live.com>
> Cc: emacs-devel@gnu.org
> Date: Fri, 20 Nov 2020 16:37:51 +0100
>
> > The pitfall is that the change in the default face will not be
> > propagated to other faces that depend on 'default' (inherit from him
> > and don't specify their own size explicitly).
> Si, I understand. Does Daniel's answer (custom-set-face) have same problem?
No. But I don't expect it to provide any speedups, either.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Is this "save practice" (setting default font scale)?
2020-11-20 20:05 ` Eli Zaretskii
@ 2020-11-21 6:33 ` Arthur Miller
0 siblings, 0 replies; 15+ messages in thread
From: Arthur Miller @ 2020-11-21 6:33 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: emacs-devel
Eli Zaretskii <eliz@gnu.org> writes:
>> From: Arthur Miller <arthur.miller@live.com>
>> Cc: emacs-devel@gnu.org
>> Date: Fri, 20 Nov 2020 16:37:51 +0100
>>
>> > The pitfall is that the change in the default face will not be
>> > propagated to other faces that depend on 'default' (inherit from him
>> > and don't specify their own size explicitly).
>> Si, I understand. Does Daniel's answer (custom-set-face) have same problem?
>
> No. But I don't expect it to provide any speedups, either.
I guess speedup comes from not re-doing work after the frame is
created.
I did some measuremets:
(benchmark 1000000 (custom-set-faces '(default ((t (:height 140))))))
(benchmark 1000000 (set-face-attribute 'default nil :height 160))
In synthetic comparison as you say say there is no difference at all
Those two seem to execute roughtly about same time, ~0.017.
But when I switch between
(custom-set-faces '(default ((t (:height 140))))) and
(add-hook 'after-make-frame-functions
(lambda (frame)
(set-face-attribute 'default nil :height 160)))
I can measure ~100ms slowdown regulary. It has to be the double work.
Another interesting thing I found is this executes a magnitude faster
then above two benchmarks:
(benchmark 1000000 (aset (cdr (assoc 'default face-new-frame-defaults)) 4 140))
Yet when I use it in init file, I see no difference in startup time
compared to custom-set-faces version.
I guess it is too little difference when it comes to other things going
on at startup.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Is this "save practice" (setting default font scale)?
2020-11-20 15:37 ` Arthur Miller
2020-11-20 20:05 ` Eli Zaretskii
@ 2020-11-20 22:47 ` chad
2020-11-21 6:43 ` Arthur Miller
1 sibling, 1 reply; 15+ messages in thread
From: chad @ 2020-11-20 22:47 UTC (permalink / raw)
To: Arthur Miller; +Cc: EMACS development team
[-- Attachment #1: Type: text/plain, Size: 508 bytes --]
If you're running emacs27 and later, and are still running
comparative timings, try putting something like this into early-inti.el:
(push '(font . "Anonymous Pro-16") default-frame-alist)
This seemed to do the job of avoiding redraw/flicker when I set it up, but
I'm using emacs almost entirely under unusual circumstances (involving
VM's, multiple window systems, git head vs. pgtk branch, etc.) these days,
and I don't have a good way to test a simple unix+X11 setup right now.
Hope that helps,
~Chad
[-- Attachment #2: Type: text/html, Size: 664 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Is this "save practice" (setting default font scale)?
2020-11-20 22:47 ` chad
@ 2020-11-21 6:43 ` Arthur Miller
2020-11-21 7:18 ` Manuel Uberti
0 siblings, 1 reply; 15+ messages in thread
From: Arthur Miller @ 2020-11-21 6:43 UTC (permalink / raw)
To: chad; +Cc: EMACS development team
chad <yandros@gmail.com> writes:
> If you're running emacs27 and later, and are still running comparative timings, try putting something like this into early-inti.el:
I am on bleeding edge ... always :-)
> (push '(font . "Anonymous Pro-16") default-frame-alist)
Yeah, that is exactly what I am doing.
I just didn't know where is default face stored and how to modify it
before gui is created. Daniel pointed me out to it; but I am a little
bit proud of finding the face-new-frame-defaults on my own :-).
I was too lazy to refactor my old setup, but it was starting to go high
in startup time ~2secs from 1.2 so I finally decided to see if I can speed
it up with early init. This is what I have:
;;; early-init.el --- -*- lexical-binding: t; -*-
(setq gc-cons-threshold most-positive-fixnum)
(setq frame-inhibit-implied-resize t)
(push '(menu-bar-lines . 0) default-frame-alist)
(push '(tool-bar-lines . 0) default-frame-alist)
(push '(vertical-scroll-bars) default-frame-alist)
(push '(font . "Anonymous Pro-16") default-frame-alist)
(custom-set-faces '(default ((t (:height 140)))))
;;; early-init.el ends here
Seems to work nice. (gc threshold is restored in later in setup)
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Is this "save practice" (setting default font scale)?
2020-11-21 6:43 ` Arthur Miller
@ 2020-11-21 7:18 ` Manuel Uberti
2020-11-21 13:45 ` Arthur Miller
0 siblings, 1 reply; 15+ messages in thread
From: Manuel Uberti @ 2020-11-21 7:18 UTC (permalink / raw)
To: emacs-devel
On 21/11/20 07:43, Arthur Miller wrote:
> I was too lazy to refactor my old setup, but it was starting to go high
> in startup time ~2secs from 1.2 so I finally decided to see if I can speed
> it up with early init. This is what I have:
>
> ;;; early-init.el --- -*- lexical-binding: t; -*-
>
> (setq gc-cons-threshold most-positive-fixnum)
>
> (setq frame-inhibit-implied-resize t)
>
> (push '(menu-bar-lines . 0) default-frame-alist)
> (push '(tool-bar-lines . 0) default-frame-alist)
> (push '(vertical-scroll-bars) default-frame-alist)
> (push '(font . "Anonymous Pro-16") default-frame-alist)
> (custom-set-faces '(default ((t (:height 140)))))
>
> ;;; early-init.el ends here
>
> Seems to work nice. (gc threshold is restored in later in setup)
>
Is there any difference to use custom-set-faces for :family too? Something like:
(custom-set-faces
'(default ((t (:family "Cascadia Code"
:height 120
:weight light)))))
--
Manuel Uberti
www.manueluberti.eu
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Is this "save practice" (setting default font scale)?
2020-11-21 7:18 ` Manuel Uberti
@ 2020-11-21 13:45 ` Arthur Miller
2020-11-21 16:04 ` Eli Zaretskii
0 siblings, 1 reply; 15+ messages in thread
From: Arthur Miller @ 2020-11-21 13:45 UTC (permalink / raw)
To: Manuel Uberti; +Cc: emacs-devel
Manuel Uberti <manuel.uberti@inventati.org> writes:
> On 21/11/20 07:43, Arthur Miller wrote:
>> I was too lazy to refactor my old setup, but it was starting to go high
>> in startup time ~2secs from 1.2 so I finally decided to see if I can speed
>> it up with early init. This is what I have:
>>
>> ;;; early-init.el --- -*- lexical-binding: t; -*-
>>
>> (setq gc-cons-threshold most-positive-fixnum)
>>
>> (setq frame-inhibit-implied-resize t)
>>
>> (push '(menu-bar-lines . 0) default-frame-alist)
>> (push '(tool-bar-lines . 0) default-frame-alist)
>> (push '(vertical-scroll-bars) default-frame-alist)
>> (push '(font . "Anonymous Pro-16") default-frame-alist)
>> (custom-set-faces '(default ((t (:height 140)))))
>>
>> ;;; early-init.el ends here
>>
>> Seems to work nice. (gc threshold is restored in later in setup)
>>
>
> Is there any difference to use custom-set-faces for :family too? Something like:
>
> (custom-set-faces
> '(default ((t (:family "Anonymous Pro-16"
> :height 140
> :weight light)))))
It seems to be just very slightly slower; but it might also be too small
of a difference for my system to give a polite result.
With above my startup is currently repporting times all betweeen ~0.2x
to ~ 0.3x; with your version it is aroun ~0.3 to ~0.4 I measure 5
startups every time.
I don't see reasons why there would be a difference; it might be just
fluctuations in my system. I dont' know how polite (emacs-init-time) is
either.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Is this "save practice" (setting default font scale)?
2020-11-21 13:45 ` Arthur Miller
@ 2020-11-21 16:04 ` Eli Zaretskii
2020-11-21 17:05 ` arthur miller
0 siblings, 1 reply; 15+ messages in thread
From: Eli Zaretskii @ 2020-11-21 16:04 UTC (permalink / raw)
To: Arthur Miller; +Cc: manuel.uberti, emacs-devel
> From: Arthur Miller <arthur.miller@live.com>
> Date: Sat, 21 Nov 2020 14:45:58 +0100
> Cc: emacs-devel@gnu.org
>
> > (custom-set-faces
> > '(default ((t (:family "Anonymous Pro-16"
> > :height 140
> > :weight light)))))
> It seems to be just very slightly slower; but it might also be too small
> of a difference for my system to give a polite result.
>
> With above my startup is currently repporting times all betweeen ~0.2x
> to ~ 0.3x; with your version it is aroun ~0.3 to ~0.4 I measure 5
> startups every time.
>
> I don't see reasons why there would be a difference; it might be just
> fluctuations in my system. I dont' know how polite (emacs-init-time) is
> either.
AFAIU, custom-set-faces does a bit more than just set-face-attribute,
but I'd be surprised if that could account for 0.1 sec of time.
^ permalink raw reply [flat|nested] 15+ messages in thread
* RE: Is this "save practice" (setting default font scale)?
2020-11-21 16:04 ` Eli Zaretskii
@ 2020-11-21 17:05 ` arthur miller
0 siblings, 0 replies; 15+ messages in thread
From: arthur miller @ 2020-11-21 17:05 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: manuel.uberti@inventati.org, emacs-devel@gnu.org
[-- Attachment #1: Type: text/plain, Size: 1269 bytes --]
I know, but that's what I got. I did 5 measurements each time. Might be just too small difference to measure too.
-------- Originalmeddelande --------
Från: Eli Zaretskii <eliz@gnu.org>
Datum: 2020-11-21 17:04 (GMT+01:00)
Till: Arthur Miller <arthur.miller@live.com>
Kopia: manuel.uberti@inventati.org, emacs-devel@gnu.org
Ämne: Re: Is this "save practice" (setting default font scale)?
> From: Arthur Miller <arthur.miller@live.com>
> Date: Sat, 21 Nov 2020 14:45:58 +0100
> Cc: emacs-devel@gnu.org
>
> > (custom-set-faces
> > '(default ((t (:family "Anonymous Pro-16"
> > :height 140
> > :weight light)))))
> It seems to be just very slightly slower; but it might also be too small
> of a difference for my system to give a polite result.
>
> With above my startup is currently repporting times all betweeen ~0.2x
> to ~ 0.3x; with your version it is aroun ~0.3 to ~0.4 I measure 5
> startups every time.
>
> I don't see reasons why there would be a difference; it might be just
> fluctuations in my system. I dont' know how polite (emacs-init-time) is
> either.
AFAIU, custom-set-faces does a bit more than just set-face-attribute,
but I'd be surprised if that could account for 0.1 sec of time.
[-- Attachment #2: Type: text/html, Size: 2243 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Is this "save practice" (setting default font scale)?
2020-11-20 14:51 Is this "save practice" (setting default font scale)? Arthur Miller
2020-11-20 15:06 ` Daniele Nicolodi
2020-11-20 15:14 ` Eli Zaretskii
@ 2020-11-20 15:52 ` Stefan Monnier
2020-11-21 6:12 ` Arthur Miller
2 siblings, 1 reply; 15+ messages in thread
From: Stefan Monnier @ 2020-11-20 15:52 UTC (permalink / raw)
To: Arthur Miller; +Cc: emacs-devel
> (add-hook 'after-make-frame-functions
> (lambda (frame)
> (set-face-attribute 'default nil :height 160)))
[...]
> I have refactored my init file and trying to push some things to
> early-init to save some load time. What I have found is that above
> little code adds ~200 ms to the init time; take or give.
That's probably because of the extra work it imposes because it changes
the default face after the first frame is created: Emacs has just
created the frame (which involves realizing a bunch of faces) and you're
telling it should go and redo some of that work with a new value of
`default`.
Setting your faces via Custom will avoid this double work because the
new setting can be installed before creating the first frame, so the
frame can be created immediately with the right faces.
Stefan
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Is this "save practice" (setting default font scale)?
2020-11-20 15:52 ` Stefan Monnier
@ 2020-11-21 6:12 ` Arthur Miller
0 siblings, 0 replies; 15+ messages in thread
From: Arthur Miller @ 2020-11-21 6:12 UTC (permalink / raw)
To: Stefan Monnier; +Cc: emacs-devel
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> (add-hook 'after-make-frame-functions
>> (lambda (frame)
>> (set-face-attribute 'default nil :height 160)))
> [...]
>> I have refactored my init file and trying to push some things to
>> early-init to save some load time. What I have found is that above
>> little code adds ~200 ms to the init time; take or give.
>
> That's probably because of the extra work it imposes because it changes
> the default face after the first frame is created: Emacs has just
> created the frame (which involves realizing a bunch of faces) and you're
> telling it should go and redo some of that work with a new value of
> `default`.
Yes I know; that was reason why I started to refactor this into
early-init, so I can skip after-make-frame and double work.
> Setting your faces via Custom will avoid this double work because the
> new setting can be installed before creating the first frame, so the
> frame can be created immediately with the right faces.
I know.
I just didn't know where/how default face was set and
stored. Daniel pointed me to it already.
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2020-11-21 17:05 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-11-20 14:51 Is this "save practice" (setting default font scale)? Arthur Miller
2020-11-20 15:06 ` Daniele Nicolodi
2020-11-20 15:26 ` Arthur Miller
2020-11-20 15:14 ` Eli Zaretskii
2020-11-20 15:37 ` Arthur Miller
2020-11-20 20:05 ` Eli Zaretskii
2020-11-21 6:33 ` Arthur Miller
2020-11-20 22:47 ` chad
2020-11-21 6:43 ` Arthur Miller
2020-11-21 7:18 ` Manuel Uberti
2020-11-21 13:45 ` Arthur Miller
2020-11-21 16:04 ` Eli Zaretskii
2020-11-21 17:05 ` arthur miller
2020-11-20 15:52 ` Stefan Monnier
2020-11-21 6:12 ` Arthur Miller
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.