未验证 提交 949baf78 编写于 作者: A Alex Dima

Fixes #95591

上级 1a3d767b
......@@ -103,14 +103,14 @@ export class ShiftCommand implements ICommand {
const { tabSize, indentSize, insertSpaces } = this._opts;
const shouldIndentEmptyLines = (startLine === endLine);
// if indenting or outdenting on a whitespace only line
if (this._selection.isEmpty()) {
if (/^\s*$/.test(model.getLineContent(startLine))) {
this._useLastEditRangeForCursorEndPosition = true;
if (this._opts.useTabStops) {
// if indenting or outdenting on a whitespace only line
if (this._selection.isEmpty()) {
if (/^\s*$/.test(model.getLineContent(startLine))) {
this._useLastEditRangeForCursorEndPosition = true;
}
}
}
if (this._opts.useTabStops) {
// keep track of previous line's "miss-alignment"
let previousLineExtraSpaces = 0, extraSpaces = 0;
for (let lineNumber = startLine; lineNumber <= endLine; lineNumber++, previousLineExtraSpaces = extraSpaces) {
......@@ -188,6 +188,11 @@ export class ShiftCommand implements ICommand {
}
} else {
// if indenting or outdenting on a whitespace only line
if (!this._opts.isUnshift && this._selection.isEmpty() && model.getLineLength(startLine) === 0) {
this._useLastEditRangeForCursorEndPosition = true;
}
const oneIndent = (insertSpaces ? cachedStringRepeat(' ', indentSize) : '\t');
for (let lineNumber = startLine; lineNumber <= endLine; lineNumber++) {
......
......@@ -960,6 +960,25 @@ suite('Editor Contrib - Line Operations', () => {
model.dispose();
});
test('Indenting on empty line should move cursor', () => {
const model = createTextModel(
[
''
].join('\n')
);
withTestCodeEditor(null, { model: model, useTabStops: false }, (editor) => {
const indentLinesAction = new IndentLinesAction();
editor.setPosition(new Position(1, 1));
executeAction(indentLinesAction, editor);
assert.equal(model.getLineContent(1), ' ');
assert.deepEqual(editor.getSelection(), new Selection(1, 5, 1, 5));
});
model.dispose();
});
test('issue #62112: Delete line does not work properly when multiple cursors are on line', () => {
const TEXT = [
'a',
......
......@@ -1428,6 +1428,28 @@ suite('Editor Controller - Regression tests', () => {
model.dispose();
});
test('issue #95591: Unindenting moves cursor to beginning of line', () => {
let model = createTextModel(
[
' '
].join('\n')
);
withTestCodeEditor(null, {
model: model,
useTabStops: false
}, (editor, cursor) => {
moveTo(cursor, 1, 9, false);
assertCursor(cursor, new Selection(1, 9, 1, 9));
CoreEditingCommands.Outdent.runEditorCommand(null, editor, null);
assert.equal(model.getLineContent(1), ' ');
assertCursor(cursor, new Selection(1, 5, 1, 5));
});
model.dispose();
});
test('Bug #16657: [editor] Tab on empty line of zero indentation moves cursor to position (1,1)', () => {
let model = createTextModel(
[
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册