Remplacez les instructions require par le chargement automatique dans le fichier .emacs pour améliorer les performances

8

Selon ces articles:

on peut en quelque sorte remplacer requireet les loadinstructions du .emacsfichier pour accélérer le démarrage d'emacs. Cependant, je ne sais pas comment procéder en détail.

Par exemple , j'ai (entre autres) dans mon .emacs déposer les documents suivants requireet loaddéclarations:

(load "auctex.el" nil t t)
(require 'alarm)
(require 'linked)
(load "nxhtml/autostart.el")
(require 'autoinsert)
(require 'recentf)
(require 'color-theme)
(load "~/.emacsaddons/emacs-color-theme-solarized/color-theme-solarized")
...

Pour alarmet linkedil y a des fichiers correspondants dans un répertoire appelé .emacsaddons, car nxhtmlil y a un répertoire, pour les autres il n'y a pas de fichiers correspondants dans .emacsaddons. Je ne mentionnaient pas tous requireou des loaddéclarations de mon .emacsdossier dans l'exemple ci - dessus, quelques - uns où je me sens que les mesures pour les remplacer par autoloaddifféreront entre eux (par exemple parce que certains ont des elfichiers unter .emacsaddonset certains ne fonctionne pas, ou parce nxhtmlest - un sous-répertoire de .emacsaddons...).

Comment sont les étapes détaillées pour tout remplacer par des autoloadfonctionnalités pour améliorer les performances?

étudiant
la source

Réponses:

4

Comme première étape vers le chargement automatique, je suggère que vous convertissiez vos loadcommandes explicites avec des chemins ajoutés à la liste des choses que emacs devrait charger, comme dans:

(add-to-list 'load-path (expand-file-name "~/.emacs.d/"))

Avec cela en haut de votre .emacs, vous pouvez appeler d'autres choses qui dépendent du chargement d'autres fichiers afin qu'ils soient trouvés.

Spécifiquement pour reporter le chargement des fichiers, pour chacun (require 'foo)que vous avez dans votre .emacs, vous devez le remplacer par quelque chose de similaire à:

(autoload 'name-of-foo-mode "code-for-foo.el" "Minor/Major mode for foo" t)

Vous devrez peut-être expérimenter (peut-être lire) le code du .el fichier respectif pour voir quel est le nom que vous devez mettre à la place 'name-of-foo-mode. Les plus courants sont 'fooou 'foo-mode, mais il y a incohérence.

Dans mon cas, j'ai ces déclarations près du bas de mon .emacs:

(autoload 'textmate-mode "textmate" "Minor mode for automatic bracket pairs" t)
(autoload 'post-mode "post" "Mode for editing e-mails" t)
(autoload 'turn-on-reftex "reftex" "Minor mode for references in TeX files" t)
(autoload 'mode-compile "mode-compile" "Compile current buffer" t)
(autoload 'markdown-mode "markdown-mode" "Major mode for Markdown files" t)

mais certaines des déclarations que je devais faire requireavant de passer au chargement automatique étaient:

(require 'reftex)
(require 'post)
(require 'compile)
(require 'textmate)

Donc, comme je l'ai dit, vous devrez peut-être faire de l'expérimentation ou de la lecture de code, mais, en fin de compte, cela en vaut la peine, car cela vous fera gagner du temps si vous appelez fréquemment emacs.

rbrito
la source
1

Le meilleur moyen que j'ai trouvé pour démarrer rapidement emacs est de démonifier le processus. Ces instructions concernent emacs23. Les versions antérieures ont la capacité de serveur / client, mais il peut être plus difficile à configurer. Lorsque je me connecte pour la première fois à mon bureau, j'exécute emacs --daemon. Après cela, chaque fois que j'ai besoin d'emacs, j'exécute emacsclient -c filenameet il apparaît instantanément. Lorsque vous utilisez emacs en mode serveur / client, vous devez rompre avec l'habitude d'utiliser C-x C-cpour quitter, au lieu de taper C-x #. FWIW, c'est quelque chose que emacs23 semble résoudre, car je me suis parfois surpris à taper C-x C-csans tuer le processus du serveur, mais je conserve mes anciennes habitudes.

Selon vos besoins, cela peut fonctionner mieux que de manipuler votre configuration pour un gain faible.

umeboshi
la source