Действие сворачивания кода в бахроме Emacs

15

Я хотел бы настроить мою полосу Emacs для отображения секций свертывания кода.

Например, BBEdit на Mac будет показывать следующее при редактировании файла JSON:

BBEdit код складывания марки

Сами метки являются действующими: нажатие на метку развернет или свернет соответствующий раздел кода. Если в документе отсутствует режим, поддерживающий свертывание кода, полоса не отображается.

Можно ли таким образом расширить функциональность Emacs?

Матье Легран
источник

Ответы:

16

Hideshowvis добавляет кликабельные иконки на бахрому, но по какой-то странной причине он не включен в elpa или melpa. По умолчанию он показывает -в поле для кода, который можно сложить, а затем удаляет содержимое с помощью .... Включение также hideshowvis-symbolsдобавляет +и делает подсказку для сложенного содержимого немного громче.

Сам Hideshow также позволяет щелчками мыши по строке переключать отображение с помощью S-mouse-2(или сдвигать средний щелчок). Это встроено и может быть включено с помощью hs-minor-mode.

dgtized
источник
1
Хорошо, hideshowvis.el использует хак, похожий на тот, который я предлагаю, но без уродства необходимости двойного щелчка (читая необработанное событие). Спасибо за указатель.
Сигма
3
Hideshowvis.elотлично работает, спасибо! У меня были некоторые проблемы, заставляющие его работать с файлами JSON js3-mode; Чтобы обойти эти проблемы, я должен был убедиться, что hideshowvis only включен после всех действий в очереди, например:(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)
Матье Легран
Сейчас на Мелпе.
dshepherd
4

Хотя я не думаю, что дополнительные элементы могут напрямую получать клики (хотя я могу и ошибаться), возможный хак будет связывать (kbd "<left-fringe> <double-mouse-1>")

Поскольку первый щелчок переместит точку в начало линии, которая соответствует значку полосы, проверка значения (point)в вашей гипотетической (не) функции сворачивания позволит вам определить, какая часть кода (раз) сворачивается, или если вам нужно что-то делать вообще (в случае, если для этой строки нет значка с бахромой)

пример с буфером режима org:

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

Двойной щелчок по краю циклически повторяет соответствующее поддерево.

Сигма
источник