Código de ação dobrável na franja do Emacs

15

Gostaria de configurar minha franja do Emacs para mostrar seções de dobragem de código.

Por exemplo, o BBEdit no Mac mostraria o seguinte ao editar um arquivo JSON:

Marcas de dobragem de código BBEdit

As próprias marcas são acionáveis: clicar em uma marca expandiria ou reduziria a seção de código correspondente. Quando o documento não possui um modo compatível com dobra de código, a margem não é mostrada.

É possível expandir a funcionalidade da franja do Emacs de tal maneira?

Mathieu Legrand
fonte

Respostas:

16

O Hideshowvis adiciona ícones clicáveis ​​à margem, mas, por algum motivo estranho, ele não está incluído no elpa ou no melpa. Por padrão, mostra um -na margem do código que pode ser dobrado e, em seguida, eliza o conteúdo com a .... Ao habilitar, hideshowvis-symbolsele adiciona um +e torna a sugestão de conteúdo dobrado um pouco mais alta.

A própria Hideshow também permite que os cliques do mouse na linha alternem a exibição usando S-mouse-2(ou pressione o botão do meio). Isso é incorporado e pode ser ativado com hs-minor-mode.

dgtized
fonte
11
Bom, o hideshowvis.el usa um hack semelhante ao que estou sugerindo, mas sem a feiura de ter que clicar duas vezes (lendo o evento bruto). Obrigado pelo ponteiro.
Sigma
3
Hideshowvis.elfunciona muito bem, obrigado! Eu tive alguns problemas para que ele funcionasse em arquivos JSON js3-mode; Para contornar esses problemas que eu tinha que ter certeza de que hideshowvis só é ativado depois que todas as ações na fila, por exemplo:(dolist (hook '(emacs-lisp-mode-hook c++-mode-hook)) (add-hook hook 'hideshowvis-enable)) (defun hideshowvis-enable-immediately () (run-at-time "0 seconds" nil 'hideshowvis-enable)) (add-hook 'js3-mode-hook 'hideshowvis-enable-immediately)
Mathieu Legrand
Está no melpa agora.
Dshepherd 2/02
4

Embora eu não ache que os itens adicionais possam receber cliques diretamente (talvez eu esteja errado), um possível hack seria vincular (kbd "<left-fringe> <double-mouse-1>")

Como o primeiro clique moveria o ponto para o início da linha que corresponde ao ícone de franja, testar o valor de (point)sua função hipotética (des) dobrável permitiria identificar qual parte do código (des) dobrar ou se você precisa fazer qualquer coisa (caso nenhum ícone de franja esteja presente para esta linha)

exemplo com um buffer de modo organizacional:

(define-key org-mode-map (kbd "<left-fringe> <double-mouse-1>") 'org-cycle)

Clicar duas vezes na franja alterna a subárvore correspondente.

Sigma
fonte