diff --git a/frontend/app/store/keymodel.ts b/frontend/app/store/keymodel.ts index 59dd55d12..5c94087c8 100644 --- a/frontend/app/store/keymodel.ts +++ b/frontend/app/store/keymodel.ts @@ -8,6 +8,7 @@ import { getAllBlockComponentModels, getApi, getBlockComponentModel, + getSettingsKeyAtom, globalStore, refocusNode, WOS, @@ -162,12 +163,19 @@ function globalRefocus() { } async function handleCmdN() { + const termAutoClose = globalStore.get(getSettingsKeyAtom("term:autoclose")) as boolean | undefined; + const termAutoCloseOnError = globalStore.get(getSettingsKeyAtom("term:autocloseonerror")) as boolean | undefined; + const termAutoCloseDelay = globalStore.get(getSettingsKeyAtom("term:autoclosedelay")) as number | undefined; + const termBlockDef: BlockDef = { meta: { view: "term", controller: "shell", + "cmd:closeonexitforce": termAutoCloseOnError ?? false, + "cmd:closeonexitdelay": termAutoCloseDelay ?? 2000, }, }; + const layoutModel = getLayoutModelForStaticTab(); const focusedNode = globalStore.get(layoutModel.focusedNode); if (focusedNode != null) { diff --git a/frontend/types/gotypes.d.ts b/frontend/types/gotypes.d.ts index 4354af5cd..5e964a368 100644 --- a/frontend/types/gotypes.d.ts +++ b/frontend/types/gotypes.d.ts @@ -601,6 +601,9 @@ declare global { "term:copyonselect"?: boolean; "term:transparency"?: number; "term:allowbracketedpaste"?: boolean; + "term:autoclose"?: boolean; + "term:autocloseonerror"?: boolean; + "term:autoclosedelay"?: number; "editor:minimapenabled"?: boolean; "editor:stickyscrollenabled"?: boolean; "editor:wordwrap"?: boolean; diff --git a/pkg/wconfig/defaultconfig/settings.json b/pkg/wconfig/defaultconfig/settings.json index 3da7e6fd2..92b505fb6 100644 --- a/pkg/wconfig/defaultconfig/settings.json +++ b/pkg/wconfig/defaultconfig/settings.json @@ -21,5 +21,8 @@ "window:confirmclose": true, "window:savelastwindow": true, "telemetry:enabled": true, - "term:copyonselect": true + "term:copyonselect": true, + "term:autoclose": true, + "term:autocloseonerror": false, + "term:autoclosedelay": 2000 } diff --git a/pkg/wconfig/defaultconfig/widgets.json b/pkg/wconfig/defaultconfig/widgets.json index 97a3d26c1..067e76b36 100644 --- a/pkg/wconfig/defaultconfig/widgets.json +++ b/pkg/wconfig/defaultconfig/widgets.json @@ -6,7 +6,10 @@ "blockdef": { "meta": { "view": "term", - "controller": "shell" + "controller": "shell", + "cmd:closeonexit": true, + "cmd:closeonexitforce": false, + "cmd:closeonexitdelay": 2000 } } }, diff --git a/pkg/wconfig/metaconsts.go b/pkg/wconfig/metaconsts.go index 4e95a3373..ab8977553 100644 --- a/pkg/wconfig/metaconsts.go +++ b/pkg/wconfig/metaconsts.go @@ -35,6 +35,9 @@ const ( ConfigKey_TermCopyOnSelect = "term:copyonselect" ConfigKey_TermTransparency = "term:transparency" ConfigKey_TermAllowBracketedPaste = "term:allowbracketedpaste" + ConfigKey_TermAutoClose = "term:autoclose" + ConfigKey_TermAutoCloseOnError = "term:autocloseonerror" + ConfigKey_TermAutoCloseDelay = "term:autoclosedelay" ConfigKey_EditorMinimapEnabled = "editor:minimapenabled" ConfigKey_EditorStickyScrollEnabled = "editor:stickyscrollenabled" diff --git a/pkg/wconfig/settingsconfig.go b/pkg/wconfig/settingsconfig.go index 354975b78..fa3c14bcb 100644 --- a/pkg/wconfig/settingsconfig.go +++ b/pkg/wconfig/settingsconfig.go @@ -62,6 +62,9 @@ type SettingsType struct { TermCopyOnSelect *bool `json:"term:copyonselect,omitempty"` TermTransparency *float64 `json:"term:transparency,omitempty"` TermAllowBracketedPaste *bool `json:"term:allowbracketedpaste,omitempty"` + TermAutoClose *bool `json:"term:autoclose,omitempty"` + TermAutoCloseOnError *bool `json:"term:autocloseonerror,omitempty"` + TermAutoCloseDelay *float64 `json:"term:autoclosedelay,omitempty"` EditorMinimapEnabled bool `json:"editor:minimapenabled,omitempty"` EditorStickyScrollEnabled bool `json:"editor:stickyscrollenabled,omitempty"`