tooling srctl: add GUI editor support and improve output spacing#188
tooling srctl: add GUI editor support and improve output spacing#188Daniel-Giszpenc wants to merge 2 commits into
Conversation
- check for --wait or -w in $EDITOR env-var value and adjust if present - separate input line from program stdout and stderr
|
Welcome @Daniel-Giszpenc! |
|
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 Regular contributors should join the org to skip this step. Once the patch is verified, the new status will be reflected by the I understand the commands that are listed here. DetailsInstructions 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. |
| // 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) |
There was a problem hiding this comment.
from memory I think we don't want that because in some situation it messes up the display, let me take a look
There was a problem hiding this comment.
@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?
|
/label tide/merge-method-squash |
|
[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 DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
mtardy
left a comment
There was a problem hiding this comment.
Thanksk!! I'll drop the other fix and and focus on the GUI thing you wanted to fix initially in this PR.
| // #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()) | ||
| } |
There was a problem hiding this comment.
Maybe you want something like that so that we pass any args provided by the user in the env variables?
| // #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...) |
There was a problem hiding this comment.
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?
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: