Substitua as instruções requeridas pelo carregamento automático no arquivo .emacs para melhorar o desempenho


8

De acordo com esses posts:

pode-se, de alguma forma, substituir requiree loadinstruções no .emacsarquivo 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 o seguinte requiree as loadinstruções:

(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 alarme linkedexistem arquivos correspondentes em um diretório chamado .emacsaddons, pois nxhtmlhá um diretório, para os outros não há arquivos correspondentes .emacsaddons. Eu não incluir todos requireou loaddeclarações do meu .emacsarquivo no exemplo acima, apenas alguns onde eu sinto que os passos para substituí-los por autoloaddiferem entre eles (por exemplo, porque alguns têm elarquivos unter .emacsaddonse alguns não faz, ou porque nxhtmlé um subdir de .emacsaddons...).

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

Respostas:


4

Como primeiro passo para o carregamento automático, sugiro que você converta seus loadcomandos explícitos com caminhos anexados à lista de itens 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 chamar outras coisas que dependem do carregamento de outros arquivos para que sejam encontrados.

Especificamente para adiar o carregamento de arquivos, para cada um (require 'foo)que você possui .emacs, você deve substituí-lo por algo semelhante a:

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

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

No meu caso, tenho essas declarações próximas ao final do meu .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)

mas algumas das declarações que eu tinha requireantes de passar para o carregamento automático eram:

(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 economizará algum tempo se você invocar o emacs com frequência.


1

A melhor maneira que eu encontrei para iniciar o emacs rapidamente é daemonize o processo. Essas instruções pertencem ao emacs23. As versões anteriores têm capacidade para servidor / cliente, mas pode ser mais difícil de configurar. Quando eu entro na minha área de trabalho, eu executo emacs --daemon. Depois disso, toda vez que eu preciso do emacs eu executo emacsclient -c filenamee ele aparece instantaneamente. Ao usar o emacs no modo servidor / cliente, você precisa interromper o hábito de usar C-x C-cpara sair, digitando C-x #. FWIW, isso é algo que o emacs23 parece consertar, pois às vezes me pego digitando C-x C-csem interromper o processo do servidor, mas ainda assim mantenho meus velhos hábitos.

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.