Change:
VSCode Version: 1.10.2 OS Version: macOS Sierra 10.12.3 This is closely related to . I want the selected file in the sidebar to always be my active tab - but do not want the sidebar to scroll just because the file is currently not visible in the sidebar. That scrolling is the entire reason I turned off in the first place. autoReveal - (see ) automatically scrolling / causing the user to lose their place in the file tree is extremely annoying. Open Editors Panel - When there are two files close together in the hierarchy, with the same name, it's too easy to accidentally misread the file paths (especially when they're very long) for that to be a satisfactory replacement for the traditional hierarchy. Keyboard Shortcut - are great, but this should be one of those "don't make me think" things - not a key combo that has to be pressed hundreds of times/day.
so what is missing when you set explorer.autoReveal to false?
You can't tell what file in the tree is currently focused in the editor, or where it is in the tree. This is because the file highlighted in the sidebar doesn't change unless you manually click to make it so, when is false.
ok I understand your request now, you want to select the file but without scrolling (unless needed).
Yes - if any scrolling is needed, the user should do it.
Agree with If is set to , active files are not highlighted in the explorer anymore. Why not? Auto-revealing is unwanted because of file tree jumping, not because of highlighting active files.
+1 one from me on this please.
+1
+1, I want the file highlighted in explorer but the scroll position not changed
+1, it's sometimes hard to figure out which file you have open when they're all named
I recently switched to VSCode from Atom and I really find this behaviour confusing. is hardly usable for me if the tree highlights the wrong file, however I'd really like to not have that auto scrolling. Would be really cool to see this land
+1, really need to improve this behavior. I switched from sublime to vscode, this makes me crazy. If set to , the jumping inside file explorer is confusing; If set to , I have to use keybinding or right click menu every time when switch between tabs
+1 The editor should not force a scroll by default. It's very distracting.
+1 This is really a needed usability feature.
+1 This is very frustrating. If I have scrolled down in sidebar and then close the tab, it scrolls me back up to the position of the next active tab. Please fix this.
+1 Been a couple of years for a simple option to prevent a part of an existing feature; should be simple enough to implement? EDIT: Looks like the operation is happening here: One option is to add another settings option, such as autoRevealNoScroll, and add it to the existing check: The relevant tree function seem to be in:
I see that there's some debate in the PR so I just wanted to add a +1 in support of this fix. I actually keep unneeded files open sometimes, if I know I'm going to be touching an adjacent file next, just so that I can make sure I don't have to scroll back in the project to where I was. Thank you for putting the fix together! A nice potential additional feature would be the ability to do something like right-click a file's tab, and have an option in the context menu to update the left scrollbar's position to that file. Then, on the rare occasion that I do care if the two are in sync, it would be just a couple of clicks away. Actually the feature above is already there! "Reveal in Side Bar." So never mind. I'll leave the above text here in case it helps anyone else once this PR goes live.
Thanks to this is now supported in VS Code. To verify: sure that behave as before sure that focuses the active editor but does not scroll the explorer
Awesome to see this merged! The new option is called though, right?
I renamed it to via
Ah, got it – thanks!

Discussion:
'default': 9 }, 'explorer.autoReveal': { <del> 'type': 'boolean', 'description': nls.localize('autoReveal', "Controls whether the explorer should automatically reveal and select files when opening them."), 'default': true </del> <ins> 'type': ['boolean', 'string'], 'enum': [true, false, 'highlightNoScroll'], 'default': true, 'enumDescriptions': [ nls.localize('autoReveal.on', 'Files will be revealed and selected.'), nls.localize('autoReveal.off', 'Files will not be revealed and selected.'), nls.localize('autoReveal.highlightNoScroll', 'Files will not be scrolled into view, but will still be selected.'), ], 'description': nls.localize('autoReveal', "Controls whether the explorer should automatically reveal and select files when opening them.") </ins> }, 'explorer.enableDragAndDrop': { 'type': 'boolean',

// Refresh is needed on the initial explorer open private shouldRefresh = true; private dragHandler!: DelayedDragHandler; <del> private autoReveal = false; </del> <ins> private autoReveal: boolean | string = false; </ins> private actions: IAction[] | undefined; private decorationsProvider: ExplorerDecorationsProvider | undefined;

try { if (reveal) { <del> // Don't scroll to the item if it's already visible if (this.tree.getRelativeTop(item) === null) { </del> <ins> // Don't scroll to the item if it's already visible, // or if set not to. if (reveal !== 'highlightNoScroll' && this.tree.getRelativeTop(item) === null) { </ins> this.tree.reveal(item, 0.5); } }

return !!this.editable && (this.editable.stat === stat || !stat); } <del> async select(resource: URI, reveal?: boolean): Promise<void> { </del> <ins> async select(resource: URI, reveal?: boolean | string): Promise<void> { </ins> if (!this.view) { return; } const fileStat = this.findClosest(resource); if (fileStat) { await this.view.selectResource(fileStat.resource, reveal);

if (reveal && resource && autoReveal) { // We did a top level refresh, reveal the active file #67118 <del> this.select(resource, true); </del> <ins> this.select(resource, autoReveal); </ins> } } }

* Selects and reveal the file element provided by the given resource if its found in the explorer. * Will try to resolve the path in case the explorer is not yet expanded to the file yet. */ <del> select(resource: URI, reveal?: boolean): Promise<void>; </del> <ins> select(resource: URI, reveal?: boolean | string): Promise<void>; </ins> registerView(contextAndRefreshProvider: IExplorerView): void; }

export interface IExplorerView { getContext(respectMultiSelection: boolean): ExplorerItem[]; refresh(recursive: boolean, item?: ExplorerItem): Promise<void>; <del> selectResource(resource: URI | undefined, reveal?: boolean): Promise<void>; </del> <ins> selectResource(resource: URI | undefined, reveal?: boolean | string): Promise<void>; </ins> setTreeInput(): Promise<void>; itemsCopied(tats: ExplorerItem[], cut: boolean, previousCut: ExplorerItem[] | undefined): void; setEditable(stat: ExplorerItem, isEditing: boolean): Promise<void>;

openEditors: { visible: number; }; <del> autoReveal: boolean; </del> <ins> autoReveal: boolean | string; </ins> enableDragAndDrop: boolean; confirmDelete: boolean; sortOrder: SortOrder;