Emacs/Code folding: Difference between revisions

From HaskellWiki
m (Added infobox.)
(Blanked the page)
Line 1: Line 1:
[[Category:Emacs|*]]
{{Haskell infobox}}


=== Folding ===
For folding parts of code you can use
*'''hide-show.el'''
*and '''hs-outline-level''' (based on py-outline-level created by Gb)
<code>
;; this gets called by outline to determine the level. Just use the length of the whitespace
  (defun hsk-outline-level ()
    (let (buffer-invisibility-spec)
      (save-excursion
        (skip-chars-forward "\t ")
        (current-column))))
;; this get called after haskell mode is enabled
    (add-hook
    'haskell-mode-hook
    (lambda ()
        ;; outline uses this regexp to find headers. I match lines with no indent and indented
        ;; some lines, such as "--" ... "class"
        (setq outline-regexp "^[^\t ].*\\|^.*[\t ]+\\(where\\|of\\|do\\|in\\|if\\|then\\|else\\|let\\|module\\|import\\|deriving\\|instance\\|class\\)[\t\n ]")
        ;; enable our level computation
          (setq outline-level 'hsk-outline-level)
        ;; do not use their \C-c@ prefix, too hard to type. Note this overides some python mode bindings
        ;;(setq outline-minor-mode-prefix "C-c")
        ;; turn on outline mode
          (outline-minor-mode t)
        ;; initially hide all but the headers
        ;;(hide-body)
        ))
</code>
*Also, you can use '''toggle-selective-display''' for global folding
<code>
;; folding for all rows, starting on the current column
    (defun toggle-selective-display (column)
      (interactive "P")
      (set-selective-display
      (or column
          (unless selective-display
            (1+ (current-column))))))
  (global-set-key (kbd "C-x $") 'toggle-selective-display)
    (defun toggle-hiding (column)
      (interactive "P")
      (if hs-minor-mode
          (if (condition-case nil
                  (hs-toggle-hiding)
                (error t))
              (hs-show-all))
        (toggle-selective-display column)))
  (global-set-key (kbd "C-@") 'toggle-hiding)
</code>
*and '''narrowing capabilities''' for folding the rest of code
<code>
    (put 'narrow-to-defun 'disabled nil)
    (put 'narrow-to-page 'disabled nil)
    (put 'narrow-to-region 'disabled nil)
</code>
*or '''folding-mode''', if you do not mind add markers such as '''{-{{{-}''' and '''{-}}}-}''' in code.

Revision as of 12:32, 11 April 2016