mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-11-27 11:43:37 +08:00
68e167d576
I did some research and experiments. For good or bad the `bind` command requires the use of wide char codepoints (e.g., \u1234) for non-ASCII chars. So don't force the use of the POSIX locale, but do provide it as an option for people who want to see the individual bytes rather than a decoded wide char. Simplify the format of the information displayed for each character. There really isn't much point in providing decimal, octal, and hexadecimal. Just print hex and symbolic representations. Add an example `bind` command that a user can copy/paste. Closes #3183
60 lines
1.6 KiB
Plaintext
60 lines
1.6 KiB
Plaintext
# vim: set filetype=expect:
|
|
|
|
set ::env(fish_escape_delay_ms) 10
|
|
spawn $fish_key_reader -c
|
|
|
|
# Do we get the expected startup prompt?
|
|
expect -ex "Press a key" {
|
|
puts "saw expected startup prompt"
|
|
} unmatched {
|
|
puts stderr "didn't see expected startup prompt"
|
|
}
|
|
|
|
# Is a single control char echoed correctly?
|
|
send "\x01"
|
|
expect -ex "char: \\cA\r\nbind \\cA 'do something'\r\n" {
|
|
puts "ctrl-a handled"
|
|
} unmatched {
|
|
puts stderr "ctrl-a not handled"
|
|
}
|
|
|
|
# Is a non-ASCII UTF-8 sequence prefaced by an escape char handled correctly?
|
|
sleep 0.020
|
|
# send "\x1B\xE1\x88\xB4"
|
|
send "\x1B\u1234"
|
|
expect -ex "char: \\u1234\r\nbind \\e\\u1234 'do something'\r\n" {
|
|
puts "unicode char, handled"
|
|
} unmatched {
|
|
puts stderr "unicode char, not handled"
|
|
}
|
|
|
|
# Is a NULL char echoed correctly?
|
|
sleep 0.020
|
|
send -null
|
|
expect -ex "char: \\c@\r\nbind \\c@ 'do something'\r\n" {
|
|
puts "\\c@ handled"
|
|
} unmatched {
|
|
puts stderr "\\c@ not handled"
|
|
}
|
|
|
|
# Does it keep running if handed control sequences in the wrong order?
|
|
send "\x03\x04"
|
|
expect -ex "char: \\cD\r\n" {
|
|
puts "invalid terminate sequence handled"
|
|
} unmatched {
|
|
puts stderr "invalid terminate sequence not handled"
|
|
}
|
|
|
|
# Now send a second [ctrl-D]. Does that terminate the process like it should?
|
|
send "\x04"
|
|
expect -ex "char: \\cD\r\n" {
|
|
puts "valid terminate sequence handled"
|
|
} unmatched {
|
|
puts stderr "valid terminate sequence not handled"
|
|
}
|
|
expect -ex "Exiting at your request.\r\n" {
|
|
puts "exited on seeing valid terminate"
|
|
} unmatched {
|
|
puts stderr "did not exit on seeing valid terminate sequence"
|
|
}
|