diff --git a/docs/docs/config.mdx b/docs/docs/config.mdx
index aad9e7d8c6..152655a0b0 100644
--- a/docs/docs/config.mdx
+++ b/docs/docs/config.mdx
@@ -40,6 +40,9 @@ wsh editconfig
| app:showoverlayblocknums | bool | Set to false to disable the Ctrl+Shift block number overlay that appears when holding Ctrl+Shift (defaults to true) |
| app:ctrlvpaste | bool | On Windows/Linux, when null (default) uses Control+V on Windows only. Set to true to force Control+V on all non-macOS platforms, false to disable the accelerator. macOS always uses Command+V regardless of this setting |
| app:confirmquit | bool | Set to false to disable the quit confirmation dialog when closing Wave Terminal (defaults to true, requires app restart) |
+| app:hideaibutton | bool | Set to true to hide the AI button in the tab bar (defaults to false) |
+| app:disablectrlshiftarrows | bool | Set to true to disable Ctrl+Shift+Arrow keybindings for block navigation (defaults to false) |
+| app:disablectrlshiftdisplay | bool | Set to true to disable the Ctrl+Shift visual indicator display (defaults to false) |
| ai:preset | string | the default AI preset to use |
| ai:baseurl | string | Set the AI Base Url (must be OpenAI compatible) |
| ai:apitoken | string | your AI api token |
@@ -67,7 +70,7 @@ wsh editconfig
| term:macoptionismeta | bool | on macOS, treat the Option key as Meta key for terminal keybindings (default false) |
| term:bellsound | bool | when enabled, plays the system beep sound when the terminal bell (BEL character) is received (default false) |
| term:bellindicator | bool | when enabled, shows a visual indicator in the tab when the terminal bell is received (default false) |
-| term:durable | bool | makes remote terminal sessions durable across network disconnects (defaults to true) |
+| term:durable | bool | makes remote terminal sessions durable across network disconnects (defaults to false) |
| editor:minimapenabled | bool | set to false to disable editor minimap |
| editor:stickyscrollenabled | bool | enables monaco editor's stickyScroll feature (pinning headers of current context, e.g. class names, method names, etc.), defaults to false |
| editor:wordwrap | bool | set to true to enable word wrapping in the editor (defaults to false) |
@@ -99,12 +102,13 @@ wsh editconfig
| window:showmenubar | bool | set to use the OS-native menu bar (Windows and Linux only, requires app restart) |
| window:nativetitlebar | bool | set to use the OS-native title bar, rather than the overlay (Windows and Linux only, requires app restart) |
| window:disablehardwareacceleration | bool | set to disable Chromium hardware acceleration to resolve graphical bugs (requires app restart) |
+| window:fullscreenonlaunch | bool | set to true to launch the foreground window in fullscreen mode (defaults to false) |
| window:savelastwindow | bool | when `true`, the last window that is closed is preserved and is reopened the next time the app is launched (defaults to `true`) |
| window:confirmonclose | bool | when `true`, a prompt will ask a user to confirm that they want to close a window if it has an unsaved workspace with more than one tab (defaults to `true`) |
| window:dimensions | string | set the default dimensions for new windows using the format "WIDTHxHEIGHT" (e.g. "1920x1080"). when a new window is created, these dimensions will be automatically applied. The width and height values should be specified in pixels. |
| telemetry:enabled | bool | set to enable/disable telemetry |
-For reference, this is the current default configuration (v0.11.5):
+For reference, this is the current default configuration (v0.14.0):
```json
{
@@ -114,6 +118,9 @@ For reference, this is the current default configuration (v0.11.5):
"ai:timeoutms": 60000,
"app:defaultnewblock": "term",
"app:confirmquit": true,
+ "app:hideaibutton": false,
+ "app:disablectrlshiftarrows": false,
+ "app:disablectrlshiftdisplay": false,
"autoupdate:enabled": true,
"autoupdate:installonquit": true,
"autoupdate:intervalms": 3600000,
@@ -128,6 +135,7 @@ For reference, this is the current default configuration (v0.11.5):
"window:magnifiedblockopacity": 0.6,
"window:magnifiedblocksize": 0.9,
"window:magnifiedblockblurprimarypx": 10,
+ "window:fullscreenonlaunch": false,
"window:magnifiedblockblursecondarypx": 2,
"window:confirmclose": true,
"window:savelastwindow": true,
@@ -135,7 +143,7 @@ For reference, this is the current default configuration (v0.11.5):
"term:bellsound": false,
"term:bellindicator": false,
"term:copyonselect": true,
- "term:durable": true,
+ "term:durable": false,
"waveai:showcloudmodes": true,
"waveai:defaultmode": "waveai@balanced"
}
diff --git a/frontend/app/store/keymodel.ts b/frontend/app/store/keymodel.ts
index 318d1d775a..c83edbb779 100644
--- a/frontend/app/store/keymodel.ts
+++ b/frontend/app/store/keymodel.ts
@@ -76,12 +76,15 @@ function getSimpleControlShiftAtom() {
function setControlShift() {
globalStore.set(simpleControlShiftAtom, true);
- setTimeout(() => {
- const simpleState = globalStore.get(simpleControlShiftAtom);
- if (simpleState) {
- globalStore.set(atoms.controlShiftDelayAtom, true);
- }
- }, 400);
+ const disableDisplay = globalStore.get(getSettingsKeyAtom("app:disablectrlshiftdisplay"));
+ if (!disableDisplay) {
+ setTimeout(() => {
+ const simpleState = globalStore.get(simpleControlShiftAtom);
+ if (simpleState) {
+ globalStore.set(atoms.controlShiftDelayAtom, true);
+ }
+ }, 400);
+ }
}
function unsetControlShift() {
@@ -528,18 +531,34 @@ function registerGlobalKeys() {
return true;
});
globalKeyMap.set("Ctrl:Shift:ArrowUp", () => {
+ const disableCtrlShiftArrows = globalStore.get(getSettingsKeyAtom("app:disablectrlshiftarrows"));
+ if (disableCtrlShiftArrows) {
+ return false;
+ }
switchBlockInDirection(NavigateDirection.Up);
return true;
});
globalKeyMap.set("Ctrl:Shift:ArrowDown", () => {
+ const disableCtrlShiftArrows = globalStore.get(getSettingsKeyAtom("app:disablectrlshiftarrows"));
+ if (disableCtrlShiftArrows) {
+ return false;
+ }
switchBlockInDirection(NavigateDirection.Down);
return true;
});
globalKeyMap.set("Ctrl:Shift:ArrowLeft", () => {
+ const disableCtrlShiftArrows = globalStore.get(getSettingsKeyAtom("app:disablectrlshiftarrows"));
+ if (disableCtrlShiftArrows) {
+ return false;
+ }
switchBlockInDirection(NavigateDirection.Left);
return true;
});
globalKeyMap.set("Ctrl:Shift:ArrowRight", () => {
+ const disableCtrlShiftArrows = globalStore.get(getSettingsKeyAtom("app:disablectrlshiftarrows"));
+ if (disableCtrlShiftArrows) {
+ return false;
+ }
switchBlockInDirection(NavigateDirection.Right);
return true;
});
diff --git a/frontend/app/tab/tabbar.tsx b/frontend/app/tab/tabbar.tsx
index acd23ad3a9..3f3e662a88 100644
--- a/frontend/app/tab/tabbar.tsx
+++ b/frontend/app/tab/tabbar.tsx
@@ -5,7 +5,7 @@ import { Button } from "@/app/element/button";
import { modalsModel } from "@/app/store/modalmodel";
import { WorkspaceLayoutModel } from "@/app/workspace/workspace-layout-model";
import { deleteLayoutModelForTab } from "@/layout/index";
-import { atoms, createTab, getApi, globalStore, setActiveTab } from "@/store/global";
+import { atoms, createTab, getApi, getSettingsKeyAtom, globalStore, setActiveTab } from "@/store/global";
import { isMacOS, isWindows } from "@/util/platformutil";
import { fireAndForget } from "@/util/util";
import { useAtomValue } from "jotai";
@@ -44,12 +44,17 @@ interface TabBarProps {
const WaveAIButton = memo(() => {
const aiPanelOpen = useAtomValue(WorkspaceLayoutModel.getInstance().panelVisibleAtom);
+ const hideAiButton = useAtomValue(getSettingsKeyAtom("app:hideaibutton"));
const onClick = () => {
const currentVisible = WorkspaceLayoutModel.getInstance().getAIPanelVisible();
WorkspaceLayoutModel.getInstance().setAIPanelVisible(!currentVisible);
};
+ if (hideAiButton) {
+ return null;
+ }
+
return (