diff --git a/README.md b/README.md
index fc09cb67..d5a881aa 100644
--- a/README.md
+++ b/README.md
@@ -137,6 +137,7 @@
| `leetcode.useWsl` | Specify whether to use WSL or not | `false` |
| `leetcode.endpoint` | Specify the active endpoint. Supported endpoints are: `leetcode`, `leetcode-cn` | `leetcode` |
| `leetcode.outputFolder`| Specify the relative path to save the problem files. Besides using customized path, there are also several reserved words which can be used here:
- `${tag}`: Categorize the problem according to their tags.
- `${language}`: Categorize the problem according to their language.
- `${difficulty}`: Categorize the problem according to their difficulty.
| N/A |
+| `leetcode.enableStatusBar` | Specify whether the LeetCode status bar will be shown or not. | `true` |
## Troubleshooting
When you meet any problem, you can check the [Troubleshooting Page](https://github.com/jdneo/vscode-leetcode/wiki/Troubleshooting) first.
diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md
index fc66aeaf..dda1b4ac 100644
--- a/docs/README_zh-CN.md
+++ b/docs/README_zh-CN.md
@@ -137,6 +137,7 @@
| `leetcode.useWsl` | 指定是否启用 WSL | `false` |
| `leetcode.endpoint` | 指定使用的终端,可用终端有:`leetcode`, `leetcode-cn` | `leetcode` |
| `leetcode.outputFolder` | 指定保存文件时所用的相对文件夹路径。除了用户自定义路径外,也可以使用保留项,包括:- `${tag}`: 根据题目的类别进行分类。
- `${language}`: 根据题目的语言进行分类。
- `${difficulty}`: 根据题目的难度进行分类。
| N/A |
+| `leetcode.enableStatusBar` | 指定是否在 VS Code 下方显示插件状态栏。 | `true` |
## 疑难解答
在遇到任何问题时,可以先查看一下[疑难解答](https://github.com/jdneo/vscode-leetcode/wiki/%E7%96%91%E9%9A%BE%E8%A7%A3%E7%AD%94)文档寻求帮助。
diff --git a/package.json b/package.json
index e97cce5d..56343331 100644
--- a/package.json
+++ b/package.json
@@ -287,6 +287,12 @@
"type": "string",
"scope": "application",
"description": "Specify the relative path to save the problem files."
+ },
+ "leetcode.enableStatusBar": {
+ "type": "boolean",
+ "default": true,
+ "scope": "application",
+ "description": "Specify whether the LeetCode status bar will be shown or not."
}
}
}
diff --git a/src/extension.ts b/src/extension.ts
index eb376a90..7a389142 100644
--- a/src/extension.ts
+++ b/src/extension.ts
@@ -15,7 +15,7 @@ import { LeetCodeTreeDataProvider } from "./explorer/LeetCodeTreeDataProvider";
import { leetCodeChannel } from "./leetCodeChannel";
import { leetCodeExecutor } from "./leetCodeExecutor";
import { leetCodeManager } from "./leetCodeManager";
-import { leetCodeStatusBarItem } from "./leetCodeStatusBarItem";
+import { leetCodeStatusBarController } from "./statusbar/leetCodeStatusBarController";
import { leetCodePreviewProvider } from "./webview/leetCodePreviewProvider";
import { leetCodeResultProvider } from "./webview/leetCodeResultProvider";
import { leetCodeSolutionProvider } from "./webview/leetCodeSolutionProvider";
@@ -26,7 +26,7 @@ export async function activate(context: vscode.ExtensionContext): Promise
}
leetCodeManager.on("statusChanged", () => {
- leetCodeStatusBarItem.updateStatusBar(leetCodeManager.getStatus(), leetCodeManager.getUser());
+ leetCodeStatusBarController.updateStatusBar(leetCodeManager.getStatus(), leetCodeManager.getUser());
leetCodeTreeDataProvider.refresh();
});
@@ -36,7 +36,7 @@ export async function activate(context: vscode.ExtensionContext): Promise
leetCodeSolutionProvider.initialize(context);
context.subscriptions.push(
- leetCodeStatusBarItem,
+ leetCodeStatusBarController,
leetCodeChannel,
leetCodePreviewProvider,
leetCodeResultProvider,
diff --git a/src/leetCodeStatusBarItem.ts b/src/statusbar/LeetCodeStatusBarItem.ts
similarity index 77%
rename from src/leetCodeStatusBarItem.ts
rename to src/statusbar/LeetCodeStatusBarItem.ts
index 224a3536..749bbfac 100644
--- a/src/leetCodeStatusBarItem.ts
+++ b/src/statusbar/LeetCodeStatusBarItem.ts
@@ -2,9 +2,9 @@
// Licensed under the MIT license.
import * as vscode from "vscode";
-import { UserStatus } from "./shared";
+import { UserStatus } from "../shared";
-class LeetCodeStatusBarItem implements vscode.Disposable {
+export class LeetCodeStatusBarItem implements vscode.Disposable {
private readonly statusBarItem: vscode.StatusBarItem;
constructor() {
@@ -25,9 +25,15 @@ class LeetCodeStatusBarItem implements vscode.Disposable {
}
}
+ public show(): void {
+ this.statusBarItem.show();
+ }
+
+ public hide(): void {
+ this.statusBarItem.hide();
+ }
+
public dispose(): void {
this.statusBarItem.dispose();
}
}
-
-export const leetCodeStatusBarItem: LeetCodeStatusBarItem = new LeetCodeStatusBarItem();
diff --git a/src/statusbar/leetCodeStatusBarController.ts b/src/statusbar/leetCodeStatusBarController.ts
new file mode 100644
index 00000000..177853a1
--- /dev/null
+++ b/src/statusbar/leetCodeStatusBarController.ts
@@ -0,0 +1,48 @@
+// Copyright (c) jdneo. All rights reserved.
+// Licensed under the MIT license.
+
+import { ConfigurationChangeEvent, Disposable, workspace, WorkspaceConfiguration } from "vscode";
+import { UserStatus } from "../shared";
+import { LeetCodeStatusBarItem } from "./LeetCodeStatusBarItem";
+
+class LeetCodeStatusBarController implements Disposable {
+ private statusBar: LeetCodeStatusBarItem;
+ private configurationChangeListener: Disposable;
+
+ constructor() {
+ this.statusBar = new LeetCodeStatusBarItem();
+ this.setStatusBarVisibility();
+
+ this.configurationChangeListener = workspace.onDidChangeConfiguration((event: ConfigurationChangeEvent) => {
+ if (event.affectsConfiguration("leetcode.enableStatusBar")) {
+ this.setStatusBarVisibility();
+ }
+ }, this);
+ }
+
+ public updateStatusBar(status: UserStatus, user?: string): void {
+ if (this.statusBar) {
+ this.statusBar.updateStatusBar(status, user);
+ }
+ }
+
+ public dispose(): void {
+ this.statusBar.dispose();
+ this.configurationChangeListener.dispose();
+ }
+
+ private setStatusBarVisibility(): void {
+ if (this.isStatusBarEnabled()) {
+ this.statusBar.show();
+ } else {
+ this.statusBar.hide();
+ }
+ }
+
+ private isStatusBarEnabled(): boolean {
+ const configuration: WorkspaceConfiguration = workspace.getConfiguration();
+ return configuration.get("leetcode.enableStatusBar", false);
+ }
+}
+
+export const leetCodeStatusBarController: LeetCodeStatusBarController = new LeetCodeStatusBarController();