Vários pacotes de cursores fazem o emacs rodar devagar

9

Estou usando o pacote Multiple Cursors em um arquivo html e é incrível para alguns cursores, mas se eu criar mais de 30 ou 50 cursores, fica muito lento e leva cerca de cinco ou seis segundos apenas para mover os cursores.
Estou usando errado ou apenas porque não está preparado para criar tantos cursores?

Fabman
fonte
2
Depende do que está acontecendo no buffer - alguns buffers são apenas mais difíceis para os cursores múltiplos da Magnar. Às vezes, posso ter algumas centenas sem uma desaceleração significativa e outras, algumas (digamos wdired-mode), causam desaceleração. Há uma solicitação de recurso aberto - debbugs.gnu.org/cgi/bugreport.cgi?bug=22873 - para mover vários recursos do cursor para o código fonte C, mas ainda é uma discussão em andamento no momento. Um dos meus pontos de venda propostos para a equipe de desenvolvimento do Emacs era um aumento potencial de velocidade se fosse inserido na base de código C.
lawlist
3
Não tenho uma solução, mas queria confirmar a mesma lentidão para mim também. Eu não ficaria surpreso se o problema fosse relacionado a problemas de bloqueio de fonte. Quando desativo o bloqueio de fonte globalmente, os cursores ficam instáveis ​​novamente.
Emacs usuário
11
... nesse caso, vários cursores não causariam as lentidões diretamente (mesmo que a lentidão se mostre um fator quando você a estiver usando). Eu faria M-x profiler-starte faria um monte de coisas lentas e depois M-x profiler-reportcontinuaria pesquisando os itens, ocupando a maior parte do tempo da CPU até que você possa isolá-lo em alguma biblioteca específica (se houver); tente desativar essa biblioteca. Não se esqueça de interromper o criador de perfil quando terminar.
phils

Respostas:

5

Uma lista de modos secundários que não funcionam bem com o modo de cursores múltiplos pode ser definida via mc/unsupported-minor-modes. Todos os modos adicionados a esta lista serão desativados ao entrar no modo de múltiplos cursores; eles serão reativados assim que você sair do modo de múltiplos cursores.

Você pode adicionar um item a esta lista assim

(add-to-list 'mc/unsupported-minor-modes 'flyspell-mode)

Isso faz uma grande diferença na capacidade de resposta do modo de múltiplos cursores. Eu descobri que os dois modos menores que tiveram o maior impacto foram o modo linum e o flyspell.

Charles Ritchie
fonte
Se alguém puder tentar explicar por que o flyspell torna as coisas mais lentas (ou fornecer uma receita concisa para reproduzir a lentidão com o flyspell), talvez possamos tentar resolver o problema.
21417 Stefan
11
Tentei traçar o perfil da lentidão, mas não consegui encontrar nenhum padrão consistente. Dito isto, a lentidão introduzida pelo flyspell não é tão ruim, o módulo que acho muito pior é o modo linum. Desligar o modo de linum me permitiu ir de 30 cursores de cada vez para mais de 600.
Charles Ritchie
Uma receita reproduzível ajudaria muito.
Stefan
11
Obrigado pela ajuda!. parece que esse era o problema. Modo de recuo-guia e modo Linum, onde os que tenho que desabilitar (desabilitei o recuo-guia e substituí Linum por nlinum). Agora eu sou capaz de ter centenas de cursores sem nenhum atraso.
Fabman
0

... mais de 30 ou 50 cursores, fica terrivelmente lento ....

Aqui está uma solução temporária: ajuste essa variável

mc/max-cursors

para um valor menor que 30 como solução alternativa. O padrão é nulo, o que significa sem limite. O número real para restaurar a velocidade depende do tipo de buffer, das fontes usadas e de qualquer outra coisa em execução no momento. De qualquer forma, o problema que você está tendo foi amplamente divulgado.

Usuário Emacs
fonte