actions.rs

  1//! This module contains all actions supported by [`Editor`].
  2use super::*;
  3use gpui::{Action, actions};
  4use project::project_settings::GoToDiagnosticSeverityFilter;
  5use schemars::JsonSchema;
  6use util::serde::default_true;
  7
  8/// Selects the next occurrence of the current selection.
  9#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
 10#[action(namespace = editor)]
 11#[serde(deny_unknown_fields)]
 12pub struct SelectNext {
 13    #[serde(default)]
 14    pub replace_newest: bool,
 15}
 16
 17/// Selects the previous occurrence of the current selection.
 18#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
 19#[action(namespace = editor)]
 20#[serde(deny_unknown_fields)]
 21pub struct SelectPrevious {
 22    #[serde(default)]
 23    pub replace_newest: bool,
 24}
 25
 26/// Moves the cursor to the beginning of the current line.
 27#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
 28#[action(namespace = editor)]
 29#[serde(deny_unknown_fields)]
 30pub struct MoveToBeginningOfLine {
 31    #[serde(default = "default_true")]
 32    pub stop_at_soft_wraps: bool,
 33    #[serde(default)]
 34    pub stop_at_indent: bool,
 35}
 36
 37/// Selects from the cursor to the beginning of the current line.
 38#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
 39#[action(namespace = editor)]
 40#[serde(deny_unknown_fields)]
 41pub struct SelectToBeginningOfLine {
 42    #[serde(default)]
 43    pub(super) stop_at_soft_wraps: bool,
 44    #[serde(default)]
 45    pub stop_at_indent: bool,
 46}
 47
 48/// Deletes from the cursor to the beginning of the current line.
 49#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
 50#[action(namespace = editor)]
 51#[serde(deny_unknown_fields)]
 52pub struct DeleteToBeginningOfLine {
 53    #[serde(default)]
 54    pub(super) stop_at_indent: bool,
 55}
 56
 57/// Moves the cursor up by one page.
 58#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
 59#[action(namespace = editor)]
 60#[serde(deny_unknown_fields)]
 61pub struct MovePageUp {
 62    #[serde(default)]
 63    pub(super) center_cursor: bool,
 64}
 65
 66/// Moves the cursor down by one page.
 67#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
 68#[action(namespace = editor)]
 69#[serde(deny_unknown_fields)]
 70pub struct MovePageDown {
 71    #[serde(default)]
 72    pub(super) center_cursor: bool,
 73}
 74
 75/// Moves the cursor to the end of the current line.
 76#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
 77#[action(namespace = editor)]
 78#[serde(deny_unknown_fields)]
 79pub struct MoveToEndOfLine {
 80    #[serde(default = "default_true")]
 81    pub stop_at_soft_wraps: bool,
 82}
 83
 84/// Selects from the cursor to the end of the current line.
 85#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
 86#[action(namespace = editor)]
 87#[serde(deny_unknown_fields)]
 88pub struct SelectToEndOfLine {
 89    #[serde(default)]
 90    pub(super) stop_at_soft_wraps: bool,
 91}
 92
 93/// Toggles the display of available code actions at the cursor position.
 94#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
 95#[action(namespace = editor)]
 96#[serde(deny_unknown_fields)]
 97pub struct ToggleCodeActions {
 98    // Source from which the action was deployed.
 99    #[serde(default)]
100    #[serde(skip)]
101    pub deployed_from: Option<CodeActionSource>,
102    // Run first available task if there is only one.
103    #[serde(default)]
104    #[serde(skip)]
105    pub quick_launch: bool,
106}
107
108#[derive(PartialEq, Clone, Debug)]
109pub enum CodeActionSource {
110    Indicator(DisplayRow),
111    RunMenu(DisplayRow),
112    QuickActionBar,
113}
114
115/// Confirms and accepts the currently selected completion suggestion.
116#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
117#[action(namespace = editor)]
118#[serde(deny_unknown_fields)]
119pub struct ConfirmCompletion {
120    #[serde(default)]
121    pub item_ix: Option<usize>,
122}
123
124/// Composes multiple completion suggestions into a single completion.
125#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
126#[action(namespace = editor)]
127#[serde(deny_unknown_fields)]
128pub struct ComposeCompletion {
129    #[serde(default)]
130    pub item_ix: Option<usize>,
131}
132
133/// Confirms and applies the currently selected code action.
134#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
135#[action(namespace = editor)]
136#[serde(deny_unknown_fields)]
137pub struct ConfirmCodeAction {
138    #[serde(default)]
139    pub item_ix: Option<usize>,
140}
141
142/// Toggles comment markers for the selected lines.
143#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
144#[action(namespace = editor)]
145#[serde(deny_unknown_fields)]
146pub struct ToggleComments {
147    #[serde(default)]
148    pub advance_downwards: bool,
149    #[serde(default)]
150    pub ignore_indent: bool,
151}
152
153/// Moves the cursor up by a specified number of lines.
154#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
155#[action(namespace = editor)]
156#[serde(deny_unknown_fields)]
157pub struct MoveUpByLines {
158    #[serde(default)]
159    pub(super) lines: u32,
160}
161
162/// Moves the cursor down by a specified number of lines.
163#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
164#[action(namespace = editor)]
165#[serde(deny_unknown_fields)]
166pub struct MoveDownByLines {
167    #[serde(default)]
168    pub(super) lines: u32,
169}
170
171/// Extends selection up by a specified number of lines.
172#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
173#[action(namespace = editor)]
174#[serde(deny_unknown_fields)]
175pub struct SelectUpByLines {
176    #[serde(default)]
177    pub(super) lines: u32,
178}
179
180/// Extends selection down by a specified number of lines.
181#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
182#[action(namespace = editor)]
183#[serde(deny_unknown_fields)]
184pub struct SelectDownByLines {
185    #[serde(default)]
186    pub(super) lines: u32,
187}
188
189/// Expands all excerpts in the editor.
190#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
191#[action(namespace = editor)]
192#[serde(deny_unknown_fields)]
193pub struct ExpandExcerpts {
194    #[serde(default)]
195    pub(super) lines: u32,
196}
197
198/// Expands excerpts above the current position.
199#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
200#[action(namespace = editor)]
201#[serde(deny_unknown_fields)]
202pub struct ExpandExcerptsUp {
203    #[serde(default)]
204    pub(super) lines: u32,
205}
206
207/// Expands excerpts below the current position.
208#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
209#[action(namespace = editor)]
210#[serde(deny_unknown_fields)]
211pub struct ExpandExcerptsDown {
212    #[serde(default)]
213    pub(super) lines: u32,
214}
215
216/// Shows code completion suggestions at the cursor position.
217#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
218#[action(namespace = editor)]
219#[serde(deny_unknown_fields)]
220pub struct ShowCompletions {
221    #[serde(default)]
222    pub(super) trigger: Option<String>,
223}
224
225/// Handles text input in the editor.
226#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
227#[action(namespace = editor)]
228pub struct HandleInput(pub String);
229
230/// Deletes from the cursor to the end of the next word.
231#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
232#[action(namespace = editor)]
233#[serde(deny_unknown_fields)]
234pub struct DeleteToNextWordEnd {
235    #[serde(default)]
236    pub ignore_newlines: bool,
237}
238
239/// Deletes from the cursor to the start of the previous word.
240#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
241#[action(namespace = editor)]
242#[serde(deny_unknown_fields)]
243pub struct DeleteToPreviousWordStart {
244    #[serde(default)]
245    pub ignore_newlines: bool,
246}
247
248/// Folds all code blocks at the specified indentation level.
249#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
250#[action(namespace = editor)]
251pub struct FoldAtLevel(pub u32);
252
253/// Spawns the nearest available task from the current cursor position.
254#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
255#[action(namespace = editor)]
256#[serde(deny_unknown_fields)]
257pub struct SpawnNearestTask {
258    #[serde(default)]
259    pub reveal: task::RevealStrategy,
260}
261
262#[derive(Debug, PartialEq, Eq, Clone, Copy, Deserialize, Default)]
263pub enum UuidVersion {
264    #[default]
265    V4,
266    V7,
267}
268
269/// Goes to the next diagnostic in the file.
270#[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)]
271#[action(namespace = editor)]
272#[serde(deny_unknown_fields)]
273pub struct GoToDiagnostic {
274    #[serde(default)]
275    pub severity: GoToDiagnosticSeverityFilter,
276}
277
278/// Goes to the previous diagnostic in the file.
279#[derive(PartialEq, Clone, Default, Debug, Deserialize, JsonSchema, Action)]
280#[action(namespace = editor)]
281#[serde(deny_unknown_fields)]
282pub struct GoToPreviousDiagnostic {
283    #[serde(default)]
284    pub severity: GoToDiagnosticSeverityFilter,
285}
286
287actions!(
288    debugger,
289    [
290        /// Runs program execution to the current cursor position.
291        RunToCursor,
292        /// Evaluates the selected text in the debugger context.
293        EvaluateSelectedText
294    ]
295);
296
297actions!(
298    go_to_line,
299    [
300        /// Toggles the go to line dialog.
301        #[action(name = "Toggle")]
302        ToggleGoToLine
303    ]
304);
305
306actions!(
307    editor,
308    [
309        /// Accepts the full edit prediction.
310        AcceptEditPrediction,
311        /// Accepts a partial Copilot suggestion.
312        AcceptPartialCopilotSuggestion,
313        /// Accepts a partial edit prediction.
314        AcceptPartialEditPrediction,
315        /// Adds a cursor above the current selection.
316        AddSelectionAbove,
317        /// Adds a cursor below the current selection.
318        AddSelectionBelow,
319        /// Applies all diff hunks in the editor.
320        ApplyAllDiffHunks,
321        /// Applies the diff hunk at the current position.
322        ApplyDiffHunk,
323        /// Deletes the character before the cursor.
324        Backspace,
325        /// Shows git blame information for the current line.
326        BlameHover,
327        /// Cancels the current operation.
328        Cancel,
329        /// Cancels the running flycheck operation.
330        CancelFlycheck,
331        /// Cancels pending language server work.
332        CancelLanguageServerWork,
333        /// Clears flycheck results.
334        ClearFlycheck,
335        /// Confirms the rename operation.
336        ConfirmRename,
337        /// Confirms completion by inserting at cursor.
338        ConfirmCompletionInsert,
339        /// Confirms completion by replacing existing text.
340        ConfirmCompletionReplace,
341        /// Navigates to the first item in the context menu.
342        ContextMenuFirst,
343        /// Navigates to the last item in the context menu.
344        ContextMenuLast,
345        /// Navigates to the next item in the context menu.
346        ContextMenuNext,
347        /// Navigates to the previous item in the context menu.
348        ContextMenuPrevious,
349        /// Converts indentation from tabs to spaces.
350        ConvertIndentationToSpaces,
351        /// Converts indentation from spaces to tabs.
352        ConvertIndentationToTabs,
353        /// Converts selected text to kebab-case.
354        ConvertToKebabCase,
355        /// Converts selected text to lowerCamelCase.
356        ConvertToLowerCamelCase,
357        /// Converts selected text to lowercase.
358        ConvertToLowerCase,
359        /// Toggles the case of selected text.
360        ConvertToOppositeCase,
361        /// Converts selected text to snake_case.
362        ConvertToSnakeCase,
363        /// Converts selected text to Title Case.
364        ConvertToTitleCase,
365        /// Converts selected text to UpperCamelCase.
366        ConvertToUpperCamelCase,
367        /// Converts selected text to UPPERCASE.
368        ConvertToUpperCase,
369        /// Applies ROT13 cipher to selected text.
370        ConvertToRot13,
371        /// Applies ROT47 cipher to selected text.
372        ConvertToRot47,
373        /// Copies selected text to the clipboard.
374        Copy,
375        /// Copies selected text to the clipboard with leading/trailing whitespace trimmed.
376        CopyAndTrim,
377        /// Copies the current file location to the clipboard.
378        CopyFileLocation,
379        /// Copies the highlighted text as JSON.
380        CopyHighlightJson,
381        /// Copies the current file name to the clipboard.
382        CopyFileName,
383        /// Copies the file name without extension to the clipboard.
384        CopyFileNameWithoutExtension,
385        /// Copies a permalink to the current line.
386        CopyPermalinkToLine,
387        /// Cuts selected text to the clipboard.
388        Cut,
389        /// Cuts from cursor to end of line.
390        CutToEndOfLine,
391        /// Deletes the character after the cursor.
392        Delete,
393        /// Deletes the current line.
394        DeleteLine,
395        /// Deletes from cursor to end of line.
396        DeleteToEndOfLine,
397        /// Deletes to the end of the next subword.
398        DeleteToNextSubwordEnd,
399        /// Deletes to the start of the previous subword.
400        DeleteToPreviousSubwordStart,
401        /// Displays names of all active cursors.
402        DisplayCursorNames,
403        /// Duplicates the current line below.
404        DuplicateLineDown,
405        /// Duplicates the current line above.
406        DuplicateLineUp,
407        /// Duplicates the current selection.
408        DuplicateSelection,
409        /// Expands all diff hunks in the editor.
410        #[action(deprecated_aliases = ["editor::ExpandAllHunkDiffs"])]
411        ExpandAllDiffHunks,
412        /// Expands macros recursively at cursor position.
413        ExpandMacroRecursively,
414        /// Finds all references to the symbol at cursor.
415        FindAllReferences,
416        /// Finds the next match in the search.
417        FindNextMatch,
418        /// Finds the previous match in the search.
419        FindPreviousMatch,
420        /// Folds the current code block.
421        Fold,
422        /// Folds all foldable regions in the editor.
423        FoldAll,
424        /// Folds all function bodies in the editor.
425        FoldFunctionBodies,
426        /// Folds the current code block and all its children.
427        FoldRecursive,
428        /// Folds the selected ranges.
429        FoldSelectedRanges,
430        /// Toggles focus back to the last active buffer.
431        ToggleFocus,
432        /// Toggles folding at the current position.
433        ToggleFold,
434        /// Toggles recursive folding at the current position.
435        ToggleFoldRecursive,
436        /// Toggles all folds in a buffer or all excerpts in multibuffer.
437        ToggleFoldAll,
438        /// Formats the entire document.
439        Format,
440        /// Formats only the selected text.
441        FormatSelections,
442        /// Goes to the declaration of the symbol at cursor.
443        GoToDeclaration,
444        /// Goes to declaration in a split pane.
445        GoToDeclarationSplit,
446        /// Goes to the definition of the symbol at cursor.
447        GoToDefinition,
448        /// Goes to definition in a split pane.
449        GoToDefinitionSplit,
450        /// Goes to the next diff hunk.
451        GoToHunk,
452        /// Goes to the previous diff hunk.
453        GoToPreviousHunk,
454        /// Goes to the implementation of the symbol at cursor.
455        GoToImplementation,
456        /// Goes to implementation in a split pane.
457        GoToImplementationSplit,
458        /// Goes to the next change in the file.
459        GoToNextChange,
460        /// Goes to the parent module of the current file.
461        GoToParentModule,
462        /// Goes to the previous change in the file.
463        GoToPreviousChange,
464        /// Goes to the type definition of the symbol at cursor.
465        GoToTypeDefinition,
466        /// Goes to type definition in a split pane.
467        GoToTypeDefinitionSplit,
468        /// Scrolls down by half a page.
469        HalfPageDown,
470        /// Scrolls up by half a page.
471        HalfPageUp,
472        /// Shows hover information for the symbol at cursor.
473        Hover,
474        /// Increases indentation of selected lines.
475        Indent,
476        /// Inserts a UUID v4 at cursor position.
477        InsertUuidV4,
478        /// Inserts a UUID v7 at cursor position.
479        InsertUuidV7,
480        /// Joins the current line with the next line.
481        JoinLines,
482        /// Cuts to kill ring (Emacs-style).
483        KillRingCut,
484        /// Yanks from kill ring (Emacs-style).
485        KillRingYank,
486        /// Moves cursor down one line.
487        LineDown,
488        /// Moves cursor up one line.
489        LineUp,
490        /// Moves cursor down.
491        MoveDown,
492        /// Moves cursor left.
493        MoveLeft,
494        /// Moves the current line down.
495        MoveLineDown,
496        /// Moves the current line up.
497        MoveLineUp,
498        /// Moves cursor right.
499        MoveRight,
500        /// Moves cursor to the beginning of the document.
501        MoveToBeginning,
502        /// Moves cursor to the enclosing bracket.
503        MoveToEnclosingBracket,
504        /// Moves cursor to the end of the document.
505        MoveToEnd,
506        /// Moves cursor to the end of the paragraph.
507        MoveToEndOfParagraph,
508        /// Moves cursor to the end of the next subword.
509        MoveToNextSubwordEnd,
510        /// Moves cursor to the end of the next word.
511        MoveToNextWordEnd,
512        /// Moves cursor to the start of the previous subword.
513        MoveToPreviousSubwordStart,
514        /// Moves cursor to the start of the previous word.
515        MoveToPreviousWordStart,
516        /// Moves cursor to the start of the paragraph.
517        MoveToStartOfParagraph,
518        /// Moves cursor to the start of the current excerpt.
519        MoveToStartOfExcerpt,
520        /// Moves cursor to the start of the next excerpt.
521        MoveToStartOfNextExcerpt,
522        /// Moves cursor to the end of the current excerpt.
523        MoveToEndOfExcerpt,
524        /// Moves cursor to the end of the previous excerpt.
525        MoveToEndOfPreviousExcerpt,
526        /// Moves cursor up.
527        MoveUp,
528        /// Inserts a new line and moves cursor to it.
529        Newline,
530        /// Inserts a new line above the current line.
531        NewlineAbove,
532        /// Inserts a new line below the current line.
533        NewlineBelow,
534        /// Navigates to the next edit prediction.
535        NextEditPrediction,
536        /// Scrolls to the next screen.
537        NextScreen,
538        /// Opens the context menu at cursor position.
539        OpenContextMenu,
540        /// Opens excerpts from the current file.
541        OpenExcerpts,
542        /// Opens excerpts in a split pane.
543        OpenExcerptsSplit,
544        /// Opens the proposed changes editor.
545        OpenProposedChangesEditor,
546        /// Opens documentation for the symbol at cursor.
547        OpenDocs,
548        /// Opens a permalink to the current line.
549        OpenPermalinkToLine,
550        /// Opens the file whose name is selected in the editor.
551        #[action(deprecated_aliases = ["editor::OpenFile"])]
552        OpenSelectedFilename,
553        /// Opens all selections in a multibuffer.
554        OpenSelectionsInMultibuffer,
555        /// Opens the URL at cursor position.
556        OpenUrl,
557        /// Organizes import statements.
558        OrganizeImports,
559        /// Decreases indentation of selected lines.
560        Outdent,
561        /// Automatically adjusts indentation based on context.
562        AutoIndent,
563        /// Scrolls down by one page.
564        PageDown,
565        /// Scrolls up by one page.
566        PageUp,
567        /// Pastes from clipboard.
568        Paste,
569        /// Navigates to the previous edit prediction.
570        PreviousEditPrediction,
571        /// Redoes the last undone edit.
572        Redo,
573        /// Redoes the last selection change.
574        RedoSelection,
575        /// Renames the symbol at cursor.
576        Rename,
577        /// Restarts the language server for the current file.
578        RestartLanguageServer,
579        /// Reveals the current file in the system file manager.
580        RevealInFileManager,
581        /// Reverses the order of selected lines.
582        ReverseLines,
583        /// Reloads the file from disk.
584        ReloadFile,
585        /// Rewraps text to fit within the preferred line length.
586        Rewrap,
587        /// Runs flycheck diagnostics.
588        RunFlycheck,
589        /// Scrolls the cursor to the bottom of the viewport.
590        ScrollCursorBottom,
591        /// Scrolls the cursor to the center of the viewport.
592        ScrollCursorCenter,
593        /// Cycles cursor position between center, top, and bottom.
594        ScrollCursorCenterTopBottom,
595        /// Scrolls the cursor to the top of the viewport.
596        ScrollCursorTop,
597        /// Selects all text in the editor.
598        SelectAll,
599        /// Selects all matches of the current selection.
600        SelectAllMatches,
601        /// Selects to the start of the current excerpt.
602        SelectToStartOfExcerpt,
603        /// Selects to the start of the next excerpt.
604        SelectToStartOfNextExcerpt,
605        /// Selects to the end of the current excerpt.
606        SelectToEndOfExcerpt,
607        /// Selects to the end of the previous excerpt.
608        SelectToEndOfPreviousExcerpt,
609        /// Extends selection down.
610        SelectDown,
611        /// Selects the enclosing symbol.
612        SelectEnclosingSymbol,
613        /// Selects the next larger syntax node.
614        SelectLargerSyntaxNode,
615        /// Extends selection left.
616        SelectLeft,
617        /// Selects the current line.
618        SelectLine,
619        /// Extends selection down by one page.
620        SelectPageDown,
621        /// Extends selection up by one page.
622        SelectPageUp,
623        /// Extends selection right.
624        SelectRight,
625        /// Selects the next smaller syntax node.
626        SelectSmallerSyntaxNode,
627        /// Selects to the beginning of the document.
628        SelectToBeginning,
629        /// Selects to the end of the document.
630        SelectToEnd,
631        /// Selects to the end of the paragraph.
632        SelectToEndOfParagraph,
633        /// Selects to the end of the next subword.
634        SelectToNextSubwordEnd,
635        /// Selects to the end of the next word.
636        SelectToNextWordEnd,
637        /// Selects to the start of the previous subword.
638        SelectToPreviousSubwordStart,
639        /// Selects to the start of the previous word.
640        SelectToPreviousWordStart,
641        /// Selects to the start of the paragraph.
642        SelectToStartOfParagraph,
643        /// Extends selection up.
644        SelectUp,
645        /// Shows the system character palette.
646        ShowCharacterPalette,
647        /// Shows edit prediction at cursor.
648        ShowEditPrediction,
649        /// Shows signature help for the current function.
650        ShowSignatureHelp,
651        /// Shows word completions.
652        ShowWordCompletions,
653        /// Randomly shuffles selected lines.
654        ShuffleLines,
655        /// Navigates to the next signature in the signature help popup.
656        SignatureHelpNext,
657        /// Navigates to the previous signature in the signature help popup.
658        SignatureHelpPrevious,
659        /// Sorts selected lines by length.
660        SortLinesByLength,
661        /// Sorts selected lines case-insensitively.
662        SortLinesCaseInsensitive,
663        /// Sorts selected lines case-sensitively.
664        SortLinesCaseSensitive,
665        /// Splits selection into individual lines.
666        SplitSelectionIntoLines,
667        /// Stops the language server for the current file.
668        StopLanguageServer,
669        /// Switches between source and header files.
670        SwitchSourceHeader,
671        /// Inserts a tab character or indents.
672        Tab,
673        /// Removes a tab character or outdents.
674        Backtab,
675        /// Toggles a breakpoint at the current line.
676        ToggleBreakpoint,
677        /// Toggles the case of selected text.
678        ToggleCase,
679        /// Disables the breakpoint at the current line.
680        DisableBreakpoint,
681        /// Enables the breakpoint at the current line.
682        EnableBreakpoint,
683        /// Edits the log message for a breakpoint.
684        EditLogBreakpoint,
685        /// Toggles automatic signature help.
686        ToggleAutoSignatureHelp,
687        /// Toggles inline git blame display.
688        ToggleGitBlameInline,
689        /// Opens the git commit for the blame at cursor.
690        OpenGitBlameCommit,
691        /// Toggles the diagnostics panel.
692        ToggleDiagnostics,
693        /// Toggles indent guides display.
694        ToggleIndentGuides,
695        /// Toggles inlay hints display.
696        ToggleInlayHints,
697        /// Toggles inline values display.
698        ToggleInlineValues,
699        /// Toggles inline diagnostics display.
700        ToggleInlineDiagnostics,
701        /// Toggles edit prediction feature.
702        ToggleEditPrediction,
703        /// Toggles line numbers display.
704        ToggleLineNumbers,
705        /// Toggles the minimap display.
706        ToggleMinimap,
707        /// Swaps the start and end of the current selection.
708        SwapSelectionEnds,
709        /// Sets a mark at the current position.
710        SetMark,
711        /// Toggles relative line numbers display.
712        ToggleRelativeLineNumbers,
713        /// Toggles diff display for selected hunks.
714        #[action(deprecated_aliases = ["editor::ToggleHunkDiff"])]
715        ToggleSelectedDiffHunks,
716        /// Toggles the selection menu.
717        ToggleSelectionMenu,
718        /// Toggles soft wrap mode.
719        ToggleSoftWrap,
720        /// Toggles the tab bar display.
721        ToggleTabBar,
722        /// Transposes characters around cursor.
723        Transpose,
724        /// Undoes the last edit.
725        Undo,
726        /// Undoes the last selection change.
727        UndoSelection,
728        /// Unfolds all folded regions.
729        UnfoldAll,
730        /// Unfolds lines at cursor.
731        UnfoldLines,
732        /// Unfolds recursively at cursor.
733        UnfoldRecursive,
734        /// Removes duplicate lines (case-insensitive).
735        UniqueLinesCaseInsensitive,
736        /// Removes duplicate lines (case-sensitive).
737        UniqueLinesCaseSensitive,
738    ]
739);