[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: How to Reduce Emacs Load Time
Re: How to Reduce Emacs Load Time
Sun, 31 Aug 2008 10:39:27 -0700 (PDT)
On Aug 31, 4:26 am, Nikolaj Schumacher <address@hidden> wrote:
> address@hidden (Pascal J. Bourguignon) wrote:
> Another tip:
> Use `eval-after-load' a lot. With that you can load minor modes and
> configurations only when a specific major mode has been (auto-)loaded.
> I use this to load cedet only when cc-mode is loaded, for example.
Haha! I see others have mentioned cedet, too. That's the package
that's causing me the most pain. See, I just followed .emacs setup
instructions, and I went with the whole kit and kaboodle by using the
load-excessive-helper-functions or whatever. My .emacs looks like:
My .emacs has:
So, when Emacs starts up, the relevant sections of *messages* looks
"/Users/formido/.emacs.d/lisp/cedet-1.0pre4/common/" added to `load-
"/Users/formido/.emacs.d/lisp/cedet-1.0pre4/cogre" added to `load-
"/Users/formido/.emacs.d/lisp/cedet-1.0pre4/ede" added to `load-path'
"/Users/formido/.emacs.d/lisp/cedet-1.0pre4/eieio" added to `load-
"/Users/formido/.emacs.d/lisp/cedet-1.0pre4/semantic" added to `load-
"/Users/formido/.emacs.d/lisp/cedet-1.0pre4/speedbar" added to `load-
"/Users/formido/.emacs.d/lisp/cedet-1.0pre4/contrib" added to `load-
Setting up cedet...done
Setting up cogre...done
Setting up ede...
Setting up ede...done
Setting up eieio...done
Setting up semantic...done
Setting up speedbar...done
Setting up cedet-contrib...done
WARNING: Probable vocabulary misuse ahead...
I could set cedet to load when a feature I know about is activated,
like cc-mode, but I'm worried that with all that going on above, all
sorts of features and hooks are being set up that I'll then never find
out about. I would have thought that they'd just set up hooks to
autoload functions as necessary. Is all the above necessary just for
> > - don't load what you need, yet. This means, instead of loading or
> > requiring the packages you may need, define autoloading functions.
> > Good packages will do that for you, when you require them, they load
> > only a file which defines autoloading functions, so you spend time
> > loading the package only when you try to run these functions.
> I don't think /good/ packages do that, just /huge/ packages.
> IHMO the proper thing for packages to do is just add ;;;###autoload
> markers, so /you/ can generate the autoloads automatically, if you want
> them (using `update-directory-autoloads').
> Package managers like ELPA will do that step automatically when the
> package is updated.
> I actually find it annoying if packages have their own autoloading,
> because I need to exclude them specifically. Pretty much every other
> package I can autoload automatically with something like this: (My
> actual code is more complicated, so this is just a prototype...)
> (defun update-autoloads ()
> (dolist (file (directory-files package-dir t "[^.]" t))
> (when (file-directory-p file)
> (add-to-list 'loaddef-dirs file)))
> (add-to-list 'loaddef-dirs package-dir)
> (let ((generated-autoload-file autoload-file))
> (apply 'update-directory-autoloads loaddef-dirs)))
> and then just
> (ignore-errors (load autoload-file))
My elisp-foo is still weak: if I understand right, this function only
works if the packages have been tagged with appropriate metadata,
i.e., autoload markers?
> I only need to define manual autoloads for three packages or so...
> Nikolaj Schumacher