Renderer.toggleFold works for folded, foldable and non-foldable lines

When a line is not foldable, we search upward for a suggested fold that contains it and apply that fold instead. If called with a row that is already folded, it unfolds it.
This commit is contained in:
Corey Johnson
2012-05-30 16:29:45 -07:00
parent 76f5d35eb9
commit 42e743f44a
4 changed files with 26 additions and 13 deletions

View File

@@ -27,7 +27,8 @@ window.keymap.bindKeys '.editor',
'meta-z': 'undo'
'meta-Z': 'redo'
'alt-meta-w': 'toggle-soft-wrap'
'alt-meta-f': 'fold-selection'
'alt-meta-f': 'toggle-fold'
'alt-meta-ctrl-f': 'fold-selection'
'alt-meta-u': 'unfold'
'alt-meta-left': 'split-left'
'alt-meta-right': 'split-right'

View File

@@ -57,11 +57,18 @@ class Renderer
if fold = @largestFoldForBufferRow(bufferRow)
fold.destroy()
else
@createFoldAtBufferRow(bufferRow)
rowToFold = bufferRow
while rowToFold >= 0
rowRange = @foldSuggester.rowRangeForFoldAtBufferRow(rowToFold)
if rowRange and (rowRange[0] - 1) <= bufferRow <= rowRange[1]
if fold = @largestFoldForBufferRow(rowRange[0])
fold.destroy()
else
@createFold(rowRange...)
createFoldAtBufferRow: (bufferRow) ->
[startRow, endRow] = @foldSuggester.rowRangeForFoldAtBufferRow(bufferRow)
@createFold(startRow, endRow)
return
else
rowToFold--
createFold: (startRow, endRow) ->
fold = new Fold(this, startRow, endRow)