feat(editor): improve code folding with origami

Add and configure origami, and enable it for majro modes where it seems
to do a good job, and keep using hideshow for other major modes.
This commit is contained in:
2022-07-20 21:07:01 +01:00
parent f6a1d44f03
commit 7c253d986c
17 changed files with 130 additions and 93 deletions

View File

@@ -36,7 +36,6 @@
(require 'siren-display-indentation)
(require 'siren-display-line-numbers)
(require 'siren-embark)
(require 'siren-folding)
(require 'siren-highlight-symbol)
(require 'siren-marginalia)
(require 'siren-minions)

View File

@@ -1,43 +0,0 @@
;;; siren-folding.el --- jimeh's Emacs Siren: folding configuration.
;;; Commentary:
;; Basic configuration for folding code.
;;; Code:
(use-package hideshow
:straight (:type built-in)
:general
("C-=" 'siren-folding-toggle-selective-display)
("C-c C-h" 'siren-folding-toggle)
:preface
(defun siren-folding (&optional arg)
"Activate or deactivate code folding.
Optional ARG is passed directly to mode toggle function."
(hs-minor-mode (or arg t)))
(defun siren-folding-toggle (column)
"Toggle hiding/showing blocks via hs-mode.
Borrowed from: http://www.emacswiki.org/emacs/HideShow"
(interactive "P")
(if hs-minor-mode
(if (condition-case nil
(hs-toggle-hiding)
(error t))
(hs-show-all))
(siren-folding-toggle-selective-display column)))
(defun siren-folding-toggle-selective-display (column)
"Helper function for `siren-folding-toggle'."
(interactive "P")
(set-selective-display
(or column
(unless selective-display
(1+ (current-column)))))))
(provide 'siren-folding)
;;; siren-folding.el ends here

View File

@@ -0,0 +1,27 @@
;;; siren-hideshow.el --- jimeh's Emacs Siren: folding configuration.
;;; Commentary:
;; Basic configuration for hideshow code.
;;; Code:
(use-package hideshow
:straight (:type built-in)
:general
(:keymaps 'hs-minor-mode-map
"C-=" 'siren-hideshow-toggle
"C-c C-h" 'siren-hideshow-toggle)
:preface
(defun siren-hideshow-toggle (column)
"Toggle hiding/showing blocks via hs-mode.
Borrowed from: http://www.emacswiki.org/emacs/HideShow"
(interactive "P")
(condition-case nil
(hs-toggle-hiding)
(error (hs-show-all)))))
(provide 'siren-hideshow)
;;; siren-hideshow.el ends here

View File

@@ -0,0 +1,21 @@
;;; siren-origami.el --- jimeh's Emacs Siren: origami configuration.
;;; Commentary:
;; Basic configuration for origami code.
;;; Code:
(use-package origami
:general
(:keymaps 'origami-mode-map
"M-0" 'origami-open-all-nodes
"M-9" 'origami-close-all-nodes
"C-=" 'origami-forward-toggle-node
"C-c C-h" 'origami-forward-toggle-node))
(use-package lsp-origami
:after lsp-mode)
(provide 'siren-origami)
;;; siren-origami.el ends here

View File

@@ -6,8 +6,8 @@
;;; Code:
(require 'siren-folding)
(require 'siren-lsp)
(require 'siren-origami)
(require 'siren-projectile)
(use-package dart-mode
@@ -29,11 +29,15 @@
(auto-highlight-symbol-mode -1))
(lsp-deferred)
(siren-folding)
(subword-mode +1))
(origami-mode t)
(subword-mode y))
:init
(with-eval-after-load "projectile"
(with-eval-after-load 'origami
(add-to-list 'origami-parser-alist
'(dart-mode . origami-c-style-parser)))
(with-eval-after-load 'projectile
(add-to-list 'projectile-project-root-files-bottom-up "pubspec.yaml")
(add-to-list 'projectile-project-root-files-bottom-up "BUILD")))

View File

@@ -8,8 +8,8 @@
(require 'siren-dap)
(require 'siren-flycheck)
(require 'siren-folding)
(require 'siren-lsp)
(require 'siren-origami)
(require 'siren-projectile)
(require 'siren-reformatter)
(require 'siren-tree-sitter)
@@ -36,9 +36,9 @@
(when (fboundp 'auto-highlight-symbol-mode)
(auto-highlight-symbol-mode -1))
(tree-sitter-mode +1)
(siren-folding)
(subword-mode +1))
(tree-sitter-mode t)
(origami-mode t)
(subword-mode t))
(defun siren-define-golines-format-mode ()
;; Setup golines formatter for manual use - on save formatting is handled by

View File

@@ -6,7 +6,7 @@
;;; Code:
(require 'siren-folding)
(require 'siren-hideshow)
(use-package haskell-mode
:general
@@ -18,8 +18,8 @@
:preface
(defun siren-haskell-mode-setup ()
(siren-folding)
(subword-mode +1)))
(hs-minor-mode)
(subword-mode t)))
(provide 'siren-haskell)
;;; siren-haskell.el ends here

View File

@@ -6,8 +6,8 @@
;;; Code:
(require 'siren-folding)
(require 'siren-lsp)
(require 'siren-origami)
(require 'siren-tree-sitter)
(use-package js-mode
@@ -32,9 +32,9 @@
indent-level width
tab-width width))
(tree-sitter-mode +1)
(subword-mode)
(siren-folding)))
(tree-sitter-mode t)
(subword-mode t)
(origami-mode t)))
(use-package lsp-javascript
:straight lsp-mode

View File

@@ -6,9 +6,9 @@
;;; Code:
(require 'siren-folding)
(require 'siren-js)
(require 'siren-lsp)
(require 'siren-origami)
(require 'siren-tree-sitter)
(use-package json-mode
@@ -31,7 +31,13 @@
json-reformat:indent-width width
tab-width width))
(tree-sitter-mode +1)))
(tree-sitter-mode t)
(origami-mode t))
:init
(with-eval-after-load 'origami
(add-to-list 'origami-parser-alist
'(json-mode . origami-c-style-parser))))
(use-package lsp-json
:straight lsp-mode

View File

@@ -6,7 +6,7 @@
;;; Code:
(require 'siren-folding)
(require 'siren-origami)
(require 'siren-prettier-js)
(use-package rjsx-mode
@@ -17,8 +17,13 @@
:preface
(defun siren-rjsx-mode-setup ()
(prettier-js-mode +1)
(subword-mode +1)
(siren-folding)))
(origami-mode t)
(subword-mode t))
:init
(with-eval-after-load 'origami
(add-to-list 'origami-parser-alist
'(rjsx-mode . origami-c-style-parser))))
(provide 'siren-jsx)
;;; siren-jsx.el ends here

View File

@@ -6,7 +6,7 @@
;;; Code:
(require 'siren-folding)
(require 'siren-origami)
(require 'siren-prettier-js)
(require 'siren-rainbow)
(require 'siren-tree-sitter)
@@ -19,11 +19,11 @@
:preface
(defun siren-php-mode-setup ()
(tree-sitter-mode +1)
(prettier-js-mode)
(rainbow-mode +1)
(subword-mode +1)
(siren-folding)))
(tree-sitter-mode t)
(prettier-js-mode t)
(rainbow-mode t)
(subword-mode t)
(origami-mode t)))
(provide 'siren-php)
;;; siren-php.el ends here

View File

@@ -6,8 +6,9 @@
;;; Code:
(require 'siren-clang-format)
(require 'siren-flycheck)
(require 'siren-folding)
(require 'siren-origami)
(require 'siren-prog-mode)
(require 'siren-reformatter)
@@ -29,14 +30,19 @@
(setq-local flycheck-checker 'protobuf-buf)
(protobuf-format-on-save-mode +1))
(subword-mode +1)
(siren-folding))
(subword-mode t)
(origami-mode t))
(defun flycheck-protobuf-buf-project-root (&optional _checker)
"Return the nearest directory holding the buf.yaml configuration."
(and buffer-file-name
(locate-dominating-file buffer-file-name "buf.yaml")))
:init
(with-eval-after-load 'origami
(add-to-list 'origami-parser-alist
'(protobuf-mode . origami-c-style-parser)))
:config
(unbind-key "C-c C-u" 'c-mode-base-map)

View File

@@ -7,7 +7,7 @@
;;; Code:
(require 'siren-dap)
(require 'siren-folding)
(require 'siren-hideshow)
(require 'siren-lsp)
(require 'siren-projectile)
(require 'siren-string-inflection)
@@ -60,9 +60,9 @@
ruby-use-smie t
tab-width 2)
(tree-sitter-mode +1)
(siren-folding)
(subword-mode +1))
(tree-sitter-mode t)
(hs-minor-mode t)
(subword-mode t))
:init
(with-eval-after-load "projectile"

View File

@@ -6,8 +6,8 @@
;;; Code:
(require 'siren-folding)
(require 'siren-lsp)
(require 'siren-origami)
(require 'siren-tree-sitter)
(use-package rust-mode
@@ -25,10 +25,15 @@
(defun siren-rust-mode-setup ()
(setq-local rust-format-on-save t)
(tree-sitter-mode +1)
(tree-sitter-mode t)
(lsp-deferred)
(siren-folding)
(subword-mode +1)))
(origami-mode t)
(subword-mode t))
:init
(with-eval-after-load 'origami
(add-to-list 'origami-parser-alist
'(rust-mode . origami-c-style-parser))))
(use-package cargo
:hook (rust-mode . cargo-minor-mode))

View File

@@ -7,8 +7,8 @@
;;; Code:
(require 'siren-flycheck)
(require 'siren-folding)
(require 'siren-lsp)
(require 'siren-origami)
(require 'siren-prettier-js)
(require 'siren-tree-sitter)
(require 'siren-web-mode)
@@ -32,8 +32,13 @@
tab-width width))
(lsp-deferred)
(subword-mode +1)
(siren-folding)))
(subword-mode t)
(origami-mode t))
:init
(with-eval-after-load 'origami
(add-to-list 'origami-parser-alist
'(typescript-mode . origami-c-style-parser))))
(use-package tide
:hook
@@ -52,11 +57,11 @@
(setq-local flycheck-check-syntax-automatically '(save mode-enabled)
company-tooltip-align-annotations t)
(tree-sitter-mode +1)
(prettier-js-mode +1)
(flycheck-mode +1)
(eldoc-mode +1)
(tide-hl-identifier-mode +1))
(tree-sitter-mode t)
(prettier-js-mode t)
(flycheck-mode t)
(eldoc-mode t)
(tide-hl-identifier-mode t))
:init
(add-to-list 'auto-mode-alist '("\\.tsx\\'" . web-mode))

View File

@@ -7,7 +7,7 @@
;;; Code:
(require 'siren-display-fill-column)
(require 'siren-folding)
(require 'siren-hideshow)
(use-package web-mode
:mode
@@ -39,9 +39,9 @@
(when (version< emacs-version "27.0")
(siren-display-fill-column -1))
(siren-folding)
(subword-mode +1)
(lsp-deferred)))
(lsp-deferred)
(hs-minor-mode t)
(subword-mode t)))
(provide 'siren-web-mode)
;;; siren-web-mode.el ends here

View File

@@ -129,6 +129,7 @@
("loop.el" . "9db6372791bbd0cf3fa907ed0ae3e6b7bcf6cc57")
("lsp-docker" . "a0d7cbf80652429c0be4dc7d39e1887ba4691ec7")
("lsp-mode" . "5a62d4aa1b05fd14e338c47dad976b0b53c4bbc0")
("lsp-origami" . "7df9c91a309aa4229bec41f109920b37c4197618")
("lsp-treemacs" . "9859326df6b8e8c954a3c227e53b6878e54aaae8")
("lsp-ui" . "9a8983d95d823ae62e5f842a4bd433c860131398")
("lua-mode" . "5a9bee8d5fc978dc64fcb677167417010321ba65")
@@ -151,6 +152,7 @@
("ob-go" . "2067ed55f4c1d33a43cb3f6948609d240a8915f5")
("ob-http" . "b1428ea2a63bcb510e7382a1bf5fe82b19c104a7")
("ob-mermaid" . "b4ce25699e3ebff054f523375d1cf5a17bd0dbaf")
("origami.el" . "e558710a975e8511b9386edc81cd6bdd0a5bda74")
("osx-trash" . "af74a2055a15bf4182d8196600f7decd66eec634")
("ox-gfm" . "99f93011b069e02b37c9660b8fcb45dab086a07f")
("ox-pandoc" . "f8eac5e5692fc44a4724ada43191e7c28a1ccf30")