* Iinteractive function allowing multiple inputs
@ 2024-12-09 18:40 Heime via Users list for the GNU Emacs text editor
2024-12-09 20:43 ` Jean Louis
0 siblings, 1 reply; 16+ messages in thread
From: Heime via Users list for the GNU Emacs text editor @ 2024-12-09 18:40 UTC (permalink / raw)
To: Heime via Users list for the GNU Emacs text editor
Is there a way for an interactive function to allow multiple inputs?
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Iinteractive function allowing multiple inputs
2024-12-09 18:40 Iinteractive function allowing multiple inputs Heime via Users list for the GNU Emacs text editor
@ 2024-12-09 20:43 ` Jean Louis
2024-12-09 20:48 ` Heime via Users list for the GNU Emacs text editor
2024-12-09 21:23 ` Stefan Monnier via Users list for the GNU Emacs text editor
0 siblings, 2 replies; 16+ messages in thread
From: Jean Louis @ 2024-12-09 20:43 UTC (permalink / raw)
To: Heime; +Cc: Heime via Users list for the GNU Emacs text editor
* Heime via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> [2024-12-09 21:42]:
>
>
> Is there a way for an interactive function to allow multiple inputs?
(defun my-multi-input-function (input1 input2 input3)
"An example function that takes three inputs and displays them."
(interactive
(list
(read-string "Enter the first input: ")
(read-string "Enter the second input: ")
(read-string "Enter the third input: ")))
(message "You entered: %s, %s, %s" input1 input2 input3))
;; To use the function, execute it with M-x my-multi-input-function
Me personally, I don't like that style, I like using `let' and reading
what I need to read within function, while leaving (interactive) as it
is.
--
Jean Louis
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Iinteractive function allowing multiple inputs
2024-12-09 20:43 ` Jean Louis
@ 2024-12-09 20:48 ` Heime via Users list for the GNU Emacs text editor
2024-12-09 21:02 ` Heime via Users list for the GNU Emacs text editor
2024-12-09 21:06 ` Jean Louis
2024-12-09 21:23 ` Stefan Monnier via Users list for the GNU Emacs text editor
1 sibling, 2 replies; 16+ messages in thread
From: Heime via Users list for the GNU Emacs text editor @ 2024-12-09 20:48 UTC (permalink / raw)
To: Jean Louis; +Cc: Heime via Users list for the GNU Emacs text editor
Sent with Proton Mail secure email.
On Tuesday, December 10th, 2024 at 8:43 AM, Jean Louis <bugs@gnu.support> wrote:
> * Heime via Users list for the GNU Emacs text editor help-gnu-emacs@gnu.org [2024-12-09 21:42]:
>
> > Is there a way for an interactive function to allow multiple inputs?
>
>
> (defun my-multi-input-function (input1 input2 input3)
> "An example function that takes three inputs and displays them."
> (interactive
> (list
> (read-string "Enter the first input: ")
> (read-string "Enter the second input: ")
> (read-string "Enter the third input: ")))
> (message "You entered: %s, %s, %s" input1 input2 input3))
>
> ;; To use the function, execute it with M-x my-multi-input-function
>
> Me personally, I don't like that style, I like using `let' and reading
> what I need to read within function, while leaving (interactive) as it
> is. - Jean Louis
But then you would not be able to use it in elisp code because it would
ask for the values.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Iinteractive function allowing multiple inputs
2024-12-09 20:48 ` Heime via Users list for the GNU Emacs text editor
@ 2024-12-09 21:02 ` Heime via Users list for the GNU Emacs text editor
2024-12-09 21:11 ` Jean Louis
2024-12-09 21:06 ` Jean Louis
1 sibling, 1 reply; 16+ messages in thread
From: Heime via Users list for the GNU Emacs text editor @ 2024-12-09 21:02 UTC (permalink / raw)
To: Heime; +Cc: Jean Louis, Heime via Users list for the GNU Emacs text editor
Sent with Proton Mail secure email.
On Tuesday, December 10th, 2024 at 8:48 AM, Heime via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> wrote:
>
>
>
>
>
> Sent with Proton Mail secure email.
>
>
> On Tuesday, December 10th, 2024 at 8:43 AM, Jean Louis bugs@gnu.support wrote:
>
> > * Heime via Users list for the GNU Emacs text editor help-gnu-emacs@gnu.org [2024-12-09 21:42]:
> >
> > > Is there a way for an interactive function to allow multiple inputs?
> >
> > (defun my-multi-input-function (input1 input2 input3)
> > "An example function that takes three inputs and displays them."
> > (interactive
> > (list
> > (read-string "Enter the first input: ")
> > (read-string "Enter the second input: ")
> > (read-string "Enter the third input: ")))
> > (message "You entered: %s, %s, %s" input1 input2 input3))
> >
> > ;; To use the function, execute it with M-x my-multi-input-function
> >
> > Me personally, I don't like that style, I like using `let' and reading
> > what I need to read within function, while leaving (interactive) as it
> > is. - Jean Louis
>
>
> But then you would not be able to use it in elisp code because it would
> ask for the values.
Have found completing-read-multiple. But need some help understanding
the exact format. I want to set company-backends. How would one pass
the multiple arguments in elisp code?
Should I use
(defun cbackends (&rest actm-seqr)
or keep it as is?
(defun cbackends (actm-seqr)
(interactive
(let* ( (cseq '("company-dabbrev"
"company-dabbrev-code"
"company-keywords"
"company-capf"
"company-yasnippet"
"company-files"))
(backends-seltr
(completing-read-multiple
"Backends Multi-Seltr (comma-separated): "
cseq nil t)))
(list (mapcar #'intern backends-seltr))))
(setq company-backends actm-seqr))
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Iinteractive function allowing multiple inputs
2024-12-09 20:48 ` Heime via Users list for the GNU Emacs text editor
2024-12-09 21:02 ` Heime via Users list for the GNU Emacs text editor
@ 2024-12-09 21:06 ` Jean Louis
2024-12-09 21:14 ` Heime via Users list for the GNU Emacs text editor
1 sibling, 1 reply; 16+ messages in thread
From: Jean Louis @ 2024-12-09 21:06 UTC (permalink / raw)
To: Heime; +Cc: Heime via Users list for the GNU Emacs text editor
* Heime <heimeborgia@protonmail.com> [2024-12-09 23:48]:
> > (defun my-multi-input-function (input1 input2 input3)
> > "An example function that takes three inputs and displays them."
> > (interactive
> > (list
> > (read-string "Enter the first input: ")
> > (read-string "Enter the second input: ")
> > (read-string "Enter the third input: ")))
> > (message "You entered: %s, %s, %s" input1 input2 input3))
> >
> > ;; To use the function, execute it with M-x my-multi-input-function
> >
> > Me personally, I don't like that style, I like using `let' and reading
> > what I need to read within function, while leaving (interactive) as it
> > is. - Jean Louis
>
> But then you would not be able to use it in elisp code because it would
> ask for the values.
Isn't that Emacs Lisp code?
--
Jean Louis
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Iinteractive function allowing multiple inputs
2024-12-09 21:02 ` Heime via Users list for the GNU Emacs text editor
@ 2024-12-09 21:11 ` Jean Louis
0 siblings, 0 replies; 16+ messages in thread
From: Jean Louis @ 2024-12-09 21:11 UTC (permalink / raw)
To: Heime; +Cc: Heime via Users list for the GNU Emacs text editor
* Heime <heimeborgia@protonmail.com> [2024-12-10 00:02]:
> Have found completing-read-multiple. But need some help understanding
> the exact format. I want to set company-backends. How would one pass
> the multiple arguments in elisp code?
It is not easy to understand how you mean it.
- you could simply define function with multiple arguments
- you can pass single argument which has many items, like you could pass list, plist or alist or hash
(setq my-hash (make-hash-table :test 'equal))
(puthash "Name" "Heime" my-hash)
(puthash "Age" 37 my-hash)
(puthash "Skills" '(Programmer Scientist) my-hash)
(defun my-fun (hash)
(let ((name (gethash "Name" hash))
(age (gethash "Age" hash))
(skills (gethash "Skills" hash)))
(format "Your name is %s, your age %s and your skills are: %s" name age skills)))
(my-fun my-hash) ➜ "Your name is Heime, your age 37 and your skills are: (Programmer Scientist)"
That way you are passing `hash' as single argument which may have unlimited other arguments indirectly..
--
Jean Louis
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Iinteractive function allowing multiple inputs
2024-12-09 21:06 ` Jean Louis
@ 2024-12-09 21:14 ` Heime via Users list for the GNU Emacs text editor
2024-12-09 21:20 ` Jean Louis
0 siblings, 1 reply; 16+ messages in thread
From: Heime via Users list for the GNU Emacs text editor @ 2024-12-09 21:14 UTC (permalink / raw)
To: Jean Louis; +Cc: Heime via Users list for the GNU Emacs text editor
On Tuesday, December 10th, 2024 at 9:06 AM, Jean Louis <bugs@gnu.support> wrote:
> * Heime heimeborgia@protonmail.com [2024-12-09 23:48]:
>
> > > (defun my-multi-input-function (input1 input2 input3)
> > > "An example function that takes three inputs and displays them."
> > > (interactive
> > > (list
> > > (read-string "Enter the first input: ")
> > > (read-string "Enter the second input: ")
> > > (read-string "Enter the third input: ")))
> > > (message "You entered: %s, %s, %s" input1 input2 input3))
> > >
> > > ;; To use the function, execute it with M-x my-multi-input-function
> > >
> > > Me personally, I don't like that style, I like using `let' and reading
> > > what I need to read within function, while leaving (interactive) as it
> > > is. - Jean Louis
> >
> > But then you would not be able to use it in elisp code because it would
> > ask for the values.
>
>
> Isn't that Emacs Lisp code? - Jean Louis
Yes, but the values are not set automatically as one can do with a call
with arguments. The code will force on you an interaction as though you
are in interactive mode.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Iinteractive function allowing multiple inputs
2024-12-09 21:14 ` Heime via Users list for the GNU Emacs text editor
@ 2024-12-09 21:20 ` Jean Louis
2024-12-09 21:42 ` Heime via Users list for the GNU Emacs text editor
0 siblings, 1 reply; 16+ messages in thread
From: Jean Louis @ 2024-12-09 21:20 UTC (permalink / raw)
To: Heime; +Cc: Heime via Users list for the GNU Emacs text editor
* Heime <heimeborgia@protonmail.com> [2024-12-10 00:14]:
> Yes, but the values are not set automatically as one can do with a call
> with arguments. The code will force on you an interaction as though you
> are in interactive mode.
That is why I do like this:
(defun my-multi-input-function (&optional input1 input2 input3)
"An example function that takes three inputs and displays them."
(interactive)
(let ((input1 (or input1 (read-string "Enter the first input: ")))
(input2 (or input2 (read-string "Enter the second input: ")))
(input3 (or input3 (read-string "Enter the third input: "))))
(message "You entered: %s, %s, %s" input1 input2 input3)))
Then you can call function:
(my-multi-input-function input1 input2 input3)
or if those are nil, it will ask you.
--
Jean Louis
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Iinteractive function allowing multiple inputs
2024-12-09 20:43 ` Jean Louis
2024-12-09 20:48 ` Heime via Users list for the GNU Emacs text editor
@ 2024-12-09 21:23 ` Stefan Monnier via Users list for the GNU Emacs text editor
2024-12-09 23:08 ` Jean Louis
1 sibling, 1 reply; 16+ messages in thread
From: Stefan Monnier via Users list for the GNU Emacs text editor @ 2024-12-09 21:23 UTC (permalink / raw)
To: help-gnu-emacs
> (defun my-multi-input-function (input1 input2 input3)
> "An example function that takes three inputs and displays them."
> (interactive
> (list
> (read-string "Enter the first input: ")
> (read-string "Enter the second input: ")
> (read-string "Enter the third input: ")))
> (message "You entered: %s, %s, %s" input1 input2 input3))
[...]
> Me personally, I don't like that style, I like using `let' and reading
> what I need to read within function, while leaving (interactive) as it
> is.
The difference between the two is that the above code provides both
a command and a function, whereas if you move the `read-string`s outside
of the `interactive` form, then it can't really be used as a function
any more.
Whether it matters or not depends on the specifics.
Stefan
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Iinteractive function allowing multiple inputs
2024-12-09 21:20 ` Jean Louis
@ 2024-12-09 21:42 ` Heime via Users list for the GNU Emacs text editor
2024-12-09 21:46 ` Heime via Users list for the GNU Emacs text editor
0 siblings, 1 reply; 16+ messages in thread
From: Heime via Users list for the GNU Emacs text editor @ 2024-12-09 21:42 UTC (permalink / raw)
To: Jean Louis; +Cc: Heime via Users list for the GNU Emacs text editor
Sent with Proton Mail secure email.
On Tuesday, December 10th, 2024 at 9:20 AM, Jean Louis <bugs@gnu.support> wrote:
> * Heime heimeborgia@protonmail.com [2024-12-10 00:14]:
>
> > Yes, but the values are not set automatically as one can do with a call
> > with arguments. The code will force on you an interaction as though you
> > are in interactive mode.
>
>
> That is why I do like this:
>
> (defun my-multi-input-function (&optional input1 input2 input3)
> "An example function that takes three inputs and displays them."
> (interactive)
> (let ((input1 (or input1 (read-string "Enter the first input: ")))
> (input2 (or input2 (read-string "Enter the second input: ")))
> (input3 (or input3 (read-string "Enter the third input: "))))
> (message "You entered: %s, %s, %s" input1 input2 input3)))
>
> Then you can call function:
>
> (my-multi-input-function input1 input2 input3)
>
> or if those are nil, it will ask you. - Jean Louis
Right. If passed a value, the read-string is skipped.
I prefer the interactive declaration myself.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Iinteractive function allowing multiple inputs
2024-12-09 21:42 ` Heime via Users list for the GNU Emacs text editor
@ 2024-12-09 21:46 ` Heime via Users list for the GNU Emacs text editor
2024-12-09 23:05 ` Jean Louis
0 siblings, 1 reply; 16+ messages in thread
From: Heime via Users list for the GNU Emacs text editor @ 2024-12-09 21:46 UTC (permalink / raw)
To: Heime; +Cc: Jean Louis, Heime via Users list for the GNU Emacs text editor
Sent with Proton Mail secure email.
On Tuesday, December 10th, 2024 at 9:42 AM, Heime via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> wrote:
>
>
>
>
>
> Sent with Proton Mail secure email.
>
>
> On Tuesday, December 10th, 2024 at 9:20 AM, Jean Louis bugs@gnu.support wrote:
>
> > * Heime heimeborgia@protonmail.com [2024-12-10 00:14]:
> >
> > > Yes, but the values are not set automatically as one can do with a call
> > > with arguments. The code will force on you an interaction as though you
> > > are in interactive mode.
> >
> > That is why I do like this:
> >
> > (defun my-multi-input-function (&optional input1 input2 input3)
> > "An example function that takes three inputs and displays them."
> > (interactive)
> > (let ((input1 (or input1 (read-string "Enter the first input: ")))
> > (input2 (or input2 (read-string "Enter the second input: ")))
> > (input3 (or input3 (read-string "Enter the third input: "))))
> > (message "You entered: %s, %s, %s" input1 input2 input3)))
> >
> > Then you can call function:
> >
> > (my-multi-input-function input1 input2 input3)
> >
> > or if those are nil, it will ask you. - Jean Louis
>
>
> Right. If passed a value, the read-string is skipped.
> I prefer the interactive declaration myself.
Could you assist me with completing-read-multiple for use with company-backends?
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Iinteractive function allowing multiple inputs
2024-12-09 21:46 ` Heime via Users list for the GNU Emacs text editor
@ 2024-12-09 23:05 ` Jean Louis
2024-12-09 23:47 ` Heime via Users list for the GNU Emacs text editor
0 siblings, 1 reply; 16+ messages in thread
From: Jean Louis @ 2024-12-09 23:05 UTC (permalink / raw)
To: Heime; +Cc: Heime via Users list for the GNU Emacs text editor
* Heime <heimeborgia@protonmail.com> [2024-12-10 00:46]:
> Could you assist me with completing-read-multiple for use with company-backends?
(setq my-table '("one" "two"))
(completing-read-multiple "Choose: " my-table)
one,two
That is all I know. I use it to find elementary objects by multiple tags.
--
Jean Louis
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Iinteractive function allowing multiple inputs
2024-12-09 21:23 ` Stefan Monnier via Users list for the GNU Emacs text editor
@ 2024-12-09 23:08 ` Jean Louis
2024-12-09 23:39 ` Heime via Users list for the GNU Emacs text editor
0 siblings, 1 reply; 16+ messages in thread
From: Jean Louis @ 2024-12-09 23:08 UTC (permalink / raw)
To: Stefan Monnier; +Cc: help-gnu-emacs
* Stefan Monnier via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> [2024-12-10 00:24]:
> > (defun my-multi-input-function (input1 input2 input3)
> > "An example function that takes three inputs and displays them."
> > (interactive
> > (list
> > (read-string "Enter the first input: ")
> > (read-string "Enter the second input: ")
> > (read-string "Enter the third input: ")))
> > (message "You entered: %s, %s, %s" input1 input2 input3))
> [...]
> > Me personally, I don't like that style, I like using `let' and reading
> > what I need to read within function, while leaving (interactive) as it
> > is.
>
> The difference between the two is that the above code provides both
> a command and a function, whereas if you move the `read-string`s outside
> of the `interactive` form, then it can't really be used as a function
> any more.
But I replace it with:
(defun my-multi-input-function (&optional input1 input2 input3)
and then it can be used as function again in the context how I think
or guess that you mean it.
Only if arguments are removed then it cannot be used as function.
Am I right?
--
Jean Louis
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Iinteractive function allowing multiple inputs
2024-12-09 23:08 ` Jean Louis
@ 2024-12-09 23:39 ` Heime via Users list for the GNU Emacs text editor
0 siblings, 0 replies; 16+ messages in thread
From: Heime via Users list for the GNU Emacs text editor @ 2024-12-09 23:39 UTC (permalink / raw)
To: Jean Louis; +Cc: Stefan Monnier, help-gnu-emacs
Sent with Proton Mail secure email.
On Tuesday, December 10th, 2024 at 11:08 AM, Jean Louis <bugs@gnu.support> wrote:
> * Stefan Monnier via Users list for the GNU Emacs text editor help-gnu-emacs@gnu.org [2024-12-10 00:24]:
>
> > > (defun my-multi-input-function (input1 input2 input3)
> > > "An example function that takes three inputs and displays them."
> > > (interactive
> > > (list
> > > (read-string "Enter the first input: ")
> > > (read-string "Enter the second input: ")
> > > (read-string "Enter the third input: ")))
> > > (message "You entered: %s, %s, %s" input1 input2 input3))
> > > [...]
> > > Me personally, I don't like that style, I like using `let' and reading
> > > what I need to read within function, while leaving (interactive) as it
> > > is.
> >
> > The difference between the two is that the above code provides both
> > a command and a function, whereas if you move the `read-string`s outside
> > of the `interactive` form, then it can't really be used as a function
> > any more.
>
>
> But I replace it with:
>
> (defun my-multi-input-function (&optional input1 input2 input3)
>
> and then it can be used as function again in the context how I think
> or guess that you mean it.
>
> Only if arguments are removed then it cannot be used as function.
>
> Am I right? - Jean Louis
Right.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Iinteractive function allowing multiple inputs
2024-12-09 23:05 ` Jean Louis
@ 2024-12-09 23:47 ` Heime via Users list for the GNU Emacs text editor
2024-12-10 7:12 ` Jean Louis
0 siblings, 1 reply; 16+ messages in thread
From: Heime via Users list for the GNU Emacs text editor @ 2024-12-09 23:47 UTC (permalink / raw)
To: Jean Louis; +Cc: Heime via Users list for the GNU Emacs text editor
Sent with Proton Mail secure email.
On Tuesday, December 10th, 2024 at 11:05 AM, Jean Louis <bugs@gnu.support> wrote:
> * Heime heimeborgia@protonmail.com [2024-12-10 00:46]:
>
> > Could you assist me with completing-read-multiple for use with company-backends?
>
>
> (setq my-table '("one" "two"))
> (completing-read-multiple "Choose: " my-table)
>
> one,two
>
> That is all I know. I use it to find elementary objects by multiple tags. - Jean Louis
Consider the following. The value of company-backends should
be a list. Would (list (mapcar #'intern backends-seltr))
give a list to the function argument?
(defun cbackends (actm-seqr)
"Set value for `company-backends' for `company-mode'.
Allowing multiple selectors using comma-separated."
(interactive
(let* ( (cseq '("company-dabbrev" "company-dabbrev-code" "company-keywords"
"company-capf" "company-yasnippet" "company-files"))
(backends-seltr
(completing-read-multiple
"Backends Multi-Seltr (comma-separated): "
cseq nil t)))
(list (mapcar #'intern backends-seltr))))
;; Convert selected backends to symbols and set them
(setq company-backends actm-seqr) )
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Iinteractive function allowing multiple inputs
2024-12-09 23:47 ` Heime via Users list for the GNU Emacs text editor
@ 2024-12-10 7:12 ` Jean Louis
0 siblings, 0 replies; 16+ messages in thread
From: Jean Louis @ 2024-12-10 7:12 UTC (permalink / raw)
To: Heime; +Cc: Heime via Users list for the GNU Emacs text editor
* Heime <heimeborgia@protonmail.com> [2024-12-10 02:48]:
> Consider the following. The value of company-backends should
> be a list. Would (list (mapcar #'intern backends-seltr))
> give a list to the function argument?
(defun cbackends (actm-seqr)
"Set value for `company-backends' for `company-mode'.
Allowing multiple selectors using comma-separated."
(interactive
(let* ( (cseq '("company-dabbrev" "company-dabbrev-code" "company-keywords"
"company-capf" "company-yasnippet" "company-files"))
(backends-seltr
(completing-read-multiple
"Backends Multi-Seltr (comma-separated): "
cseq nil t)))
(list (mapcar #'intern backends-seltr))))
;; Convert selected backends to symbols and set them
(setq company-backends actm-seqr) )
Well done!
So far I see the above function works well and sets `company-backends'. But I do not use `company', so I do not know if it was set correctly.
--
Jean Louis
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2024-12-10 7:12 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-09 18:40 Iinteractive function allowing multiple inputs Heime via Users list for the GNU Emacs text editor
2024-12-09 20:43 ` Jean Louis
2024-12-09 20:48 ` Heime via Users list for the GNU Emacs text editor
2024-12-09 21:02 ` Heime via Users list for the GNU Emacs text editor
2024-12-09 21:11 ` Jean Louis
2024-12-09 21:06 ` Jean Louis
2024-12-09 21:14 ` Heime via Users list for the GNU Emacs text editor
2024-12-09 21:20 ` Jean Louis
2024-12-09 21:42 ` Heime via Users list for the GNU Emacs text editor
2024-12-09 21:46 ` Heime via Users list for the GNU Emacs text editor
2024-12-09 23:05 ` Jean Louis
2024-12-09 23:47 ` Heime via Users list for the GNU Emacs text editor
2024-12-10 7:12 ` Jean Louis
2024-12-09 21:23 ` Stefan Monnier via Users list for the GNU Emacs text editor
2024-12-09 23:08 ` Jean Louis
2024-12-09 23:39 ` Heime via Users list for the GNU Emacs text editor
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).