* req-package
@ 2015-08-11 7:10 Edward Knyshov
2015-08-11 15:26 ` req-package Stefan Monnier
0 siblings, 1 reply; 39+ messages in thread
From: Edward Knyshov @ 2015-08-11 7:10 UTC (permalink / raw)
To: help-gnu-emacs
Hello everyone.
My name is Edward.
I was asked about explanation of how does req-package work and which
problems does it solve. The question appeared in this list's discussion on
req-package moving to core package proposal.
So, req-package solves one single problem - make order of package
configurations in your init.el right without continuous reordering your
code while still providing ambrosian use-package goodness. It makes your
.emacs.d code more strict, modular and error prone. You can look here, how
I divided my code in separate modules and how simple does it looks
https://github.com/edvorg/emacs-configs/tree/master/init.d .
Remember, how often you tackled into problem, when you need to require one
package, do some configuration, then the same with second and so on.
Sometimes it becomes too complex. Especially in cases when one package have
more than one dependency. You can draw a graph of dependencies in your
configuration, and, I'm sure, it's complex. req-package creates this graph
for you and makes a correct traverse on it. The syntax is almost the same
as with use-package, but it provides a few additional keywords:
1) :require - a parameter to specify dependencies
2) :loader - an optional parameter to specify where to get package (el-get,
elpa, etc.)
Interesting thing is that packages are installed automatically once
req-package-finish function is executed. So there is no need for things
like cask or save-packages. You just write a configuration with packages
you need and they will be there. req-package will try to use elpa, el-get
or any package system provided by you to find and install your packages.
That's it. I'm not trying to push my package to core. I'm just answering a
question here.
Edward.
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-11 7:10 req-package Edward Knyshov
@ 2015-08-11 15:26 ` Stefan Monnier
2015-08-13 12:10 ` req-package Edward Knyshov
0 siblings, 1 reply; 39+ messages in thread
From: Stefan Monnier @ 2015-08-11 15:26 UTC (permalink / raw)
To: help-gnu-emacs
> Remember, how often you tackled into problem, when you need to require one
> package, do some configuration, then the same with second and so on.
Indeed, one of the problems I have here is to remember the last time
I had a problem like the one you describe.
Obviously, we're not using the same set of packages or the same kind
of configuration. Can you give some examples you've bumped into?
Stefan
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-11 15:26 ` req-package Stefan Monnier
@ 2015-08-13 12:10 ` Edward Knyshov
2015-08-13 13:44 ` req-package Alexander Shukaev
0 siblings, 1 reply; 39+ messages in thread
From: Edward Knyshov @ 2015-08-13 12:10 UTC (permalink / raw)
To: Stefan Monnier, help-gnu-emacs
Yes, sure. Sorry for late answer. Here is example. I configure clojure
development environment with req-package(use-package)
(req-package eldoc
;; this form call will download eldoc package from elpa or el-get as
needed
:commands eldoc
-mode
;; this parameter delays loading of eldoc until eldo-mode function is
called
:init (prog
n (add-h
ook 'emacs-lisp-mode-hook (lambda () (eldoc-mode 1)))
;; add eldoc to emacs lisp mode
(add-hook 'lisp-interaction-mode-hook (lambda () (eldoc-mode 1)))))
;; add eldoc to
lisp based interaction modes
modes
(req-package clojure-mode
;; this form call will download
clojure-mode
package from elpa or el-get as needed
:mode (("clj\\'" . clojure-mo
de)
;; this parameter delays loading of clojure-mode until
("cljs\\'" . clojure-mode)))
;; file with any of these extensions is loaded
(req-package cider
;; this form call will download
cider
package from elpa or el-get as needed
:require (clojure-m
ode eldoc)
;; this parameters makes sure that this req-package form is evaluated
after all of these packages are loaded
:commands cider-mode
;; delay loading until cider-mode function is called
:init (progn (add-hook 'clojure-mode-h
ook #'cider-mode)
;; start cider in clojure mode
(add-hook 'cider-mode-hook #'eldoc-mode)
;; start eldoc after cider setups some of its internal things and calls
its hook
(setq nrepl-log-messages t)))
;; some logging stuff
(req-package-finish) ;; start loading
This
example may bit a bit hard to understand in concrete, but you may get an
idea.
On Tue, Aug 11, 2015 at 6:30 PM Stefan Monnier <monnier@iro.umontreal.ca>
wrote:
> > Remember, how often you tackled into problem, when you need to require
> one
> > package, do some configuration, then the same with second and so on.
>
> Indeed, one of the problems I have here is to remember the last time
> I had a problem like the one you describe.
>
> Obviously, we're not using the same set of packages or the same kind
> of configuration. Can you give some examples you've bumped into?
>
>
> Stefan
>
>
>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-13 12:10 ` req-package Edward Knyshov
@ 2015-08-13 13:44 ` Alexander Shukaev
2015-08-13 14:06 ` req-package Edward Knyshov
2015-08-13 15:29 ` req-package Stefan Monnier
0 siblings, 2 replies; 39+ messages in thread
From: Alexander Shukaev @ 2015-08-13 13:44 UTC (permalink / raw)
To: Edward Knyshov; +Cc: help-gnu-emacs, Stefan Monnier
> Yes, sure. Sorry for late answer. Here is example. I configure clojure
> development environment with req-package(use-package)
>
> (req-package eldoc
> ;; this form call will download eldoc package from elpa or el-get as
> needed
>
> :commands eldoc
>
>
> -mode
> ;; this parameter delays loading of eldoc until eldo-mode function is
> called
>
> :init (prog
>
> n (add-h
>
> ook 'emacs-lisp-mode-hook (lambda () (eldoc-mode 1)))
> ;; add eldoc to emacs lisp mode
>
>
> (add-hook 'lisp-interaction-mode-hook (lambda () (eldoc-mode 1)))))
>
> ;; add eldoc to
> lisp based interaction modes
> modes
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> (req-package clojure-mode
>
> ;; this form call will download
> clojure-mode
> package from elpa or el-get as needed
> :mode (("clj\\'" . clojure-mo
>
> de)
> ;; this parameter delays loading of clojure-mode until
>
>
> ("cljs\\'" . clojure-mode)))
> ;; file with any of these extensions is loaded
>
>
> (req-package cider
>
> ;; this form call will download
> cider
> package from elpa or el-get as needed
> :require (clojure-m
>
> ode eldoc)
> ;; this parameters makes sure that this req-package form is evaluated
> after all of these packages are loaded
>
> :commands cider-mode
> ;; delay loading until cider-mode function is called
>
> :init (progn (add-hook 'clojure-mode-h
>
> ook #'cider-mode)
> ;; start cider in clojure mode
>
>
>
> (add-hook 'cider-mode-hook #'eldoc-mode)
> ;; start eldoc after cider setups some of its internal things and calls
> its hook
>
>
>
> (setq nrepl-log-messages t)))
> ;; some logging stuff
>
>
> (req-package-finish) ;; start loading
>
>
> This
> example may bit a bit hard to understand in concrete, but you may get an
> idea.
Hello Edward,
so, basically all that dance is to simply avoid writing
(with-eval-after-load 'closure-mode
(add-hook 'clojure-mode-hook #'cider-mode))
(with-eval-after-load 'eldoc
(add-hook 'cider-mode-hook #'eldoc-mode))
(while still using `use-package')? Besides, if I understand it
correctly, if `closure-mode', for example, would not be there (and not
downloaded from archives), then the whole configuration will fail?
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-13 13:44 ` req-package Alexander Shukaev
@ 2015-08-13 14:06 ` Edward Knyshov
2015-08-13 14:59 ` req-package Alexander Shukaev
2015-08-13 15:29 ` req-package Stefan Monnier
1 sibling, 1 reply; 39+ messages in thread
From: Edward Knyshov @ 2015-08-13 14:06 UTC (permalink / raw)
To: Alexander Shukaev; +Cc: help-gnu-emacs, Stefan Monnier
Basically yes. Also it provides you simplier api, because you do not pushed
to write config in reversed way. You write what depends on what, instead of
what is dependency of what. You can write much more modularised config in
req-package way, because each package is configured with its own
req-package form. Imaging how cumbersome your config will be with
eval-after-load, if 10 package are dependent on clojure-mode and some of
them dependent on helm and some of them on flycheck and so on. I'm not even
sure that it will be easy to support.
Yes, sure, it will fail, because not all dependencies are satisfied. Why
use cider without clojure-mode for example or why to try enable eldoc in
clojure-mode if clojure mode failes to install?
On Thu, Aug 13, 2015 at 4:44 PM Alexander Shukaev <haroogan@gmail.com>
wrote:
> > Yes, sure. Sorry for late answer. Here is example. I configure clojure
> > development environment with req-package(use-package)
> >
> > (req-package eldoc
> > ;; this form call will download eldoc package from elpa or el-get as
> > needed
> >
> > :commands eldoc
> >
> >
> > -mode
> > ;; this parameter delays loading of eldoc until eldo-mode function is
> > called
> >
> > :init (prog
> >
> > n (add-h
> >
> > ook 'emacs-lisp-mode-hook (lambda () (eldoc-mode 1)))
> > ;; add eldoc to emacs lisp mode
> >
> >
> > (add-hook 'lisp-interaction-mode-hook (lambda () (eldoc-mode 1)))))
> >
> > ;; add eldoc to
> > lisp based interaction modes
> > modes
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > (req-package clojure-mode
> >
> > ;; this form call will download
> > clojure-mode
> > package from elpa or el-get as needed
> > :mode (("clj\\'" . clojure-mo
> >
> > de)
> > ;; this parameter delays loading of clojure-mode until
> >
> >
> > ("cljs\\'" . clojure-mode)))
> > ;; file with any of these extensions is loaded
> >
> >
> > (req-package cider
> >
> > ;; this form call will download
> > cider
> > package from elpa or el-get as needed
> > :require (clojure-m
> >
> > ode eldoc)
> > ;; this parameters makes sure that this req-package form is evaluated
> > after all of these packages are loaded
> >
> > :commands cider-mode
> > ;; delay loading until cider-mode function is called
> >
> > :init (progn (add-hook 'clojure-mode-h
> >
> > ook #'cider-mode)
> > ;; start cider in clojure mode
> >
> >
> >
> > (add-hook 'cider-mode-hook #'eldoc-mode)
> > ;; start eldoc after cider setups some of its internal things and calls
> > its hook
> >
> >
> >
> > (setq nrepl-log-messages t)))
> > ;; some logging stuff
> >
> >
> > (req-package-finish) ;; start loading
> >
> >
> > This
> > example may bit a bit hard to understand in concrete, but you may get an
> > idea.
>
> Hello Edward,
>
> so, basically all that dance is to simply avoid writing
>
> (with-eval-after-load 'closure-mode
> (add-hook 'clojure-mode-hook #'cider-mode))
>
> (with-eval-after-load 'eldoc
> (add-hook 'cider-mode-hook #'eldoc-mode))
>
> (while still using `use-package')? Besides, if I understand it
> correctly, if `closure-mode', for example, would not be there (and not
> downloaded from archives), then the whole configuration will fail?
>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-13 14:06 ` req-package Edward Knyshov
@ 2015-08-13 14:59 ` Alexander Shukaev
2015-08-13 20:43 ` req-package Edward Knyshov
[not found] ` <mailman.8283.1439498644.904.help-gnu-emacs@gnu.org>
0 siblings, 2 replies; 39+ messages in thread
From: Alexander Shukaev @ 2015-08-13 14:59 UTC (permalink / raw)
To: Edward Knyshov; +Cc: help-gnu-emacs, Stefan Monnier
> Yes, sure, it will fail, because not all dependencies are satisfied. Why use
> cider without clojure-mode for example or why to try enable eldoc in
> clojure-mode if clojure mode failes to install?
It's all about the example you used. Consider something like this:
(use-package recentf
:defer
:commands
(recentf-mode)
:init
(recentf-mode)
:config
;; *before*
(with-eval-after-load 'evil
(evil-make-overriding-map recentf-dialog-mode-map 'motion)
(evil-set-initial-state 'recentf-dialog-mode 'motion)
(evil-ex-define-cmd "rfm[enu]" #'recentf-open-files))
;; *after*
)
Would you agree that in general, `evil' has nothing to do with
`recentf'? I can have other configurations *before* and *after* the
`evil'-specific one (even involving more `with-eval-after-load' forms
depending on other packages). As a result, if `evil' is not
present,then still the rest of the configuration of `recentf' will
function properly, and I don't get disturbed by an error message or
half-working configuration due to abortion.
It could still be avoided if one could write a boilerplate like
(req-package recentf
:defer
:commands
(recentf-mode)
:init
(recentf-mode)
:config
;; *before*
)
(req-package recentf
:defer
:require (evil)
:config
(evil-make-overriding-map recentf-dialog-mode-map 'motion)
(evil-set-initial-state 'recentf-dialog-mode 'motion)
(evil-ex-define-cmd "rfm[enu]" #'recentf-open-files))
(req-package recentf
:defer
:config
;; *after*
)
Will this work with `req-package'? To be more specific, I guess you
understand what I mean here: I expect only the middle one to fail if
`evil' is not present, but *before* and *after* should still work.
> Basically yes. Also it provides you simplier api, because you do not pushed
> to write config in reversed way. You write what depends on what, instead of
> what is dependency of what. You can write much more modularised config in
> req-package way, because each package is configured with its own req-package
> form. Imaging how cumbersome your config will be with eval-after-load, if 10
> package are dependent on clojure-mode and some of them dependent on helm and
> some of them on flycheck and so on. I'm not even sure that it will be easy
> to support.
The only problem that I currently have with `use-package' is the
following. Assume you have packages `a' and `b'. Sometimes, when
configuring `b' with `use-package', I want to be absolutely sure that
not only `a' is loaded, but also that all the `(use-package a ...)'
forms have already been evaluated before the `(use-package b ...)'. I
know 2 solutions to this problem. (1) The dumb one, to arrange all
the `(use-package x ...)' into the corresponding, for example,
`init-x.el' and then of course `(require 'init-x)' in the right order
in some global configuration file (e.g. `init.el'). That is, for the
current example, it would be
(require 'init-a)
(require 'init-b)
Once again, this is dumb, and I don't do this, but rather stick with
the second option. (2) Arrange all the `(use-package x ...)' into the
corresponding, for example, `init-x.el' and then do
`(with-eval-after-load 'init-x ...)' where necessary. That is, for
the current example, it could either be
(require 'init-b)
(require 'init-a)
where the order appears to be wrong, but inside `(use-package b ...)'
I would use `(with-eval-after-load 'init-a ...)' which solves the
ordering problem; or
(require 'init-a)
(require 'init-b)
where the order is right, but `(with-eval-after-load 'init-a ...)'
inside `(use-package b ...)' still does no harm. In other words, with
the approach (2), one does not have to care about the order of
execution of `(use-package x ...)' forms.
Now the question is whether your `req-package' does that automatically
with the `:require' keyword? In particular, will
(req-package b
:require a
...)
ensure that
(req-package a
...)
is evaluated before
(req-package b
:require a
...)
regardless of the order in which they appear in the configuration files?
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-13 13:44 ` req-package Alexander Shukaev
2015-08-13 14:06 ` req-package Edward Knyshov
@ 2015-08-13 15:29 ` Stefan Monnier
2015-08-13 15:50 ` req-package Alexander Shukaev
[not found] ` <mailman.8262.1439481023.904.help-gnu-emacs@gnu.org>
1 sibling, 2 replies; 39+ messages in thread
From: Stefan Monnier @ 2015-08-13 15:29 UTC (permalink / raw)
To: help-gnu-emacs
> (with-eval-after-load 'closure-mode
> (add-hook 'clojure-mode-hook #'cider-mode))
> (with-eval-after-load 'eldoc
> (add-hook 'cider-mode-hook #'eldoc-mode))
Why would you need to wrap those in with-eval-after-load?
Stefan
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-13 15:29 ` req-package Stefan Monnier
@ 2015-08-13 15:50 ` Alexander Shukaev
[not found] ` <mailman.8262.1439481023.904.help-gnu-emacs@gnu.org>
1 sibling, 0 replies; 39+ messages in thread
From: Alexander Shukaev @ 2015-08-13 15:50 UTC (permalink / raw)
To: Stefan Monnier; +Cc: help-gnu-emacs
>> (with-eval-after-load 'closure-mode
>> (add-hook 'clojure-mode-hook #'cider-mode))
>
>> (with-eval-after-load 'eldoc
>> (add-hook 'cider-mode-hook #'eldoc-mode))
>
> Why would you need to wrap those in with-eval-after-load?
It's true that you don't have to. This is just a bad example, Stefan.
Nevertheless, the rationale might still be available. Why should I
define the `clojure-mode-hook' variable to populate it with
`cinder-mode', while the corresponding `clojure-mode' is never used
and is not even installed.
With `eldoc' it's clear. Why should `cider-mode' call `eldoc-mode'
when `eldoc.el' is not even installed on one's machine?
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
[not found] ` <mailman.8262.1439481023.904.help-gnu-emacs@gnu.org>
@ 2015-08-13 15:56 ` Stefan Monnier
2015-08-13 16:14 ` req-package Alexander Shukaev
[not found] ` <mailman.8266.1439482490.904.help-gnu-emacs@gnu.org>
0 siblings, 2 replies; 39+ messages in thread
From: Stefan Monnier @ 2015-08-13 15:56 UTC (permalink / raw)
To: help-gnu-emacs
> It's true that you don't have to. This is just a bad example, Stefan.
That's my point: I'm having trouble finding good examples.
Stefan
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-13 15:56 ` req-package Stefan Monnier
@ 2015-08-13 16:14 ` Alexander Shukaev
[not found] ` <mailman.8266.1439482490.904.help-gnu-emacs@gnu.org>
1 sibling, 0 replies; 39+ messages in thread
From: Alexander Shukaev @ 2015-08-13 16:14 UTC (permalink / raw)
To: Stefan Monnier; +Cc: help-gnu-emacs
>> It's true that you don't have to. This is just a bad example, Stefan.
>
> That's my point: I'm having trouble finding good examples.
Consider my previous one:
(use-package recentf
:defer
:commands
(recentf-mode)
:config
(with-eval-after-load 'evil
(evil-make-overriding-map recentf-dialog-mode-map 'motion)
(evil-set-initial-state 'recentf-dialog-mode 'motion)
(evil-ex-define-cmd "rfm[enu]" #'recentf-open-files)))
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
[not found] ` <mailman.8266.1439482490.904.help-gnu-emacs@gnu.org>
@ 2015-08-13 16:23 ` Stefan Monnier
2015-08-13 16:37 ` req-package Alexander Shukaev
[not found] ` <mailman.8267.1439483837.904.help-gnu-emacs@gnu.org>
0 siblings, 2 replies; 39+ messages in thread
From: Stefan Monnier @ 2015-08-13 16:23 UTC (permalink / raw)
To: help-gnu-emacs
> Consider my previous one:
> (use-package recentf
> :defer
> :commands
> (recentf-mode)
> :config
> (with-eval-after-load 'evil
> (evil-make-overriding-map recentf-dialog-mode-map 'motion)
> (evil-set-initial-state 'recentf-dialog-mode 'motion)
> (evil-ex-define-cmd "rfm[enu]" #'recentf-open-files)))
Can you explain what' are the issues here?
I guess one issue is with
(evil-make-overriding-map recentf-dialog-mode-map 'motion)
since this can only be used after both recentf and evil are loaded.
But I don't see where use-package req-package helps you with this
problem (which you instead solve with with-eval-after-load, IIUC).
Can you clarify?
Stefan
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-13 16:23 ` req-package Stefan Monnier
@ 2015-08-13 16:37 ` Alexander Shukaev
2015-08-13 20:27 ` req-package Edward Knyshov
[not found] ` <mailman.8267.1439483837.904.help-gnu-emacs@gnu.org>
1 sibling, 1 reply; 39+ messages in thread
From: Alexander Shukaev @ 2015-08-13 16:37 UTC (permalink / raw)
To: Stefan Monnier; +Cc: help-gnu-emacs
>> Consider my previous one:
>> (use-package recentf
>> :defer
>> :commands
>> (recentf-mode)
>> :config
>> (with-eval-after-load 'evil
>> (evil-make-overriding-map recentf-dialog-mode-map 'motion)
>> (evil-set-initial-state 'recentf-dialog-mode 'motion)
>> (evil-ex-define-cmd "rfm[enu]" #'recentf-open-files)))
>
> Can you explain what' are the issues here?
>
> I guess one issue is with
>
> (evil-make-overriding-map recentf-dialog-mode-map 'motion)
>
> since this can only be used after both recentf and evil are loaded.
> But I don't see where use-package req-package helps you with this
> problem (which you instead solve with with-eval-after-load, IIUC).
>
> Can you clarify?
Right now, `use-package' is nothing more, but a convenient way to
structure configurations of packages, especially in terms of autoloads
and deferring. Yes, right now it's more cosmetics and sugar, rather
than something that one cannot live without. Still, I think there
were plenty of good examples in another thread (with the `:mode'
keyword, for instance).
In this thread, however, we want to go deeper and discuss package
"configuration-time" dependencies (which are not covered by
`use-package' by default), and `req-package' offers some features in
this regard, though I still don't quite understand them
comprehensively. The biggest issue, that is not solved anywhere
(neither vanilla Emacs nor `use-package' provide facilities for this)
out of the box, is the one that I described two posts earlier with the
example on `a' and `b'. Did you understand the issue? If
`req-package' solves it, then this might be a good step forward in
evolving `use-package' and making it a "really" handy tool for
managing complex configurations.
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
[not found] ` <mailman.8267.1439483837.904.help-gnu-emacs@gnu.org>
@ 2015-08-13 20:17 ` Stefan Monnier
0 siblings, 0 replies; 39+ messages in thread
From: Stefan Monnier @ 2015-08-13 20:17 UTC (permalink / raw)
To: help-gnu-emacs
> Right now, `use-package' is nothing more, but a convenient way to
> structure configurations of packages, especially in terms of autoloads
> and deferring. Yes, right now it's more cosmetics and sugar, rather
> than something that one cannot live without.
Sure. The autoloads part is mostly redundant for ELPA packages, but the
structuring part is indeed nice. And convenience is something we all
appreciate.
> In this thread, however, we want to go deeper and discuss package
> "configuration-time" dependencies (which are not covered by
> `use-package' by default),
Exactly.
> The biggest issue, that is not solved anywhere (neither vanilla Emacs
> nor `use-package' provide facilities for this) out of the box, is the
> one that I described two posts earlier with the example on `a' and
> `b'. Did you understand the issue?
I must have missed it.
[...going back in the thread...]
OK, found it. But no, I don't understand the issue. More specifically,
I understand your hypothetical example and the problem it introduces,
but I'm having a hard time imagining when that happens in practice.
We have plenty of concrete problems that I prefer not to worry too much
about the hypothetical ones (except the ones I like, of course ;-)
[ This said, sometimes the hypothetical problems are helpful to see the
problem in its full generality and thus find a better solution. ]
More specifically, Elisp being Turing complete (and side-effectingly
dirty and all), I know for a fact that I will always be able to come up
with some example where any neat solution won't be able to express the
specific configuration I need.
** Random thought 1
BTW, part of the problem with a solution like use-package is also that
it hides what it does. And in some cases you need to know how it does
its job in order to be able to tweak it correctly.
E.g. depending on how the ":config" thingy (which IIUC runs after the
package is loaded) is implemented, a (with-eval-after-load <pkg> <code>)
might end up running either before or after use-package's :config code.
So, we have the usual problem (recently mentioned in the context of
ELPA), that when it works, it's great, but when it doesn't it makes
things harder because you have to look under the cover to see what happens.
** Random thought 2
The design of something like use-package necessary has to start with
the design of a convention that is simple enough to be attractive yet
powerful enough to cover the vast majority of existing cases, *and*
where most of the remaining cases can be accommodated by the package
author (i.e. the packages need to be tweaked to make configuration
easier).
To take the example of Customize, the design is something like:
We only handle global variables that are only modified via Customize
This covers many cases, but far from all. And it's inconvenient to
accommodate this limitation by adding more global variables
(e.g. splitting `foobar-hook' into two, one that is fully under the
control of Customize and another that can be modified by Elisp packages;
or adding `foo-bar-enable' to control whether the `bar' major mode
should enable the `foo' minor mode).
Stefan
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-13 16:37 ` req-package Alexander Shukaev
@ 2015-08-13 20:27 ` Edward Knyshov
2015-08-13 20:30 ` req-package Edward Knyshov
0 siblings, 1 reply; 39+ messages in thread
From: Edward Knyshov @ 2015-08-13 20:27 UTC (permalink / raw)
To: Alexander Shukaev, Stefan Monnier; +Cc: help-gnu-emacs
Alexander, the answer to your a-b question is yes, req-package manages it.
That's the main idea. You do not need to rearrange your code.
On Thu, Aug 13, 2015 at 7:37 PM Alexander Shukaev <haroogan@gmail.com>
wrote:
> >> Consider my previous one:
> >> (use-package recentf
> >> :defer
> >> :commands
> >> (recentf-mode)
> >> :config
> >> (with-eval-after-load 'evil
> >> (evil-make-overriding-map recentf-dialog-mode-map 'motion)
> >> (evil-set-initial-state 'recentf-dialog-mode 'motion)
> >> (evil-ex-define-cmd "rfm[enu]" #'recentf-open-files)))
> >
> > Can you explain what' are the issues here?
> >
> > I guess one issue is with
> >
> > (evil-make-overriding-map recentf-dialog-mode-map 'motion)
> >
> > since this can only be used after both recentf and evil are loaded.
> > But I don't see where use-package req-package helps you with this
> > problem (which you instead solve with with-eval-after-load, IIUC).
> >
> > Can you clarify?
>
> Right now, `use-package' is nothing more, but a convenient way to
> structure configurations of packages, especially in terms of autoloads
> and deferring. Yes, right now it's more cosmetics and sugar, rather
> than something that one cannot live without. Still, I think there
> were plenty of good examples in another thread (with the `:mode'
> keyword, for instance).
>
> In this thread, however, we want to go deeper and discuss package
> "configuration-time" dependencies (which are not covered by
> `use-package' by default), and `req-package' offers some features in
> this regard, though I still don't quite understand them
> comprehensively. The biggest issue, that is not solved anywhere
> (neither vanilla Emacs nor `use-package' provide facilities for this)
> out of the box, is the one that I described two posts earlier with the
> example on `a' and `b'. Did you understand the issue? If
> `req-package' solves it, then this might be a good step forward in
> evolving `use-package' and making it a "really" handy tool for
> managing complex configurations.
>
>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-13 20:27 ` req-package Edward Knyshov
@ 2015-08-13 20:30 ` Edward Knyshov
0 siblings, 0 replies; 39+ messages in thread
From: Edward Knyshov @ 2015-08-13 20:30 UTC (permalink / raw)
To: Alexander Shukaev, Stefan Monnier; +Cc: help-gnu-emacs
I have a very complex configuration with nearly 300 packages. I tackled
into reordering hell when it was about 100 packages. And now my
configuration grown three times bigger, but still works perfectly with ease
of supporting and adding new features.
On Thu, Aug 13, 2015 at 11:27 PM Edward Knyshov <edvorg@gmail.com> wrote:
> Alexander, the answer to your a-b question is yes, req-package manages it.
> That's the main idea. You do not need to rearrange your code.
>
> On Thu, Aug 13, 2015 at 7:37 PM Alexander Shukaev <haroogan@gmail.com>
> wrote:
>
>> >> Consider my previous one:
>> >> (use-package recentf
>> >> :defer
>> >> :commands
>> >> (recentf-mode)
>> >> :config
>> >> (with-eval-after-load 'evil
>> >> (evil-make-overriding-map recentf-dialog-mode-map 'motion)
>> >> (evil-set-initial-state 'recentf-dialog-mode 'motion)
>> >> (evil-ex-define-cmd "rfm[enu]" #'recentf-open-files)))
>> >
>> > Can you explain what' are the issues here?
>> >
>> > I guess one issue is with
>> >
>> > (evil-make-overriding-map recentf-dialog-mode-map 'motion)
>> >
>> > since this can only be used after both recentf and evil are loaded.
>> > But I don't see where use-package req-package helps you with this
>> > problem (which you instead solve with with-eval-after-load, IIUC).
>> >
>> > Can you clarify?
>>
>> Right now, `use-package' is nothing more, but a convenient way to
>> structure configurations of packages, especially in terms of autoloads
>> and deferring. Yes, right now it's more cosmetics and sugar, rather
>> than something that one cannot live without. Still, I think there
>> were plenty of good examples in another thread (with the `:mode'
>> keyword, for instance).
>>
>> In this thread, however, we want to go deeper and discuss package
>> "configuration-time" dependencies (which are not covered by
>> `use-package' by default), and `req-package' offers some features in
>> this regard, though I still don't quite understand them
>> comprehensively. The biggest issue, that is not solved anywhere
>> (neither vanilla Emacs nor `use-package' provide facilities for this)
>> out of the box, is the one that I described two posts earlier with the
>> example on `a' and `b'. Did you understand the issue? If
>> `req-package' solves it, then this might be a good step forward in
>> evolving `use-package' and making it a "really" handy tool for
>> managing complex configurations.
>>
>>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-13 14:59 ` req-package Alexander Shukaev
@ 2015-08-13 20:43 ` Edward Knyshov
[not found] ` <mailman.8283.1439498644.904.help-gnu-emacs@gnu.org>
1 sibling, 0 replies; 39+ messages in thread
From: Edward Knyshov @ 2015-08-13 20:43 UTC (permalink / raw)
To: Alexander Shukaev; +Cc: help-gnu-emacs, Stefan Monnier
Some words about your example with evil mode.
You wrote an example.
(use-package recentf
:defer
:commands
(recentf-mode)
:init
(recentf-mode)
:config
;; *before*
(with-eval-after-load 'evil
(evil-make-overriding-map recentf-dialog-mode-map 'motion)
(evil-set-initial-state 'recentf-dialog-mode 'motion)
(evil-ex-define-cmd "rfm[enu]" #'recentf-open-files))
;; *after*
)
It's seems you do not properly get an idea. You should use only one
req-package call for one package. Imaging kind of graph, which you describe
with (req-package package :require dependencies).
Here is how it will be rewritten with req-package
(req-package recentf)
(req-package evil
:require recentf
:config (progn (evil-make-overriding-map recentf-dialog-mode-map 'motion)
(evil-set-initial-state 'recentf-dialog-mode
'motion)
(evil-ex-define-cmd "rfm[enu]"
#'recentf-open-files)))
That's all. So I even wouldn't call this boilerplate, because it less than
first example.
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
[not found] ` <mailman.8283.1439498644.904.help-gnu-emacs@gnu.org>
@ 2015-08-13 21:22 ` Stefan Monnier
2015-08-14 5:14 ` req-package Edward Knyshov
` (2 more replies)
0 siblings, 3 replies; 39+ messages in thread
From: Stefan Monnier @ 2015-08-13 21:22 UTC (permalink / raw)
To: help-gnu-emacs
> Here is how it will be rewritten with req-package
>
> (req-package recentf)
>
> (req-package evil
> :require recentf
> :config (progn (evil-make-overriding-map recentf-dialog-mode-map 'motion)
> (evil-set-initial-state 'recentf-dialog-mode 'motion)
> (evil-ex-define-cmd "rfm[enu]" #'recentf-open-files)))
But wouldn't that misbehave if you decide to stop using recentf (in
which case you'd want to just comment out your (req-package recentf)
without having to tweak the `evil' part).
Stefan
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-13 21:22 ` req-package Stefan Monnier
@ 2015-08-14 5:14 ` Edward Knyshov
2015-08-14 5:18 ` req-package Edward Knyshov
[not found] ` <mailman.8308.1439529283.904.help-gnu-emacs@gnu.org>
2 siblings, 0 replies; 39+ messages in thread
From: Edward Knyshov @ 2015-08-14 5:14 UTC (permalink / raw)
To: Stefan Monnier, help-gnu-emacs
In this case you should remove dependency from evil config.
On Fri, Aug 14, 2015, 12:25 AM Stefan Monnier <monnier@iro.umontreal.ca>
wrote:
> > Here is how it will be rewritten with req-package
> >
> > (req-package recentf)
> >
> > (req-package evil
> > :require recentf
> > :config (progn (evil-make-overriding-map recentf-dialog-mode-map
> 'motion)
> > (evil-set-initial-state 'recentf-dialog-mode 'motion)
> > (evil-ex-define-cmd "rfm[enu]" #'recentf-open-files)))
>
> But wouldn't that misbehave if you decide to stop using recentf (in
> which case you'd want to just comment out your (req-package recentf)
> without having to tweak the `evil' part).
>
>
> Stefan
>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-13 21:22 ` req-package Stefan Monnier
2015-08-14 5:14 ` req-package Edward Knyshov
@ 2015-08-14 5:18 ` Edward Knyshov
[not found] ` <mailman.8308.1439529283.904.help-gnu-emacs@gnu.org>
2 siblings, 0 replies; 39+ messages in thread
From: Edward Knyshov @ 2015-08-14 5:18 UTC (permalink / raw)
To: Stefan Monnier, help-gnu-emacs
Also in this example you could write only evil form, because recentf does
nothing. Like that.
(req-package evil
:require recentf
:config (progn (evil-make-overriding-map recentf-dialog-mode-map 'motion)
(evil-set-initial-state 'recentf-dialog-mode
'motion)
(evil-ex-define-cmd "rfm[enu]"
#'recentf-open-files)))
On Fri, Aug 14, 2015 at 12:25 AM Stefan Monnier <monnier@iro.umontreal.ca>
wrote:
> > Here is how it will be rewritten with req-package
> >
> > (req-package recentf)
> >
> > (req-package evil
> > :require recentf
> > :config (progn (evil-make-overriding-map recentf-dialog-mode-map
> 'motion)
> > (evil-set-initial-state 'recentf-dialog-mode 'motion)
> > (evil-ex-define-cmd "rfm[enu]" #'recentf-open-files)))
>
> But wouldn't that misbehave if you decide to stop using recentf (in
> which case you'd want to just comment out your (req-package recentf)
> without having to tweak the `evil' part).
>
>
> Stefan
>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
[not found] ` <mailman.8308.1439529283.904.help-gnu-emacs@gnu.org>
@ 2015-08-14 14:07 ` Stefan Monnier
2015-08-14 14:40 ` req-package Alexander Shukaev
[not found] ` <mailman.8327.1439563225.904.help-gnu-emacs@gnu.org>
0 siblings, 2 replies; 39+ messages in thread
From: Stefan Monnier @ 2015-08-14 14:07 UTC (permalink / raw)
To: help-gnu-emacs
> In this case you should remove dependency from evil config.
But if you remove the ":require recentf" the code will still fail
since (evil-make-overriding-map recentf-dialog-mode-map 'motion) will
signal an error if recentf is not loaded.
Stefan
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-14 14:07 ` req-package Stefan Monnier
@ 2015-08-14 14:40 ` Alexander Shukaev
2015-08-14 14:54 ` req-package Edward Knyshov
[not found] ` <mailman.8327.1439563225.904.help-gnu-emacs@gnu.org>
1 sibling, 1 reply; 39+ messages in thread
From: Alexander Shukaev @ 2015-08-14 14:40 UTC (permalink / raw)
To: Stefan Monnier, edvorg; +Cc: help-gnu-emacs
>> In this case you should remove dependency from evil config.
>
> But if you remove the ":require recentf" the code will still fail
> since (evil-make-overriding-map recentf-dialog-mode-map 'motion) will
> signal an error if recentf is not loaded.
Exactly, and that's what I wanted to point out as design flaw, but I
see one good solution which I believe could improve `req-package' even
further.
Why not do the following:
(req-package evil
:config
;; Here we configure only `evil' itself, e.g.:
(let ((keymap evil-emacs-state-map))
(setcdr keymap nil)
(define-key keymap (read-kbd-macro evil-toggle-key)
#'evil-exit-emacs-state))
(setq-default evil-ex-commands nil)
(evil-ex-define-cmd "w[rite]" #'evil-write)
:config recentf
;; Here we configure what is related to `recentf' (plus `evil' of course).
;; It's kind of `:require recentf' (in a sense that it should also
manage dependencies as
;; `:require recentf' does), but it also includes corresponding
configuration as well. The benefit is
;; that if `recentf' is not available, then this code is simply
disabled/ignored (similar to how
;; `with-eval-after-load' functions). This is more general and
flexible approach then `:require'.
(evil-make-overriding-map recentf-dialog-mode-map 'motion)
(evil-set-initial-state 'recentf-dialog-mode 'motion)
(evil-ex-define-cmd "rfm[enu]" #'recentf-open-files)
:config help
;; Again the same concept as with `recentf'.
(let ((keymap evil-emacs-state-map))
(define-key keymap (kbd "C-?") #'help))
(evil-ex-define-cmd "h[elp]" #'help)
:config (my minibuffer)
;; Again the same concept as with `recentf', but now two packages
are prerequisites.
(my-add-hook 'minibuffer-setup-hook #'evil-insert-state))
Furthermore, those `:config' forms should execute exactly in the order
they appear in the code. Why is it important? Consider
`(setq-default evil-ex-commands nil)', this erases all of the default
Evil's ex-commands, then we add our own `(evil-ex-define-cmd "w[rite]"
#'evil-write)'. However, later on, if `recentf' is present, then
`(evil-ex-define-cmd "rfm[enu]" #'recentf-open-files)' should run and
it should definitely run after `(setq-default evil-ex-commands nil)'.
By the way, the same applies to how `evil-emacs-state-map' is managed
(first reset and then gradually repopulated).
To conclude, I think the above approach is next-level evolution step
for `req-package' and possibly can be pull-requested to `use-package'
at some point. Edward, do you see the potential here to extend
`req-package' accordingly?
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-14 14:40 ` req-package Alexander Shukaev
@ 2015-08-14 14:54 ` Edward Knyshov
2015-08-14 15:02 ` req-package Alexander Shukaev
0 siblings, 1 reply; 39+ messages in thread
From: Edward Knyshov @ 2015-08-14 14:54 UTC (permalink / raw)
To: Alexander Shukaev, Stefan Monnier; +Cc: help-gnu-emacs
It's a good idea Alexander. It sounds good.
I'm not sure about pull requesting to use package, because its author
wanted to keep use package simple, last time I talked to him.
That's why req-package was created. But I will really consider adding this
improvement to req-package.
Could you, please, create an issue at http://github.com/edvorg/req-package ?
Edward.
On Fri, Aug 14, 2015 at 5:40 PM Alexander Shukaev <haroogan@gmail.com>
wrote:
> >> In this case you should remove dependency from evil config.
> >
> > But if you remove the ":require recentf" the code will still fail
> > since (evil-make-overriding-map recentf-dialog-mode-map 'motion) will
> > signal an error if recentf is not loaded.
>
> Exactly, and that's what I wanted to point out as design flaw, but I
> see one good solution which I believe could improve `req-package' even
> further.
>
> Why not do the following:
>
> (req-package evil
> :config
> ;; Here we configure only `evil' itself, e.g.:
> (let ((keymap evil-emacs-state-map))
> (setcdr keymap nil)
> (define-key keymap (read-kbd-macro evil-toggle-key)
> #'evil-exit-emacs-state))
> (setq-default evil-ex-commands nil)
> (evil-ex-define-cmd "w[rite]" #'evil-write)
> :config recentf
> ;; Here we configure what is related to `recentf' (plus `evil' of
> course).
> ;; It's kind of `:require recentf' (in a sense that it should also
> manage dependencies as
> ;; `:require recentf' does), but it also includes corresponding
> configuration as well. The benefit is
> ;; that if `recentf' is not available, then this code is simply
> disabled/ignored (similar to how
> ;; `with-eval-after-load' functions). This is more general and
> flexible approach then `:require'.
> (evil-make-overriding-map recentf-dialog-mode-map 'motion)
> (evil-set-initial-state 'recentf-dialog-mode 'motion)
> (evil-ex-define-cmd "rfm[enu]" #'recentf-open-files)
> :config help
> ;; Again the same concept as with `recentf'.
> (let ((keymap evil-emacs-state-map))
> (define-key keymap (kbd "C-?") #'help))
> (evil-ex-define-cmd "h[elp]" #'help)
> :config (my minibuffer)
> ;; Again the same concept as with `recentf', but now two packages
> are prerequisites.
> (my-add-hook 'minibuffer-setup-hook #'evil-insert-state))
>
> Furthermore, those `:config' forms should execute exactly in the order
> they appear in the code. Why is it important? Consider
> `(setq-default evil-ex-commands nil)', this erases all of the default
> Evil's ex-commands, then we add our own `(evil-ex-define-cmd "w[rite]"
> #'evil-write)'. However, later on, if `recentf' is present, then
> `(evil-ex-define-cmd "rfm[enu]" #'recentf-open-files)' should run and
> it should definitely run after `(setq-default evil-ex-commands nil)'.
> By the way, the same applies to how `evil-emacs-state-map' is managed
> (first reset and then gradually repopulated).
>
> To conclude, I think the above approach is next-level evolution step
> for `req-package' and possibly can be pull-requested to `use-package'
> at some point. Edward, do you see the potential here to extend
> `req-package' accordingly?
>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-14 14:54 ` req-package Edward Knyshov
@ 2015-08-14 15:02 ` Alexander Shukaev
2015-08-15 8:46 ` req-package John Wiegley
0 siblings, 1 reply; 39+ messages in thread
From: Alexander Shukaev @ 2015-08-14 15:02 UTC (permalink / raw)
To: Edward Knyshov; +Cc: help-gnu-emacs, Stefan Monnier
> It's a good idea Alexander. It sounds good.
Thanks, Edward.
> I'm not sure about pull requesting to use package, because its author wanted
> to keep use package simple, last time I talked to him.
Maybe we could try to involve him into this discussion once again as
your initial feature with dependency/order management and now this one
would absolutely blow away the plain naked `use-package'. As I said
before, plain `use-package' is just sugar and convenience rather than
a "smart" tool for package management.
> That's why req-package was created. But I will really consider adding this
> improvement to req-package.
> Could you, please, create an issue at http://github.com/edvorg/req-package ?
I'll do that soon.
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
[not found] ` <mailman.8327.1439563225.904.help-gnu-emacs@gnu.org>
@ 2015-08-14 16:58 ` Stefan Monnier
2015-08-14 17:53 ` req-package Alexander Shukaev
0 siblings, 1 reply; 39+ messages in thread
From: Stefan Monnier @ 2015-08-14 16:58 UTC (permalink / raw)
To: help-gnu-emacs
> :config recentf
> ;; Here we configure what is related to `recentf' (plus `evil' of course).
> ;; It's kind of `:require recentf' (in a sense that it should also
> manage dependencies as
> ;; `:require recentf' does), but it also includes corresponding
> configuration as well. The benefit is
> ;; that if `recentf' is not available, then this code is simply
> disabled/ignored (similar to how
> ;; `with-eval-after-load' functions). This is more general and
> flexible approach then `:require'.
I think this should not try to require recentf. IOW it should only
execute that code if/when recentf if enabled. So you can still disable
all of recentf by commenting out the (req-package recentf).
Stefan
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-14 16:58 ` req-package Stefan Monnier
@ 2015-08-14 17:53 ` Alexander Shukaev
0 siblings, 0 replies; 39+ messages in thread
From: Alexander Shukaev @ 2015-08-14 17:53 UTC (permalink / raw)
To: Stefan Monnier; +Cc: help-gnu-emacs
>> :config recentf
>> ;; Here we configure what is related to `recentf' (plus `evil' of course).
>> ;; It's kind of `:require recentf' (in a sense that it should also
>> manage dependencies as
>> ;; `:require recentf' does), but it also includes corresponding
>> configuration as well. The benefit is
>> ;; that if `recentf' is not available, then this code is simply
>> disabled/ignored (similar to how
>> ;; `with-eval-after-load' functions). This is more general and
>> flexible approach then `:require'.
>
> I think this should not try to require recentf. IOW it should only
> execute that code if/when recentf if enabled. So you can still disable
> all of recentf by commenting out the (req-package recentf).
True. It should behave similarly to the default `:config' which
simply translates to `eval-after-load' without `require'-ing anything.
BUT it should still build the graph in the similar way as `:require'
does in order to force evaluation of `(req-package recentf ...)'
BEFORE the current one (`(req-package evil ...)' in this case), so
that the default `:config' from `(req-package recentf ...)' is
definitely executed BEFORE the `:config recentf' from `(req-package
evil ...)'. Note that the code under either default `:config' from
`(req-package recentf ...)' or from `:config recentf' from
`(req-package evil ...)' will really execute only when `recentf' is
really loaded (by autoload, manually, or whatever) thanks to
`eval-after-load' behind `:config'. By the way, `(req-package recentf
...)' on its own without `:demand' (and that's the encouraged practice
to avoid `:demand', which is really `(require 'recentf)') does not
load `recentf'; and therefore, does not have to be touched at all even
if one does not want to use `recentf' anymore (i.e. you don't have to
comment it).
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-14 15:02 ` req-package Alexander Shukaev
@ 2015-08-15 8:46 ` John Wiegley
2015-08-15 19:25 ` req-package Alexander Shukaev
0 siblings, 1 reply; 39+ messages in thread
From: John Wiegley @ 2015-08-15 8:46 UTC (permalink / raw)
To: help-gnu-emacs
>>>>> Alexander Shukaev <haroogan@gmail.com> writes:
>> I'm not sure about pull requesting to use package, because its author
>> wanted to keep use package simple, last time I talked to him.
> Maybe we could try to involve him into this discussion once again as your
> initial feature with dependency/order management and now this one would
> absolutely blow away the plain naked `use-package'. As I said before, plain
> `use-package' is just sugar and convenience rather than a "smart" tool for
> package management.
I believe there are ways we can integrate the development, while allow the
feature work to proceed separately. This is partly why I re-designed
use-package in 2.0: so new functionality would not require maintenance (by me)
in core, since others rely on features that I never use, and hence would never
test.
So I'd love to examine whether req-package and use-package can be integrated,
such that we each work on our respective parts, while users can benefit from
both.
John
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-15 8:46 ` req-package John Wiegley
@ 2015-08-15 19:25 ` Alexander Shukaev
2015-08-15 22:17 ` req-package John Wiegley
0 siblings, 1 reply; 39+ messages in thread
From: Alexander Shukaev @ 2015-08-15 19:25 UTC (permalink / raw)
To: John Wiegley; +Cc: help-gnu-emacs, edvorg, Stefan Monnier
>>> I'm not sure about pull requesting to use package, because its author
>>> wanted to keep use package simple, last time I talked to him.
>
>> Maybe we could try to involve him into this discussion once again as your
>> initial feature with dependency/order management and now this one would
>> absolutely blow away the plain naked `use-package'. As I said before, plain
>> `use-package' is just sugar and convenience rather than a "smart" tool for
>> package management.
>
> I believe there are ways we can integrate the development, while allow the
> feature work to proceed separately. This is partly why I re-designed
> use-package in 2.0: so new functionality would not require maintenance (by me)
> in core, since others rely on features that I never use, and hence would never
> test.
Yes, indeed, I totally understand this rationale. The 2.0 is very
well redesigned in terms of extensibility; thanks a lot for your
effort. Still, I believe it would be to the benefit of the majority
to give `req-package' a shot and seek to add it as an optional
functionality to `use-package' while relying on the existing 2.0
framework.
> So I'd love to examine whether req-package and use-package can be integrated,
> such that we each work on our respective parts, while users can benefit from
> both.
That's wonderful!
By the way, the issue [http://github.com/edvorg/req-package/issues/18]
corresponding to this thread has been updated. Feel free to join the
discussion.
Regards,
Alexander
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-15 19:25 ` req-package Alexander Shukaev
@ 2015-08-15 22:17 ` John Wiegley
2015-08-16 8:51 ` req-package Les Harris
[not found] ` <mailman.8410.1439715098.904.help-gnu-emacs@gnu.org>
0 siblings, 2 replies; 39+ messages in thread
From: John Wiegley @ 2015-08-15 22:17 UTC (permalink / raw)
To: help-gnu-emacs
>>>>> Alexander Shukaev <haroogan@gmail.com> writes:
> Still, I believe it would be to the benefit of the majority to give
> `req-package' a shot and seek to add it as an optional functionality to
> `use-package' while relying on the existing 2.0 framework.
Yes, this is just what I was suggesting, unless I misunderstood something.
use-package hopes to serve as a foundation, with other, more rich frameworks
(like ELPA integration, dependency resolution, etc) sitting on top of it.
John
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-15 22:17 ` req-package John Wiegley
@ 2015-08-16 8:51 ` Les Harris
[not found] ` <mailman.8410.1439715098.904.help-gnu-emacs@gnu.org>
1 sibling, 0 replies; 39+ messages in thread
From: Les Harris @ 2015-08-16 8:51 UTC (permalink / raw)
To: help-gnu-emacs
I am just a normal user when it comes to use-package but it has
completely changed how I manage configuration for emacs. I've been
following the recent threads on here keenly.
I just wanted to say that this vision of use-package as a foundational
framework is very exciting from an end-user's standpoint and I look
forward to seeing what results may come.
--
Do they only stand
By ignorance, is that their happy state,
The proof of their obedience and their faith?
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
[not found] ` <mailman.8410.1439715098.904.help-gnu-emacs@gnu.org>
@ 2015-08-16 9:05 ` Rusi
2015-08-16 9:38 ` req-package Edward Knyshov
[not found] ` <mailman.8411.1439717896.904.help-gnu-emacs@gnu.org>
0 siblings, 2 replies; 39+ messages in thread
From: Rusi @ 2015-08-16 9:05 UTC (permalink / raw)
To: help-gnu-emacs
On Sunday, August 16, 2015 at 2:21:41 PM UTC+5:30, Les Harris wrote:
> I am just a normal user when it comes to use-package but it has
> completely changed how I manage configuration for emacs. I've been
> following the recent threads on here keenly.
>
> I just wanted to say that this vision of use-package as a foundational
> framework is very exciting from an end-user's standpoint and I look
> forward to seeing what results may come.
Yes
The one thing that is not coming out in these threads or the docs is that
use-package (req-package??¹) is hi-level declarative/functional whereas the
builtin methods are low-level imperative.
The closest that the builtin methods are functional is
(require 'feature)
vs the more imperative
(load "feature")
However as soon as one wants to go from there to something a bit more
sophisticated eg add-hook, autoload, eval-after-load etc it all becomes
mind-numbingly sequence-sensitive.
---------------------------------------
¹ As is stands req-package adds a key functional feature - dependency graph
verification. However from what is currently being discussed here it looks to
be getting more imperative.
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-16 9:05 ` req-package Rusi
@ 2015-08-16 9:38 ` Edward Knyshov
2015-08-17 16:42 ` req-package John Wiegley
[not found] ` <mailman.8411.1439717896.904.help-gnu-emacs@gnu.org>
1 sibling, 1 reply; 39+ messages in thread
From: Edward Knyshov @ 2015-08-16 9:38 UTC (permalink / raw)
To: Rusi, help-gnu-emacs
Hi.
First thing we need to figure out is does use-package provide flexible
enough api to implement req-package as new use-package keyword.
Currently it works by calling (use-package ...) forms when corresponding
are packages a ready to configure.
We need a full control over packages loading flow, because we need to
rearrange some stuff to get all this dance work.
Edward.
On Sun, Aug 16, 2015 at 12:10 PM Rusi <rustompmody@gmail.com> wrote:
> On Sunday, August 16, 2015 at 2:21:41 PM UTC+5:30, Les Harris wrote:
> > I am just a normal user when it comes to use-package but it has
> > completely changed how I manage configuration for emacs. I've been
> > following the recent threads on here keenly.
> >
> > I just wanted to say that this vision of use-package as a foundational
> > framework is very exciting from an end-user's standpoint and I look
> > forward to seeing what results may come.
>
> Yes
> The one thing that is not coming out in these threads or the docs is that
> use-package (req-package??¹) is hi-level declarative/functional whereas the
> builtin methods are low-level imperative.
>
> The closest that the builtin methods are functional is
> (require 'feature)
> vs the more imperative
> (load "feature")
>
> However as soon as one wants to go from there to something a bit more
> sophisticated eg add-hook, autoload, eval-after-load etc it all becomes
> mind-numbingly sequence-sensitive.
>
> ---------------------------------------
> ¹ As is stands req-package adds a key functional feature - dependency graph
> verification. However from what is currently being discussed here it looks
> to
> be getting more imperative.
>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
[not found] ` <mailman.8411.1439717896.904.help-gnu-emacs@gnu.org>
@ 2015-08-16 10:02 ` Rusi
2015-08-16 10:17 ` req-package Edward Knyshov
2015-08-16 10:17 ` req-package Rusi
0 siblings, 2 replies; 39+ messages in thread
From: Rusi @ 2015-08-16 10:02 UTC (permalink / raw)
To: help-gnu-emacs
On Sunday, August 16, 2015 at 3:08:18 PM UTC+5:30, Edward Knyshov wrote:
> On Sun, Aug 16, 2015 at 12:10 PM Rusi wrote:
>
> > On Sunday, August 16, 2015 at 2:21:41 PM UTC+5:30, Les Harris wrote:
> > > I am just a normal user when it comes to use-package but it has
> > > completely changed how I manage configuration for emacs. I've been
> > > following the recent threads on here keenly.
> > >
> > > I just wanted to say that this vision of use-package as a foundational
> > > framework is very exciting from an end-user's standpoint and I look
> > > forward to seeing what results may come.
> >
> > Yes
> > The one thing that is not coming out in these threads or the docs is that
> > use-package (req-package??¹) is hi-level declarative/functional whereas the
> > builtin methods are low-level imperative.
> >
> > The closest that the builtin methods are functional is
> > (require 'feature)
> > vs the more imperative
> > (load "feature")
> >
> > However as soon as one wants to go from there to something a bit more
> > sophisticated eg add-hook, autoload, eval-after-load etc it all becomes
> > mind-numbingly sequence-sensitive.
> >
> > ---------------------------------------
> > ¹ As is stands req-package adds a key functional feature - dependency graph
> > verification. However from what is currently being discussed here it looks
> > to
> > be getting more imperative.
> >
> Hi.
>
> First thing we need to figure out is does use-package provide flexible
> enough api to implement req-package as new use-package keyword.
> Currently it works by calling (use-package ...) forms when corresponding
> are packages a ready to configure.
> We need a full control over packages loading flow, because we need to
> rearrange some stuff to get all this dance work.
Err... I need to change my hat :-)
As an ordinary programmer, functional is generally better than imperative.
However with implementer hat on I know that the more fancy-ly declarative
a language is the more complex the internals are going to be.
After all its a conservation law -- someone somewhere needs to think the
messy parts. Just better to do it once-and-for-all and to forget thereafter.
So thanks you guys -- you and John -- for doing the messy work to help
us keep our inits short, sequence-tolerant logically organized and zippy.
And just to remind, I jumped into these threads because I would like to hand
out to my students, init-fragments that are not so long arcane and messy as they
currently have to be. [Anyways they think I am nuts for using emacs...
So not too many available degrees of freedom :-)
]
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-16 10:02 ` req-package Rusi
@ 2015-08-16 10:17 ` Edward Knyshov
2015-08-16 10:17 ` req-package Rusi
1 sibling, 0 replies; 39+ messages in thread
From: Edward Knyshov @ 2015-08-16 10:17 UTC (permalink / raw)
To: Rusi, help-gnu-emacs
Unfortunately we need to write imperative code sometimes because we need to
increase performance and reduce memory usage.
First version of req-package has been implemented in completely functional
style.
After my configuration grown to use near 150 packages, things gone wrong
and I started to tackle into recursion limits of emacs lisp.
Also performance was not that high as now. What is left for me is to keep
req-package api functional while providing good performance.
On Sun, Aug 16, 2015 at 1:05 PM Rusi <rustompmody@gmail.com> wrote:
> On Sunday, August 16, 2015 at 3:08:18 PM UTC+5:30, Edward Knyshov wrote:
> > On Sun, Aug 16, 2015 at 12:10 PM Rusi wrote:
> >
> > > On Sunday, August 16, 2015 at 2:21:41 PM UTC+5:30, Les Harris wrote:
> > > > I am just a normal user when it comes to use-package but it has
> > > > completely changed how I manage configuration for emacs. I've been
> > > > following the recent threads on here keenly.
> > > >
> > > > I just wanted to say that this vision of use-package as a
> foundational
> > > > framework is very exciting from an end-user's standpoint and I look
> > > > forward to seeing what results may come.
> > >
> > > Yes
> > > The one thing that is not coming out in these threads or the docs is
> that
> > > use-package (req-package??¹) is hi-level declarative/functional
> whereas the
> > > builtin methods are low-level imperative.
> > >
> > > The closest that the builtin methods are functional is
> > > (require 'feature)
> > > vs the more imperative
> > > (load "feature")
> > >
> > > However as soon as one wants to go from there to something a bit more
> > > sophisticated eg add-hook, autoload, eval-after-load etc it all becomes
> > > mind-numbingly sequence-sensitive.
> > >
> > > ---------------------------------------
> > > ¹ As is stands req-package adds a key functional feature - dependency
> graph
> > > verification. However from what is currently being discussed here it
> looks
> > > to
> > > be getting more imperative.
> > >
>
> > Hi.
> >
> > First thing we need to figure out is does use-package provide flexible
> > enough api to implement req-package as new use-package keyword.
> > Currently it works by calling (use-package ...) forms when corresponding
> > are packages a ready to configure.
> > We need a full control over packages loading flow, because we need to
> > rearrange some stuff to get all this dance work.
>
> Err... I need to change my hat :-)
> As an ordinary programmer, functional is generally better than imperative.
>
> However with implementer hat on I know that the more fancy-ly declarative
> a language is the more complex the internals are going to be.
> After all its a conservation law -- someone somewhere needs to think the
> messy parts. Just better to do it once-and-for-all and to forget
> thereafter.
> So thanks you guys -- you and John -- for doing the messy work to help
> us keep our inits short, sequence-tolerant logically organized and zippy.
>
> And just to remind, I jumped into these threads because I would like to
> hand
> out to my students, init-fragments that are not so long arcane and messy
> as they
> currently have to be. [Anyways they think I am nuts for using emacs...
> So not too many available degrees of freedom :-)
> ]
>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-16 10:02 ` req-package Rusi
2015-08-16 10:17 ` req-package Edward Knyshov
@ 2015-08-16 10:17 ` Rusi
2015-08-16 10:32 ` req-package Edward Knyshov
[not found] ` <mailman.8413.1439721183.904.help-gnu-emacs@gnu.org>
1 sibling, 2 replies; 39+ messages in thread
From: Rusi @ 2015-08-16 10:17 UTC (permalink / raw)
To: help-gnu-emacs
On Sunday, August 16, 2015 at 3:32:23 PM UTC+5:30, Rusi wrote:
> On Sunday, August 16, 2015 at 3:08:18 PM UTC+5:30, Edward Knyshov wrote:
> > Hi.
> >
> > First thing we need to figure out is does use-package provide flexible
> > enough api to implement req-package as new use-package keyword.
> > Currently it works by calling (use-package ...) forms when corresponding
> > are packages a ready to configure.
> > We need a full control over packages loading flow, because we need to
> > rearrange some stuff to get all this dance work.
>
> Err... I need to change my hat :-)
> As an ordinary programmer, functional is generally better than imperative.
>
> However with implementer hat on I know that the more fancy-ly declarative
> a language is the more complex the internals are going to be.
> After all its a conservation law -- someone somewhere needs to think the
> messy parts. Just better to do it once-and-for-all and to forget thereafter.
> So thanks you guys -- you and John -- for doing the messy work to help
> us keep our inits short, sequence-tolerant logically organized and zippy.
>
> And just to remind, I jumped into these threads because I would like to hand
> out to my students, init-fragments that are not so long arcane and messy as they
> currently have to be. [Anyways they think I am nuts for using emacs...
> So not too many available degrees of freedom :-)
> ]
And one more thing.
I tried to say it in the 'recursion' thread... Maybe it was too long.
So let me try to repeat it in short:
Do consider a feature request for a batch-mode for req-package
Ie.
- In batch-mode it should do the network downloads etc, verify dependencies etc
- In normal mode it should do imports as lazily as possible, bind keys etc --
the use-package functionality -- assuming packages are in place.
ie no elpa stuff here
IOW requesting some help for us users to partition this frightening list
(info "(elisp)Startup Summary")
into manageable sections
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-16 10:17 ` req-package Rusi
@ 2015-08-16 10:32 ` Edward Knyshov
[not found] ` <mailman.8413.1439721183.904.help-gnu-emacs@gnu.org>
1 sibling, 0 replies; 39+ messages in thread
From: Edward Knyshov @ 2015-08-16 10:32 UTC (permalink / raw)
To: help-gnu-emacs
Rusi, if I correctly understood your request, I think you already have this
functionality in req-package.
Req-package will do network downloads only in cases when package is now
available offline on your loadpath,
so it wil run correctly in offline, after you run it once with network
connection.
One thing I don't understand is why you need to avoid dependency management
in normal mode?
It runs offline and your config will be completely non-working if we start
to run without dependency related reordering.
Edward.
On Sun, Aug 16, 2015 at 1:20 PM Rusi <rustompmody@gmail.com> wrote:
> On Sunday, August 16, 2015 at 3:32:23 PM UTC+5:30, Rusi wrote:
> > On Sunday, August 16, 2015 at 3:08:18 PM UTC+5:30, Edward Knyshov wrote:
> > > Hi.
> > >
> > > First thing we need to figure out is does use-package provide flexible
> > > enough api to implement req-package as new use-package keyword.
> > > Currently it works by calling (use-package ...) forms when
> corresponding
> > > are packages a ready to configure.
> > > We need a full control over packages loading flow, because we need to
> > > rearrange some stuff to get all this dance work.
> >
> > Err... I need to change my hat :-)
> > As an ordinary programmer, functional is generally better than
> imperative.
> >
> > However with implementer hat on I know that the more fancy-ly declarative
> > a language is the more complex the internals are going to be.
> > After all its a conservation law -- someone somewhere needs to think the
> > messy parts. Just better to do it once-and-for-all and to forget
> thereafter.
> > So thanks you guys -- you and John -- for doing the messy work to help
> > us keep our inits short, sequence-tolerant logically organized and zippy.
> >
> > And just to remind, I jumped into these threads because I would like to
> hand
> > out to my students, init-fragments that are not so long arcane and messy
> as they
> > currently have to be. [Anyways they think I am nuts for using emacs...
> > So not too many available degrees of freedom :-)
> > ]
>
> And one more thing.
> I tried to say it in the 'recursion' thread... Maybe it was too long.
> So let me try to repeat it in short:
>
> Do consider a feature request for a batch-mode for req-package
> Ie.
> - In batch-mode it should do the network downloads etc, verify
> dependencies etc
> - In normal mode it should do imports as lazily as possible, bind keys etc
> --
> the use-package functionality -- assuming packages are in place.
> ie no elpa stuff here
>
> IOW requesting some help for us users to partition this frightening list
> (info "(elisp)Startup Summary")
> into manageable sections
>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
[not found] ` <mailman.8413.1439721183.904.help-gnu-emacs@gnu.org>
@ 2015-08-16 13:07 ` Rusi
2015-08-16 13:28 ` req-package Edward Knyshov
[not found] ` <mailman.8416.1439731716.904.help-gnu-emacs@gnu.org>
0 siblings, 2 replies; 39+ messages in thread
From: Rusi @ 2015-08-16 13:07 UTC (permalink / raw)
To: help-gnu-emacs
On Sunday, August 16, 2015 at 4:03:05 PM UTC+5:30, Edward Knyshov wrote:
> Rusi, if I correctly understood your request, I think you already have this
> functionality in req-package.
> Req-package will do network downloads only in cases when package is now
> available offline on your loadpath,
> so it wil run correctly in offline, after you run it once with network
> connection.
> One thing I don't understand is why you need to avoid dependency management
> in normal mode?
> It runs offline and your config will be completely non-working if we start
> to run without dependency related reordering.
>
> Edward.
Ok I guess I am confusing something or other
I tried your emacsconfig from github.
First time it took some 15 minutes to download all the packages (near 60M).
Ok... One time downloads are fine
But thereafter I remember seeing network like calls every time I start emacs
Switched back to my init
Now I again switch to yours and I dont see them...
So as I said must be confusing something...
So in general is that if we switch to req-package, all that was originally
going into init.el now has to go into the init-real which is on the
after-init-hook?
Then what is run-emacs.el for?
Its all rather confusing...
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-16 13:07 ` req-package Rusi
@ 2015-08-16 13:28 ` Edward Knyshov
[not found] ` <mailman.8416.1439731716.904.help-gnu-emacs@gnu.org>
1 sibling, 0 replies; 39+ messages in thread
From: Edward Knyshov @ 2015-08-16 13:28 UTC (permalink / raw)
To: help-gnu-emacs
Yep, it's a lot of packages under the hood of my set up.
This networking calls you seen is related to my config only, not to
req-package.
I have some code, which randomly select new theme from my favourite ones.
Each time you started emacs, new theme was downloaded.
Also configuration located in init-real is only my own thing you don't need
to do.
I was trying to fix some stuff I even don't remember which.
I got this advice at http://emacswiki.org/emacs/ELPA.
Edward
On Sun, Aug 16, 2015 at 4:10 PM Rusi <rustompmody@gmail.com> wrote:
> On Sunday, August 16, 2015 at 4:03:05 PM UTC+5:30, Edward Knyshov wrote:
> > Rusi, if I correctly understood your request, I think you already have
> this
> > functionality in req-package.
> > Req-package will do network downloads only in cases when package is now
> > available offline on your loadpath,
> > so it wil run correctly in offline, after you run it once with network
> > connection.
> > One thing I don't understand is why you need to avoid dependency
> management
> > in normal mode?
> > It runs offline and your config will be completely non-working if we
> start
> > to run without dependency related reordering.
> >
> > Edward.
>
> Ok I guess I am confusing something or other
> I tried your emacsconfig from github.
> First time it took some 15 minutes to download all the packages (near 60M).
> Ok... One time downloads are fine
>
> But thereafter I remember seeing network like calls every time I start
> emacs
> Switched back to my init
> Now I again switch to yours and I dont see them...
> So as I said must be confusing something...
>
> So in general is that if we switch to req-package, all that was originally
> going into init.el now has to go into the init-real which is on the
> after-init-hook?
>
> Then what is run-emacs.el for?
> Its all rather confusing...
>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
[not found] ` <mailman.8416.1439731716.904.help-gnu-emacs@gnu.org>
@ 2015-08-17 1:11 ` Rusi
0 siblings, 0 replies; 39+ messages in thread
From: Rusi @ 2015-08-17 1:11 UTC (permalink / raw)
To: help-gnu-emacs
On Sunday, August 16, 2015 at 6:58:38 PM UTC+5:30, Edward Knyshov wrote:
> Yep, it's a lot of packages under the hood of my set up.
> This networking calls you seen is related to my config only, not to
> req-package.
> I have some code, which randomly select new theme from my favourite ones.
> Each time you started emacs, new theme was downloaded.
>
> Also configuration located in init-real is only my own thing you don't need
> to do.
> I was trying to fix some stuff I even don't remember which.
> I got this advice at http://emacswiki.org/emacs/ELPA.
In which case we are back to where we (I) started with req-package
-- my bug-report https://github.com/edvorg/req-package/issues/16
which refers to the earlier issue that requests recipes for using req-package:
-- https://github.com/edvorg/req-package/issues/14
JFTR I reached req-package looking for recipes for using use-package
And I am fairly certain many hundreds of users old and new will migrate
away from the clunky eval-after-load... add-hook... mess-mode as soon as we are able
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: req-package
2015-08-16 9:38 ` req-package Edward Knyshov
@ 2015-08-17 16:42 ` John Wiegley
0 siblings, 0 replies; 39+ messages in thread
From: John Wiegley @ 2015-08-17 16:42 UTC (permalink / raw)
To: help-gnu-emacs
>>>>> Edward Knyshov <edvorg@gmail.com> writes:
> First thing we need to figure out is does use-package provide flexible
> enough api to implement req-package as new use-package keyword.
> Currently it works by calling (use-package ...) forms when corresponding
> are packages a ready to configure.
>
> We need a full control over packages loading flow, because we need to
> rearrange some stuff to get all this dance work.
So, use-package just expands a macro into code, and you can replace every
single keyword handler if you wish. So given that the use-package macro could
just turn into a req-package invocation, you should have complete freedom to
do whatever it is that you need.
John
^ permalink raw reply [flat|nested] 39+ messages in thread
end of thread, other threads:[~2015-08-17 16:42 UTC | newest]
Thread overview: 39+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-08-11 7:10 req-package Edward Knyshov
2015-08-11 15:26 ` req-package Stefan Monnier
2015-08-13 12:10 ` req-package Edward Knyshov
2015-08-13 13:44 ` req-package Alexander Shukaev
2015-08-13 14:06 ` req-package Edward Knyshov
2015-08-13 14:59 ` req-package Alexander Shukaev
2015-08-13 20:43 ` req-package Edward Knyshov
[not found] ` <mailman.8283.1439498644.904.help-gnu-emacs@gnu.org>
2015-08-13 21:22 ` req-package Stefan Monnier
2015-08-14 5:14 ` req-package Edward Knyshov
2015-08-14 5:18 ` req-package Edward Knyshov
[not found] ` <mailman.8308.1439529283.904.help-gnu-emacs@gnu.org>
2015-08-14 14:07 ` req-package Stefan Monnier
2015-08-14 14:40 ` req-package Alexander Shukaev
2015-08-14 14:54 ` req-package Edward Knyshov
2015-08-14 15:02 ` req-package Alexander Shukaev
2015-08-15 8:46 ` req-package John Wiegley
2015-08-15 19:25 ` req-package Alexander Shukaev
2015-08-15 22:17 ` req-package John Wiegley
2015-08-16 8:51 ` req-package Les Harris
[not found] ` <mailman.8410.1439715098.904.help-gnu-emacs@gnu.org>
2015-08-16 9:05 ` req-package Rusi
2015-08-16 9:38 ` req-package Edward Knyshov
2015-08-17 16:42 ` req-package John Wiegley
[not found] ` <mailman.8411.1439717896.904.help-gnu-emacs@gnu.org>
2015-08-16 10:02 ` req-package Rusi
2015-08-16 10:17 ` req-package Edward Knyshov
2015-08-16 10:17 ` req-package Rusi
2015-08-16 10:32 ` req-package Edward Knyshov
[not found] ` <mailman.8413.1439721183.904.help-gnu-emacs@gnu.org>
2015-08-16 13:07 ` req-package Rusi
2015-08-16 13:28 ` req-package Edward Knyshov
[not found] ` <mailman.8416.1439731716.904.help-gnu-emacs@gnu.org>
2015-08-17 1:11 ` req-package Rusi
[not found] ` <mailman.8327.1439563225.904.help-gnu-emacs@gnu.org>
2015-08-14 16:58 ` req-package Stefan Monnier
2015-08-14 17:53 ` req-package Alexander Shukaev
2015-08-13 15:29 ` req-package Stefan Monnier
2015-08-13 15:50 ` req-package Alexander Shukaev
[not found] ` <mailman.8262.1439481023.904.help-gnu-emacs@gnu.org>
2015-08-13 15:56 ` req-package Stefan Monnier
2015-08-13 16:14 ` req-package Alexander Shukaev
[not found] ` <mailman.8266.1439482490.904.help-gnu-emacs@gnu.org>
2015-08-13 16:23 ` req-package Stefan Monnier
2015-08-13 16:37 ` req-package Alexander Shukaev
2015-08-13 20:27 ` req-package Edward Knyshov
2015-08-13 20:30 ` req-package Edward Knyshov
[not found] ` <mailman.8267.1439483837.904.help-gnu-emacs@gnu.org>
2015-08-13 20:17 ` req-package Stefan Monnier
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.