Git - add command to close all unmodified editors (#205278)

* Git - add command to close all unmodified tabs

* Fix compilation error
This commit is contained in:
Ladislau Szomoru 2024-02-15 14:33:02 +01:00 committed by GitHub
parent f396fe0e2b
commit 4f9a706c79
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 39 additions and 1 deletions

View File

@ -789,6 +789,12 @@
"category": "Git",
"enablement": "!operationInProgress"
},
{
"command": "git.closeAllUnmodifiedEditors",
"title": "%command.closeAllUnmodifiedEditors%",
"category": "Git",
"enablement": "!operationInProgress"
},
{
"command": "git.api.getRepositories",
"title": "%command.api.getRepositories%",

View File

@ -33,6 +33,7 @@
"command.cleanAllTracked": "Discard All Tracked Changes",
"command.cleanAllUntracked": "Discard All Untracked Changes",
"command.closeAllDiffEditors": "Close All Diff Editors",
"command.closeAllUnmodifiedEditors": "Close All Unmodified Editors",
"command.commit": "Commit",
"command.commitAmend": "Commit (Amend)",
"command.commitSigned": "Commit (Signed Off)",

View File

@ -5,7 +5,7 @@
import * as os from 'os';
import * as path from 'path';
import { Command, commands, Disposable, LineChange, MessageOptions, Position, ProgressLocation, QuickPickItem, Range, SourceControlResourceState, TextDocumentShowOptions, TextEditor, Uri, ViewColumn, window, workspace, WorkspaceEdit, WorkspaceFolder, TimelineItem, env, Selection, TextDocumentContentProvider, InputBoxValidationSeverity, TabInputText, TabInputTextMerge, QuickPickItemKind, TextDocument, LogOutputChannel, l10n, Memento, UIKind, QuickInputButton, ThemeIcon, SourceControlHistoryItem, SourceControl, InputBoxValidationMessage } from 'vscode';
import { Command, commands, Disposable, LineChange, MessageOptions, Position, ProgressLocation, QuickPickItem, Range, SourceControlResourceState, TextDocumentShowOptions, TextEditor, Uri, ViewColumn, window, workspace, WorkspaceEdit, WorkspaceFolder, TimelineItem, env, Selection, TextDocumentContentProvider, InputBoxValidationSeverity, TabInputText, TabInputTextMerge, QuickPickItemKind, TextDocument, LogOutputChannel, l10n, Memento, UIKind, QuickInputButton, ThemeIcon, SourceControlHistoryItem, SourceControl, InputBoxValidationMessage, Tab, TabInputNotebook } from 'vscode';
import TelemetryReporter from '@vscode/extension-telemetry';
import { uniqueNamesGenerator, adjectives, animals, colors, NumberDictionary } from '@joaomoreno/unique-names-generator';
import { ForcePushMode, GitErrorCodes, Ref, RefType, Status, CommitOptions, RemoteSourcePublisher, Remote } from './api/git';
@ -3994,6 +3994,37 @@ export class CommandCenter {
repository.closeDiffEditors(undefined, undefined, true);
}
@command('git.closeAllUnmodifiedEditors')
closeUnmodifiedEditors(): void {
const editorTabsToClose: Tab[] = [];
// Collect all modified files
const modifiedFiles: string[] = [];
for (const repository of this.model.repositories) {
modifiedFiles.push(...repository.indexGroup.resourceStates.map(r => r.resourceUri.fsPath));
modifiedFiles.push(...repository.workingTreeGroup.resourceStates.map(r => r.resourceUri.fsPath));
modifiedFiles.push(...repository.untrackedGroup.resourceStates.map(r => r.resourceUri.fsPath));
modifiedFiles.push(...repository.mergeGroup.resourceStates.map(r => r.resourceUri.fsPath));
}
// Collect all editor tabs that are not dirty and not modified
for (const tab of window.tabGroups.all.map(g => g.tabs).flat()) {
if (tab.isDirty) {
continue;
}
if (tab.input instanceof TabInputText || tab.input instanceof TabInputNotebook) {
const { uri } = tab.input;
if (!modifiedFiles.find(p => pathEquals(p, uri.fsPath))) {
editorTabsToClose.push(tab);
}
}
}
// Close editors
window.tabGroups.close(editorTabsToClose, true);
}
@command('git.openRepositoriesInParentFolders')
async openRepositoriesInParentFolders(): Promise<void> {
const parentRepositories: string[] = [];