Skip to content

Use readline for reading git commit messages #8

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Aug 16, 2014

Conversation

nilbus
Copy link
Contributor

@nilbus nilbus commented Aug 15, 2014

This way, you can use the arrow keys, etc. to edit input, and they work, rather than outputting control sequences.

I believe this is the only instance of reading user input where readline is useful.

This way, you can use the arrow keys, etc. to edit input, and they work,
rather than outputting control sequences.
@nilbus
Copy link
Contributor Author

nilbus commented Aug 15, 2014

It seems this breaks the build. Investigating.

@nilbus
Copy link
Contributor Author

nilbus commented Aug 15, 2014

That gets close, and I like how you use vared for zsh. The tricky thing though is that read -e in bash acts as if input starts at the beginning of the line, which is why read needs to provide the prompt: read -e -p 'Git comment: '. zsh's vared does the same thing but actually clears the line, so the echo statement actually has no effect.

I will put something together along the lines of what you suggested that uses the read/vared prompt argument.

@erichs
Copy link
Owner

erichs commented Aug 15, 2014

excellent, thanks!

ksh does not support readline with read.
zsh supports readline with varedit, but its input cannot be fed with a
pipe, which causes the test suite to hang, waiting on the tty's stdin.
@@ -71,6 +71,17 @@ _temp_filename_for ()
echo $file
}

_prompt_cmd ()
{
typeset prompt="$1"
Copy link
Contributor Author

Choose a reason for hiding this comment

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

On line 115 below (originally 105),

typeset comment="${4:-}"

I noticed you provide an empty default here. Is this not equivalent?

typeset comment="$4"

If there is some nuance I am unaware of, I should also change this line to match that style.

Copy link
Owner

Choose a reason for hiding this comment

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

usually, the empty defaults are for explicit non-zero checks later in the code. I don't see that here, so it is either old code, or I changed my mind about the calling semantics and didn't change the variable declaration.

should be safe just to say "$1"

@nilbus
Copy link
Contributor Author

nilbus commented Aug 15, 2014

The test suite hangs here in the zsh test run, which implies varedit does not accept input from stdin via the pipe. The manpage (man zshzle) does not suggest a way to allow this with varedit. Can you think of a different workaround to allow interactive editing for zsh? For now, I am letting zsh fall back to the previous read behavior.

Also, I could not get any combination of quoting and escaping that would pass 'Git commit: ' as a single argument without using eval as I did. Let me know if you are able to make this work a better way.

@erichs
Copy link
Owner

erichs commented Aug 15, 2014

sure, let me take a look.

@erichs
Copy link
Owner

erichs commented Aug 15, 2014

Hmm.. looks like there are local ksh test suite failures that are unrelated to this change. I'm going to fix those and commit to master.

perhaps, instead of a _prompt_cmd function, there should be a function whose goal is to do the appropriate thing and return a comment string. Maybe something like:

_add_composure_file(){
...

if [ -z "$comment" ]; then
  comment="$(_prompt_for_git_comment)"
fi

git commit -m "... $comment"
}

@nilbus
Copy link
Contributor Author

nilbus commented Aug 15, 2014

I like that. I'll make the change.

The prompt must be displayed on stderr, or else it will become part of the result,
since stdout is used to pass the result back to the caller of _prompt().
@nilbus
Copy link
Contributor Author

nilbus commented Aug 16, 2014

How does this look?

Also, what ksh failures were you referring to?

@erichs
Copy link
Owner

erichs commented Aug 16, 2014

Looks good.

Ksh: I was seeing some transient test errors in ksh with the second _add_composure_file test. Not sure what was going on, and I haven't been able to reproduce the problem in a couple of days.

Onward and upward!

erichs added a commit that referenced this pull request Aug 16, 2014
Use readline for reading git commit messages
@erichs erichs merged commit 5c8e9af into erichs:master Aug 16, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants