From 878a7285ab04494de9c05007b98ea0d1271badc5 Mon Sep 17 00:00:00 2001 From: Mike Sawka Date: Mon, 9 Dec 2024 14:48:16 -0800 Subject: [PATCH] implement tab:preset, and increase active tab opacity (#1439) --- frontend/app/tab/tab.scss | 4 ++-- frontend/types/gotypes.d.ts | 1 + pkg/blockcontroller/blockcontroller.go | 2 +- pkg/service/objectservice/objectservice.go | 2 +- pkg/wconfig/metaconsts.go | 2 ++ pkg/wconfig/settingsconfig.go | 2 ++ pkg/wcore/workspace.go | 18 ++++++++++++++++++ pkg/wshrpc/wshserver/wshserver.go | 2 +- pkg/wstore/wstore.go | 4 ++-- 9 files changed, 30 insertions(+), 7 deletions(-) diff --git a/frontend/app/tab/tab.scss b/frontend/app/tab/tab.scss index 771df50a4..031276698 100644 --- a/frontend/app/tab/tab.scss +++ b/frontend/app/tab/tab.scss @@ -41,7 +41,7 @@ .tab-inner { border-color: transparent; border-radius: 6px; - background: rgb(from var(--main-text-color) r g b / 0.07); + background: rgb(from var(--main-text-color) r g b / 0.14); } .name { @@ -111,7 +111,7 @@ body:not(.nohover) .tab:hover { .tab-inner { border-color: transparent; - background: rgb(from var(--main-text-color) r g b / 0.07); + background: rgb(from var(--main-text-color) r g b / 0.14); } .close { visibility: visible; diff --git a/frontend/types/gotypes.d.ts b/frontend/types/gotypes.d.ts index 1e4d53ca1..8584c1260 100644 --- a/frontend/types/gotypes.d.ts +++ b/frontend/types/gotypes.d.ts @@ -638,6 +638,7 @@ declare global { "autoupdate:installonquit"?: boolean; "autoupdate:channel"?: string; "preview:showhiddenfiles"?: boolean; + "tab:preset"?: string; "widget:*"?: boolean; "widget:showhelp"?: boolean; "window:*"?: boolean; diff --git a/pkg/blockcontroller/blockcontroller.go b/pkg/blockcontroller/blockcontroller.go index 0f863529d..35d32eb68 100644 --- a/pkg/blockcontroller/blockcontroller.go +++ b/pkg/blockcontroller/blockcontroller.go @@ -623,7 +623,7 @@ func (bc *BlockController) run(bdata *waveobj.Block, blockMeta map[string]any, r waveobj.MetaKey_CmdRunOnce: false, waveobj.MetaKey_CmdRunOnStart: false, } - err := wstore.UpdateObjectMeta(ctx, waveobj.MakeORef(waveobj.OType_Block, bc.BlockId), metaUpdate) + err := wstore.UpdateObjectMeta(ctx, waveobj.MakeORef(waveobj.OType_Block, bc.BlockId), metaUpdate, false) if err != nil { log.Printf("error updating block meta (in blockcontroller.run): %v\n", err) return diff --git a/pkg/service/objectservice/objectservice.go b/pkg/service/objectservice/objectservice.go index b489ad664..487372c89 100644 --- a/pkg/service/objectservice/objectservice.go +++ b/pkg/service/objectservice/objectservice.go @@ -143,7 +143,7 @@ func (svc *ObjectService) UpdateObjectMeta(uiContext waveobj.UIContext, orefStr if err != nil { return nil, fmt.Errorf("error parsing object reference: %w", err) } - err = wstore.UpdateObjectMeta(ctx, *oref, meta) + err = wstore.UpdateObjectMeta(ctx, *oref, meta, false) if err != nil { return nil, fmt.Errorf("error updateing %q meta: %w", orefStr, err) } diff --git a/pkg/wconfig/metaconsts.go b/pkg/wconfig/metaconsts.go index 87d8940dd..40c40f592 100644 --- a/pkg/wconfig/metaconsts.go +++ b/pkg/wconfig/metaconsts.go @@ -48,6 +48,8 @@ const ( ConfigKey_PreviewShowHiddenFiles = "preview:showhiddenfiles" + ConfigKey_TabPreset = "tab:preset" + ConfigKey_WidgetClear = "widget:*" ConfigKey_WidgetShowHelp = "widget:showhelp" diff --git a/pkg/wconfig/settingsconfig.go b/pkg/wconfig/settingsconfig.go index ae49174cf..5b64adae7 100644 --- a/pkg/wconfig/settingsconfig.go +++ b/pkg/wconfig/settingsconfig.go @@ -75,6 +75,8 @@ type SettingsType struct { PreviewShowHiddenFiles *bool `json:"preview:showhiddenfiles,omitempty"` + TabPreset string `json:"tab:preset,omitempty"` + WidgetClear bool `json:"widget:*,omitempty"` WidgetShowHelp *bool `json:"widget:showhelp,omitempty"` diff --git a/pkg/wcore/workspace.go b/pkg/wcore/workspace.go index 6c8ba439c..4363d9a22 100644 --- a/pkg/wcore/workspace.go +++ b/pkg/wcore/workspace.go @@ -11,6 +11,7 @@ import ( "github.com/wavetermdev/waveterm/pkg/telemetry" "github.com/wavetermdev/waveterm/pkg/util/utilfn" "github.com/wavetermdev/waveterm/pkg/waveobj" + "github.com/wavetermdev/waveterm/pkg/wconfig" "github.com/wavetermdev/waveterm/pkg/wps" "github.com/wavetermdev/waveterm/pkg/wshrpc" "github.com/wavetermdev/waveterm/pkg/wstore" @@ -80,6 +81,16 @@ func GetWorkspace(ctx context.Context, wsID string) (*waveobj.Workspace, error) return wstore.DBMustGet[*waveobj.Workspace](ctx, wsID) } +func getTabPresetMeta() (waveobj.MetaMapType, error) { + settings := wconfig.GetWatcher().GetFullConfig() + tabPreset := settings.Settings.TabPreset + if tabPreset == "" { + return nil, nil + } + presetMeta := settings.Presets[tabPreset] + return presetMeta, nil +} + // returns tabid func CreateTab(ctx context.Context, workspaceId string, tabName string, activateTab bool, pinned bool, isInitialLaunch bool) (string, error) { if tabName == "" { @@ -108,6 +119,13 @@ func CreateTab(ctx context.Context, workspaceId string, tabName string, activate if err != nil { return tab.OID, fmt.Errorf("error applying new tab layout: %w", err) } + presetMeta, presetErr := getTabPresetMeta() + if presetErr != nil { + log.Printf("error getting tab preset meta: %v\n", presetErr) + } else if presetMeta != nil && len(presetMeta) > 0 { + tabORef := waveobj.ORefFromWaveObj(tab) + wstore.UpdateObjectMeta(ctx, *tabORef, presetMeta, true) + } } telemetry.GoUpdateActivityWrap(wshrpc.ActivityUpdate{NewTab: 1}, "createtab") return tab.OID, nil diff --git a/pkg/wshrpc/wshserver/wshserver.go b/pkg/wshrpc/wshserver/wshserver.go index 86d4b24d7..9e0cd1702 100644 --- a/pkg/wshrpc/wshserver/wshserver.go +++ b/pkg/wshrpc/wshserver/wshserver.go @@ -120,7 +120,7 @@ func (ws *WshServer) GetMetaCommand(ctx context.Context, data wshrpc.CommandGetM func (ws *WshServer) SetMetaCommand(ctx context.Context, data wshrpc.CommandSetMetaData) error { log.Printf("SetMetaCommand: %s | %v\n", data.ORef, data.Meta) oref := data.ORef - err := wstore.UpdateObjectMeta(ctx, oref, data.Meta) + err := wstore.UpdateObjectMeta(ctx, oref, data.Meta, false) if err != nil { return fmt.Errorf("error updating object meta: %w", err) } diff --git a/pkg/wstore/wstore.go b/pkg/wstore/wstore.go index 508701a1c..3ba3fab31 100644 --- a/pkg/wstore/wstore.go +++ b/pkg/wstore/wstore.go @@ -53,7 +53,7 @@ func DeleteTab(ctx context.Context, workspaceId string, tabId string) error { }) } -func UpdateObjectMeta(ctx context.Context, oref waveobj.ORef, meta waveobj.MetaMapType) error { +func UpdateObjectMeta(ctx context.Context, oref waveobj.ORef, meta waveobj.MetaMapType, mergeSpecial bool) error { return WithTx(ctx, func(tx *TxWrap) error { if oref.IsEmpty() { return fmt.Errorf("empty object reference") @@ -66,7 +66,7 @@ func UpdateObjectMeta(ctx context.Context, oref waveobj.ORef, meta waveobj.MetaM if objMeta == nil { objMeta = make(map[string]any) } - newMeta := waveobj.MergeMeta(objMeta, meta, false) + newMeta := waveobj.MergeMeta(objMeta, meta, mergeSpecial) waveobj.SetMeta(obj, newMeta) DBUpdate(tx.Context(), obj) return nil