Métodos para examinar objetos lisp grandes / complicados

12

He estado trabajando con un código de motor de exportación de organización que pasa alrededor de algunos objetos de lista bastante grandes y complejos. Es bastante tedioso explorar un objeto leyendo a través de una representación impresa larga de un objeto envuelta en palabras o escribiendo y evaluando iterativamente los accesos en el búfer de memoria virtual. Me pregunto si hay algún buen método para examinar los valores de forma interactiva.

Tomemos por ejemplo: muchos IDE que presentan valores de objetos en una vista de árbol interactiva que permite expandir gradualmente las claves / valores. El objeto se muestra constantemente en la pantalla y puede examinarse sin preocuparse demasiado por los tipos de valores que se visualizan. Una captura de pantalla aleatoria de las herramientas de desarrollador de Chrome como ilustración:

Vista de objeto de herramientas de desarrollador de Chrome

Otras herramientas presentan valores como popovers navegables (funcionalmente muy similares). Una captura de pantalla aleatoria de Visual Studio:

Información de datos de Visual Studio

¿Hay algo similar para emacs lisp? ¿Quizás algo integrado en edebug o proporcionado por otro paquete? ¿O solo está esperando ser desarrollado?

Nota: descubrí pp y pp + poco después de publicar esta pregunta. El formato es increíblemente útil para navegar visualmente la estructura del objeto. Ahorra la necesidad de modificar print-lengthy print-depthvalores extremos y formatear la salida en un búfer separado.

ebpa
fuente
Quizás la biblioteca hide-show.elayude a este respecto.
Dibujó
3
@ebpa Si ppy pp+hace lo que quiere, puede agregarlo como su propia solución y marcarlo como respuesta en pocos días.
Kaushal Modi
@Drew Proporcioné una respuesta con la solución basada en pp +. Sin embargo, no estoy completamente satisfecho con eso. Actualizaré mi respuesta cuando publique una mejor alternativa.
ebpa

Respuestas:

0

Encontré que la función pp-eval-last-sexp-with-tooltipen el pp+paquete es una gran solución de propósito general para esto. Es efectivamente igual eval-last-sexp, pero formatea el valor de retorno y lo muestra como información sobre herramientas. Los valores mayores que pp-max-tooltip-size( x-max-tooltip-size) se muestran en una ventana separada.

Lo tengo obligado C-x C-een este momento:

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