Make closing a Displayable focus a neighbor
This commit is contained in:
parent
becd1483df
commit
7291bbee1b
|
|
@ -22,9 +22,41 @@ const EditorWrapper = (
|
||||||
) => {
|
) => {
|
||||||
// Set the delete function on the editor when it's created
|
// Set the delete function on the editor when it's created
|
||||||
van.derive(() => {
|
van.derive(() => {
|
||||||
if (editor.val) {
|
if (!editor || !editor.val) return;
|
||||||
editor.val.setDeleteFunction(del);
|
|
||||||
}
|
const wrappedDelete = () => {
|
||||||
|
// TODO: find a better way to get the list containing this EditorWrapper
|
||||||
|
const list = editors[currentTab.val] || [];
|
||||||
|
|
||||||
|
// Find nearest non-empty neighbor (scan left then right)
|
||||||
|
let neighborState: State<Displayable> | null = null;
|
||||||
|
for (let i = k - 1; i >= 0; i--) {
|
||||||
|
const c = list[i];
|
||||||
|
if (c) {
|
||||||
|
neighborState = c;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!neighborState) {
|
||||||
|
for (let i = k + 1; i < list.length; i++) {
|
||||||
|
const c = list[i];
|
||||||
|
if (c && c.val) {
|
||||||
|
neighborState = c;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Call the original delete function which updates the reactive list / DOM
|
||||||
|
del();
|
||||||
|
|
||||||
|
// After reactive update, focus the neighbor if available
|
||||||
|
if (neighborState) {
|
||||||
|
neighborState.focus();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
editor.val.setDeleteFunction(wrappedDelete);
|
||||||
});
|
});
|
||||||
|
|
||||||
return v.div(
|
return v.div(
|
||||||
|
|
@ -98,9 +130,8 @@ function shortcutHandler(e: KeyboardEvent) {
|
||||||
addTerminal();
|
addTerminal();
|
||||||
}
|
}
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
document.addEventListener("keyup", shortcutHandler, { capture: true, });
|
document.addEventListener("keyup", shortcutHandler, { capture: true });
|
||||||
document.addEventListener("keydown", shortcutHandler, { capture: true, });
|
document.addEventListener("keydown", shortcutHandler, { capture: true });
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue