Skip to content

tooling srctl: add GUI editor support and improve output spacing#188

Open
Daniel-Giszpenc wants to merge 2 commits into
kubernetes:mainfrom
Daniel-Giszpenc:srctl-gui-editor-support
Open

tooling srctl: add GUI editor support and improve output spacing#188
Daniel-Giszpenc wants to merge 2 commits into
kubernetes:mainfrom
Daniel-Giszpenc:srctl-gui-editor-support

Conversation

@Daniel-Giszpenc

Copy link
Copy Markdown
Contributor

Issue:
GUI editors like VS Code open in a new, separate process, so calling programs need GUI editors to be launched with a wait flag to know when the user has finished editing and closed the tab to act on the file. Terminal editors (nano, vim, vi) run directly inside the terminal session, so calling programs automatically wait for the editor process to finish and then act.

Previously there was no handling for an additional arg in the $EDITOR env-var value.

Also, the error and program output would start on the input line and be more difficult to read.

Solutions:

  1. Check if the editor var has a flag and if that are is --wait or -w in which case adjust the exec Cmd to move the flag into the command arguements.
  2. Add a new-line after the input string. Using \n instead of Println to preserve formatted string print.

- check for --wait or -w in $EDITOR env-var value and adjust if present
- separate input line from program stdout and stderr
@linux-foundation-easycla

linux-foundation-easycla Bot commented Apr 11, 2026

Copy link
Copy Markdown

CLA Signed

The committers listed above are authorized under a signed CLA.

@k8s-ci-robot

Copy link
Copy Markdown
Contributor

Welcome @Daniel-Giszpenc!

It looks like this is your first PR to kubernetes/sig-security 🎉. Please refer to our pull request process documentation to help your PR have a smooth ride to approval.

You will be prompted by a bot to use commands during the review process. Do not be afraid to follow the prompts! It is okay to experiment. Here is the bot commands documentation.

You can also check if kubernetes/sig-security has its own contribution guidelines.

You may want to refer to our testing guide if you run into trouble with your tests not passing.

If you are having difficulty getting your pull request seen, please follow the recommended escalation practices. Also, for tips and tricks in the contribution process you may want to read the Kubernetes contributor cheat sheet. We want to make sure your contribution gets all the attention it needs!

Thank you, and welcome to Kubernetes. 😃

@k8s-ci-robot k8s-ci-robot added the needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. label Apr 11, 2026
@k8s-ci-robot

Copy link
Copy Markdown
Contributor

Hi @Daniel-Giszpenc. Thanks for your PR.

I'm waiting for a kubernetes member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work.

Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@k8s-ci-robot k8s-ci-robot added size/XS Denotes a PR that changes 0-9 lines, ignoring generated files. cncf-cla: no Indicates the PR's author has not signed the CNCF CLA. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. and removed cncf-cla: no Indicates the PR's author has not signed the CNCF CLA. labels Apr 11, 2026
Comment thread sig-security-tooling/srctl/main.go Outdated
// It's important to use %q here to escape any unsafe bytes that
// would mess up the terminal output
fmt.Printf("%q", pressedKey)
fmt.Printf("%q\n", pressedKey)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

from memory I think we don't want that because in some situation it messes up the display, let me take a look

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mtardy Do you want some help looking into this or me to just cut from the PR as the main feature here is GUI editor support?

@tabbysable

Copy link
Copy Markdown
Member

/label tide/merge-method-squash
/ok-to-test
/approve

@k8s-ci-robot k8s-ci-robot added tide/merge-method-squash Denotes a PR that should be squashed by tide when it merges. ok-to-test Indicates a non-member PR verified by an org member that is safe to test. and removed needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. labels May 8, 2026
@k8s-ci-robot

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: Daniel-Giszpenc, tabbysable

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@k8s-ci-robot k8s-ci-robot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label May 8, 2026

@mtardy mtardy left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanksk!! I'll drop the other fix and and focus on the GUI thing you wanted to fix initially in this PR.

Comment on lines 100 to +107
// #nosec G204
// caution: the binary starts whatever EDITOR is provided by user.
cmd := exec.Command(editor, tmpFile.Name())
editorFields := strings.Fields(editor)
isGuiEditor := len(editorFields) == 2 && (editorFields[1] == "--wait" || editorFields[1] == "-w")
if isGuiEditor {
cmd = exec.Command(editorFields[0], editorFields[1], tmpFile.Name())
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe you want something like that so that we pass any args provided by the user in the env variables?

Suggested change
// #nosec G204
// caution: the binary starts whatever EDITOR is provided by user.
cmd := exec.Command(editor, tmpFile.Name())
editorFields := strings.Fields(editor)
isGuiEditor := len(editorFields) == 2 && (editorFields[1] == "--wait" || editorFields[1] == "-w")
if isGuiEditor {
cmd = exec.Command(editorFields[0], editorFields[1], tmpFile.Name())
}
editorFields := strings.Fields(editor)
if len(editorFields) == 0 {
return nil, fmt.Errorf("editor is empty")
}
args := append(editorFields[1:], tmpFile.Name())
// #nosec G204
// caution: the binary starts whatever EDITOR is provided by user.
cmd := exec.Command(editorFields[0], args...)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think the len 0 check is needed because we have an earlier check for if the EDITOR var is set previously.

I like the visual neatness and flexibility of how you pass the args am not sure if I prefer it over my way because if you look at how all the popular gui editors approach the wait argument, it's one additional argument that is always -w or --wait. My way supports stricter checking of the providing user input to make sure it is valid here. We may prefer the flexibility of a personal tool like this having looser checks here though so I am curious what you think. I am not sure what other arguments a user may want to use here and I know a gui editor will require -w or --wait so there should be some kind of error or warning for not having that with over 0 arguments set.

What do you think?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. ok-to-test Indicates a non-member PR verified by an org member that is safe to test. size/XS Denotes a PR that changes 0-9 lines, ignoring generated files. tide/merge-method-squash Denotes a PR that should be squashed by tide when it merges.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants