| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443 |
- /*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
- import { EditorAction, EditorCommand, registerEditorAction, registerEditorCommand } from '../../../browser/editorExtensions.js';
- import { ReplaceCommand } from '../../../common/commands/replaceCommand.js';
- import { EditorOptions } from '../../../common/config/editorOptions.js';
- import { CursorState } from '../../../common/cursorCommon.js';
- import { WordOperations } from '../../../common/cursor/cursorWordOperations.js';
- import { getMapForWordSeparators } from '../../../common/core/wordCharacterClassifier.js';
- import { Position } from '../../../common/core/position.js';
- import { Range } from '../../../common/core/range.js';
- import { Selection } from '../../../common/core/selection.js';
- import { EditorContextKeys } from '../../../common/editorContextKeys.js';
- import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js';
- import * as nls from '../../../../nls.js';
- import { CONTEXT_ACCESSIBILITY_MODE_ENABLED } from '../../../../platform/accessibility/common/accessibility.js';
- import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js';
- import { IsWindowsContext } from '../../../../platform/contextkey/common/contextkeys.js';
- export class MoveWordCommand extends EditorCommand {
- constructor(opts) {
- super(opts);
- this._inSelectionMode = opts.inSelectionMode;
- this._wordNavigationType = opts.wordNavigationType;
- }
- runEditorCommand(accessor, editor, args) {
- if (!editor.hasModel()) {
- return;
- }
- const wordSeparators = getMapForWordSeparators(editor.getOption(119 /* EditorOption.wordSeparators */));
- const model = editor.getModel();
- const selections = editor.getSelections();
- const result = selections.map((sel) => {
- const inPosition = new Position(sel.positionLineNumber, sel.positionColumn);
- const outPosition = this._move(wordSeparators, model, inPosition, this._wordNavigationType);
- return this._moveTo(sel, outPosition, this._inSelectionMode);
- });
- model.pushStackElement();
- editor._getViewModel().setCursorStates('moveWordCommand', 3 /* CursorChangeReason.Explicit */, result.map(r => CursorState.fromModelSelection(r)));
- if (result.length === 1) {
- const pos = new Position(result[0].positionLineNumber, result[0].positionColumn);
- editor.revealPosition(pos, 0 /* ScrollType.Smooth */);
- }
- }
- _moveTo(from, to, inSelectionMode) {
- if (inSelectionMode) {
- // move just position
- return new Selection(from.selectionStartLineNumber, from.selectionStartColumn, to.lineNumber, to.column);
- }
- else {
- // move everything
- return new Selection(to.lineNumber, to.column, to.lineNumber, to.column);
- }
- }
- }
- export class WordLeftCommand extends MoveWordCommand {
- _move(wordSeparators, model, position, wordNavigationType) {
- return WordOperations.moveWordLeft(wordSeparators, model, position, wordNavigationType);
- }
- }
- export class WordRightCommand extends MoveWordCommand {
- _move(wordSeparators, model, position, wordNavigationType) {
- return WordOperations.moveWordRight(wordSeparators, model, position, wordNavigationType);
- }
- }
- export class CursorWordStartLeft extends WordLeftCommand {
- constructor() {
- super({
- inSelectionMode: false,
- wordNavigationType: 0 /* WordNavigationType.WordStart */,
- id: 'cursorWordStartLeft',
- precondition: undefined
- });
- }
- }
- export class CursorWordEndLeft extends WordLeftCommand {
- constructor() {
- super({
- inSelectionMode: false,
- wordNavigationType: 2 /* WordNavigationType.WordEnd */,
- id: 'cursorWordEndLeft',
- precondition: undefined
- });
- }
- }
- export class CursorWordLeft extends WordLeftCommand {
- constructor() {
- var _a;
- super({
- inSelectionMode: false,
- wordNavigationType: 1 /* WordNavigationType.WordStartFast */,
- id: 'cursorWordLeft',
- precondition: undefined,
- kbOpts: {
- kbExpr: ContextKeyExpr.and(EditorContextKeys.textInputFocus, (_a = ContextKeyExpr.and(CONTEXT_ACCESSIBILITY_MODE_ENABLED, IsWindowsContext)) === null || _a === void 0 ? void 0 : _a.negate()),
- primary: 2048 /* KeyMod.CtrlCmd */ | 15 /* KeyCode.LeftArrow */,
- mac: { primary: 512 /* KeyMod.Alt */ | 15 /* KeyCode.LeftArrow */ },
- weight: 100 /* KeybindingWeight.EditorContrib */
- }
- });
- }
- }
- export class CursorWordStartLeftSelect extends WordLeftCommand {
- constructor() {
- super({
- inSelectionMode: true,
- wordNavigationType: 0 /* WordNavigationType.WordStart */,
- id: 'cursorWordStartLeftSelect',
- precondition: undefined
- });
- }
- }
- export class CursorWordEndLeftSelect extends WordLeftCommand {
- constructor() {
- super({
- inSelectionMode: true,
- wordNavigationType: 2 /* WordNavigationType.WordEnd */,
- id: 'cursorWordEndLeftSelect',
- precondition: undefined
- });
- }
- }
- export class CursorWordLeftSelect extends WordLeftCommand {
- constructor() {
- var _a;
- super({
- inSelectionMode: true,
- wordNavigationType: 1 /* WordNavigationType.WordStartFast */,
- id: 'cursorWordLeftSelect',
- precondition: undefined,
- kbOpts: {
- kbExpr: ContextKeyExpr.and(EditorContextKeys.textInputFocus, (_a = ContextKeyExpr.and(CONTEXT_ACCESSIBILITY_MODE_ENABLED, IsWindowsContext)) === null || _a === void 0 ? void 0 : _a.negate()),
- primary: 2048 /* KeyMod.CtrlCmd */ | 1024 /* KeyMod.Shift */ | 15 /* KeyCode.LeftArrow */,
- mac: { primary: 512 /* KeyMod.Alt */ | 1024 /* KeyMod.Shift */ | 15 /* KeyCode.LeftArrow */ },
- weight: 100 /* KeybindingWeight.EditorContrib */
- }
- });
- }
- }
- // Accessibility navigation commands should only be enabled on windows since they are tuned to what NVDA expects
- export class CursorWordAccessibilityLeft extends WordLeftCommand {
- constructor() {
- super({
- inSelectionMode: false,
- wordNavigationType: 3 /* WordNavigationType.WordAccessibility */,
- id: 'cursorWordAccessibilityLeft',
- precondition: undefined
- });
- }
- _move(_, model, position, wordNavigationType) {
- return super._move(getMapForWordSeparators(EditorOptions.wordSeparators.defaultValue), model, position, wordNavigationType);
- }
- }
- export class CursorWordAccessibilityLeftSelect extends WordLeftCommand {
- constructor() {
- super({
- inSelectionMode: true,
- wordNavigationType: 3 /* WordNavigationType.WordAccessibility */,
- id: 'cursorWordAccessibilityLeftSelect',
- precondition: undefined
- });
- }
- _move(_, model, position, wordNavigationType) {
- return super._move(getMapForWordSeparators(EditorOptions.wordSeparators.defaultValue), model, position, wordNavigationType);
- }
- }
- export class CursorWordStartRight extends WordRightCommand {
- constructor() {
- super({
- inSelectionMode: false,
- wordNavigationType: 0 /* WordNavigationType.WordStart */,
- id: 'cursorWordStartRight',
- precondition: undefined
- });
- }
- }
- export class CursorWordEndRight extends WordRightCommand {
- constructor() {
- var _a;
- super({
- inSelectionMode: false,
- wordNavigationType: 2 /* WordNavigationType.WordEnd */,
- id: 'cursorWordEndRight',
- precondition: undefined,
- kbOpts: {
- kbExpr: ContextKeyExpr.and(EditorContextKeys.textInputFocus, (_a = ContextKeyExpr.and(CONTEXT_ACCESSIBILITY_MODE_ENABLED, IsWindowsContext)) === null || _a === void 0 ? void 0 : _a.negate()),
- primary: 2048 /* KeyMod.CtrlCmd */ | 17 /* KeyCode.RightArrow */,
- mac: { primary: 512 /* KeyMod.Alt */ | 17 /* KeyCode.RightArrow */ },
- weight: 100 /* KeybindingWeight.EditorContrib */
- }
- });
- }
- }
- export class CursorWordRight extends WordRightCommand {
- constructor() {
- super({
- inSelectionMode: false,
- wordNavigationType: 2 /* WordNavigationType.WordEnd */,
- id: 'cursorWordRight',
- precondition: undefined
- });
- }
- }
- export class CursorWordStartRightSelect extends WordRightCommand {
- constructor() {
- super({
- inSelectionMode: true,
- wordNavigationType: 0 /* WordNavigationType.WordStart */,
- id: 'cursorWordStartRightSelect',
- precondition: undefined
- });
- }
- }
- export class CursorWordEndRightSelect extends WordRightCommand {
- constructor() {
- var _a;
- super({
- inSelectionMode: true,
- wordNavigationType: 2 /* WordNavigationType.WordEnd */,
- id: 'cursorWordEndRightSelect',
- precondition: undefined,
- kbOpts: {
- kbExpr: ContextKeyExpr.and(EditorContextKeys.textInputFocus, (_a = ContextKeyExpr.and(CONTEXT_ACCESSIBILITY_MODE_ENABLED, IsWindowsContext)) === null || _a === void 0 ? void 0 : _a.negate()),
- primary: 2048 /* KeyMod.CtrlCmd */ | 1024 /* KeyMod.Shift */ | 17 /* KeyCode.RightArrow */,
- mac: { primary: 512 /* KeyMod.Alt */ | 1024 /* KeyMod.Shift */ | 17 /* KeyCode.RightArrow */ },
- weight: 100 /* KeybindingWeight.EditorContrib */
- }
- });
- }
- }
- export class CursorWordRightSelect extends WordRightCommand {
- constructor() {
- super({
- inSelectionMode: true,
- wordNavigationType: 2 /* WordNavigationType.WordEnd */,
- id: 'cursorWordRightSelect',
- precondition: undefined
- });
- }
- }
- export class CursorWordAccessibilityRight extends WordRightCommand {
- constructor() {
- super({
- inSelectionMode: false,
- wordNavigationType: 3 /* WordNavigationType.WordAccessibility */,
- id: 'cursorWordAccessibilityRight',
- precondition: undefined
- });
- }
- _move(_, model, position, wordNavigationType) {
- return super._move(getMapForWordSeparators(EditorOptions.wordSeparators.defaultValue), model, position, wordNavigationType);
- }
- }
- export class CursorWordAccessibilityRightSelect extends WordRightCommand {
- constructor() {
- super({
- inSelectionMode: true,
- wordNavigationType: 3 /* WordNavigationType.WordAccessibility */,
- id: 'cursorWordAccessibilityRightSelect',
- precondition: undefined
- });
- }
- _move(_, model, position, wordNavigationType) {
- return super._move(getMapForWordSeparators(EditorOptions.wordSeparators.defaultValue), model, position, wordNavigationType);
- }
- }
- export class DeleteWordCommand extends EditorCommand {
- constructor(opts) {
- super(opts);
- this._whitespaceHeuristics = opts.whitespaceHeuristics;
- this._wordNavigationType = opts.wordNavigationType;
- }
- runEditorCommand(accessor, editor, args) {
- const languageConfigurationService = accessor.get(ILanguageConfigurationService);
- if (!editor.hasModel()) {
- return;
- }
- const wordSeparators = getMapForWordSeparators(editor.getOption(119 /* EditorOption.wordSeparators */));
- const model = editor.getModel();
- const selections = editor.getSelections();
- const autoClosingBrackets = editor.getOption(5 /* EditorOption.autoClosingBrackets */);
- const autoClosingQuotes = editor.getOption(8 /* EditorOption.autoClosingQuotes */);
- const autoClosingPairs = languageConfigurationService.getLanguageConfiguration(model.getLanguageId()).getAutoClosingPairs();
- const viewModel = editor._getViewModel();
- const commands = selections.map((sel) => {
- const deleteRange = this._delete({
- wordSeparators,
- model,
- selection: sel,
- whitespaceHeuristics: this._whitespaceHeuristics,
- autoClosingDelete: editor.getOption(6 /* EditorOption.autoClosingDelete */),
- autoClosingBrackets,
- autoClosingQuotes,
- autoClosingPairs,
- autoClosedCharacters: viewModel.getCursorAutoClosedCharacters()
- }, this._wordNavigationType);
- return new ReplaceCommand(deleteRange, '');
- });
- editor.pushUndoStop();
- editor.executeCommands(this.id, commands);
- editor.pushUndoStop();
- }
- }
- export class DeleteWordLeftCommand extends DeleteWordCommand {
- _delete(ctx, wordNavigationType) {
- const r = WordOperations.deleteWordLeft(ctx, wordNavigationType);
- if (r) {
- return r;
- }
- return new Range(1, 1, 1, 1);
- }
- }
- export class DeleteWordRightCommand extends DeleteWordCommand {
- _delete(ctx, wordNavigationType) {
- const r = WordOperations.deleteWordRight(ctx, wordNavigationType);
- if (r) {
- return r;
- }
- const lineCount = ctx.model.getLineCount();
- const maxColumn = ctx.model.getLineMaxColumn(lineCount);
- return new Range(lineCount, maxColumn, lineCount, maxColumn);
- }
- }
- export class DeleteWordStartLeft extends DeleteWordLeftCommand {
- constructor() {
- super({
- whitespaceHeuristics: false,
- wordNavigationType: 0 /* WordNavigationType.WordStart */,
- id: 'deleteWordStartLeft',
- precondition: EditorContextKeys.writable
- });
- }
- }
- export class DeleteWordEndLeft extends DeleteWordLeftCommand {
- constructor() {
- super({
- whitespaceHeuristics: false,
- wordNavigationType: 2 /* WordNavigationType.WordEnd */,
- id: 'deleteWordEndLeft',
- precondition: EditorContextKeys.writable
- });
- }
- }
- export class DeleteWordLeft extends DeleteWordLeftCommand {
- constructor() {
- super({
- whitespaceHeuristics: true,
- wordNavigationType: 0 /* WordNavigationType.WordStart */,
- id: 'deleteWordLeft',
- precondition: EditorContextKeys.writable,
- kbOpts: {
- kbExpr: EditorContextKeys.textInputFocus,
- primary: 2048 /* KeyMod.CtrlCmd */ | 1 /* KeyCode.Backspace */,
- mac: { primary: 512 /* KeyMod.Alt */ | 1 /* KeyCode.Backspace */ },
- weight: 100 /* KeybindingWeight.EditorContrib */
- }
- });
- }
- }
- export class DeleteWordStartRight extends DeleteWordRightCommand {
- constructor() {
- super({
- whitespaceHeuristics: false,
- wordNavigationType: 0 /* WordNavigationType.WordStart */,
- id: 'deleteWordStartRight',
- precondition: EditorContextKeys.writable
- });
- }
- }
- export class DeleteWordEndRight extends DeleteWordRightCommand {
- constructor() {
- super({
- whitespaceHeuristics: false,
- wordNavigationType: 2 /* WordNavigationType.WordEnd */,
- id: 'deleteWordEndRight',
- precondition: EditorContextKeys.writable
- });
- }
- }
- export class DeleteWordRight extends DeleteWordRightCommand {
- constructor() {
- super({
- whitespaceHeuristics: true,
- wordNavigationType: 2 /* WordNavigationType.WordEnd */,
- id: 'deleteWordRight',
- precondition: EditorContextKeys.writable,
- kbOpts: {
- kbExpr: EditorContextKeys.textInputFocus,
- primary: 2048 /* KeyMod.CtrlCmd */ | 20 /* KeyCode.Delete */,
- mac: { primary: 512 /* KeyMod.Alt */ | 20 /* KeyCode.Delete */ },
- weight: 100 /* KeybindingWeight.EditorContrib */
- }
- });
- }
- }
- export class DeleteInsideWord extends EditorAction {
- constructor() {
- super({
- id: 'deleteInsideWord',
- precondition: EditorContextKeys.writable,
- label: nls.localize('deleteInsideWord', "Delete Word"),
- alias: 'Delete Word'
- });
- }
- run(accessor, editor, args) {
- if (!editor.hasModel()) {
- return;
- }
- const wordSeparators = getMapForWordSeparators(editor.getOption(119 /* EditorOption.wordSeparators */));
- const model = editor.getModel();
- const selections = editor.getSelections();
- const commands = selections.map((sel) => {
- const deleteRange = WordOperations.deleteInsideWord(wordSeparators, model, sel);
- return new ReplaceCommand(deleteRange, '');
- });
- editor.pushUndoStop();
- editor.executeCommands(this.id, commands);
- editor.pushUndoStop();
- }
- }
- registerEditorCommand(new CursorWordStartLeft());
- registerEditorCommand(new CursorWordEndLeft());
- registerEditorCommand(new CursorWordLeft());
- registerEditorCommand(new CursorWordStartLeftSelect());
- registerEditorCommand(new CursorWordEndLeftSelect());
- registerEditorCommand(new CursorWordLeftSelect());
- registerEditorCommand(new CursorWordStartRight());
- registerEditorCommand(new CursorWordEndRight());
- registerEditorCommand(new CursorWordRight());
- registerEditorCommand(new CursorWordStartRightSelect());
- registerEditorCommand(new CursorWordEndRightSelect());
- registerEditorCommand(new CursorWordRightSelect());
- registerEditorCommand(new CursorWordAccessibilityLeft());
- registerEditorCommand(new CursorWordAccessibilityLeftSelect());
- registerEditorCommand(new CursorWordAccessibilityRight());
- registerEditorCommand(new CursorWordAccessibilityRightSelect());
- registerEditorCommand(new DeleteWordStartLeft());
- registerEditorCommand(new DeleteWordEndLeft());
- registerEditorCommand(new DeleteWordLeft());
- registerEditorCommand(new DeleteWordStartRight());
- registerEditorCommand(new DeleteWordEndRight());
- registerEditorCommand(new DeleteWordRight());
- registerEditorAction(DeleteInsideWord);
|