Skip to content

Commit 558664f

Browse files
committed
Added remembering end key state behaviour
1 parent 73bcc76 commit 558664f

5 files changed

Lines changed: 38 additions & 9 deletions

File tree

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
"applicationinsights": "1.0.8",
3636
"chokidar": "3.2.3",
3737
"graceful-fs": "4.1.11",
38+
"gulp-bom": "^3.0.0",
3839
"http-proxy-agent": "^2.1.0",
3940
"https-proxy-agent": "^2.2.3",
4041
"iconv-lite": "0.5.0",

src/vs/editor/common/controller/cursorCommon.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -277,18 +277,21 @@ export class SingleCursorState {
277277
public readonly position: Position;
278278
public readonly leftoverVisibleColumns: number;
279279
public readonly selection: Selection;
280+
public readonly isEnd: boolean;
280281

281282
constructor(
282283
selectionStart: Range,
283284
selectionStartLeftoverVisibleColumns: number,
284285
position: Position,
285286
leftoverVisibleColumns: number,
287+
isEnd: boolean = false
286288
) {
287289
this.selectionStart = selectionStart;
288290
this.selectionStartLeftoverVisibleColumns = selectionStartLeftoverVisibleColumns;
289291
this.position = position;
290292
this.leftoverVisibleColumns = leftoverVisibleColumns;
291293
this.selection = SingleCursorState._computeSelection(this.selectionStart, this.position);
294+
this.isEnd = isEnd;
292295
}
293296

294297
public equals(other: SingleCursorState) {
@@ -304,22 +307,24 @@ export class SingleCursorState {
304307
return (!this.selection.isEmpty() || !this.selectionStart.isEmpty());
305308
}
306309

307-
public move(inSelectionMode: boolean, lineNumber: number, column: number, leftoverVisibleColumns: number): SingleCursorState {
310+
public move(inSelectionMode: boolean, lineNumber: number, column: number, leftoverVisibleColumns: number, isEnd: boolean = false): SingleCursorState {
308311
if (inSelectionMode) {
309312
// move just position
310313
return new SingleCursorState(
311314
this.selectionStart,
312315
this.selectionStartLeftoverVisibleColumns,
313316
new Position(lineNumber, column),
314-
leftoverVisibleColumns
317+
leftoverVisibleColumns,
318+
isEnd
315319
);
316320
} else {
317321
// move everything
318322
return new SingleCursorState(
319323
new Range(lineNumber, column, lineNumber, column),
320324
leftoverVisibleColumns,
321325
new Position(lineNumber, column),
322-
leftoverVisibleColumns
326+
leftoverVisibleColumns,
327+
isEnd
323328
);
324329
}
325330
}

src/vs/editor/common/controller/cursorMoveOperations.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,13 @@ export class MoveOperations {
122122
column = cursor.position.column;
123123
}
124124

125+
if (cursor.isEnd) {
126+
column = model.getLineMaxColumn(lineNumber + 1);
127+
}
128+
125129
let r = MoveOperations.down(config, model, lineNumber, column, cursor.leftoverVisibleColumns, linesCount, true);
126130

127-
return cursor.move(inSelectionMode, r.lineNumber, r.column, r.leftoverVisibleColumns);
131+
return cursor.move(inSelectionMode, r.lineNumber, cursor.isEnd ? column : r.column, r.leftoverVisibleColumns, cursor.isEnd);
128132
}
129133

130134
public static translateDown(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState): SingleCursorState {
@@ -174,9 +178,13 @@ export class MoveOperations {
174178
column = cursor.position.column;
175179
}
176180

181+
if (cursor.isEnd) {
182+
column = model.getLineMaxColumn(lineNumber - 1);
183+
}
184+
177185
let r = MoveOperations.up(config, model, lineNumber, column, cursor.leftoverVisibleColumns, linesCount, true);
178186

179-
return cursor.move(inSelectionMode, r.lineNumber, r.column, r.leftoverVisibleColumns);
187+
return cursor.move(inSelectionMode, r.lineNumber, cursor.isEnd ? column : r.column, r.leftoverVisibleColumns, cursor.isEnd);
180188
}
181189

182190
public static translateUp(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState): SingleCursorState {
@@ -214,7 +222,7 @@ export class MoveOperations {
214222
public static moveToEndOfLine(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean): SingleCursorState {
215223
let lineNumber = cursor.position.lineNumber;
216224
let maxColumn = model.getLineMaxColumn(lineNumber);
217-
return cursor.move(inSelectionMode, lineNumber, maxColumn, 0);
225+
return cursor.move(inSelectionMode, lineNumber, maxColumn, 0, true);
218226
}
219227

220228
public static moveToBeginningOfBuffer(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean): SingleCursorState {

src/vs/editor/common/controller/oneCursor.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ export class OneCursor {
9999
);
100100
const leftoverVisibleColumns = modelState.position.equals(position) ? modelState.leftoverVisibleColumns : 0;
101101

102-
modelState = new SingleCursorState(selectionStart, selectionStartLeftoverVisibleColumns, position, leftoverVisibleColumns);
102+
modelState = new SingleCursorState(selectionStart, selectionStartLeftoverVisibleColumns, position, leftoverVisibleColumns, modelState.isEnd);
103103
}
104104

105105
if (!viewState) {
@@ -108,12 +108,12 @@ export class OneCursor {
108108
const viewSelectionStart2 = context.convertModelPositionToViewPosition(new Position(modelState.selectionStart.endLineNumber, modelState.selectionStart.endColumn));
109109
const viewSelectionStart = new Range(viewSelectionStart1.lineNumber, viewSelectionStart1.column, viewSelectionStart2.lineNumber, viewSelectionStart2.column);
110110
const viewPosition = context.convertModelPositionToViewPosition(modelState.position);
111-
viewState = new SingleCursorState(viewSelectionStart, modelState.selectionStartLeftoverVisibleColumns, viewPosition, modelState.leftoverVisibleColumns);
111+
viewState = new SingleCursorState(viewSelectionStart, modelState.selectionStartLeftoverVisibleColumns, viewPosition, modelState.leftoverVisibleColumns, modelState.isEnd);
112112
} else {
113113
// Validate new view state
114114
const viewSelectionStart = context.validateViewRange(viewState.selectionStart, modelState.selectionStart);
115115
const viewPosition = context.validateViewPosition(viewState.position, modelState.position);
116-
viewState = new SingleCursorState(viewSelectionStart, modelState.selectionStartLeftoverVisibleColumns, viewPosition, modelState.leftoverVisibleColumns);
116+
viewState = new SingleCursorState(viewSelectionStart, modelState.selectionStartLeftoverVisibleColumns, viewPosition, modelState.leftoverVisibleColumns, viewState.isEnd);
117117
}
118118

119119
this.modelState = modelState;

yarn.lock

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3996,6 +3996,14 @@ gulp-azure-storage@^0.10.0:
39963996
vinyl "^2.2.0"
39973997
vinyl-fs "^3.0.3"
39983998

3999+
gulp-bom@^3.0.0:
4000+
version "3.0.0"
4001+
resolved "https://registry.yarnpkg.com/gulp-bom/-/gulp-bom-3.0.0.tgz#b2f1ab0ef304ff5e593665b776ba517ef7ffb4ad"
4002+
integrity sha512-iw/J94F+MVlxG64Q17BSkHsyjpY17qHl3N3A/jDdrL77zQBkhKtTiKLqM4di9CUX/qFToyyeDsOWwH+rESBgmA==
4003+
dependencies:
4004+
plugin-error "^1.0.1"
4005+
through2 "^3.0.1"
4006+
39994007
gulp-buffer@0.0.2:
40004008
version "0.0.2"
40014009
resolved "https://registry.yarnpkg.com/gulp-buffer/-/gulp-buffer-0.0.2.tgz#af81b4346101736b49942ec6c9fa867ffe737036"
@@ -8924,6 +8932,13 @@ through2@^3.0.0:
89248932
readable-stream "2 || 3"
89258933
xtend "~4.0.1"
89268934

8935+
through2@^3.0.1:
8936+
version "3.0.1"
8937+
resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a"
8938+
integrity sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==
8939+
dependencies:
8940+
readable-stream "2 || 3"
8941+
89278942
through2@~0.2.3:
89288943
version "0.2.3"
89298944
resolved "https://registry.yarnpkg.com/through2/-/through2-0.2.3.tgz#eb3284da4ea311b6cc8ace3653748a52abf25a3f"

0 commit comments

Comments
 (0)