12
votes

Faire des noms de fichiers / numéros de ligne liés à Emacs Gud tampon

Je couronne PDB sur mes tests en Python à travers le tampon GUD. Lorsque je reçois une stacktrace / échec de mon témoignage, il ressemble à ceci:

File "test/testfoo.py", line 499, in test_foo_function


2 commentaires

ce serait assez cool. Je suis curieux d'en savoir plus sur votre configuration pour avoir exécuté des tests dans le tampon GUD. désolé je ne peux pas répondre à votre question cependant


J'ai un post sur mon blog concernant mon ancienne configuration ( panela.blog-city.com/python_and_emacs_5_pdb_and_emacs .htm ). Je suis actuellement en mode Shell-mode / Python-Mode (version Python.org non Version EMACS) et pdbtrack


3 Réponses :


2
votes

Je pense que ce que vous voulez personnaliser est compilation-parse-erreurs-fileName-fonction , qui est une fonction qui prend un nom de fichier et renvoie une version modifiée du nom de fichier à afficher. Il s'agit d'une variable locale tampon, vous devez donc la définir dans chaque tampon qui affichera des erreurs Python (il y a probablement un crochet approprié à utiliser, je n'ai pas de mode python installé, donc je ne peux pas le chercher). Vous utiliseriez Property pour renvoyer une version du nom de fichier d'entrée qui agit comme un lien hypertexte pour charger le fichier réel. la possession est bien documentée dans le manuel ELISP.

Si compilation-parse-erreurs-Errors-fileName-Fonction ne s'appelle pas, vous souhaitez ajouter une liste à Compilation-Error-Regexp-Alist-Alist


0 commentaires

0
votes

Ajout à la réponse de Justin:

J'ai ce qui suit dans ma configuration Slime, qui est censé passer à un fichier et la ligne d'une trace de pile de clojure.

Malheureusement, je dois admettre que cela ne doit pas t Travaille effectivement pour moi pour le moment - la fonction ne peut pas trouver le fichier correct - mais aussi loin que possible, cela devrait être résolu en modifiant comment racine de projet est défini ou par Changer la structure de mes projets sur le système de fichiers (je n'ai tout simplement pas eu le temps ni l'envie de m'en examiner).

Cela évoque un bon point, dans la plupart des functinalités comme celle-ci, c'est un peu Difficile de comprendre la racine du projet de manière générique et portable. Dans ce cas, nous nous appuyons sur un répertoire src , mais ce n'est probablement pas approprié pour vos projets Python.

SUIS SUIVANT D'où Justin est parti, vous devriez être capable de prendre des Conseils de la fonction ci-dessous et analysez le nom de fichier et les numéros de ligne à partir de l'erreur de test de test, créez un lien vers le numéro de ligne et utilisez la fonction Compilation-parse-erreurs-fileName-fonction-fonction et et Propriété Pour faire la ligne dans le GUD Buffer un lien.

Si vous le faites fonctionner, veuillez ajouter une réponse à votre propre question. Je pense que beaucoup de gens le trouveraient utile. xxx

Je devrais également mentionner que j'ai copié cette fonction de quelque part sur le Web, mais je ne me souviens pas de l'URL. Il semble que ce soit de l'excellent kit de démarreur d'emacs de Phil Hagelberg (TechnoMancy).


0 commentaires

5
votes

Grâce à un indice de Gerard B, je l'ai compris. Je le fais de PDBTrack (Shell) au lieu de PURE PDB, mais cela devrait fonctionner dans les deux je crois. Vous devez activer la compilation-shell-mode mineur. Et avoir le code suivant dans votre fichier .emacs: xxx

alors vous pouvez utiliser la navigation de mode compile standard sur Zip via la trace de la pile d'erreur.


3 commentaires

Notez que cela fonctionne lorsque le fichier / tampon est ouvert d'abord. Au fil du temps, il semble y avoir une "dérive" (c'est-à-dire que le curseur apparaît certaines lignes après la ligne réelle)


Merci! Mais je remarque que lorsque les lignes situées au sommet d'une traçabilité longue sont cliquées, les lignes plus loin ne sont pas.


Je n'ai pas eu le temps de disséquer le code pour comprendre pourquoi il "dérive". Désactiver et réactiver compilation-shell-mode-mode semble corriger la dérive, cependant.