Comment résoudre les problèmes Emacs?

21

Dans une situation où Emacs ne se comporte pas comme je le souhaite, que puis-je faire pour résoudre le problème? Quelles mesures puis-je prendre pour trouver et résoudre le problème moi-même?

Ou, à défaut, comment puis-je recueillir des informations utiles pour que les gens ici (ou sur la liste de diffusion ou d'autres forums) puissent m'aider avec mon problème?

Mon Emacs comprend de nombreux packages, une collection d'extraits copiés et collés (ou tués et extraits) de partout sur Internet, et mon propre elisp personnalisé, dont certains dont je ne me souviens pas avoir écrit ou que je ne comprends plus. Existe-t-il un moyen de donner un sens à toutes ces complications?

Tyler
la source
Je ne sais pas si c'est le meilleur endroit pour cela, mais il y a beaucoup de questions qui demandent des réponses / commentaires emacs -Qdans un premier temps. J'ai écrit ceci comme quelque chose pour lier ces questions à une aide générique pour les nouveaux utilisateurs.
Tyler
Oui, c'est le meilleur endroit pour ça. En fait, une telle question a été suggérée (presque) il y a 2 ans: meta.emacs.stackexchange.com/q/198/184 Merci!
T. Verron

Réponses:

28

Étape 1: courir emacs -Q

La première chose que vous devez faire est d'exécuter emacs sans aucune de vos personnalisations. Si vous pouvez reproduire le problème dans Emacs vanilla, il s'agit peut-être d'un bogue dans Emacs lui-même. C'est rare, mais nous l'excluons dans un premier temps.

Si vous démarrez Emacs à partir de la ligne de commande avec l' -Qindicateur, c'est-à-dire, emacs -Qvous obtiendrez un emacs nu ou 'vanille', sans aucune de vos personnalisations locales chargées. Votre problème persiste-t-il? Si c'est le cas, passez à "Fournir une recette de bogue".

Étape 1b: que faire si le problème concerne un package?

Si votre problème est spécifique à un package particulier, vous ne pouvez évidemment pas le reproduire sans charger ce package. Mais vous ne souhaitez charger que le package concerné, pas la totalité de votre configuration. Pour ce faire, exécutez à emacs -Qnouveau et préparez un court script tel que le suivant:

(require 'package)
(setq package-load-list
      '((package1 t)))
(package-initialize)

Remplacez package1par le nom du package que vous souhaitez charger. Si vous devez charger plusieurs packages, modifiez le script en conséquence:

(require 'package)
(setq package-load-list
      '((package1 t)
        (package2 t)
        (package3 t)))
(package-initialize)

Pour charger ce code, vous pouvez le coller dans le *scratch*tampon et appeler M-x eval-buffer. (ou n'importe quel tampon, tant qu'il ne contient pas d'autre code!).

À ce stade, vous avez chargé le ou les packages et uniquement le ou les packages que vous testez. Si vous pouvez reproduire le problème maintenant, passez à "Fournir une recette de bogue".

Étape 2: trouver un bug dans votre .emacs

Vous avez maintenant confirmé que le problème vient de quelque chose dans votre configuration ("l'appel vient de l'intérieur de la maison!"). Votre configuration peut comprendre plusieurs milliers de lignes et charger de nombreux fichiers différents. Pour trouver le problème, vous effectuerez une recherche binaire, commentant la moitié du code à la fois pour affiner les choses. 1

  1. Ouvrez vos emacs réguliers emacs, sans -Qoption.
  2. Ouvrez votre fichier de configuration (généralement ~/.emacsou .emacs.d/init.el, si vous ne le trouvez pas, essayez C-h v user-init-file)
  3. Sélectionnez la première moitié du fichier: C-spacepour définir la marque, faites défiler à mi-chemin pour étendre la région
  4. Commentez la région sélectionnée: M-;et enregistrez le fichier
  5. Ouvrez un nouveau emacs (votre emacs de test ), en laissant les premiers emacs en cours d'exécution. test emacs lira la version réduite de votre configuration.
  6. Essayez de reproduire le problème dans emacs de test
  7. Si vous ne pouvez pas le reproduire, fermez emacs de test et dans votre emacs d'origine undole commentaire avec C-/, et commentez la moitié du code restant. Ouvrez un nouveau test emacs et réessayez.
  8. Si vous pouvez reproduire le problème, commentez la moitié du code restant et voyez si le problème persiste.
  9. Répétez ce processus jusqu'à ce que vous trouviez le plus petit bit de votre configuration nécessaire pour reproduire le problème.

Si votre problème concerne un package spécifique, vous devrez bien sûr laisser le code qui charge ce package sans commentaire.

Si votre fichier de configuration charge d'autres fichiers, vous pouvez également étendre votre recherche à ces fichiers.

À ce stade, vous avez peut-être constaté que le problème est dû à une ou deux lignes de code. Vous pourrez peut-être même le réparer vous-même. Si oui, félicitations, vous avez appris quelque chose! Sinon, passez à l'étape trois.

Étape 3: Fournir une recette de bogue

À ce stade, vous devriez être en mesure de fournir une recette de bogue détaillée à publier ici. Il devrait comprendre:

  • Votre version d'Emacs (vous pouvez l'obtenir auprès d'Emacs avec M-x emacs-version
  • Votre système d'exploitation (distribution Windows #, Mac, Linux)
  • La version du package avec laquelle vous rencontrez des difficultés, le cas échéant
  • Les étapes spécifiques nécessaires pour démontrer le problème, y compris ce que vous attendez et ce qui se passe réellement .

Par exemple, je pourrais poster une question comme celle-ci:

J'ai un problème avec le super-mode. Lorsque j'utilise M-x sm-compile-code, il effectue un retrait de mon compte PayPal.

Étapes à reproduire:

Charger le super-mode:

(require 'package)
(setq package-load-list
      '((super-mode t)))
(package-initialize)
  • ouvrir un nouveau fichier avec C-x C-f my-code
  • entrez une ligne de code:
10 goto 10
  • appel M-x sm-compile-code

Je m'attends à ce que cela appelle le super-compilateur et compile mon programme. Au lieu de cela, je vois un message dans le mini-tampon "100 $ transférés de paypal à l'auteur en super-mode"

GNU Emacs 25.1.50.3
Debian Linux
Super-mode version 3.1415


1 Le paquet Bug Hunter peut vous aider avec ceci, (semi) bissectant automatiquement votre fichier init.

Tyler
la source
Vous pourriez peut-être mentionner The Bug Hunter .
Omar