Klappbarer Code in Emacs-Streifen

15

Ich möchte meinen Emacs-Rand so konfigurieren, dass er Code-Falzabschnitte anzeigt.

Beispielsweise würde BBEdit auf dem Mac beim Bearbeiten einer JSON-Datei Folgendes anzeigen:

BBEdit Code Faltmarken

Die Marken selbst können bearbeitet werden: Wenn Sie auf eine Marke klicken, wird der entsprechende Codeabschnitt ein- oder ausgeblendet. Wenn das Dokument keinen Modus hat, der das Falten von Code unterstützt, wird der Rand nicht angezeigt.

Ist es möglich, die Emacs-Randfunktionalität so zu erweitern?

Mathieu Legrand
quelle

Antworten:

16

Hideshowvis fügt dem Rand anklickbare Symbole hinzu, die jedoch aus seltsamen Gründen nicht in elpa oder melpa enthalten sind. Standardmäßig wird -im Rand ein für Code angezeigt, der gefaltet werden kann, und der Inhalt wird dann mit einem entfernt .... Durch die zusätzliche Aktivierung von hideshowvis-symbolsa +wird der Hinweis auf gefalteten Inhalt etwas lauter.

Mit der Diashow selbst können Sie die Anzeige durch Klicken mit der Maus auf die Linie umschalten S-mouse-2(oder den mittleren Mausklick verschieben). Das ist eingebaut und kann mit aktiviert werden hs-minor-mode.

dgtized
quelle
1
Nizza, hideshowvis.el verwendet einen Hack ähnlich dem, den ich vorschlage, aber ohne die Hässlichkeit eines Doppelklicks (durch Lesen des rohen Ereignisses). Danke für den Hinweis.
Sigma
3
Hideshowvis.elfunktioniert super, danke! Ich hatte einige Probleme damit, dass es mit JSON-Dateien funktioniert js3-mode. um diese probleme zu umgehen musste ich sicherstellen, dass hideshowvis nur nach allen aktionen in der warteschlange aktiviert ist, zb:(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
Es ist jetzt auf Melpa.
Dshepherd
4

Ich glaube zwar nicht, dass die Randelemente direkt Klicks empfangen können (ich könnte mich jedoch irren), aber ein möglicher Hack wäre das Binden (kbd "<left-fringe> <double-mouse-1>")

Da beim ersten Klicken der Punkt an den Anfang der Linie verschoben wird, die dem Rand-Symbol entspricht, können Sie durch Testen des Werts (point)in Ihrer hypothetischen (Un) Folding-Funktion ermitteln, welcher Teil des Codes (Un) Folded ist oder ob Sie müssen überhaupt nichts tun (falls für diese Zeile kein Fransensymbol vorhanden ist)

Beispiel mit einem org-mode Buffer:

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

Durch Doppelklicken auf den Rand wird der entsprechende Teilbaum durchlaufen.

Sigma
quelle