yafolding

https://github.com/zenozeng/yafolding.el.git

git clone 'git://github.com/zenozeng/yafolding.el.git'
41

yafolding - Yet another folding extension for Emacs

Folding code blocks based on indentation.

ScreenShot

PrtSc

Config Example

Default Keymap

(defvar yafolding-mode-map
  (let ((map (make-sparse-keymap)))
    (define-key map (kbd "<C-S-return>") #'yafolding-hide-parent-element)
    (define-key map (kbd "<C-M-return>") #'yafolding-toggle-all)
    (define-key map (kbd "<C-return>") #'yafolding-toggle-element)
    map))

Discover commands with a context menu

Call M-x yafolding-discover to have a magit-like context menu that displays the available commands. This feature relies on discover.el.

To give it a keybinding:

(global-set-key (kbd "s-d y") 'yafolding-discover)

Hook into prog-mode-hook

(add-hook 'prog-mode-hook
          (lambda () (yafolding-mode)))

Modify keybindings

(require 'yafolding)
(define-key yafolding-mode-map (kbd "<C-S-return>") nil)
(define-key yafolding-mode-map (kbd "<C-M-return>") nil)
(define-key yafolding-mode-map (kbd "<C-return>") nil)
(define-key yafolding-mode-map (kbd "C-c <C-M-return>") 'yafolding-toggle-all)
(define-key yafolding-mode-map (kbd "C-c <C-S-return>") 'yafolding-hide-parent-element)
(define-key yafolding-mode-map (kbd "C-c <C-return>") 'yafolding-toggle-element)

Known Issue

data loss on delete-trailing-whitespace

use this instated:

(lambda ()
    (yafolding-show-all)
    (delete-trailing-whitespace))

see also: https://github.com/zenozeng/yafolding.el/issues/13

Licensing

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.