From 20f08b22362a24b33a8948ee0aec738c7289a3c2 Mon Sep 17 00:00:00 2001 From: Lioman Date: Thu, 19 May 2022 18:50:38 +0200 Subject: [PATCH] Add ability to reverse the sort order in explorer - add option to settings - adapt interfaces - reverse sort order in FileSorter if option is set Signed-off-by: Lioman --- src/vs/workbench/contrib/files/browser/explorerService.ts | 6 ++++++ .../workbench/contrib/files/browser/files.contribution.ts | 5 +++++ .../workbench/contrib/files/browser/views/explorerViewer.ts | 4 ++++ src/vs/workbench/contrib/files/common/files.ts | 2 ++ 4 files changed, 17 insertions(+) diff --git a/src/vs/workbench/contrib/files/browser/explorerService.ts b/src/vs/workbench/contrib/files/browser/explorerService.ts index a1d5910f284a6..baf26f50ecf0d 100644 --- a/src/vs/workbench/contrib/files/browser/explorerService.ts +++ b/src/vs/workbench/contrib/files/browser/explorerService.ts @@ -142,6 +142,7 @@ export class ExplorerService implements IExplorerService { return { sortOrder: this.config.sortOrder, lexicographicOptions: this.config.sortOrderLexicographicOptions, + reverse: this.config.sortOrderReverse, }; } @@ -407,6 +408,11 @@ export class ExplorerService implements IExplorerService { if (this.config.sortOrderLexicographicOptions !== configLexicographicOptions) { shouldRefresh = shouldRefresh || this.config.sortOrderLexicographicOptions !== undefined; } + const sortOrderReverse = configuration?.explorer?.sortOrderReverse || false; + + if (this.config.sortOrderReverse !== sortOrderReverse) { + shouldRefresh = shouldRefresh || this.config.sortOrderReverse !== undefined; + } this.config = configuration.explorer; diff --git a/src/vs/workbench/contrib/files/browser/files.contribution.ts b/src/vs/workbench/contrib/files/browser/files.contribution.ts index b162ad2ead5db..9a93266b6cbf6 100644 --- a/src/vs/workbench/contrib/files/browser/files.contribution.ts +++ b/src/vs/workbench/contrib/files/browser/files.contribution.ts @@ -431,6 +431,11 @@ configurationRegistry.registerConfiguration({ ], 'description': nls.localize('sortOrderLexicographicOptions', "Controls the lexicographic sorting of file and folder names in the Explorer.") }, + 'explorer.sortOrderReverse': { + 'type': 'boolean', + 'description': nls.localize('sortOrderReverse', "Controls whether the file and folder sort order, should be reversed."), + 'default': false, + }, 'explorer.decorations.colors': { type: 'boolean', description: nls.localize('explorer.decorations.colors', "Controls whether file decorations should use colors."), diff --git a/src/vs/workbench/contrib/files/browser/views/explorerViewer.ts b/src/vs/workbench/contrib/files/browser/views/explorerViewer.ts index a24f390cf51f3..e42ef1aa301d5 100644 --- a/src/vs/workbench/contrib/files/browser/views/explorerViewer.ts +++ b/src/vs/workbench/contrib/files/browser/views/explorerViewer.ts @@ -740,6 +740,10 @@ export class FileSorter implements ITreeSorter { const sortOrder = this.explorerService.sortOrderConfiguration.sortOrder; const lexicographicOptions = this.explorerService.sortOrderConfiguration.lexicographicOptions; + const reverse = this.explorerService.sortOrderConfiguration.reverse; + if (reverse) { + [statA, statB] = [statB, statA]; + } let compareFileNames; let compareFileExtensions; diff --git a/src/vs/workbench/contrib/files/common/files.ts b/src/vs/workbench/contrib/files/common/files.ts index 5f10b350de4b2..03d8341047290 100644 --- a/src/vs/workbench/contrib/files/common/files.ts +++ b/src/vs/workbench/contrib/files/common/files.ts @@ -93,6 +93,7 @@ export interface IFilesConfiguration extends PlatformIFilesConfiguration, IWorkb expandSingleFolderWorkspaces: boolean; sortOrder: SortOrder; sortOrderLexicographicOptions: LexicographicOptions; + sortOrderReverse: boolean; decorations: { colors: boolean; badges: boolean; @@ -137,6 +138,7 @@ export const enum LexicographicOptions { export interface ISortOrderConfiguration { sortOrder: SortOrder; lexicographicOptions: LexicographicOptions; + reverse: boolean; } export class TextFileContentProvider extends Disposable implements ITextModelContentProvider {