Le package de curseurs multiples ralentit l'exécution d'emacs

9

J'utilise le package Multiple Cursors dans un fichier html et c'est génial pour quelques curseurs, mais si je crée plus de 30 ou 50 curseurs, cela devient terriblement lent et il faut environ cinq ou six secondes pour déplacer les curseurs.
Est-ce que je l'utilise mal ou simplement qu'il n'est pas préparé pour créer autant de curseurs?.

Fabman
la source
2
Cela dépend de ce qui se passe dans le tampon - certains tampons sont juste plus difficiles pour les curseurs multiples de Magnar. Parfois, je peux en avoir quelques centaines sans ralentissement significatif, et parfois quelques-unes (disons wdired-mode) provoquent un ralentissement. Il existe une demande de fonctionnalité ouverte - debbugs.gnu.org/cgi/bugreport.cgi?bug=22873 - pour déplacer plusieurs capacités de curseur dans le code source C, mais c'est toujours une discussion en cours pour le moment. L'un de mes arguments de vente proposés à l'équipe de développement d'Emacs était une augmentation potentielle de la vitesse si elle était intégrée dans la base de code C.
lawlist
3
Je n'ai pas de solution mais je voulais aussi confirmer la même lenteur. Je ne serais pas surpris si le problème était dû à des problèmes de verrouillage des polices. Lorsque je désactive le verrouillage des polices à l'échelle mondiale, les curseurs redeviennent accrocheurs.
Utilisateur Emacs
1
... auquel cas plusieurs curseurs ne provoqueraient pas directement les ralentissements (même si la lenteur ne s'avère être un facteur que lorsque vous l'utilisez). Je voudrais M-x profiler-startet fais un tas de choses lentes et puis M-x profiler-report, et je continue à explorer les éléments en occupant la majorité du temps CPU jusqu'à ce que vous puissiez l'isoler dans une bibliothèque particulière (le cas échéant); essayez ensuite de désactiver cette bibliothèque. N'oubliez pas d'arrêter le profileur lorsque vous avez terminé.
phils

Réponses:

5

Une liste des modes mineurs qui ne fonctionnent pas bien avec le mode à curseurs multiples peut être définie via mc/unsupported-minor-modes. Tous les modes ajoutés à cette liste seront désactivés lors de l'entrée en mode curseurs multiples, ils seront réactivés une fois que vous aurez abandonné le mode curseurs multiples.

Vous pouvez ajouter un élément à cette liste comme ceci

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

Cela fait une grande différence dans la réactivité du mode à curseurs multiples. J'ai trouvé que les deux modes mineurs ayant le plus grand impact étaient le mode linum et le flyspell.

Charles Ritchie
la source
Si quelqu'un pouvait essayer d'expliquer pourquoi flyspell ralentit les choses (ou donner une recette concise pour reproduire la lenteur avec flyspell), nous pourrions peut-être essayer de résoudre le problème.
Stefan
1
J'ai essayé de profiler la lenteur, mais je n'ai pas pu trouver de modèle cohérent. Cela dit, la lenteur introduite par flyspell n'est pas trop mauvaise, le module que je trouve de loin pire est le mode linum. Désactiver le mode linum m'a permis de passer de 30 curseurs à la fois à plus de 600.
Charles Ritchie
Une recette reproductible irait loin.
Stefan
1
Merci pour l'aide!. il semble que c'était le problème. Indent-guide-mode et Linum-mode où ceux que je dois désactiver (j'ai désactivé indent-guide et remplacé Linum par nlinum). Maintenant, je peux avoir des centaines de curseurs sans aucun décalage.
Fabman
0

... plus de 30 ou 50 curseurs ça devient terriblement lent ....

Voici une solution temporaire: ajustez cette variable

mc/max-cursors

à une valeur inférieure à 30 comme solution de contournement. La valeur par défaut est nil, ce qui signifie aucune limite. Le nombre réel pour restaurer la vitesse dépend du type de tampon, des polices utilisées et de tout ce qui est en cours d'exécution à l'époque. Dans tous les cas, le problème que vous rencontrez a été largement signalé.

Utilisateur Emacs
la source