diff --git a/src/vs/platform/search/common/search.ts b/src/vs/platform/search/common/search.ts index 08e09a63d8b4157c97ba2ef16b1eb548271a0231..275c7daeb4680a5219638578cf0dffb93af6bea9 100644 --- a/src/vs/platform/search/common/search.ts +++ b/src/vs/platform/search/common/search.ts @@ -333,6 +333,7 @@ export interface ISearchConfigurationProperties { useReplacePreview: boolean; showLineNumbers: boolean; usePCRE2: boolean; + actionsPosition: 'auto' | 'right'; } export interface ISearchConfiguration extends IFilesConfiguration { diff --git a/src/vs/workbench/parts/search/browser/media/searchview.css b/src/vs/workbench/parts/search/browser/media/searchview.css index f7c854b53cdd5a52ed2779279d297fb151bf5f22..7f342b62e4dc370e1588c94e624aeb7a87f5f77a 100644 --- a/src/vs/workbench/parts/search/browser/media/searchview.css +++ b/src/vs/workbench/parts/search/browser/media/searchview.css @@ -179,18 +179,6 @@ padding: 0; } -.search-view:not(.wide) .foldermatch .monaco-icon-label, -.search-view:not(.wide) .filematch .monaco-icon-label { - flex: 1; -} - -.search-view:not(.wide) .monaco-tree .monaco-tree-row:hover:not(.highlighted) .foldermatch .monaco-icon-label, -.search-view:not(.wide) .monaco-tree .monaco-tree-row.focused .foldermatch .monaco-icon-label, -.search-view:not(.wide) .monaco-tree .monaco-tree-row:hover:not(.highlighted) .filematch .monaco-icon-label, -.search-view:not(.wide) .monaco-tree .monaco-tree-row.focused .filematch .monaco-icon-label { - flex: 1; -} - .search-view .foldermatch .directory, .search-view .filematch .directory { opacity: 0.7; @@ -198,8 +186,8 @@ margin-left: 0.8em; } -.search-view.wide .foldermatch .badge, -.search-view.wide .filematch .badge { +.search-view .foldermatch .badge, +.search-view .filematch .badge { margin-left: 10px; } @@ -246,15 +234,11 @@ .search-view .monaco-tree .monaco-tree-row:hover:not(.highlighted) .monaco-action-bar, .search-view .monaco-tree .monaco-tree-row.focused .monaco-action-bar { - display: inline-block; -} - -.search-view:not(.wide) .monaco-tree .monaco-tree-row .linematch .actionBarContainer { - flex: 1; + display: block; } .search-view:not(.wide) .monaco-tree .monaco-tree-row .monaco-action-bar { - float: right; + flex: 1 0 auto; } .search-view .monaco-tree .monaco-tree-row .monaco-action-bar .action-label { diff --git a/src/vs/workbench/parts/search/browser/searchResultsView.ts b/src/vs/workbench/parts/search/browser/searchResultsView.ts index e70eaf83b0bd10cac2eb89d1617e851df5e80349..cbba0a97400345bc3e420e080a350c01a20f679c 100644 --- a/src/vs/workbench/parts/search/browser/searchResultsView.ts +++ b/src/vs/workbench/parts/search/browser/searchResultsView.ts @@ -235,8 +235,7 @@ export class SearchRenderer extends Disposable implements IRenderer { const replace = DOM.append(parent, DOM.$('span.replaceMatch')); const after = DOM.append(parent, DOM.$('span')); const lineNumber = DOM.append(container, DOM.$('span.matchLineNum')); - const actionBarContainer = DOM.append(container, DOM.$('span.actionBarContainer')); - const actions = new ActionBar(actionBarContainer, { animated: false }); + const actions = new ActionBar(container, { animated: false }); return { parent, diff --git a/src/vs/workbench/parts/search/browser/searchView.ts b/src/vs/workbench/parts/search/browser/searchView.ts index 622455f851e4b8906938e777fc43b5826615c03a..e21b06c3929a4c7cbc02d354075df72a61bcedaf 100644 --- a/src/vs/workbench/parts/search/browser/searchView.ts +++ b/src/vs/workbench/parts/search/browser/searchView.ts @@ -32,7 +32,7 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti import { TreeResourceNavigator, WorkbenchTree } from 'vs/platform/list/browser/listService'; import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; import { IProgressService } from 'vs/platform/progress/common/progress'; -import { IPatternInfo, ISearchComplete, ISearchConfiguration, ISearchHistoryService, ISearchHistoryValues, ISearchProgressItem, ITextQuery, VIEW_ID, SearchErrorCode } from 'vs/platform/search/common/search'; +import { IPatternInfo, ISearchComplete, ISearchConfiguration, ISearchHistoryService, ISearchHistoryValues, ISearchProgressItem, ITextQuery, VIEW_ID, SearchErrorCode, ISearchConfigurationProperties } from 'vs/platform/search/common/search'; import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { diffInserted, diffInsertedOutline, diffRemoved, diffRemovedOutline, editorFindMatchHighlight, editorFindMatchHighlightBorder, listActiveSelectionForeground } from 'vs/platform/theme/common/colorRegistry'; @@ -785,11 +785,9 @@ export class SearchView extends Viewlet implements IViewlet, IPanel { return; } - if (this.size.width >= SearchView.WIDE_VIEW_SIZE) { - dom.addClass(this.getContainer(), SearchView.WIDE_CLASS_NAME); - } else { - dom.removeClass(this.getContainer(), SearchView.WIDE_CLASS_NAME); - } + const actionsPosition = this.configurationService.getValue('search').actionsPosition; + const useWideLayout = this.size.width >= SearchView.WIDE_VIEW_SIZE && actionsPosition === 'auto'; + dom.toggleClass(this.getContainer(), SearchView.WIDE_CLASS_NAME, useWideLayout); this.searchWidget.setWidth(this.size.width - 28 /* container margin */); diff --git a/src/vs/workbench/parts/search/electron-browser/search.contribution.ts b/src/vs/workbench/parts/search/electron-browser/search.contribution.ts index b38067dd9f36597b4a44db13a41e4a680cffc7c1..97dc0bd33c5e527551a97ca2e26e564ba0636978 100644 --- a/src/vs/workbench/parts/search/electron-browser/search.contribution.ts +++ b/src/vs/workbench/parts/search/electron-browser/search.contribution.ts @@ -674,6 +674,12 @@ configurationRegistry.registerConfiguration({ type: 'boolean', default: false, description: nls.localize('search.usePCRE2', "Whether to use the PCRE2 regex engine in text search. This enables using some advanced regex features like lookbehind and backreferences. However, not all PCRE2 features are supported - only features that are also supported by JavaScript.") + }, + 'search.actionsPosition': { + type: 'string', + enum: ['auto', 'right'], + default: 'auto', + description: nls.localize('search.actionsPosition', "Controls whether to show actions at the end of match or always aligned to the right in wide panels.") } } });