Path: blob/main/src/vs/workbench/browser/parts/statusbar/statusbarActions.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { localize, localize2 } from '../../../../nls.js';6import { IStatusbarService } from '../../../services/statusbar/browser/statusbar.js';7import { Action } from '../../../../base/common/actions.js';8import { Parts, IWorkbenchLayoutService } from '../../../services/layout/browser/layoutService.js';9import { KeyCode } from '../../../../base/common/keyCodes.js';10import { KeybindingsRegistry, KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js';11import { ServicesAccessor } from '../../../../editor/browser/editorExtensions.js';12import { Action2, registerAction2 } from '../../../../platform/actions/common/actions.js';13import { Categories } from '../../../../platform/action/common/actionCommonCategories.js';14import { IEditorService } from '../../../services/editor/common/editorService.js';15import { StatusbarViewModel } from './statusbarModel.js';16import { StatusBarFocused } from '../../../common/contextkeys.js';17import { getActiveWindow } from '../../../../base/browser/dom.js';18import { ICommandService } from '../../../../platform/commands/common/commands.js';1920export class ToggleStatusbarEntryVisibilityAction extends Action {2122constructor(id: string, label: string, private model: StatusbarViewModel) {23super(id, label, undefined, true);2425this.checked = !model.isHidden(id);26}2728override async run(): Promise<void> {29if (this.model.isHidden(this.id)) {30this.model.show(this.id);31} else {32this.model.hide(this.id);33}34}35}3637export class HideStatusbarEntryAction extends Action {3839constructor(id: string, name: string, private model: StatusbarViewModel) {40super(id, localize('hide', "Hide '{0}'", name), undefined, true);41}4243override async run(): Promise<void> {44this.model.hide(this.id);45}46}4748export class ManageExtensionAction extends Action {4950constructor(51private readonly extensionId: string,52@ICommandService private readonly commandService: ICommandService53) {54super('statusbar.manage.extension', localize('manageExtension', "Manage Extension"));55}5657override run(): Promise<void> {58return this.commandService.executeCommand('_extensions.manage', this.extensionId);59}60}6162KeybindingsRegistry.registerCommandAndKeybindingRule({63id: 'workbench.statusBar.focusPrevious',64weight: KeybindingWeight.WorkbenchContrib,65primary: KeyCode.LeftArrow,66secondary: [KeyCode.UpArrow],67when: StatusBarFocused,68handler: (accessor: ServicesAccessor) => {69const statusBarService = accessor.get(IStatusbarService);70statusBarService.focusPreviousEntry();71}72});7374KeybindingsRegistry.registerCommandAndKeybindingRule({75id: 'workbench.statusBar.focusNext',76weight: KeybindingWeight.WorkbenchContrib,77primary: KeyCode.RightArrow,78secondary: [KeyCode.DownArrow],79when: StatusBarFocused,80handler: (accessor: ServicesAccessor) => {81const statusBarService = accessor.get(IStatusbarService);82statusBarService.focusNextEntry();83}84});8586KeybindingsRegistry.registerCommandAndKeybindingRule({87id: 'workbench.statusBar.focusFirst',88weight: KeybindingWeight.WorkbenchContrib,89primary: KeyCode.Home,90when: StatusBarFocused,91handler: (accessor: ServicesAccessor) => {92const statusBarService = accessor.get(IStatusbarService);93statusBarService.focus(false);94statusBarService.focusNextEntry();95}96});9798KeybindingsRegistry.registerCommandAndKeybindingRule({99id: 'workbench.statusBar.focusLast',100weight: KeybindingWeight.WorkbenchContrib,101primary: KeyCode.End,102when: StatusBarFocused,103handler: (accessor: ServicesAccessor) => {104const statusBarService = accessor.get(IStatusbarService);105statusBarService.focus(false);106statusBarService.focusPreviousEntry();107}108});109110KeybindingsRegistry.registerCommandAndKeybindingRule({111id: 'workbench.statusBar.clearFocus',112weight: KeybindingWeight.WorkbenchContrib,113primary: KeyCode.Escape,114when: StatusBarFocused,115handler: (accessor: ServicesAccessor) => {116const statusBarService = accessor.get(IStatusbarService);117const editorService = accessor.get(IEditorService);118if (statusBarService.isEntryFocused()) {119statusBarService.focus(false);120} else if (editorService.activeEditorPane) {121editorService.activeEditorPane.focus();122}123}124});125126class FocusStatusBarAction extends Action2 {127128constructor() {129super({130id: 'workbench.action.focusStatusBar',131title: localize2('focusStatusBar', 'Focus Status Bar'),132category: Categories.View,133f1: true134});135}136137async run(accessor: ServicesAccessor): Promise<void> {138const layoutService = accessor.get(IWorkbenchLayoutService);139layoutService.focusPart(Parts.STATUSBAR_PART, getActiveWindow());140}141}142143registerAction2(FocusStatusBarAction);144145146