From b2e98d03e506cdabfdb14d54b2c6a9759986f57f Mon Sep 17 00:00:00 2001 From: sawka Date: Fri, 8 Nov 2024 11:04:45 -0800 Subject: [PATCH 1/2] wsh editconfig command to open up settings.json directly. also a json mode to wsh version --- cmd/wsh/cmd/wshcmd-editconfig.go | 52 ++++++++++++++++++++++++++++++++ cmd/wsh/cmd/wshcmd-version.go | 28 +++++++++++++++-- 2 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 cmd/wsh/cmd/wshcmd-editconfig.go diff --git a/cmd/wsh/cmd/wshcmd-editconfig.go b/cmd/wsh/cmd/wshcmd-editconfig.go new file mode 100644 index 0000000000..7d8eb3689c --- /dev/null +++ b/cmd/wsh/cmd/wshcmd-editconfig.go @@ -0,0 +1,52 @@ +// Copyright 2024, Command Line Inc. +// SPDX-License-Identifier: Apache-2.0 + +package cmd + +import ( + "path/filepath" + + "github.com/spf13/cobra" + "github.com/wavetermdev/waveterm/pkg/waveobj" + "github.com/wavetermdev/waveterm/pkg/wshrpc" + "github.com/wavetermdev/waveterm/pkg/wshrpc/wshclient" +) + +var editConfigCmd = &cobra.Command{ + Use: "editconfig", + Short: "edit Wave settings", + Args: cobra.NoArgs, + Run: editConfigRun, + PreRunE: preRunSetupRpcClient, +} + +func init() { + rootCmd.AddCommand(editConfigCmd) +} + +func editConfigRun(cmd *cobra.Command, args []string) { + // Get config directory from Wave info + resp, err := wshclient.WaveInfoCommand(RpcClient, &wshrpc.RpcOpts{Timeout: 2000}) + if err != nil { + WriteStderr("[error] getting Wave info: %v\n", err) + return + } + + settingsFile := filepath.Join(resp.ConfigDir, "settings.json") + + wshCmd := &wshrpc.CommandCreateBlockData{ + BlockDef: &waveobj.BlockDef{ + Meta: map[string]interface{}{ + waveobj.MetaKey_View: "preview", + waveobj.MetaKey_File: settingsFile, + waveobj.MetaKey_Edit: true, + }, + }, + } + + _, err = RpcClient.SendRpcRequest(wshrpc.Command_CreateBlock, wshCmd, &wshrpc.RpcOpts{Timeout: 2000}) + if err != nil { + WriteStderr("[error] opening settings file: %v\n", err) + return + } +} diff --git a/cmd/wsh/cmd/wshcmd-version.go b/cmd/wsh/cmd/wshcmd-version.go index 480e9ea350..cf4debf1a9 100644 --- a/cmd/wsh/cmd/wshcmd-version.go +++ b/cmd/wsh/cmd/wshcmd-version.go @@ -4,6 +4,7 @@ package cmd import ( + "encoding/json" "fmt" "github.com/spf13/cobra" @@ -14,36 +15,59 @@ import ( ) var versionVerbose bool +var versionJSON bool // versionCmd represents the version command var versionCmd = &cobra.Command{ - Use: "version [-v]", + Use: "version [-v] [--json]", Short: "Print the version number of wsh", RunE: runVersionCmd, } func init() { versionCmd.Flags().BoolVarP(&versionVerbose, "verbose", "v", false, "Display full version information") + versionCmd.Flags().BoolVar(&versionJSON, "json", false, "Output version information in JSON format") rootCmd.AddCommand(versionCmd) } func runVersionCmd(cmd *cobra.Command, args []string) error { - if !versionVerbose { + if !versionVerbose && !versionJSON { WriteStdout("wsh v%s\n", wavebase.WaveVersion) return nil } + err := preRunSetupRpcClient(cmd, args) if err != nil { return err } + resp, err := wshclient.WaveInfoCommand(RpcClient, &wshrpc.RpcOpts{Timeout: 2000}) if err != nil { return err } + updateChannel, err := wshclient.GetUpdateChannelCommand(RpcClient, &wshrpc.RpcOpts{Timeout: 2000, Route: wshutil.ElectronRoute}) if err != nil { return err } + + if versionJSON { + info := map[string]interface{}{ + "version": resp.Version, + "buildtime": resp.BuildTime, + "configdir": resp.ConfigDir, + "datadir": resp.DataDir, + "updatechannel": updateChannel, + } + outBArr, err := json.MarshalIndent(info, "", " ") + if err != nil { + return fmt.Errorf("formatting version info: %v", err) + } + WriteStdout("%s\n", string(outBArr)) + return nil + } + + // Default verbose text output fmt.Printf("v%s (%s)\n", resp.Version, resp.BuildTime) fmt.Printf("configdir: %s\n", resp.ConfigDir) fmt.Printf("datadir: %s\n", resp.DataDir) From abada75989846d3f67443d3a818086c76ed43de8 Mon Sep 17 00:00:00 2001 From: sawka Date: Fri, 8 Nov 2024 11:08:17 -0800 Subject: [PATCH 2/2] allow editconfig to take a filename as well --- cmd/wsh/cmd/wshcmd-editconfig.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/cmd/wsh/cmd/wshcmd-editconfig.go b/cmd/wsh/cmd/wshcmd-editconfig.go index 7d8eb3689c..804a5f753c 100644 --- a/cmd/wsh/cmd/wshcmd-editconfig.go +++ b/cmd/wsh/cmd/wshcmd-editconfig.go @@ -13,9 +13,10 @@ import ( ) var editConfigCmd = &cobra.Command{ - Use: "editconfig", - Short: "edit Wave settings", - Args: cobra.NoArgs, + Use: "editconfig [configfile]", + Short: "edit Wave configuration files", + Long: "Edit Wave configuration files. Defaults to settings.json if no file specified. Common files: settings.json, presets.json, widgets.json", + Args: cobra.MaximumNArgs(1), Run: editConfigRun, PreRunE: preRunSetupRpcClient, } @@ -32,7 +33,12 @@ func editConfigRun(cmd *cobra.Command, args []string) { return } - settingsFile := filepath.Join(resp.ConfigDir, "settings.json") + configFile := "settings.json" // default + if len(args) > 0 { + configFile = args[0] + } + + settingsFile := filepath.Join(resp.ConfigDir, configFile) wshCmd := &wshrpc.CommandCreateBlockData{ BlockDef: &waveobj.BlockDef{ @@ -46,7 +52,7 @@ func editConfigRun(cmd *cobra.Command, args []string) { _, err = RpcClient.SendRpcRequest(wshrpc.Command_CreateBlock, wshCmd, &wshrpc.RpcOpts{Timeout: 2000}) if err != nil { - WriteStderr("[error] opening settings file: %v\n", err) + WriteStderr("[error] opening config file: %v\n", err) return } }