mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-12-05 09:43:42 +08:00
533ee65963
This sequence can be generatd by control-spacebar. Allow it to be bound properly. To do this we must be sure that we never round-trip the key sequence through a C string.
62 lines
1.6 KiB
Plaintext
62 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 -k nul '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"
|
|
sleep 0.010
|
|
send "\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"
|
|
}
|