unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: phillip.lord@russet.org.uk (Phillip Lord)
To: "João Távora" <joaotavora@gmail.com>
Cc: Pedro Silva <psilva@pedrosilva.pt>, emacs-devel@gnu.org
Subject: Re: use-package.el -> Emacs core
Date: Tue, 10 Nov 2015 12:01:32 +0000	[thread overview]
Message-ID: <87k2pqqd0j.fsf@russet.org.uk> (raw)
In-Reply-To: <m24mguyypd.fsf@gmail.com> ("João Távora"'s message of "Tue, 10 Nov 2015 09:45:50 +0000")

João Távora <joaotavora@gmail.com> writes:

> Pedro Silva <psilva@pedrosilva.pt> writes:
>
>> :ensure (automatic ELPA installation), :defer (lazy loading) and
>> :commands (autoloading) are the things I most use in `use-package'
>> that are not as easy to achieve with `with-eval-after-load'.
>
> Not as easy? Sure, more characters, but basically the same complexity. I
> don't think it's worth a whole new language to be able to replace:
>
>   (package-install 'foo)

> Especially given that the use-package versions force the reader (or the
> grepper) to look around for context, while the regular versions don't.

use-package introduces a single (documented) form. So, it's easy to
re-eval everything, and keeps all your code in one place. Trivial as
this sounds, this is actually pretty useful.

In your examples, you need to "progn" everything to achieve the same.


> But perhaps I'm misinterpreting what these directives actually do, or
> perhaps you can illustrate with some snippets of your own.


What use-package does is syntactic sugar for sure, but it also does add
some nice functionality. So, for example, this

(use-package foo
  :load-path "~/foo"
  :commands foo-a foo-b foo-c
  :defer 5
  )

actually does this...


(progn
  (eval-and-compile
    (push "~/foo" load-path))
  (run-with-idle-timer 5 nil #'require 'foo nil t)
  (unless
      (fboundp 'foo-a)
    (autoload #'foo-a "foo" nil t))
  (unless
      (fboundp 'foo-b)
    (autoload #'foo-b "foo" nil t))
  (unless
      (fboundp 'foo-c)
    (autoload #'foo-c "foo" nil t)))

while the apparently much simpler:

(use-package foo
  :load-path "~/foo"
  )

actually does this:

(progn
  (eval-and-compile
    (push "~/foo" load-path))
  (let
      ((now
        (current-time)))
    (message "%s..." "Loading package foo")
    (prog1
        (if
            (not
             (require 'foo nil 'noerror))
            (ignore
             (message
              (format "Could not load %s" 'foo))))
      (let
          ((elapsed
            (float-time
             (time-subtract
              (current-time)
              now))))
        (if
            (> elapsed 0.1)
            (message "%s...done (%.3fs)" "Loading package foo" elapsed)
          (message "%s...done" "Loading package foo"))))))

A useful system for working out why your .emacs is so slow to load.

*shrugs*. I really like it, and it's made my .emacs cleaner.

Phil



  reply	other threads:[~2015-11-10 12:01 UTC|newest]

Thread overview: 95+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-10  0:02 use-package.el -> Emacs core John Wiegley
2015-11-10  0:14 ` Dmitry Gutov
2015-11-10  0:31   ` John Wiegley
2015-11-10  0:40     ` Dmitry Gutov
2015-11-10  7:55     ` Oleh Krehel
2015-11-10 11:52       ` Juanma Barranquero
2015-11-10 12:10         ` Oleh Krehel
2015-11-10 12:23           ` Juanma Barranquero
2015-11-10 12:40             ` Oleh Krehel
2015-11-10 12:47               ` Juanma Barranquero
2015-11-10 15:15                 ` John Wiegley
2015-11-10 15:42                   ` Juanma Barranquero
2015-11-10 15:56                     ` Dmitry Gutov
2015-11-11  0:37                     ` Stephen Leake
2015-11-11  0:56                       ` Juanma Barranquero
2015-11-10 15:55                   ` João Távora
2015-11-10 16:08                     ` John Wiegley
2015-11-10 16:23                   ` Drew Adams
2015-11-10 14:03               ` David Kastrup
2015-11-10 14:15                 ` Oleh Krehel
2015-11-10 14:22                 ` João Távora
2015-11-10 15:17                   ` John Wiegley
2015-11-10 15:46                     ` João Távora
2015-11-10 18:15                       ` John Wiegley
2015-11-10 19:32                         ` João Távora
2015-11-10 19:47                           ` John Wiegley
2015-11-10 21:00                             ` João Távora
2015-11-10 15:56                     ` Kaushal Modi
2015-11-10 18:20                       ` John Wiegley
2015-11-10 18:32                         ` Drew Adams
2015-11-10 18:38                           ` John Wiegley
2015-11-10 18:52                             ` Kaushal Modi
2015-11-10 18:55                               ` John Wiegley
2015-11-10 19:24                             ` Drew Adams
2015-11-10 19:35                               ` John Wiegley
2015-11-10 20:42                                 ` Drew Adams
2015-11-10 12:42             ` Kaushal Modi
2015-11-10 12:46           ` David Kastrup
2015-11-10 13:06             ` Oleh Krehel
2015-11-10 18:15               ` Evgeny Panasyuk
2015-11-10 18:31                 ` Alan Mackenzie
2015-11-10 13:32             ` Wolfgang Jenkner
2015-11-10 15:08               ` Customize is only for newbies? [was: use-package.el -> Emacs core] Drew Adams
2015-11-11  0:01                 ` Wolfgang Jenkner
2015-11-10 14:58           ` Drew Adams
2015-11-10 15:42             ` John Wiegley
2015-11-10  8:49     ` use-package.el -> Emacs core João Távora
2015-11-10  8:57       ` Pedro Silva
2015-11-10  9:45         ` João Távora
2015-11-10 12:01           ` Phillip Lord [this message]
2015-11-10 13:37             ` João Távora
2015-11-10 14:07               ` Oleh Krehel
2015-11-10 14:39               ` Nicolas Richard
2015-11-10 14:48                 ` João Távora
2015-11-10 15:40                   ` John Wiegley
2015-11-12 12:43                   ` Nicolas Richard
2015-11-10 17:36               ` Phillip Lord
2015-11-10  0:44 ` Artur Malabarba
2015-11-10  1:05   ` John Wiegley
2015-11-10  1:24     ` Artur Malabarba
2015-11-10  1:37       ` John Wiegley
2015-11-10  3:20         ` Artur Malabarba
2015-11-10  5:37           ` Kaushal Modi
2015-11-10  6:07             ` John Wiegley
2015-11-10 23:27             ` Stephen Leake
2015-11-10 23:32               ` John Wiegley
2015-11-11  9:29                 ` Oleh Krehel
2015-11-11 16:48                   ` John Wiegley
2015-11-11 20:04                     ` Kaushal Modi
2015-11-11 20:10                       ` John Wiegley
2015-11-12  2:11                       ` Copyright assignments in Gnu Elpa (was: use-package.el -> Emacs core) Michael Heerdegen
2015-11-12  2:19                         ` Copyright assignments in Gnu Elpa John Wiegley
2015-11-12  3:50                         ` Artur Malabarba
2015-11-12 22:31                         ` Copyright assignments in Gnu Elpa (was: use-package.el -> Emacs core) Richard Stallman
2015-11-15 14:51                           ` Copyright assignments in Gnu Elpa Andreas Röhler
2015-11-16 19:30                             ` Richard Stallman
2015-11-10  1:37 ` use-package.el -> Emacs core Ted Zlatanov
2015-11-10  8:24 ` joakim
2015-11-11  0:29   ` Stephen Leake
2015-11-11  0:45     ` Dmitry Gutov
2015-11-11  9:30       ` Stephen Leake
2015-11-11 10:04         ` Xue Fuqiao
2015-11-11 10:20         ` Artur Malabarba
2015-11-10  8:44 ` Andreas Röhler
2015-11-10  9:29 ` Nicolas Petton
2015-11-11  0:32   ` Stephen Leake
2015-11-11  0:37     ` John Wiegley
2015-11-10 18:21 ` Stephen Leake
2015-11-10 18:34   ` John Wiegley
2015-11-10 19:54     ` Dmitry Gutov
2015-11-10 20:09       ` Kaushal Modi
2015-11-10 20:27         ` John Wiegley
2015-11-11  0:04     ` Stephen Leake
  -- strict thread matches above, loose matches on Subject: below --
2017-02-15 19:49 Toon Claes
2017-02-15 19:51 ` John Wiegley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87k2pqqd0j.fsf@russet.org.uk \
    --to=phillip.lord@russet.org.uk \
    --cc=emacs-devel@gnu.org \
    --cc=joaotavora@gmail.com \
    --cc=psilva@pedrosilva.pt \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).