From: "Garreau\, Alexandre" <galex-713@galex-713.eu>
To: tomas@tuxteam.de
Cc: help-gnu-emacs@gnu.org, Stefan Monnier <monnier@iro.umontreal.ca>
Subject: Re: Knowing where a function has been used (bis) [Was: Re: Optimising Elisp code]
Date: Sat, 06 Oct 2018 23:42:12 +0200 [thread overview]
Message-ID: <eeelvtzzzzzz.c1c.xxuns.g6.gal@portable.galex-713.eu> (raw)
In-Reply-To: <20181006202740.GC7368@tuxteam.de> (tomas@tuxteam.de's message of "Sat, 6 Oct 2018 22:27:40 +0200")
Le 06/10/2018 à 22h27, tomas@tuxteam.de a écrit :
> On Sat, Oct 06, 2018 at 09:55:09PM +0200, Garreau, Alexandre wrote:
>> Le 06/10/2018 à 21h24, tomas@tuxteam.de a écrit :
>> > On Sat, Oct 06, 2018 at 06:55:54PM +0200, Garreau, Alexandre wrote:
>> >> Or would “reevaluate every function that where defined with the
>> >> (now-redefined) inlined function inside” work too?
>> >
>> > Hmm. Not reevaluate, but recompile, and not "inside", but rather
>> > "outside" -- like finding all places where this function was
>> > inlined
>>
>> I don’t get how “outside” is the correct form here, as this is precisely
>> what I was meaning: I mentioned it in my other message titled “Knowing
>> where a function has been used (e.g. for optimizing)” (message-id: [0],
>> url: [1]), as I found a such functionality, symetrical to
>> find-definition, would be quite generally useful for lot of stuff.
>
> Then I didn't get you right: I gather we both mean the "context" where
> the function was "inlined into".
Yes.
> If you're lucky, no optimization has happened *after" you've inlined.
Lucky? Why? if it didn’t happen, will you really be able to extract the
inlined part to patch it? won’t recompiling it be simplier?
I like the idea of inline optimization precisely because if done
recursively even on a reasonable level it could sometimes lead to great
expansion/reduction and simplification, not only of one function call.
> Otherwise, you'll have to recompile the whole context (i.e. parts of
> the caller).
How do you recompile only a part? you can do this (I’m pretty ignorant
of elisp’s byte-compiler capabilities)?
>> > and do some magic there.
>>
>> What other kind of magic than (maybe recursively)
>> reevaluating/recompiling could be needed there?
>
> In the case of a redefinition of the inlined function you'll have to
> find all call sites and do something.
that is, recursively recompiling, as I said, right? “do something” is no
more precise than “do some magic”, and “there” (in both messages)
already meant “at the call sites”.
>> > Perhaps doable, but not trivial.
>>
>> I have really no precise idea of where and how is stored the place where
>> each function was defined
>
> Which functions you mean by "each function"? You mean the sites at which
> the inlined function is "called" (i.e. inlined), I guess.
Not really, including this, but I was speaking about the find-definition
feature of emacs specifically, since afterwards I talk about a symmetric
feature, that is, store the list of symbols refered by each function, even (or
rather, especially) if it is compiled, in a place linked to each
function definition: so if the functions `f', `g' and `h' refer to `a',
having in something linked to the `a' symbol (an alist, a plist,
anything) a list of these. So the same way you can find-definition of
`a' and see how and where it was defined (like with C-h f, C-h v… and
xref generally), you could see where it has been used: that’s at the
same time a good way of see the use/meaning of `a' by examples rather
than by definition (if the definition didn’t suffice), and that would
allow to recursively draw some dependency graph showing what needs to be
recompiled if `a' is changed.
Maybe even someone could try some experimental optimizations features
such as, let this `a' be a variable, not a thunk, recompile everything
referring to `a' when you change it (thus leading to the same behavior
of a thunk, without side-effects, and with statical optimization)
> Well, I haven't a precise idea either, but for a pretty lucid description
> (in the context of Guile, but with pointers to other implementations),
> cf
>
> https://wingolog.org/archives/2018/02/07/design-notes-on-inline-caches-in-guile
I was speaking of something more static, not at eval-time, but at
compile-time. The idea was to keep a big but exhaustive list of usages
(that would be filled at each definition, I guess the same way as
load-history already is), growing with time (possibly directly linked to
the symbol).
>> >> Why “undo”? [...]
>
> [...]
>
>> So, except maybe wrt debugging (which there should imply reevaluation,
>
> you mean "recompile"
Afaik edebug-defun works by reevaluation everywhere, even for
not-compiled functions. So I meant reevaluation. Except, you, indeed,
were speaking about the case I was saying I wasn’t speaking about, that
is debugging an already existing (possibly compiled) function, without
reusing its definition (that is reevaluating, or recompiling if
necessary (because it was already compiled)).
>> like with edebug-defun), reevaluating (or rather recompiling indeed,
>> since afaiu then, simple evaluation will never optimize anything, unlike
>> byte-compiling (right?)).
>
> Not only debugging, but any kind of redefinition. Emacs lisp is a
> dynamic language, and the users expect that when you redefine a
> function, the new definition is active; unless the magic is under
> user control (you've said "defmacro" or "def-inline", then you know
> you've to recompile the callers),
That’s why I’m talking about recompiling.
> the run system has to manage the mess, i.e. it has to remember all the
> sites where things have to be inlined, like in the "inline cache" from
> the reference above.
In wingo’s article he speaks about a cache put *inside* a function,
that’s updated *while* evaluation, depending on it. I’m speaking of the
statical, pre-compilation case. With this same information, not
guessed, but exhaustive, and not stored *inside* the function, but in
some place related, be it a global dictionary (hashtable, alist or
plist), or in something related to the symbol (its plist? some modified
symbol?): so you can programatically use this list of locations
typically in xref/help buffers, in some experimental paradigm of
programming, etc. IC is only an optimization, is VM/evaluation-side, is
non-exhaustive/guessed by nature, and is, afaiu, hidden from the user
point-of-view.
next prev parent reply other threads:[~2018-10-06 21:42 UTC|newest]
Thread overview: 284+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-05 2:15 Optimising Elisp code Davin Pearson
2018-10-05 2:19 ` Davin Pearson
2018-10-05 9:46 ` Emanuel Berg
2018-10-05 10:58 ` Noam Postavsky
2018-10-05 10:03 ` tomas
2018-10-05 14:28 ` Barry Margolin
2018-10-05 14:42 ` Emanuel Berg
2018-10-05 15:04 ` Emanuel Berg
2018-10-05 17:05 ` Óscar Fuentes
[not found] ` <mailman.1736.1538759161.1284.help-gnu-emacs@gnu.org>
2018-10-05 17:23 ` Emanuel Berg
2018-10-05 17:46 ` Óscar Fuentes
[not found] ` <mailman.1737.1538762057.1284.help-gnu-emacs@gnu.org>
2018-10-05 18:50 ` Emanuel Berg
2018-10-05 19:14 ` Emanuel Berg
2018-10-05 19:17 ` Emanuel Berg
2018-10-05 19:26 ` Emanuel Berg
2018-10-05 19:40 ` Stefan Monnier
[not found] ` <mailman.1741.1538768445.1284.help-gnu-emacs@gnu.org>
2018-10-05 21:55 ` Emanuel Berg
2018-10-05 18:04 ` James K. Lowden
2018-10-05 19:02 ` Emanuel Berg
2018-10-07 2:57 ` Barry Margolin
2018-10-06 10:45 ` Knowing where a function has been used (e.g. for optimizing) [Was: Re: Optimising Elisp code] Garreau, Alexandre
2018-10-06 14:40 ` Optimising Elisp code Stefan Monnier
2018-10-06 16:55 ` Garreau, Alexandre
2018-10-06 19:24 ` tomas
2018-10-06 19:55 ` Knowing where a function has been used (bis) [Was: Re: Optimising Elisp code] Garreau, Alexandre
2018-10-06 20:27 ` tomas
2018-10-06 21:42 ` Garreau, Alexandre [this message]
2018-10-07 8:10 ` tomas
2018-10-07 13:56 ` Garreau, Alexandre
[not found] ` <mailman.1787.1538899813.1284.help-gnu-emacs@gnu.org>
2018-10-07 12:54 ` Emanuel Berg
[not found] ` <mailman.1775.1538857674.1284.help-gnu-emacs@gnu.org>
2018-10-07 12:52 ` Emanuel Berg
2018-10-07 13:19 ` Stefan Monnier
[not found] ` <mailman.1792.1538918415.1284.help-gnu-emacs@gnu.org>
2018-10-07 15:59 ` Emanuel Berg
2018-10-07 16:30 ` Optimising Elisp code [again] Garreau, Alexandre
[not found] ` <mailman.1805.1538929865.1284.help-gnu-emacs@gnu.org>
2018-10-08 14:11 ` Emanuel Berg
2018-10-08 14:43 ` tomas
[not found] ` <mailman.1852.1539009893.1284.help-gnu-emacs@gnu.org>
2018-10-09 0:38 ` Barry Margolin
2018-10-09 6:26 ` Emanuel Berg
2018-10-09 8:07 ` Garreau, Alexandre
[not found] ` <mailman.1903.1539072429.1284.help-gnu-emacs@gnu.org>
2018-10-09 13:28 ` Emanuel Berg
2018-10-09 15:03 ` Garreau, Alexandre
[not found] ` <mailman.1911.1539097442.1284.help-gnu-emacs@gnu.org>
2018-10-09 15:26 ` Emanuel Berg
2018-10-09 19:35 ` Garreau, Alexandre
2018-10-10 16:18 ` Barry Margolin
2018-10-10 20:53 ` Óscar Fuentes
2018-10-10 23:54 ` Garreau, Alexandre
[not found] ` <mailman.1975.1539205047.1284.help-gnu-emacs@gnu.org>
2018-10-11 18:10 ` Emanuel Berg
2018-10-12 19:52 ` Robert Thorpe
2018-10-07 16:10 ` Knowing where a function has been used (bis) [Was: Re: Optimising Elisp code] Emanuel Berg
2018-10-07 16:35 ` Garreau, Alexandre
2018-10-07 19:35 ` Barry Margolin
2018-10-08 14:18 ` Emanuel Berg
2018-10-08 15:23 ` Garreau, Alexandre
2018-10-08 20:52 ` Emanuel Berg
2018-10-09 0:41 ` Barry Margolin
2018-10-09 6:35 ` Emanuel Berg
2018-10-10 16:24 ` Barry Margolin
2018-10-10 16:32 ` Emanuel Berg
2018-10-11 19:29 ` Barry Margolin
2018-10-11 20:05 ` Emanuel Berg
2018-10-12 22:32 ` Barry Margolin
2018-10-12 23:03 ` Eric Abrahamsen
2018-10-13 20:51 ` Emanuel Berg
2018-10-14 7:55 ` tomas
[not found] ` <mailman.2146.1539503732.1284.help-gnu-emacs@gnu.org>
2018-10-14 19:10 ` Emanuel Berg
2018-10-15 8:25 ` tomas
[not found] ` <mailman.2179.1539591977.1284.help-gnu-emacs@gnu.org>
2018-10-15 19:27 ` Emanuel Berg
2018-10-16 0:55 ` Van L
2018-10-17 0:20 ` Garreau, Alexandre
[not found] ` <mailman.2284.1539735662.1284.help-gnu-emacs@gnu.org>
2018-10-17 6:49 ` Emanuel Berg
2018-10-10 20:50 ` Óscar Fuentes
[not found] ` <mailman.1806.1538930105.1284.help-gnu-emacs@gnu.org>
2018-10-08 14:14 ` Emanuel Berg
2018-10-08 15:37 ` Naming, and Gnus functions length [Was: Re: Knowing where a function has been used (bis) [Was: Re: Optimising Elisp code]] Garreau, Alexandre
[not found] ` <mailman.1860.1539013068.1284.help-gnu-emacs@gnu.org>
2018-10-08 15:43 ` Emanuel Berg
2018-10-08 15:52 ` Naming, and Gnus functions length [ Garreau, Alexandre
[not found] ` <mailman.1863.1539013974.1284.help-gnu-emacs@gnu.org>
2018-10-08 16:39 ` Emanuel Berg
2018-10-08 20:03 ` Naming, and Gnus functions length [Was: Re: Knowing where a function has been used (bis) [Was: Re: Optimising Elisp code]] Eli Zaretskii
[not found] ` <mailman.1874.1539029031.1284.help-gnu-emacs@gnu.org>
2018-10-08 20:44 ` Why is Elisp slow? (was: Re: Naming, and Gnus functions length [Was: Re: Knowing where a function has been used (bis) [Was: Re: Optimising Elisp code]]) Emanuel Berg
2018-10-08 23:53 ` Why is Elisp slow? Garreau, Alexandre
2018-10-09 12:27 ` Stefan Monnier
[not found] ` <mailman.1893.1539042845.1284.help-gnu-emacs@gnu.org>
2018-10-09 6:23 ` Emanuel Berg
2018-10-09 8:05 ` Garreau, Alexandre
2018-10-09 15:04 ` Eli Zaretskii
2019-05-02 4:49 ` Van L
2019-05-02 7:56 ` tomas
2019-05-02 11:06 ` Marcin Borkowski
2019-05-02 13:18 ` tomas
2019-05-02 15:34 ` Eli Zaretskii
2019-05-02 19:13 ` Marcin Borkowski
2019-05-02 19:45 ` Eli Zaretskii
2019-05-04 11:55 ` Marcin Borkowski
2019-05-02 20:00 ` tomas
2019-05-04 11:52 ` Marcin Borkowski
2019-05-02 19:33 ` Óscar Fuentes
2019-05-02 19:49 ` Eli Zaretskii
2019-05-02 20:12 ` Óscar Fuentes
2019-05-02 20:20 ` Eli Zaretskii
2019-05-02 21:40 ` Ergus
2019-05-02 23:39 ` 조성빈
2019-05-03 0:44 ` Ergus
2019-05-03 1:06 ` 조성빈
2019-05-03 10:36 ` Ergus
2019-05-03 11:52 ` 조성빈
2019-05-03 12:44 ` Eli Zaretskii
2019-05-03 12:58 ` Ergus
2019-05-03 14:00 ` Eli Zaretskii
2019-05-03 22:57 ` Stefan Monnier
2019-05-04 13:32 ` Ergus
2019-05-04 14:03 ` Stefan Monnier
2019-05-04 22:41 ` Emanuel Berg
2019-05-04 22:56 ` Stefan Monnier
2019-05-04 23:19 ` Emanuel Berg
2019-05-05 15:40 ` Stefan Monnier
2019-05-06 6:53 ` tomas
2019-05-06 8:25 ` Emanuel Berg
2019-05-05 0:12 ` 조성빈
2019-05-05 3:15 ` Stefan Monnier
2019-05-05 0:43 ` Ergus
2019-05-05 3:07 ` 조성빈
2019-05-05 15:50 ` Stefan Monnier
2019-05-06 7:33 ` Tadeus Prastowo
2019-05-06 9:03 ` 조성빈
2019-05-06 10:51 ` Tadeus Prastowo
2019-05-06 12:58 ` Ergus
2019-05-06 13:08 ` Stefan Monnier
2019-05-06 16:17 ` Ergus
2019-05-06 17:25 ` Stefan Monnier
2019-05-06 17:45 ` 조성빈
2019-05-06 18:08 ` Stefan Monnier
2019-05-06 18:18 ` 조성빈
2019-05-06 18:47 ` Stefan Monnier
2019-05-06 20:23 ` Ergus
2019-05-06 20:41 ` 조성빈
2019-05-06 21:45 ` Jean-Christophe Helary
2019-05-06 22:03 ` Ergus
2019-05-06 23:07 ` Ergus
2019-05-07 10:49 ` Ergus
2019-05-07 11:51 ` 조성빈
2019-05-07 12:38 ` Ergus
2019-05-07 12:56 ` Stefan Monnier
2019-05-07 13:01 ` 조성빈
2019-05-07 13:04 ` Stefan Monnier
2019-05-07 13:14 ` Ergus
2019-05-07 13:43 ` 조성빈
2019-05-07 14:22 ` Stefan Monnier
2019-05-07 14:41 ` Ergus
2019-05-09 9:49 ` Ergus
2019-05-10 3:20 ` 조성빈
2019-05-10 4:26 ` Ergus
2019-05-10 4:35 ` 조성빈
2019-05-10 8:27 ` tomas
2019-05-07 13:16 ` 조성빈
2019-05-07 13:40 ` Ergus
2019-05-06 20:51 ` Óscar Fuentes
2019-05-07 2:35 ` 조성빈
2019-05-10 5:14 ` Van L
2019-05-06 13:18 ` 조성빈
2019-05-06 13:33 ` Óscar Fuentes
2019-05-06 14:04 ` 조성빈
2019-05-10 7:20 ` Van L
2019-05-10 14:38 ` Lisp, C, and C++ (was: Re: Why is Elisp slow?) Emanuel Berg
2019-05-10 14:49 ` Emanuel Berg
2019-05-06 23:39 ` Why is Elisp slow? Emanuel Berg
2019-05-05 5:25 ` Paul W. Rankin
2019-05-05 13:19 ` Óscar Fuentes
2019-05-05 13:46 ` Ergus
2019-05-06 7:01 ` tomas
2019-05-05 12:51 ` Stefan Monnier
2019-05-10 3:15 ` Van L
2019-05-04 14:10 ` Eli Zaretskii
2019-05-03 12:51 ` Ergus
2019-05-03 13:16 ` 조성빈
2019-05-03 13:32 ` Ergus
2019-05-03 14:04 ` Eli Zaretskii
2019-05-04 0:32 ` Emanuel Berg
2019-05-04 11:29 ` Marcin Borkowski
2019-05-03 1:45 ` Paul W. Rankin
2019-05-03 7:00 ` Eli Zaretskii
2019-05-03 9:58 ` Ergus
2019-05-03 12:41 ` Eli Zaretskii
2019-05-03 22:18 ` Óscar Fuentes
2019-05-04 13:27 ` Ergus
2019-05-04 13:38 ` 조성빈
2019-05-04 0:33 ` Emanuel Berg
2019-05-03 7:08 ` tomas
2019-05-10 13:14 ` Van L
2019-05-10 13:22 ` Michael Heerdegen
2019-05-10 14:44 ` Emanuel Berg
2019-05-11 0:38 ` Emanuel Berg
2019-05-11 1:55 ` Stefan Monnier
2019-05-11 2:16 ` Emanuel Berg
2019-05-11 7:32 ` Is Elisp really that slow? (was: Why is Elisp slow?) tomas
2019-05-11 7:42 ` 조성빈
2019-05-11 7:57 ` tomas
2019-05-11 14:30 ` 조성빈
2019-05-11 17:01 ` tomas
2019-05-11 23:09 ` Emanuel Berg
2019-05-12 7:54 ` tomas
2019-05-12 8:09 ` Emanuel Berg
2019-05-12 9:46 ` 조성빈
2019-05-12 14:21 ` Eli Zaretskii
2019-05-12 14:45 ` Is Elisp really that slow? Óscar Fuentes
2019-05-12 15:28 ` Eli Zaretskii
2019-05-12 15:46 ` Óscar Fuentes
2019-05-12 17:20 ` Eli Zaretskii
2019-05-12 18:37 ` Óscar Fuentes
2019-05-12 18:53 ` Eli Zaretskii
2019-05-13 1:44 ` Emanuel Berg
2019-05-12 21:18 ` Stefan Monnier
2019-05-12 22:22 ` Óscar Fuentes
2019-05-14 13:39 ` Stefan Monnier
2019-05-14 15:09 ` Óscar Fuentes
2019-05-13 0:57 ` Samuel Wales
2019-05-13 12:37 ` Stefan Monnier
2019-05-13 14:23 ` Emanuel Berg
2019-05-13 14:33 ` Emanuel Berg
2019-05-14 8:24 ` tomas
2019-05-14 13:21 ` Emanuel Berg
2019-05-14 14:44 ` tomas
2019-05-15 11:25 ` Emanuel Berg
2019-05-15 12:05 ` tomas
2019-05-15 23:02 ` Emanuel Berg
2019-05-16 6:48 ` tomas
2019-05-16 9:37 ` Noam Postavsky
2019-05-16 11:02 ` tomas
2019-05-23 14:23 ` Emanuel Berg
2019-05-24 1:33 ` Van L
2019-05-16 13:31 ` Eli Zaretskii
2019-05-23 14:28 ` Emanuel Berg
2019-05-23 14:54 ` Drew Adams
2019-05-23 14:55 ` Eli Zaretskii
2019-06-06 5:18 ` Emanuel Berg via help-gnu-emacs
2019-05-16 14:45 ` Stefan Monnier
2019-05-25 4:53 ` Emanuel Berg via help-gnu-emacs
2019-05-13 1:52 ` Emanuel Berg
2019-05-13 1:35 ` Emanuel Berg
2019-05-12 21:01 ` Stefan Monnier
2019-05-13 1:27 ` Emanuel Berg
2019-05-13 14:38 ` Eli Zaretskii
2019-05-13 15:00 ` Emanuel Berg
2019-05-13 15:25 ` Eli Zaretskii
2019-05-14 11:54 ` Emanuel Berg
2019-05-14 16:21 ` Eli Zaretskii
2019-05-14 17:05 ` Emanuel Berg
2019-05-14 18:30 ` Eli Zaretskii
2019-05-15 11:27 ` Emanuel Berg
2019-05-15 14:51 ` Eli Zaretskii
2019-05-16 23:19 ` Emanuel Berg
2019-05-17 6:41 ` Eli Zaretskii
2019-05-13 15:02 ` John Yates
2019-05-13 15:14 ` Eli Zaretskii
2019-05-13 22:40 ` Dmitry Gutov
2019-05-14 6:27 ` Paul W. Rankin
2019-05-14 13:10 ` Emanuel Berg
2019-05-13 15:42 ` Van L
2019-05-17 15:17 ` Ken Goldman
2019-06-04 1:36 ` Emanuel Berg via help-gnu-emacs
2019-05-24 4:28 ` Is Elisp really that slow? (was: Why is Elisp slow?) Xavier Maillard
2019-06-07 19:08 ` Emanuel Berg via help-gnu-emacs
2019-06-08 0:26 ` Samuel Wales
2019-06-08 0:30 ` Samuel Wales
2019-06-08 8:52 ` tomas
2019-06-08 21:00 ` Samuel Wales
2019-06-08 21:14 ` tomas
2019-06-08 21:44 ` Is Elisp really that slow? Óscar Fuentes
2019-06-08 23:29 ` Emanuel Berg via help-gnu-emacs
2019-06-11 4:10 ` Xavier Maillard
2019-06-09 6:46 ` Is Elisp really that slow? (was: Why is Elisp slow?) Eli Zaretskii
2019-06-11 20:23 ` Samuel Wales
2019-06-08 23:26 ` Emanuel Berg via help-gnu-emacs
2019-05-13 6:10 ` Why is Elisp slow? Van L
2019-05-03 6:55 ` Eli Zaretskii
2019-05-03 2:39 ` Stefan Monnier
2019-05-03 6:51 ` Eli Zaretskii
2019-05-02 19:10 ` Marcin Borkowski
2019-05-03 23:34 ` Samuel Wales
2019-05-04 6:19 ` Eli Zaretskii
[not found] ` <mailman.1772.1538855722.1284.help-gnu-emacs@gnu.org>
2018-10-07 12:45 ` Knowing where a function has been used (bis) [Was: Re: Optimising Elisp code] Emanuel Berg
[not found] ` <mailman.1752.1538822765.1284.help-gnu-emacs@gnu.org>
2018-10-07 12:41 ` Knowing where a function has been used (e.g. for optimizing) " Emanuel Berg
2018-10-07 13:46 ` Getting functions usage examples [Was: Re: Knowing where a function has been used (e.g. for optimizing) [Was: Re: Optimising Elisp code]] Garreau, Alexandre
2018-10-08 0:07 ` Van L
2018-10-08 15:40 ` Getting functions usage examples [ Garreau, Alexandre
2018-10-09 9:33 ` Van L
[not found] ` <mailman.1798.1538920786.1284.help-gnu-emacs@gnu.org>
2018-10-07 15:38 ` Getting functions usage examples [Was: Re: Knowing where a function has been used (e.g. for optimizing) [Was: Re: Optimising Elisp code]] Emanuel Berg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=eeelvtzzzzzz.c1c.xxuns.g6.gal@portable.galex-713.eu \
--to=galex-713@galex-713.eu \
--cc=help-gnu-emacs@gnu.org \
--cc=monnier@iro.umontreal.ca \
--cc=tomas@tuxteam.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).