sacha is an outliner for Light Table. It comes with a full set of commands for folding/unfolding branches, moving around in an outline and changing levels of branches. sacha means tree in Quechua.
Install this plugin with LT's plugin manager or clone this project to your LT plugins directory.
sacha is an outliner that delineates outline levels with tabs. Take for example this outline:
level-1
level-2.1
level-2.2
level-3
another-level-1
This outline has two level 1 nodes, two level 2 nodes and one level 3 node. If we wanted to move
another-level-1
to be a child of level-1
, we would insert a tab in front of it. If we wanted to do
the reverse of this, we would unindent with shift-tab
. When a tab key is pressed, LT's default behavior
is to insert two whitespaces. To configure a tab key to insert a tab or n white spaces using LT's
:lt.objs.editor/tab-settings
behavior. sacha will work with any tab-settings as long as they are
consistently applied in one file. For caveats around this, see Limitations.
sacha files end in .otl
. This extension is needed for sacha's keybindings and behaviors to take effect.
sacha's commands can be found in the command bar with the prefix sacha:
. Most commands have keybindings.
:sacha.toggle-fold
: Toggle folding/unfolding the current branch:sacha.unindent-node
: Unindents the current node by one level:sacha.indent-branch
: Indents the current branch by one level:sacha.unindent-branch
: Unindents the current branch by one level:sacha.select-branch
: Selects the current branch. Useful in combination with delete, yank or replace.
:sacha.fold-all
: Folds all branches to closed position:sacha.unfold-all
: Unfolds all branches to open position:sacha.fold-level-1
to:sacha.fold-level-9
: Commands to fold up all branches to levels 1 - 9:sacha.fold-branch-one-level
: Folds current branch to be one level less than current folded level:sacha.unfold-branch-one-level
: Unfolds current branch to be one level more than current unfolded level:sacha.fold-all-for-branch
: Folds all children for current branch:sacha.unfold-all-for-branch
: Unfolds all children for current branch
:sacha.jump-to-parent
: Jump cursor to parent node:sacha.jump-to-next-sibling
: Jump cursor to next sibling (even across branches):sacha.jump-to-previous-sibling
: Jump cursor to previous sibling (even across branches):sacha.move-branch-above-previous-sibling
: Move current branch to be before the previous sibling:sacha.move-branch-below-next-sibling
: Move current branch to be after the next sibling:sacha.zoom-branch
: Zoom/hoist current branch to another tab.:sacha.raise-branch
: Raise current branch to replace parent.
Multiple LT commands can be combined into one keystroke. For example, sacha provides a keystroke to fold up to the parent using two of the above commands.
Note: if you're looking for other editing functions, remember Light Table has both vim and emacs keybindings.
There is a long list of existing outliners. So why another? The two major reasons are:
- Light Table has no outliner. Since I'm using LT as my daily editor, I want to make sure the most effective way I take notes is possible from it.
- There are very few outliners written in higher-level languages. By writing sacha in js/cljs I want to enable myself and others to explore new ways of improving outlining without having to dip into viml, elisp or C.
- If you're using LT >= 0.6.6 and vim, there are built-in vim keystrokes to help with indented pasting. This is useful in outlining to copy or move nodes around with ease. '[p' pastes above at current indent level and ']p' pastes below at current indent level. This works for multiple lines.
- sacha should only be used on files with a consistent indent scheme. For example, changing your tabSize from 2 to 4
midway through a file will muck with outline levels. Likewise, files that have a mix of tabs and whitespaces for
indents will cause levels to be off. If you suspect your file has such lines, use the
:sacha.find-malformed-lines
command to find them. - Moving a branch up or down and then undoing it can cause the cursor to jump just above/below the branch.
- Nodes in a tree can only be a single line, no multi-line support.
- Zoom: can't save zoomed file - must save original file. Zoomed view shows original levels. It would be non-trivial to keep files in sync while showing files at different levels.
Please report them on github.
See here for contributing guidelines.
##TODO
- Move the core of this plugin to a CodeMirror plugin so most of this available in a browser :)
- Zoom/hoist branches
See LICENSE.txt