Methoden zur Untersuchung großer / komplizierter Lisp-Objekte

12

Ich habe mit einem org-Exportmodul-Code gearbeitet, der einige ziemlich große und komplexe Listenobjekte umgibt. Es ist ziemlich mühsam, ein Objekt zu erkunden, indem Sie eine lange, mit Wörtern umschlossene, gedruckte Darstellung eines Objekts lesen oder iterativ Zugriffsmethoden in den Arbeitspuffer schreiben und auswerten. Ich frage mich, ob es gute Methoden gibt, um Werte interaktiv zu untersuchen.

Ein Beispiel: Viele IDEs präsentieren Objektwerte in einer interaktiven Baumansicht, die es ermöglicht, Schlüssel / Werte schrittweise zu erweitern. Das Objekt wird dauerhaft auf dem Bildschirm angezeigt und kann ohne große Bedenken hinsichtlich der angezeigten Wertetypen untersucht werden. Ein zufälliger Screenshot der Chrome-Entwicklertools zur Veranschaulichung:

Objektansicht der Chrome-Entwicklertools

Andere Werkzeuge präsentieren Werte als navigierbare Popovers (funktionell sehr ähnlich). Ein zufälliger Screenshot aus Visual Studio:

Visual Studio-Datentipp

Gibt es etwas Ähnliches für Emacs Lispel? Vielleicht etwas, das in edebug eingebaut ist oder von einem anderen Paket bereitgestellt wird? Oder wartet das nur darauf, entwickelt zu werden?

Hinweis: Ich habe pp und pp + kurz nach dem Posten dieser Frage entdeckt. Die Formatierung ist unglaublich hilfreich beim visuellen Navigieren in der Objektstruktur. Sie müssen keine Änderungen print-lengthund print-depthExtremwerte vornehmen und die Ausgabe nicht in einem separaten Puffer formatieren.

ebpa
quelle
Vielleicht hide-show.elhilft die Bibliothek dabei .
Drew
3
@ebpa Wenn ppund pp+mach was du willst, dann kannst du das als deine eigene Lösung hinzufügen und es in wenigen Tagen als Antwort markieren.
Kaushal Modi
@Drew Ich gab eine Antwort mit der pp + -basierten Lösung. Ich war damit allerdings nicht ganz zufrieden. Ich werde meine Antwort aktualisieren, wenn ich eine bessere Alternative veröffentliche.
Ebpa

Antworten:

0

Ich fand, dass die Funktion pp-eval-last-sexp-with-tooltipim pp+Paket eine großartige Allzwecklösung für dieses Problem ist. Es ist praktisch dasselbe wie eval-last-sexp, formatiert aber den Rückgabewert ordentlich und zeigt ihn als QuickInfo an. Werte größer als pp-max-tooltip-size( x-max-tooltip-size) werden in einem separaten Fenster angezeigt.

Ich habe es C-x C-eim Moment gebunden :

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