all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* `cl-macs'    [was: about keysee]
@ 2022-12-11 17:09 Drew Adams
  2022-12-11 17:35 ` Stefan Monnier
  0 siblings, 1 reply; 5+ messages in thread
From: Drew Adams @ 2022-12-11 17:09 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 'Help-Gnu-Emacs (help-gnu-emacs@gnu.org)'

[-- Attachment #1: Type: text/plain, Size: 2117 bytes --]

> >> For that, you can just use `M-x load-library' to load
> >> `cl-macs.el' and `M-x load-file to load `sortie.el'
> >> and then `keysee.el'.
> 
> You should never need to load/require explicitly `cl-macs`.
> Instead you should load/require `cl-lib` (which will then load cl-macs
> and other parts of cl-lib as/when needed).
> If you need to manually load `cl-macs` there's probably a bug somewhere.

`cl-macs' is autoloaded by `cl-lib'/`cl-loaddefs'.
So you don't need to load it explicitly if you
instead load `cl-lib'.  Of course.

But there's no need to load `cl-lib' or `cl', if
all you want is a macro from `cl-macs'.  Keysee
uses just 2 macros, nothing else from `cl*', and
both are in `cl-macs'.

Occam says "Just pull in what you really need."

(Same thing applies to a function definition,
but macros are often needed only when compiling,
in which case requiring them only at compile
time doesn't add libraries to your session.)

It's not about _needing_ to load `cl-macs'.  It's
about needing _only_ `cl-macs', and _not_ all of
`cl-lib'.  (And for older Emacs, not all of `cl'.)

If you just need a macro then you just need to
load the file that defines it (unless the macro 
definition needs some other file, of course).

Or to use your language, "You should never need to
load/require explicitly" cl-lib if all you need is
available from just cl-macs.  No?

Why should using `keysee' require you to also add
`cl-lib' to your session?  That's overreach.  I'd
sooner code without using something as simple as
`cl-case' than oblige someone to load `cl-lib'
just because I've used `cl-case'.

[And yes, things like `case' should just be part
of Emacs (just as `push' is).  And yes, `pcase'
is overkill for the simple variable-value case.]

[Plus, things have changed in `cl*' world over the
years.  What's there, and where, for older Emacs
can differ from what's there, and where, for more
recent releases.  Libraries that are usable with
multiple releases don't necessarily follow a "do
this" injunction that makes sense only for some
later releases.]

[-- Attachment #2: winmail.dat --]
[-- Type: application/ms-tnef, Size: 13677 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: `cl-macs'    [was: about keysee]
  2022-12-11 17:09 `cl-macs' [was: about keysee] Drew Adams
@ 2022-12-11 17:35 ` Stefan Monnier
  2022-12-11 21:35   ` [External] : " Drew Adams
  0 siblings, 1 reply; 5+ messages in thread
From: Stefan Monnier @ 2022-12-11 17:35 UTC (permalink / raw)
  To: Drew Adams; +Cc: 'Help-Gnu-Emacs (help-gnu-emacs@gnu.org)'

> Why should using `keysee' require you to also add
> `cl-lib' to your session?  That's overreach.  I'd

Requiring `cl-macs` won't help you there, because the first thing
`cl-macs` does is (require 'cl-lib).  Instead you want

    (eval-when-compile (require 'cl-lib))

> [Plus, things have changed in `cl*' world over the
> years.  What's there, and where, for older Emacs
> can differ from what's there, and where, for more
> recent releases.  Libraries that are usable with
> multiple releases don't necessarily follow a "do
> this" injunction that makes sense only for some
> later releases.]

That's exactly why you should require `cl-lib` rather than `cl-macs`:
because things can move between the different files of `cl-lib`.


        Stefan




^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [External] : Re: `cl-macs'    [was: about keysee]
  2022-12-11 17:35 ` Stefan Monnier
@ 2022-12-11 21:35   ` Drew Adams
  2022-12-12  0:05     ` Issue building master Ergus via Users list for the GNU Emacs text editor
  2022-12-12 15:56     ` [External] : Re: `cl-macs' [was: about keysee] Stefan Monnier via Users list for the GNU Emacs text editor
  0 siblings, 2 replies; 5+ messages in thread
From: Drew Adams @ 2022-12-11 21:35 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 'Help-Gnu-Emacs (help-gnu-emacs@gnu.org)'

> Requiring `cl-macs` won't help you there, because the 
> first thing `cl-macs` does is (require 'cl-lib).

Ah, darn, so it does; too bad.  But thanks.

> Instead you want (eval-when-compile (require 'cl-lib))

Normally I do use eval-when-compile, in particular for
a macros file.  I don't recall why I didn't do it here,
for `cl-macs'.

Anyway it turns out that's insufficient, because  I also
use `cl-remove-if', which is in `cl-seq'.  Just picking
up `cl-lib' at compile time leaves that undefined.
(No doubt loading `cl-macs' at runtime took care of
`cl-remove-if' because it was loading `cl-lib', though I
likely wasn't aware of that.)

And `cl-seq' also requires `cl-lib'.  So I might as well
just require `cl-lib' at runtime.  That has the same
effect as what I've been doing all along (requiring
`cl-macs').  Anyway, I've made that change now.

Too bad - looks like there's no easy way to load just
the parts of `cl*' that are actually needed - separation
into different files provides no such benefit apparently. 

> > [Plus, things have changed in `cl*' world over the
> > years.  What's there, and where, for older Emacs
> > can differ from what's there, and where, for more
> > recent releases.  Libraries that are usable with
> > multiple releases don't necessarily follow a "do
> > this" injunction that makes sense only for some
> > later releases.]
> 
> That's exactly why you should require `cl-lib` rather than `cl-macs`:
> because things can move between the different files of `cl-lib`.

It's not just about changes within the `cl-lib' circus.
Some of my libraries are compatible back to earlier
releases that predate `cl-lib' (added in Emacs 23).
And `cl-macs' does still contain the macros.



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Issue building master
  2022-12-11 21:35   ` [External] : " Drew Adams
@ 2022-12-12  0:05     ` Ergus via Users list for the GNU Emacs text editor
  2022-12-12 15:56     ` [External] : Re: `cl-macs' [was: about keysee] Stefan Monnier via Users list for the GNU Emacs text editor
  1 sibling, 0 replies; 5+ messages in thread
From: Ergus via Users list for the GNU Emacs text editor @ 2022-12-12  0:05 UTC (permalink / raw)
  To: 'Help-Gnu-Emacs (help-gnu-emacs@gnu.org)'

 Hi:
I just build master and I am getting this error in -nw:

Symbol's function definition is void: internal-echo-keystrokes-prefix

and this in gui:

Loading loadup.el (source)...Dump mode: nilUsing load-path (/home/ergo/.local/share/emacs/30.0.50/lisp /home/ergo/.local/share/emacs/30.0.50/lisp/emacs-lisp /home/ergo/.local/share/emacs/30.0.50/lisp/progmodes /home/ergo/.local/share/emacs/30.0.50/lisp/language /home/ergo/.local/share/emacs/30.0.50/lisp/international /home/ergo/.local/share/emacs/30.0.50/lisp/textmodes /home/ergo/.local/share/emacs/30.0.50/lisp/vc)Loading emacs-lisp/debug-early...Symbol's function definition is void: file-name-sans-extension
I tried the ussual: make extraclean, make bootstrap and the issue persists... Any other advise??
Thanks in advance, Ergus


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [External] : Re: `cl-macs'    [was: about keysee]
  2022-12-11 21:35   ` [External] : " Drew Adams
  2022-12-12  0:05     ` Issue building master Ergus via Users list for the GNU Emacs text editor
@ 2022-12-12 15:56     ` Stefan Monnier via Users list for the GNU Emacs text editor
  1 sibling, 0 replies; 5+ messages in thread
From: Stefan Monnier via Users list for the GNU Emacs text editor @ 2022-12-12 15:56 UTC (permalink / raw)
  To: help-gnu-emacs

> It's not just about changes within the `cl-lib' circus.
> Some of my libraries are compatible back to earlier
> releases that predate `cl-lib' (added in Emacs 23).

`cl-lib` was added in Emacs-24.3.
But the one in GNU ELPA works at least since Emacs-20 (I remember
changing its code to make it work there (e.g. the (fboundp 'defvaralias)
test), it might also work in Emacs-19 and if not it wouldn't be too hard
to make it work there I think).

> And `cl-macs' does still contain the macros.

Loading `cl-macs` definitely won't define `cl-remove-if` in Emacs<24.3.
Same holds for most of the macros it defines (because they changed name
at that point).


        Stefan




^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-12-12 15:56 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-12-11 17:09 `cl-macs' [was: about keysee] Drew Adams
2022-12-11 17:35 ` Stefan Monnier
2022-12-11 21:35   ` [External] : " Drew Adams
2022-12-12  0:05     ` Issue building master Ergus via Users list for the GNU Emacs text editor
2022-12-12 15:56     ` [External] : Re: `cl-macs' [was: about keysee] Stefan Monnier via Users list for the GNU Emacs text editor

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.