Skip to content

Commit 0fc9b25

Browse files
committed
1 parent c17be01 commit 0fc9b25

2 files changed

Lines changed: 27 additions & 0 deletions

File tree

src/vs/workbench/contrib/notebook/browser/contrib/fold/folding.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,9 @@ registerAction2(class extends Action2 {
223223
} else {
224224
controller.setFoldingStateDown(index, CellFoldingState.Collapsed, levels);
225225
}
226+
227+
const viewIndex = editor.viewModel!.getNearestVisibleCellIndexUpwards(index);
228+
editor.selectElement(editor.viewModel!.viewCells[viewIndex]);
226229
}
227230
}
228231
});

src/vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,30 @@ export class NotebookViewModel extends Disposable implements EditorFoldingStateD
460460
return this._viewCells.indexOf(cell as CellViewModel);
461461
}
462462

463+
/**
464+
* If this._viewCells[index] is visible then return index
465+
*/
466+
getNearestVisibleCellIndexUpwards(index: number) {
467+
for (let i = this._hiddenRanges.length - 1; i >= 0; i--) {
468+
const cellRange = this._hiddenRanges[i];
469+
const foldStart = cellRange.start - 1;
470+
const foldEnd = cellRange.end;
471+
472+
if (foldStart > index) {
473+
continue;
474+
}
475+
476+
if (foldStart <= index && foldEnd >= index) {
477+
return index;
478+
}
479+
480+
// foldStart <= index, foldEnd < index
481+
break;
482+
}
483+
484+
return index;
485+
}
486+
463487
getNextVisibleCellIndex(index: number) {
464488
for (let i = 0; i < this._hiddenRanges.length; i++) {
465489
const cellRange = this._hiddenRanges[i];

0 commit comments

Comments
 (0)