Méthodes d'examen des objets lisp volumineux / compliqués

12

J'ai travaillé avec un code de moteur d'exportation d'organisation qui transmet certains objets de liste plutôt grands et complexes. Il est plutôt fastidieux d'explorer un objet en lisant une longue représentation imprimée enveloppée d'un mot d'un objet ou en écrivant et en évaluant de manière itérative les accesseurs dans le tampon de travail. Je me demande s'il existe de bonnes méthodes pour examiner les valeurs de manière interactive.

Prenons par exemple: de nombreux IDE qui présentent des valeurs d'objet dans une arborescence interactive qui permet d'étendre de manière incrémentielle des clés / valeurs. L'objet est affiché de façon persistante à l'écran et peut être examiné sans trop se soucier des types de valeur affichés. Une capture d'écran aléatoire des outils de développement Chrome comme illustration:

Vue d'objet des outils de développement Chrome

D'autres outils présentent des valeurs comme des popovers navigables (fonctionnellement très similaires). Une capture d'écran aléatoire de Visual Studio:

Datatip Visual Studio

Existe-t-il quelque chose de similaire pour Emacs Lisp? Peut-être quelque chose intégré à edebug ou fourni par un autre package? Ou est-ce juste en attente d'être développé?

Remarque: J'ai découvert pp et pp + peu de temps après avoir posté cette question. Le formatage est incroyablement utile pour naviguer visuellement dans la structure des objets. Il évite d'avoir à modifier print-lengthet print-depthà des valeurs extrêmes et de formater la sortie dans un tampon séparé.

ebpa
la source
Peut-être que la bibliothèque hide-show.elaide à cet égard.
Drew
3
@ebpa Si ppet pp+faites ce que vous voulez, vous pouvez l'ajouter comme votre propre solution et la marquer comme réponse dans quelques jours.
Kaushal Modi
@Drew J'ai fourni une réponse avec la solution basée sur pp +. Je n'en suis cependant pas entièrement satisfait. Je mettrai à jour ma réponse lorsque je publierai une meilleure alternative.
ebpa

Réponses:

0

J'ai trouvé que la fonction pp-eval-last-sexp-with-tooltipdans le pp+package est une excellente solution polyvalente pour cela. Il est en fait identique à eval-last-sexp, mais formate proprement la valeur de retour et l'affiche sous forme d'infobulle. Les valeurs supérieures à pp-max-tooltip-size( x-max-tooltip-size) sont affichées dans une fenêtre séparée.

Je le dois pour C-x C-ele moment:

(require 'pp+)
(define-key global-map (kbd "C-x C-e") #'pp-eval-last-sexp-with-tooltip)
ebpa
la source