Skip to content

Commit 503097d

Browse files
committed
fix: tab key behaviour
1 parent 112ee1d commit 503097d

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

src/cm/commandRegistry.js

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ import {
5353
toggleBlockComment,
5454
undo,
5555
} from "@codemirror/commands";
56+
import { indentUnit as indentUnitFacet } from "@codemirror/language";
5657
import { Compartment, EditorSelection } from "@codemirror/state";
5758
import { keymap } from "@codemirror/view";
5859
import prompt from "dialogs/prompt";
@@ -668,7 +669,24 @@ function registerCoreCommands() {
668669
run(view) {
669670
const resolvedView = resolveView(view);
670671
if (!resolvedView) return false;
671-
return indentMore(resolvedView);
672+
const { state } = resolvedView;
673+
const hasSelection = state.selection.ranges.some((range) => !range.empty);
674+
if (hasSelection) {
675+
return indentMore(resolvedView);
676+
}
677+
const indentString =
678+
state.facet(indentUnitFacet) ||
679+
(settings?.value?.softTab
680+
? " ".repeat(Math.max(1, Number(settings?.value?.tabSize) || 2))
681+
: "\t");
682+
const insert = indentString && indentString.length ? indentString : "\t";
683+
resolvedView.dispatch(
684+
state.changeByRange((range) => ({
685+
changes: { from: range.from, to: range.to, insert },
686+
range: EditorSelection.cursor(range.from + insert.length),
687+
})),
688+
);
689+
return true;
672690
},
673691
});
674692
addCommand({

src/lib/keyBindings.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ const APP_BINDING_CONFIG = [
375375
name: "indent",
376376
description: "Indent",
377377
key: "Tab",
378-
readOnly: true,
378+
readOnly: false,
379379
editorOnly: true,
380380
},
381381
{

0 commit comments

Comments
 (0)