Métodos para examinar objetos lisp grandes / complicados

12

Eu tenho trabalhado com algum código de mecanismo de exportação organizacional que transmite alguns objetos de lista bastante grandes e complexos. É um pouco tedioso explorar um objeto lendo uma longa representação impressa e envolvida em palavras de um objeto ou escrevendo e avaliando iterativamente acessadores no buffer temporário. Eu estou pensando se existem bons métodos para examinar valores interativamente.

Tomemos, por exemplo: muitos IDEs que apresentam valores de objetos em uma exibição em árvore interativa, que permite expandir / incrementar chaves / valores. O objeto é mostrado persistentemente na tela e pode ser examinado sem muita preocupação com os tipos de valor que estão sendo visualizados. Uma captura de tela aleatória das ferramentas de desenvolvedor do Chrome como ilustração:

Visualização de objeto das ferramentas de desenvolvedor do Chrome

Outras ferramentas apresentam valores como popovers navegáveis ​​(funcionalmente muito semelhantes). Uma captura de tela aleatória do Visual Studio:

Data datip do Visual Studio

Existe algo semelhante para o emacs lisp? Talvez algo embutido no edebug ou fornecido por outro pacote? Ou isso está apenas esperando para ser desenvolvido?

Nota: Descobri pp e pp + logo após postar esta pergunta. A formatação é incrivelmente útil na navegação visual da estrutura de objetos. Isso poupa a necessidade de modificar print-lengthe print-depthpara valores extremos e formatar o output num tampão separado.

ebpa
fonte
Talvez a biblioteca hide-show.elajude nesse sentido.
Desenhou
3
@ebpa Se ppe pp+fazer o que você quer, então você pode acrescentar que, como sua própria solução e marcá-lo como uma resposta em poucos dias.
Kaushal Modi
@Drew Forneci uma resposta com a solução baseada em pp +. Eu não fiquei totalmente satisfeito com isso. Atualizarei minha resposta quando publicar uma alternativa melhor.
Ebpa 15/10

Respostas:

0

Achei que a função pp-eval-last-sexp-with-tooltipno pp+pacote é uma ótima solução de uso geral para isso. É efetivamente o mesmo que eval-last-sexp, mas formata o valor de retorno com precisão e o exibe como uma dica de ferramenta. Valores maiores que pp-max-tooltip-size( x-max-tooltip-size) são mostrados em uma janela separada.

Eu tenho isso vinculado C-x C-eno momento:

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