Substituir requerer instruções por autoload no arquivo .emacs para melhorar o desempenho

8

De acordo com essas postagens:

pode-se substituir as instruções require e load no arquivo .emacs para acelerar o início do emacs. No entanto, não sei como fazer isso em detalhes.

Por exemplo, eu tenho (entre outras coisas) no meu arquivo .emacs as seguintes declarações require e load :

(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")
...

Para alarm e linked há arquivos correspondentes em um diretório chamado .emacsaddons , para nxhtml há um diretório, para os outros não há arquivos correspondentes em .emacsaddons . Eu não incluí todas as declarações require ou load do meu arquivo .emacs no exemplo acima, apenas algumas onde eu sinto que as etapas para substituí-las com autoload serão diferentes entre elas (por exemplo, porque algumas tem el arquivos unter .emacsaddons e alguns não, ou porque nxhtml é um subdiretório de .emacsaddons ...).

Como estão as etapas detalhadas para substituir tudo pela funcionalidade autoload para melhorar o desempenho?

    
por student 08.08.2012 / 17:47

2 respostas

4

Como primeiro passo para o carregamento automático, sugiro que você converta seu comandos load explícitos com caminhos acrescentados à lista de coisas que O emacs deve carregar, como em:

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

Com isso na parte superior do seu .emacs , você pode ligar para outras coisas que dependem ao carregar outros arquivos para que eles sejam encontrados.

Especificamente para adiar o carregamento de arquivos, para cada (require 'foo) que você tem em seu .emacs , você deve substituir isso por algo similar para:

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

Você pode ter que experimentar (talvez ler) o código para o respectivo .el arquivo para ver qual é o nome que você precisa colocar no lugar de %código%. Os mais comuns são 'name-of-foo-mode ou 'foo , mas há é inconsistência.

No meu caso, tenho estas declarações perto do final do meu 'foo-mode :

(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)

mas algumas das declarações que tive de .emacs antes de me mudar para autoloading foram:

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

Então, como eu disse, você pode ter que fazer alguma experimentação ou leitura de código, mas, no final, vale a pena, pois você economizará algum tempo se invocar emacs freqüentemente.

    
por 10.11.2012 / 16:28
1

A melhor maneira que encontrei para obter o emacs começou rapidamente é para daemonizar o processo. Estas instruções pertencem ao emacs23. As versões anteriores têm capacidade servidor / cliente, mas pode ser mais difícil de configurar. Quando eu fizer login pela primeira vez na minha área de trabalho, executo emacs --daemon . Depois disso, toda vez que eu precisar do emacs eu executo emacsclient -c filename e ele aparece instantaneamente. Ao usar o emacs no modo servidor / cliente, você precisa quebrar o hábito de usar C-x C-c para sair, em vez de digitar C-x # . FWIW, isso é algo que o emacs23 parece consertar, já que ocasionalmente me peguei digitando C-x C-c sem matar o processo do servidor, mas ainda mantenho meus velhos hábitos.

Dependendo dos seus requisitos, isso pode funcionar melhor do que manipular sua configuração para pouco ganho.

    
por 16.01.2013 / 10:31