Xavier de Gaye added the comment:

Trying to track the 'char * text' pointer that is returned to Python by 
readline in rlhandler() and using gdb 'set follow-fork-mode child' and 'set 
detach-on-fork off' to stop (with a breakpoint in rlhandler) in the child 
spawned by run_pty() in test_nonascii, unfortunately this fails with gdb 
crashing in a debug session on Android. So I use the attached readline.patch 
with good old printf instead. The results:

(1) UTF-8 locale:
    command: LANG=en_US.UTF-8 python -m test -v -m test_nonascii test_readline
    stderr output:
        char *text: "[ïnserted]|tëxt[after]"
(2) C locale
    command: python -m test -v -m test_nonascii test_readline
    stderr output:
        char *text: "[ïnsexrted]|t"
(3) C locale and a change in 'script' to not use "\xEB" in 'macro':
    s/macro = "|t\xEB[after]"/macro = "|te[after]"/
    command: python -m test -v -m test_nonascii test_readline
    stderr output:
        char *text: "[ïnserted]|tex[after]"

Case (2) confirms your comment in msg283544: "the Ctrl+A macro seems to have 
only inserted the two ASCII characters "|t" and has stopped at the non-ASCII 
character "\xEB".
So readline with the C locale on Android:
* Accepts eight-bits characters in rl_pre_input_hook().
* Discards all the characters after the first eight-bits character in macro 
expansion.
* Discards eight-bits characters on input.
It seems reasonable to consider that readline is broken with the C locale on 
Android and to skip the test in that case whether using your last patch Martin, 
or when test.support.is_android is True.


I don't know if this is relevant, but on archlinux (not on debian), when I run 
bash and therefore readline, with the C locale (on xterm or on the linux 
console, using my french keyboard) I have the following results:

[xavier@bilboquet ~]$ LANG= bash
[xavier@bilboquet ~]$                   # first prompt
bash: $'\303': command not found
[xavier@bilboquet ~]$ A                 # second prompt
bash: $'\303A\251': command not found
[xavier@bilboquet                       # third prompt
[xavier@bilboquet ~]$


On the first prompt I type 'é' followed by the <backspace> key and the <return> 
key.
On the second prompt I type 'é' followed by <left-arrow>, followed by 'A' and 
<return>.
On the third prompt I type 4 times 'é' followed by 8 times <backspace> and 
<return>, note how the prompt has been eaten by the backspaces.

----------
Added file: http://bugs.python.org/file46237/readline.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue28997>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to