From 1d77b2d5d642f6d602454928674cfce27269878f Mon Sep 17 00:00:00 2001 From: sawka Date: Tue, 5 Sep 2023 22:09:24 -0700 Subject: [PATCH] add codeview command --- pkg/cmdrunner/cmdrunner.go | 19 +++++++++++++++---- pkg/cmdrunner/shparse.go | 2 ++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/pkg/cmdrunner/cmdrunner.go b/pkg/cmdrunner/cmdrunner.go index e00e52e3..3a2504bc 100644 --- a/pkg/cmdrunner/cmdrunner.go +++ b/pkg/cmdrunner/cmdrunner.go @@ -218,7 +218,9 @@ func init() { registerCmdFn("edit:test", EditTestCommand) + // CodeEditCommand is overloaded to do codeedit and codeview registerCmdFn("codeedit", CodeEditCommand) + registerCmdFn("codeview", CodeEditCommand) } func getValidCommands() []string { @@ -3184,17 +3186,17 @@ func ViewTestCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (sst func CodeEditCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (sstore.UpdatePacket, error) { if len(pk.Args) == 0 { - return nil, fmt.Errorf("/codeedit requires an argument (file name)") + return nil, fmt.Errorf("%s requires an argument (file name)", GetCmdStr(pk)) } // TODO more error checking on filename format? if pk.Args[0] == "" { - return nil, fmt.Errorf("/codeedit argument cannot be empty") + return nil, fmt.Errorf("%s argument cannot be empty", GetCmdStr(pk)) } ids, err := resolveUiIds(ctx, pk, R_Session|R_Screen|R_RemoteConnected) if err != nil { return nil, err } - outputStr := fmt.Sprintf("codeedit %q", pk.Args[0]) + outputStr := fmt.Sprintf("%s %q", GetCmdStr(pk), pk.Args[0]) cmd, err := makeStaticCmd(ctx, GetCmdStr(pk), ids, pk.GetRawStr(), []byte(outputStr)) if err != nil { // TODO tricky error since the command was a success, but we can't show the output @@ -3210,9 +3212,18 @@ func CodeEditCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (sst lineState := make(map[string]any) lineState["prompt:source"] = "file" lineState["prompt:file"] = pk.Args[0] + if GetCmdStr(pk) == "codeview" { + lineState["mode"] = "view" + } else { + lineState["mode"] = "edit" + } + // TODO better error checking for lang + if pk.Kwargs["lang"] != "" && len(pk.Kwargs["lang"]) <= 50 { + lineState["lang"] = pk.Kwargs["lang"] + } err = sstore.UpdateLineState(ctx, ids.ScreenId, update.Line.LineId, lineState) if err != nil { - return nil, fmt.Errorf("/codeedit error updating line state: %v", err) + return nil, fmt.Errorf("%s error updating line state: %v", GetCmdStr(pk), err) } update.Line.LineState = lineState update.Interactive = pk.Interactive diff --git a/pkg/cmdrunner/shparse.go b/pkg/cmdrunner/shparse.go index 8ca9853f..d21e4e56 100644 --- a/pkg/cmdrunner/shparse.go +++ b/pkg/cmdrunner/shparse.go @@ -26,6 +26,8 @@ var BareMetaCmds = []BareMetaCmdDecl{ BareMetaCmdDecl{"connect", "cr"}, BareMetaCmdDecl{"clear", "clear"}, BareMetaCmdDecl{"reset", "reset"}, + BareMetaCmdDecl{"codeedit", "codeedit"}, + BareMetaCmdDecl{"codeview", "codeview"}, } const (