# What is Origami? A text folding minor mode for Emacs. With this minor mode enabled, you can collapse and expand regions of text. The actual buffer contents are never changed in any way. This works by using overlays to affect how the buffer is presented. This also means that all of your usual editing commands should work with folded regions. For example killing and yanking folded text works as you would expect. There are many commands provided to make expanding and collapsing text convenient. # What does it look like? ![origami](http://www.gregsexton.org/images/origami-screen.png) # How do I install it? The easiest way is to just use MELPA. For manual installation: Firstly, origami requires the following dependencies: * https://github.com/magnars/dash.el * https://github.com/magnars/s.el You should install these anyway, they make working with elisp much more comfortable. Drop this package somewhere on your load-path or (add-to-list 'load-path (expand-file-name "/path/to/origami.el/")) Then (require 'origami) In a buffer run `M-x origami-mode`, and start experimenting with any of the supplied origami interactive functions. I recommend binding these to keys of your choice in the `origami-mode-map`. There is also `global-origami-mode` if you just want to enable origami everywhere. For any major-mode that doesn't have explicit support, origami will use the indentation of the buffer to determine folds. Origami has been tested on Emacs 24.3, 24.4 and 24.5. # What can it do? Origami works by parsing the buffer to determine a fold structure. The following commands are supplied to move between and manipulate folds. Those in bold are particularly useful. Many primitives are provided so that you may compose your own custom functions.
origami-open-node | Open a fold node. |
origami-forward-open-node | Search forward on this line for a fold node and open it. This makes opening nodes much more convenient. |
origami-open-node-recursively | Open a fold node and all of its children. |
origami-forward-open-node-recursively | Search forward on this line for a fold node and open it and all of its children. This makes opening nodes much more convenient. |
origami-show-node | Like origami-open-node but also opens parent fold nodes recursively so as to ensure the position where point is is visible. |
origami-close-node | Close a fold node. |
origami-forward-close-node | Search forward on this line for a fold node and close it. This makes closing nodes much more convenient. |
origami-close-node-recursively | Close a fold node and all of its children. |
origami-forward-close-node-recursively | Search forward on this line for a fold node and close it and all of its children. This makes opening nodes much more convenient. |
origami-toggle-node | Toggle open or closed a fold node. |
origami-forward-toggle-node | Search forward on this line for a node and toggle it open or closed. This makes toggling nodes much more convenient. |
origami-recursively-toggle-node | Acts like org-mode header collapsing. Cycle a fold between open, recursively open, closed. |
origami-open-all-nodes | Open every fold in the buffer. |
origami-close-all-nodes | Close every fold in the buffer. |
origami-toggle-all-nodes | Toggle open/closed every fold node in the buffer. |
origami-show-only-node | Close everything but the folds necessary to see the point. Very useful for concentrating on an area of code. |
origami-previous-fold | Move to the previous fold. |
origami-next-fold | Move to the end of the next fold. |
origami-forward-fold | Move to the start of the next fold. |
origami-forward-fold-same-level | Move to the start of the next fold that is a sibling of the current fold. |
origami-backward-fold-same-level | Move to the start of the previous fold that is a sibling of the current fold. |
origami-undo | Undo the last folding operation. |
origami-redo | Redo the last undone folding operation. |
origami-reset | Remove all folds from the buffer and reset all origami state. Useful if origami messes up! |