Aktywne składanie kodu we frędzlach Emacsa

15

Chciałbym skonfigurować frędzle Emacsa, aby wyświetlały sekcje składania kodu.

Na przykład BBEdit na komputerze Mac wyświetla następujące informacje podczas edycji pliku JSON:

Znaki składania kodu BBEdit

Same znaki są możliwe do wykonania: kliknięcie znaku spowoduje rozwinięcie lub zwinięcie odpowiedniej sekcji kodu. Gdy dokument nie ma trybu, który obsługuje składanie kodu, grzywka nie jest wyświetlana.

Czy można w ten sposób rozszerzyć funkcjonalność Emacsa?

Mathieu Legrand
źródło

Odpowiedzi:

16

Hideshowvis dodaje klikalne ikony do grzywki, ale z jakiegoś dziwnego powodu nie jest zawarte w elpa ani melpa. Domyślnie wyświetla się -na marginesie kodu, który można złożyć, a następnie przesuwa zawartość za pomocą .... Włączając hideshowvis-symbolsto, dodaje a +i sprawia, że ​​podpowiedzi dotyczące złożonej zawartości są nieco głośniejsze.

Sam pokaz slajdów pozwala również klikać myszą linię, aby przełączać wyświetlanie za pomocą S-mouse-2(lub przesunąć środkowe kliknięcie). To jest wbudowane i można je włączyć za pomocą hs-minor-mode.

zdeterminowany
źródło
1
Fajny, hideshowvis.el używa hacka podobnego do tego, który sugeruję, ale bez brzydoty z powodu konieczności podwójnego kliknięcia (czytając nieprzetworzone zdarzenie). Dzięki za wskaźnik.
Sigma
3
Hideshowvis.eldziała świetnie, dzięki! Miałem pewne problemy z uruchomieniem go z plikami JSON js3-mode; aby obejść te problemy, musiałem się upewnić, że tylko pokaz slajdów jest włączony po wszystkich działaniach w kolejce, np .:(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
Teraz jest na Melpie.
dshepherd
4

Chociaż nie sądzę, aby poboczne elementy mogły bezpośrednio otrzymywać kliknięcia (choć mogę się mylić), możliwym hackem byłoby powiązanie (kbd "<left-fringe> <double-mouse-1>")

Ponieważ pierwsze kliknięcie przeniósłoby punkt na początek linii odpowiadającej ikonie grzywki, przetestowanie wartości (point)w twojej hipotetycznej (nie) zwijającej funkcji pozwoliłoby ci określić, która część kodu (lub) zagiąć, lub jeśli musisz w ogóle coś zrobić (na wypadek, gdyby nie było ikony frędzli dla tej linii)

przykład z buforem trybu org:

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

Dwukrotne kliknięcie frędzli powoduje przełączenie odpowiedniego poddrzewa.

Sigma
źródło