all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: David Masterson <dsmasterson@gmail.com>
To: help-gnu-emacs@gnu.org
Subject: Re: Emacs Package Loading & .emacs ??
Date: Mon, 31 Mar 2014 16:43:06 -0700	[thread overview]
Message-ID: <86r45ikk8l.fsf@gmail.com> (raw)
In-Reply-To: mailman.18607.1396286371.10748.help-gnu-emacs@gnu.org

W. Greenhouse <wgreenhouse@riseup.net> writes:

> David Masterson <dsmasterson@gmail.com> writes:
>
>> Can someone explain the package loading process?  In particular, I get
>> the sense that the new package is added to the load-path *after* my
>> .emacs is loaded.
>
> Exactly right. (info "(elisp) Startup Summary") details the whole init
> process. In particular, note:
>
>  12. It loads your init file (*note Init File::).  This is not done if
>      the options `-q', `-Q', or `--batch' were specified.  If the `-u'
>      option was specified, Emacs looks for the init file in that user's
>      home directory instead.
>
>      ...
>      
>  15. If `package-enable-at-startup' is non-`nil', it calls the function
>      `package-initialize' to activate any optional Emacs Lisp package
>      that has been installed.  *Note Packaging Basics::.
>
> Note that `package-initialize' doesn't actually "load" packages either.
> What it does is populate `load-path' with the locations of package
> libraries, and scan the packages for autoloads. The package normally
> doesn't get loaded at all until one of these autoloads is triggered.

Something is not right here.  I have done a package install on Org
(8.2.5h), but, if I blank out my .emacs, then org-version is set to
7.9.3f.

>> If that is true, what is the proper way to make use of the new package
>> as adding (require 'org) to my .emacs will pick up the original Org
>> and not the installed package? Should I physically delete the original
>> Org module that came with Emacs?
>
> No, don't attempt to delete stuff that came with Emacs.
>
> 1. You probably don't need to use (require 'org) at all. The idea of
>    packages is that autoloads will be set up so that when you call one
>    of the main entry points of a package (e.g. `org-mode', `org-agenda',
>    `org-capture', etc.), the package will load the correct version.
>    Explicitly requiring or loading the library before the package is
>    loaded will foul this up. You can set package-related variables and
>    even add to hooks before they are defined by the library, so (require
>    'org) doesn't actually do much that is useful but take up time during
>    init. Customize also does the right thing automatically, in that
>    setting package settings through Customize won't accidentally load
>    the built-in version of the package.

As mentioned above, if I don't (require 'org) at the right time, then
the wrong version of org is loaded.  Since org-version is already
defined, then that means that Org has already been loaded and, so, there
is no need to reload it.  The only problem is that it is that wrong one.

> 2. The correct form would be (require 'org-install) anyway, if you were
>    manually loading org.
>
> 3. If you decide for some reason that you really do need to use
>    (require 'org-install), you should do this from `after-init-hook'
>    (which is run at step 17 of (info "(elisp) Startup Summary"), well
>    after package init), OR you can explicitly (package-initialize) early
>    in init and (setq package-enable-at-startup nil) to skip step 15.
>    above. (info "(emacs) Package Installation") details some of the
>    pros and cons of each approach.

Hmmm.  I'll have to recheck that.  This goes against the standard way of
loading Emacs libraries that I've been using for 20+ years! Never needed
to use after-init-hook before. It's so hard to teach an old dog new
tricks...

-- 
David Masterson


  parent reply	other threads:[~2014-03-31 23:43 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-31  4:49 Emacs Package Loading & .emacs ?? David Masterson
2014-03-31  7:43 ` Martin
2014-03-31 17:18 ` W. Greenhouse
2014-04-01 11:49   ` Alan Schmitt
2014-04-01 14:44     ` W. Greenhouse
     [not found] ` <mailman.18607.1396286371.10748.help-gnu-emacs@gnu.org>
2014-03-31 23:43   ` David Masterson [this message]
2014-03-31 23:51     ` David Masterson
2014-04-01  1:38       ` Rusi
2014-04-01 14:42     ` W. Greenhouse

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

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

  git send-email \
    --in-reply-to=86r45ikk8l.fsf@gmail.com \
    --to=dsmasterson@gmail.com \
    --cc=help-gnu-emacs@gnu.org \
    /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 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.