diff --git a/web/editor.tsx b/web/editor.tsx
index f700c434..3ce6da97 100644
--- a/web/editor.tsx
+++ b/web/editor.tsx
@@ -74,7 +74,7 @@ import {
vim,
yUndoManagerKeymap,
} from "./deps.ts";
-import { CommandHook } from "./hooks/command.ts";
+import { AppCommand, CommandHook } from "./hooks/command.ts";
import { SlashCommandHook } from "./hooks/slash_command.ts";
import { PathPageNavigator } from "./navigator.ts";
import reducer from "./reducer.ts";
@@ -926,7 +926,7 @@ export class Editor {
});
}
}}
- commands={viewState.commands}
+ commands={this.getCommandsByContext(viewState)}
vimMode={viewState.uiOptions.vimMode}
darkMode={viewState.uiOptions.darkMode}
completer={this.miniEditorComplete.bind(this)}
@@ -1069,6 +1069,23 @@ export class Editor {
preactRender(, container);
}
+ private getCommandsByContext(
+ state: AppViewState,
+ ): Map {
+ const commands = new Map(state.commands);
+ for (const [k, v] of state.commands.entries()) {
+ if (
+ v.command.contexts &&
+ (!state.showCommandPaletteContext ||
+ !v.command.contexts.includes(state.showCommandPaletteContext))
+ ) {
+ commands.delete(k);
+ }
+ }
+
+ return commands;
+ }
+
private getContext(): string | undefined {
const state = this.editorView!.state;
const selection = state.selection.main;
diff --git a/web/reducer.ts b/web/reducer.ts
index e345fa47..9675e5ef 100644
--- a/web/reducer.ts
+++ b/web/reducer.ts
@@ -63,25 +63,17 @@ export default function reducer(
};
}
case "show-palette": {
- const commands = new Map(state.commands);
- for (const [k, v] of state.commands.entries()) {
- if (
- v.command.contexts &&
- (!action.context || !v.command.contexts.includes(action.context))
- ) {
- commands.delete(k);
- }
- }
return {
...state,
- commands,
showCommandPalette: true,
+ showCommandPaletteContext: action.context,
};
}
case "hide-palette":
return {
...state,
showCommandPalette: false,
+ showCommandPaletteContext: undefined,
};
case "command-run":
return {
diff --git a/web/types.ts b/web/types.ts
index d730684b..7ef99703 100644
--- a/web/types.ts
+++ b/web/types.ts
@@ -29,6 +29,7 @@ export type AppViewState = {
isLoading: boolean;
showPageNavigator: boolean;
showCommandPalette: boolean;
+ showCommandPaletteContext?: string;
unsavedChanges: boolean;
panels: { [key: string]: PanelConfig };
allPages: Set;