selectel / pyte

Simple VTXXX-compatible linux terminal emulator
http://pyte.readthedocs.org/
GNU Lesser General Public License v3.0
653 stars 101 forks source link

Move cursor postion seems to be not interpreted #116

Closed pietrushnic closed 5 years ago

pietrushnic commented 6 years ago

Hi all, I'm using pyte in Robot Framework to validate firmware of embedded system. I have a problem with escape sequence which modifies the string that I want to match. For example, I look for N for PXE and in buffer I get:

Press F10 key now for boot menu, N for PXX\x1b[03;42HE boot\r\n

or

Press F10 key now for boot menu, N foo\x1b[03;38Hr PXE boot\r\n

This seems to be a problem with the not interpreted change of cursor location. Does anyone faced similar issue? Have you got ideas how to approach debugging/fixing this problem?

superbobry commented 6 years ago

@pietrushnic what makes you say that the cursor position escape sequence is not interpreted? I've ran both inputs through the debug screen, and it seems the stream correctly parses them:

$ echo -n "Press F10 key now for boot menu, N for PXX\x1b[03;42HE boot\r\n" | python -m pyte                                                       
["draw", ["Press F10 key now for boot menu, N for PXX"], {}]
["cursor_position", [3, 42], {}]
["draw", ["E boot"], {}]
["carriage_return", [], {}]
["linefeed", [], {}]
$ echo -n "Press F10 key now for boot menu, N foo\x1b[03;38Hr PXE boot\r\n" | python -m pyte
["draw", ["Press F10 key now for boot menu, N foo"], {}]
["cursor_position", [3, 38], {}]
["draw", ["r PXE boot"], {}]
["carriage_return", [], {}]
["linefeed", [], {}]
pietrushnic commented 6 years ago

@superbobry please note that Press F10 key now for boot menu, N for PXX is wrong it should be Press F10 key now for boot menu, N for PXE. Maybe this is problem of console driver, which puts incorrect characters.

Let me recover this topic and get back to you what is the current state of this problem.

superbobry commented 6 years ago

Thanks for a prompt reply. Yes, I've guessed the desired output. Here pyte would behave as expected if the cursor is on line 3 prior to processing the input:

>>> screen = pyte.Screen(80, 24)
>>> stream = pyte.Stream(screen)
>>> screen.cursor_to_line(3)
>>> stream.feed("Press F10 key now for boot menu, N for PXX\x1b[03;42HE boot\r\n")
>>> print(*screen.display, sep="\n")

Press F10 key now for boot menu, N for PXE boot
pietrushnic commented 5 years ago

@superbobry what I can say is that Robot Framework had wrong parameters order when initializing HistoryScreen, we have patch here, with that patch and pyte v0.8.0 seems like issue is solved.