|
|
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.
| |