fix toggle bug in vim mode

Signed-off-by: Ronni Skansing <rskansing@gmail.com>
This commit is contained in:
Ronni Skansing
2025-10-05 11:52:17 +02:00
parent 2e8c96d7db
commit 75855ce2b7
2 changed files with 45 additions and 29 deletions
@@ -127,10 +127,7 @@
}
});
// enable vim mode if preference is enabled
if (localVimMode) {
initializeVimMode();
}
// vim mode will be initialized by reactive statement if needed
editor.getModel().onDidChangeContent((e) => {
if (previewRenderDelayID) {
@@ -145,10 +142,8 @@
return () => {
document.body.classList.remove('overflow-hidden');
if (vimModeInstance && vimModeInstance.dispose) {
vimModeInstance.dispose();
vimModeInstance = null;
}
// properly cleanup vim mode first
destroyVimMode();
if (editor) {
editor.dispose();
monaco.editor.getModels().forEach((model) => model.dispose());
@@ -174,8 +169,12 @@
const destroyVimMode = () => {
if (vimModeInstance) {
// use official monaco-vim dispose method
vimModeInstance.dispose();
try {
// use official monaco-vim dispose method
vimModeInstance.dispose();
} catch (e) {
console.warn('Error disposing vim mode:', e);
}
// clear vim status bar
if (vimStatusBar) {
@@ -193,13 +192,22 @@
localVimMode = $vimModeEnabled;
}
// Watch for vim mode changes after initial load
// debounce vim mode changes to prevent race conditions
let vimModeTimeout = null;
// Watch for vim mode changes and editor initialization
$: if (editor && typeof localVimMode === 'boolean') {
if (localVimMode && !vimModeInstance) {
initializeVimMode();
} else if (!localVimMode && vimModeInstance) {
destroyVimMode();
if (vimModeTimeout) {
clearTimeout(vimModeTimeout);
}
vimModeTimeout = setTimeout(() => {
if (localVimMode && !vimModeInstance) {
initializeVimMode();
} else if (!localVimMode && vimModeInstance) {
destroyVimMode();
}
vimModeTimeout = null;
}, 100);
}
const selectPreviewDomain = () => {
@@ -94,10 +94,7 @@
wordBasedSuggestions: 'off'
});
// enable vim mode if preference is enabled
if (localVimMode) {
initializeVimMode();
}
// vim mode will be initialized by reactive statement if needed
// Update value when editor content changes
editor.getModel().onDidChangeContent(() => {
@@ -106,10 +103,8 @@
return () => {
cleanup();
if (vimModeInstance && vimModeInstance.dispose) {
vimModeInstance.dispose();
vimModeInstance = null;
}
// properly cleanup vim mode first
destroyVimMode();
};
});
@@ -133,8 +128,12 @@
const destroyVimMode = () => {
if (vimModeInstance) {
// use official monaco-vim dispose method
vimModeInstance.dispose();
try {
// use official monaco-vim dispose method
vimModeInstance.dispose();
} catch (e) {
console.warn('Error disposing vim mode:', e);
}
// clear vim status bar
if (vimStatusBar) {
@@ -152,13 +151,22 @@
localVimMode = $vimModeEnabled;
}
// debounce vim mode changes to prevent race conditions
let vimModeTimeout = null;
// Watch for vim mode changes
$: if (editor && typeof localVimMode === 'boolean') {
if (localVimMode && !vimModeInstance) {
initializeVimMode();
} else if (!localVimMode && vimModeInstance) {
destroyVimMode();
if (vimModeTimeout) {
clearTimeout(vimModeTimeout);
}
vimModeTimeout = setTimeout(() => {
if (localVimMode && !vimModeInstance) {
initializeVimMode();
} else if (!localVimMode && vimModeInstance) {
destroyVimMode();
}
vimModeTimeout = null;
}, 100);
}
let showExample = false;