Use readline for reading git commit messages #8

Merged
merged 3 commits into from Aug 16, 2014

Projects

None yet

2 participants

@nilbus
Contributor
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.

@nilbus nilbus Use readline for reading git commit messages
This way, you can use the arrow keys, etc. to edit input, and they work,
rather than outputting control sequences.
55c208a
@nilbus
Contributor
nilbus commented Aug 15, 2014

It seems this breaks the build. Investigating.

@nilbus
Contributor
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
Owner
erichs commented Aug 15, 2014

excellent, thanks!

@nilbus nilbus Only attempt using readline for input in bash shells
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.
81c7757
@nilbus nilbus and 1 other commented on an outdated diff Aug 15, 2014
@@ -71,6 +71,17 @@ _temp_filename_for ()
echo $file
}
+_prompt_cmd ()
+{
+ typeset prompt="$1"
@nilbus
nilbus Aug 15, 2014 Contributor

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.

@erichs
erichs Aug 15, 2014 Owner

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
Contributor
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
Owner
erichs commented Aug 15, 2014

sure, let me take a look.

@erichs
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
Contributor
nilbus commented Aug 15, 2014

I like that. I'll make the change.

@nilbus nilbus Refactor prompt_cmd() into prompt() to avoid eval
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().
8a37716
@nilbus
Contributor
nilbus commented Aug 16, 2014

How does this look?

Also, what ksh failures were you referring to?

@erichs
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 erichs merged commit 5c8e9af into erichs:master Aug 16, 2014

1 check passed

continuous-integration/travis-ci The Travis CI build passed
Details
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment