* elisp code to list interactive functions
@ 2021-11-04 8:08 Alexander Asteroth
2021-11-04 9:43 ` Po Lu
2021-11-04 9:44 ` Robert Pluim
0 siblings, 2 replies; 15+ messages in thread
From: Alexander Asteroth @ 2021-11-04 8:08 UTC (permalink / raw)
To: emacs-devel
Dear all,
I don't know if I'm right here but I don't find a group that is devoted
to elisp programming. I'm trying to write a little funtion that I can
call from emacsclient to get a list of interactive functions
available. The result shoud be a list of strings or just one string,
more or less what the *Completions* buffer displays when pressing
M-x followed by <TAB>. I'm sure there must be a very simple solution to
this but somehow I get lost in the code in simple.el on my search for
it.
Why am I doing this? Im currently trying to make i3wm and emacs more
aware of each other, because after 3 years of using exwm I'm now moving
back to using a dedicated WM. Nevertheless I want the WM to still feel
like Emacs, when I use it ;-)
Cheers,
Alex
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: elisp code to list interactive functions
2021-11-04 8:08 elisp code to list interactive functions Alexander Asteroth
@ 2021-11-04 9:43 ` Po Lu
2021-11-04 9:44 ` Robert Pluim
1 sibling, 0 replies; 15+ messages in thread
From: Po Lu @ 2021-11-04 9:43 UTC (permalink / raw)
To: Alexander Asteroth; +Cc: emacs-devel
Alexander Asteroth <alexander.asteroth@h-brs.de> writes:
> I don't know if I'm right here but I don't find a group that is devoted
> to elisp programming. I'm trying to write a little funtion that I can
> call from emacsclient to get a list of interactive functions
> available. The result shoud be a list of strings or just one string,
> more or less what the *Completions* buffer displays when pressing
> M-x followed by <TAB>. I'm sure there must be a very simple solution to
> this but somehow I get lost in the code in simple.el on my search for
> it.
Isn't that done by searching for commands among all interned symbols in
obarray?
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: elisp code to list interactive functions
2021-11-04 8:08 elisp code to list interactive functions Alexander Asteroth
2021-11-04 9:43 ` Po Lu
@ 2021-11-04 9:44 ` Robert Pluim
2021-11-04 10:49 ` Alexander Asteroth
` (2 more replies)
1 sibling, 3 replies; 15+ messages in thread
From: Robert Pluim @ 2021-11-04 9:44 UTC (permalink / raw)
To: Alexander Asteroth; +Cc: emacs-devel
>>>>> On Thu, 04 Nov 2021 09:08:26 +0100, Alexander Asteroth <alexander.asteroth@h-brs.de> said:
Alexander> Dear all,
Alexander> I don't know if I'm right here but I don't find a group that is devoted
Alexander> to elisp programming. I'm trying to write a little funtion that I can
Alexander> call from emacsclient to get a list of interactive functions
Alexander> available. The result shoud be a list of strings or just one string,
Alexander> more or less what the *Completions* buffer displays when pressing
Alexander> M-x followed by <TAB>. I'm sure there must be a very simple solution to
Alexander> this but somehow I get lost in the code in simple.el on my search for
Alexander> it.
You mean something like this?
(all-completions ""
#'help--symbol-completion-table
(lambda (f)
(commandp f)))
(that returns quite a few things)
Robert
--
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: elisp code to list interactive functions
2021-11-04 9:44 ` Robert Pluim
@ 2021-11-04 10:49 ` Alexander Asteroth
2021-11-04 11:51 ` Philipp Stephani
2021-11-04 19:34 ` Stefan Monnier
2 siblings, 0 replies; 15+ messages in thread
From: Alexander Asteroth @ 2021-11-04 10:49 UTC (permalink / raw)
To: Robert Pluim; +Cc: emacs-devel
[-- Attachment #1: Type: text/plain, Size: 1550 bytes --]
Perfect, that did what I wanted more precisely:
-----------------------
(require 'help-fns)
(require 'seq)
(defun aa/show-interactive-commands ()
(interactive)
(seq-sort-by #'length #'<
(all-completions ""
#'help--symbol-completion-table
(lambda (f)
(commandp f)))))
-----------------------
Returns a list (sorted by size) of available interactive commands. I can
now make them known to i3 to integrate them on demand. Great!
Thanks,
Alex
On Do, Nov 04 2021, 10:44:17, Robert Pluim wrote:
>>>>>> On Thu, 04 Nov 2021 09:08:26 +0100, Alexander Asteroth <alexander.asteroth@h-brs.de> said:
>
> Alexander> Dear all,
> Alexander> I don't know if I'm right here but I don't find a group that is devoted
> Alexander> to elisp programming. I'm trying to write a little funtion that I can
> Alexander> call from emacsclient to get a list of interactive functions
> Alexander> available. The result shoud be a list of strings or just one string,
> Alexander> more or less what the *Completions* buffer displays when pressing
> Alexander> M-x followed by <TAB>. I'm sure there must be a very simple solution to
> Alexander> this but somehow I get lost in the code in simple.el on my search for
> Alexander> it.
>
> You mean something like this?
>
> (all-completions ""
> #'help--symbol-completion-table
> (lambda (f)
> (commandp f)))
>
> (that returns quite a few things)
>
> Robert
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 524 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: elisp code to list interactive functions
2021-11-04 9:44 ` Robert Pluim
2021-11-04 10:49 ` Alexander Asteroth
@ 2021-11-04 11:51 ` Philipp Stephani
2021-11-04 16:14 ` Alexander Asteroth
2021-11-04 17:07 ` Lars Ingebrigtsen
2021-11-04 19:34 ` Stefan Monnier
2 siblings, 2 replies; 15+ messages in thread
From: Philipp Stephani @ 2021-11-04 11:51 UTC (permalink / raw)
To: Robert Pluim; +Cc: Alexander Asteroth, Emacs developers
Am Do., 4. Nov. 2021 um 10:44 Uhr schrieb Robert Pluim <rpluim@gmail.com>:
>
> >>>>> On Thu, 04 Nov 2021 09:08:26 +0100, Alexander Asteroth <alexander.asteroth@h-brs.de> said:
>
> Alexander> Dear all,
> Alexander> I don't know if I'm right here but I don't find a group that is devoted
> Alexander> to elisp programming. I'm trying to write a little funtion that I can
> Alexander> call from emacsclient to get a list of interactive functions
> Alexander> available. The result shoud be a list of strings or just one string,
> Alexander> more or less what the *Completions* buffer displays when pressing
> Alexander> M-x followed by <TAB>. I'm sure there must be a very simple solution to
> Alexander> this but somehow I get lost in the code in simple.el on my search for
> Alexander> it.
>
> You mean something like this?
>
> (all-completions ""
> #'help--symbol-completion-table
> (lambda (f)
> (commandp f)))
>
> (that returns quite a few things)
That's using an internal function, which should not be used outside
help.el and can go away at any time. But the following should also
work:
(cl-loop for symbol being the symbols
when (commandp symbol)
collect symbol)
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: elisp code to list interactive functions
2021-11-04 11:51 ` Philipp Stephani
@ 2021-11-04 16:14 ` Alexander Asteroth
2021-11-04 17:07 ` Lars Ingebrigtsen
1 sibling, 0 replies; 15+ messages in thread
From: Alexander Asteroth @ 2021-11-04 16:14 UTC (permalink / raw)
To: Philipp Stephani; +Cc: Robert Pluim, Emacs developers
[-- Attachment #1: Type: text/plain, Size: 2399 bytes --]
Even better. That way one require statement becomes unnecessary.
Thanks,
Alex
PS: Now in i3wm I can bind this to something like S-x to either start
programs or run interactive emacs commands (and focus emacs). Similar
behaviour as I had bound S-x to in EXWM :-)
The emacs code now looks like this:
> (defun aa/show-interactive-commands ()
> (interactive)
> (seq-sort-by #'length #'<
> (cl-loop for symbol being the symbols
> when (commandp symbol)
> collect (symbol-name symbol))))
and I can call it from a script like:
> #!/bin/bash
> if [ $# -eq 0 ]
> then
> BUFFERS=`emacsclient -e '(aa/show-interactive-commands)' | sed 's/\" \"/)\\\\n(/g' | sed 's/\"//g'`
> echo -e $BUFFERS
> else
> emacsclient -ne "$1" >/dev/null
> i3-msg -q '[class="Emacs"] focus'
> fi
Which in turn is bound in i3 to Super-x to call
> bindsym Mod4+x exec "rofi -modi 'M-x:~/bin/emacs-interactive-command.sh,run' -combi-modi M-x,run -show combi"
On Do, Nov 04 2021, 12:51:28, Philipp Stephani wrote:
> Am Do., 4. Nov. 2021 um 10:44 Uhr schrieb Robert Pluim <rpluim@gmail.com>:
>>
>> >>>>> On Thu, 04 Nov 2021 09:08:26 +0100, Alexander Asteroth <alexander.asteroth@h-brs.de> said:
>>
>> Alexander> Dear all,
>> Alexander> I don't know if I'm right here but I don't find a group that is devoted
>> Alexander> to elisp programming. I'm trying to write a little funtion that I can
>> Alexander> call from emacsclient to get a list of interactive functions
>> Alexander> available. The result shoud be a list of strings or just one string,
>> Alexander> more or less what the *Completions* buffer displays when pressing
>> Alexander> M-x followed by <TAB>. I'm sure there must be a very simple solution to
>> Alexander> this but somehow I get lost in the code in simple.el on my search for
>> Alexander> it.
>>
>> You mean something like this?
>>
>> (all-completions ""
>> #'help--symbol-completion-table
>> (lambda (f)
>> (commandp f)))
>>
>> (that returns quite a few things)
>
>
> That's using an internal function, which should not be used outside
> help.el and can go away at any time. But the following should also
> work:
> (cl-loop for symbol being the symbols
> when (commandp symbol)
> collect symbol)
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 524 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: elisp code to list interactive functions
2021-11-04 11:51 ` Philipp Stephani
2021-11-04 16:14 ` Alexander Asteroth
@ 2021-11-04 17:07 ` Lars Ingebrigtsen
2021-11-04 17:32 ` Robert Pluim
` (2 more replies)
1 sibling, 3 replies; 15+ messages in thread
From: Lars Ingebrigtsen @ 2021-11-04 17:07 UTC (permalink / raw)
To: Philipp Stephani; +Cc: Robert Pluim, Alexander Asteroth, Emacs developers
Philipp Stephani <p.stephani2@gmail.com> writes:
> That's using an internal function, which should not be used outside
> help.el and can go away at any time. But the following should also
> work:
> (cl-loop for symbol being the symbols
> when (commandp symbol)
> collect symbol)
Since we're code golfing:
(seq-filter #'commandp obarray)
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: elisp code to list interactive functions
2021-11-04 17:07 ` Lars Ingebrigtsen
@ 2021-11-04 17:32 ` Robert Pluim
2021-11-04 17:44 ` Andreas Schwab
2021-11-04 20:06 ` Stefan Monnier
2 siblings, 0 replies; 15+ messages in thread
From: Robert Pluim @ 2021-11-04 17:32 UTC (permalink / raw)
To: Lars Ingebrigtsen; +Cc: Philipp Stephani, Alexander Asteroth, Emacs developers
>>>>> On Thu, 04 Nov 2021 18:07:34 +0100, Lars Ingebrigtsen <larsi@gnus.org> said:
Lars> Philipp Stephani <p.stephani2@gmail.com> writes:
>> That's using an internal function, which should not be used outside
>> help.el and can go away at any time. But the following should also
>> work:
>> (cl-loop for symbol being the symbols
>> when (commandp symbol)
>> collect symbol)
Lars> Since we're code golfing:
Lars> (seq-filter #'commandp obarray)
But aren't we planning to rename obarray in Emacs 31?
😇
Robert
--
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: elisp code to list interactive functions
2021-11-04 17:07 ` Lars Ingebrigtsen
2021-11-04 17:32 ` Robert Pluim
@ 2021-11-04 17:44 ` Andreas Schwab
2021-11-04 20:06 ` Stefan Monnier
2 siblings, 0 replies; 15+ messages in thread
From: Andreas Schwab @ 2021-11-04 17:44 UTC (permalink / raw)
To: Lars Ingebrigtsen
Cc: Philipp Stephani, Alexander Asteroth, Robert Pluim,
Emacs developers
On Nov 04 2021, Lars Ingebrigtsen wrote:
> Philipp Stephani <p.stephani2@gmail.com> writes:
>
>> That's using an internal function, which should not be used outside
>> help.el and can go away at any time. But the following should also
>> work:
>> (cl-loop for symbol being the symbols
>> when (commandp symbol)
>> collect symbol)
>
> Since we're code golfing:
>
> (seq-filter #'commandp obarray)
I don't think mapc does something useful with obarrays.
Andreas.
--
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1
"And now for something completely different."
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: elisp code to list interactive functions
2021-11-04 17:07 ` Lars Ingebrigtsen
2021-11-04 17:32 ` Robert Pluim
2021-11-04 17:44 ` Andreas Schwab
@ 2021-11-04 20:06 ` Stefan Monnier
2021-11-04 20:15 ` Lars Ingebrigtsen
2 siblings, 1 reply; 15+ messages in thread
From: Stefan Monnier @ 2021-11-04 20:06 UTC (permalink / raw)
To: Lars Ingebrigtsen
Cc: Philipp Stephani, Robert Pluim, Alexander Asteroth,
Emacs developers
> (seq-filter #'commandp obarray)
Sweet: not only the code is shorter, but the returned value is much
shorter as well ;-)
Stefan
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: elisp code to list interactive functions
2021-11-04 20:06 ` Stefan Monnier
@ 2021-11-04 20:15 ` Lars Ingebrigtsen
2021-11-04 20:20 ` Stefan Monnier
2021-11-05 0:12 ` Po Lu
0 siblings, 2 replies; 15+ messages in thread
From: Lars Ingebrigtsen @ 2021-11-04 20:15 UTC (permalink / raw)
To: Stefan Monnier
Cc: Philipp Stephani, Alexander Asteroth, Robert Pluim,
Emacs developers
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> (seq-filter #'commandp obarray)
>
> Sweet: not only the code is shorter, but the returned value is much
> shorter as well ;-)
Win win!
I thought somebody had extended the seq functions to also work on these
thingies, but I guess not?
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: elisp code to list interactive functions
2021-11-04 20:15 ` Lars Ingebrigtsen
@ 2021-11-04 20:20 ` Stefan Monnier
2021-11-05 2:08 ` Lars Ingebrigtsen
2021-11-05 0:12 ` Po Lu
1 sibling, 1 reply; 15+ messages in thread
From: Stefan Monnier @ 2021-11-04 20:20 UTC (permalink / raw)
To: Lars Ingebrigtsen
Cc: Philipp Stephani, Robert Pluim, Alexander Asteroth,
Emacs developers
Lars Ingebrigtsen [2021-11-04 21:15:01] wrote:
> Stefan Monnier <monnier@iro.umontreal.ca> writes:
>>> (seq-filter #'commandp obarray)
>> Sweet: not only the code is shorter, but the returned value is much
>> shorter as well ;-)
> Win win!
> I thought somebody had extended the seq functions to also work on these
> thingies, but I guess not?
Nope. I did provide a patch which introduced a separate type for
obarrays, but it come with some rough corners, and in any case it
introduces a backward incompatibility with fairly limited advantages, so
it's not clear it's a good idea.
But until such a thing is done, we can't reliably distinguish an obarray
from a vector.
This said, an obarray is fundamentally unordered, so it would be odd for
`seq.el` to support it.
Stefan
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: elisp code to list interactive functions
2021-11-04 20:20 ` Stefan Monnier
@ 2021-11-05 2:08 ` Lars Ingebrigtsen
0 siblings, 0 replies; 15+ messages in thread
From: Lars Ingebrigtsen @ 2021-11-05 2:08 UTC (permalink / raw)
To: Stefan Monnier
Cc: Philipp Stephani, Alexander Asteroth, Robert Pluim,
Emacs developers
Stefan Monnier <monnier@iro.umontreal.ca> writes:
> Nope. I did provide a patch which introduced a separate type for
> obarrays, but it come with some rough corners, and in any case it
> introduces a backward incompatibility with fairly limited advantages, so
> it's not clear it's a good idea.
>
> But until such a thing is done, we can't reliably distinguish an obarray
> from a vector.
The advantages are fairly limited, but it feels like obarrays are such a
strange little corner of Emacs Lisp, and it'd be really cool to have it,
like, becoming a more well-behaved citizen.
> This said, an obarray is fundamentally unordered, so it would be odd for
> `seq.el` to support it.
Er, yes. `map-filter' er could support it, though (if it could
distinguish it).
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: elisp code to list interactive functions
2021-11-04 20:15 ` Lars Ingebrigtsen
2021-11-04 20:20 ` Stefan Monnier
@ 2021-11-05 0:12 ` Po Lu
1 sibling, 0 replies; 15+ messages in thread
From: Po Lu @ 2021-11-05 0:12 UTC (permalink / raw)
To: Lars Ingebrigtsen
Cc: Stefan Monnier, Philipp Stephani, Alexander Asteroth,
Robert Pluim, Emacs developers
Lars Ingebrigtsen <larsi@gnus.org> writes:
> I thought somebody had extended the seq functions to also work on these
> thingies, but I guess not?
I think not, and that you will have to use mapatoms for them. Something
along the lines of:
(let (commands)
(mapatoms (lambda (atom)
(when (commandp atom)
(push atom commands))))
commands)
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: elisp code to list interactive functions
2021-11-04 9:44 ` Robert Pluim
2021-11-04 10:49 ` Alexander Asteroth
2021-11-04 11:51 ` Philipp Stephani
@ 2021-11-04 19:34 ` Stefan Monnier
2 siblings, 0 replies; 15+ messages in thread
From: Stefan Monnier @ 2021-11-04 19:34 UTC (permalink / raw)
To: Robert Pluim; +Cc: Alexander Asteroth, emacs-devel
> (all-completions ""
> #'help--symbol-completion-table
This is internal (as evidenced by the "--").
You can pass `obarray` instead, which is not.
> (lambda (f)
> (commandp f)))
Aka #'commandp
Stefan
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2021-11-05 2:08 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-11-04 8:08 elisp code to list interactive functions Alexander Asteroth
2021-11-04 9:43 ` Po Lu
2021-11-04 9:44 ` Robert Pluim
2021-11-04 10:49 ` Alexander Asteroth
2021-11-04 11:51 ` Philipp Stephani
2021-11-04 16:14 ` Alexander Asteroth
2021-11-04 17:07 ` Lars Ingebrigtsen
2021-11-04 17:32 ` Robert Pluim
2021-11-04 17:44 ` Andreas Schwab
2021-11-04 20:06 ` Stefan Monnier
2021-11-04 20:15 ` Lars Ingebrigtsen
2021-11-04 20:20 ` Stefan Monnier
2021-11-05 2:08 ` Lars Ingebrigtsen
2021-11-05 0:12 ` Po Lu
2021-11-04 19:34 ` Stefan Monnier
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
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).