aboutsummaryrefslogtreecommitdiffhomepage
path: root/builtin_printf.cpp
diff options
context:
space:
mode:
authorGravatar Kevin Ballard <kevin@sb.org>2014-08-22 14:02:29 -0700
committerGravatar Kevin Ballard <kevin@sb.org>2014-08-29 12:29:48 -0700
commit24ac7d2698c06792cc78a82bb06f41fcdeb0934c (patch)
tree251005ef05d4b5aa730ec0b2103d05867d3c0e7c /builtin_printf.cpp
parent130619d6b07c691b1f34c56120020adaff09c49a (diff)
Fix `commandline` behavior in bind functions
When a key is bound to a fish function, if that function invokes `commandline`, it gets a stale copy of the commandline. This is because any keys passed to `self-insert` (the default) don't actually get added to the commandline until a special character is processed, such as the R_NULL that gets returned after running a binding for a fish command. To fix this, don't allow fish commands to be run for bindings if we're processing more than one key. When a key wants to invoke a fish command, instead we push the invocation sequence back onto the input, followed by an R_NULL, and return. This causes the input loop to break out and update the commandline. When it starts up again, it will re-process the keys and invoke the fish command. This is primarily an issue with pasting text that includes bound keys in it. Typed text is slow enough that fish will update the commandline between each character. --- I don't know of any way to write a test for this, but the issue can be reproduced as follows: > bind _ 'commandline -i _' This binds _ to a command that inserts _. Typing the following works: > echo wat_is_it But if you copy that line and paste it instead of typing it, the end result looks like > _echo wat_isit With this fix in place, the pasted output correctly matches the typed output.
Diffstat (limited to 'builtin_printf.cpp')
0 files changed, 0 insertions, 0 deletions