1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-01-01 05:16:05 +01:00

37378: New bindkey tests.

Also fix Meta bug on pattern match in zpty -r.
This commit is contained in:
Peter Stephenson 2015-12-10 17:51:41 +00:00
parent 67877f6055
commit a5233fd01e
4 changed files with 70 additions and 7 deletions

View file

@ -1,3 +1,9 @@
2015-12-10 Peter Stephenson <p.stephenson@samsung.com>
* 37378: Src/Modules/zpty.c, Test/X03zlebindkey.ztst,
Test/comptest: New bindkey tests; also fix Meta bug with pattern
match on zpty -r.
2015-12-09 Peter Stephenson <p.stephenson@samsung.com>
* 37364: Src/builtin.c, Src/text.c, Test/C02cond.ztst: "test"

View file

@ -614,14 +614,23 @@ ptyread(char *nam, Ptycmd cmd, char **args, int noblock, int mustmatch)
break;
}
if (cmd->read != -1 || (ret = read(cmd->fd, buf + used, 1)) == 1) {
int readchar;
if (cmd->read != -1) {
ret = 1;
buf[used] = (char) cmd->read;
readchar = cmd->read;
cmd->read = -1;
}
} else
readchar = STOUC(buf[used]);
if (imeta(readchar)) {
buf[used++] = Meta;
buf[used++] = (char) (readchar ^ 32);
} else
buf[used++] = (char) readchar;
seen = 1;
if (++used == blen) {
if (used >= blen-1) {
if (!*args) {
buf[used] = '\0';
unmetafy(buf, &used);
write_loop(1, buf, used);
used = 0;
} else {
@ -633,7 +642,8 @@ ptyread(char *nam, Ptycmd cmd, char **args, int noblock, int mustmatch)
buf[used] = '\0';
if (!prog) {
if (ret <= 0 || (*args && buf[used - 1] == '\n'))
if (ret <= 0 || (*args && buf[used - 1] == '\n' &&
(used < 2 || buf[used-2] != Meta)))
break;
} else {
if (ret < 0
@ -666,9 +676,11 @@ ptyread(char *nam, Ptycmd cmd, char **args, int noblock, int mustmatch)
return 1;
}
if (*args)
setsparam(*args, ztrdup(metafy(buf, used, META_HREALLOC)));
else if (used)
setsparam(*args, ztrdup(buf));
else if (used) {
unmetafy(buf, &used);
write_loop(1, buf, used);
}
if (seen && (!prog || matchok || !mustmatch))
return 0;

45
Test/X03zlebindkey.ztst Normal file
View file

@ -0,0 +1,45 @@
# Tests of the vi mode of ZLE
%prep
mb_ok=
langs=(en_{US,GB}.{UTF-,utf}8 en.UTF-8
$(locale -a 2>/dev/null | egrep 'utf8|UTF-8'))
for LANG in $langs; do
if [[ é = ? ]]; then
ZSH_TEST_LANG=$LANG
mb_ok=1
break;
fi
done
if [[ $OSTYPE = cygwin ]]; then
ZTST_unimplemented="the zsh/zpty module does not work on Cygwin"
elif ( zmodload zsh/zpty 2>/dev/null ); then
. $ZTST_srcdir/comptest
comptestinit -z $ZTST_testdir/../Src/zsh
else
ZTST_unimplemented="the zsh/zpty module is not available"
fi
%test
zpty_run 'bindkey -s "\C-xy" foo'
zletest $'\C-xy'
zpty_run 'bindkey -r "\C-xy"'
0:bindkey -s
>BUFFER: foo
>CURSOR: 3
if [[ -z $mb_ok ]]; then
ZTST_skip="bindkey multibyte test skipped"
else
zpty_run 'alias unbind="bindkey -r ホ"'
zpty_run 'bindkey -s ホ bar'
zletest 'ホ'
zpty_run unbind
zletest 'ホ'
fi
0:bindkey -s multibyte characters
>BUFFER: bar
>CURSOR: 3
>BUFFER: ホ
>CURSOR: 1

View file

@ -27,7 +27,7 @@ comptestinit () {
}
comptesteval \
"export LC_ALL=C" \
"export LC_ALL=${ZSH_TEST_LANG:-C}" \
"emulate -R zsh" \
"export ZDOTDIR=$ZTST_testdir" \
"module_path=( $module_path )" \