Pliage du code actionnable dans la frange Emacs

15

Je voudrais configurer ma frange Emacs pour afficher les sections de pliage de code.

Par exemple, BBEdit sur Mac afficherait ce qui suit lors de la modification d'un fichier JSON:

Marques de pliage du code BBEdit

Les marques elles-mêmes sont actionnables: cliquer sur une marque développerait ou réduirait la section de code correspondante. Lorsque le document ne dispose pas d'un mode prenant en charge le pliage de code, la frange n'est pas affichée.

Est-il possible d'étendre la fonctionnalité des franges Emacs de cette manière?

Mathieu Legrand
la source

Réponses:

16

Hideshowvis ajoute des icônes cliquables à la frange, mais pour une raison étrange, il n'est pas inclus dans elpa ou melpa. Par défaut, il affiche un -dans la frange pour le code qui peut être plié, puis élide le contenu avec un .... En l'activant également, hideshowvis-symbolsil ajoute un +et rend le conseil pour le contenu plié un peu plus fort.

Le cache lui-même permet également aux clics de souris sur la ligne de basculer l'affichage à l'aide S-mouse-2(ou de déplacer le clic du milieu). Cela est intégré et peut être activé avec hs-minor-mode.

dgtized
la source
1
Bien, hideshowvis.el utilise un hack similaire à celui que je propose, mais sans la laideur d'avoir à double-cliquer (en lisant l'événement brut). Merci pour le pointeur.
Sigma
3
Hideshowvis.elfonctionne très bien, merci! J'ai eu quelques problèmes pour le faire fonctionner avec les fichiers JSON js3-mode; pour contourner ces problèmes, je devais m'assurer que le masquage ne soit activé qu'après toutes les actions dans la file d'attente, par exemple:(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
C'est sur melpa maintenant.
dshepherd
4

Bien que je ne pense pas que les éléments marginaux puissent recevoir directement des clics (je peux me tromper cependant), un piratage possible serait de lier (kbd "<left-fringe> <double-mouse-1>")

Étant donné que le premier clic déplacerait le point au début de la ligne qui correspond à l'icône de la frange, tester la valeur de (point)dans votre fonction de (dé) pliage hypothétique vous permettrait d'identifier la partie du code à (dé) plier, ou si vous devez faire quoi que ce soit (au cas où aucune icône de frange n'est présente pour cette ligne)

exemple avec un tampon en mode org:

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

Double-cliquez sur la frange pour faire défiler le sous-arbre correspondant.

Sigma
la source