diff options
author | noah <noah@656d521f-e311-0410-88e0-e7920216d269> | 2010-07-20 06:06:08 +0000 |
---|---|---|
committer | noah <noah@656d521f-e311-0410-88e0-e7920216d269> | 2010-07-20 06:06:08 +0000 |
commit | 11d5c5672993ff149f26a776ff6b2156b022a23a (patch) | |
tree | 00a188eba0df3261846c6e53db6083a3867167ba | |
parent | 1e21b116cd537e40eb0becf0110e34b3b24794dd (diff) | |
download | pexpect-11d5c5672993ff149f26a776ff6b2156b022a23a.tar.gz |
Updated ANSI.py to support multiple integer arguments in cursor color escape sequence.
git-svn-id: http://pexpect.svn.sourceforge.net/svnroot/pexpect/trunk@522 656d521f-e311-0410-88e0-e7920216d269
-rw-r--r-- | pexpect/ANSI.py | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/pexpect/ANSI.py b/pexpect/ANSI.py index 191c70c..b3cb8a3 100644 --- a/pexpect/ANSI.py +++ b/pexpect/ANSI.py @@ -27,7 +27,7 @@ def DoStartNumber (fsm): fsm.memory.append (fsm.input_symbol) -def BuildNumber (fsm): +def DoBuildNumber (fsm): ns = fsm.memory.pop() ns = ns + fsm.input_symbol @@ -119,11 +119,12 @@ def DoEraseEndOfLine (fsm): def DoEraseLine (fsm): + arg = int(fsm.memory.pop()) screen = fsm.memory[0] if arg == 0: - screen.end_of_line() + screen.erase_end_of_line() elif arg == 1: - screen.start_of_line() + screen.erase_start_of_line() elif arg == 2: screen.erase_line() @@ -215,7 +216,7 @@ class ANSI (term): self.state.add_transition ('m', 'ELB', None, 'INIT') self.state.add_transition ('?', 'ELB', None, 'MODECRAP') self.state.add_transition_list (string.digits, 'ELB', DoStartNumber, 'NUMBER_1') - self.state.add_transition_list (string.digits, 'NUMBER_1', BuildNumber, 'NUMBER_1') + self.state.add_transition_list (string.digits, 'NUMBER_1', DoBuildNumber, 'NUMBER_1') self.state.add_transition ('D', 'NUMBER_1', DoBack, 'INIT') self.state.add_transition ('B', 'NUMBER_1', DoDown, 'INIT') self.state.add_transition ('C', 'NUMBER_1', DoForward, 'INIT') @@ -233,7 +234,7 @@ class ANSI (term): # \E[?47h switch to alternate screen # \E[?47l restores to normal screen from alternate screen. self.state.add_transition_list (string.digits, 'MODECRAP', DoStartNumber, 'MODECRAP_NUM') - self.state.add_transition_list (string.digits, 'MODECRAP_NUM', BuildNumber, 'MODECRAP_NUM') + self.state.add_transition_list (string.digits, 'MODECRAP_NUM', DoBuildNumber, 'MODECRAP_NUM') self.state.add_transition ('l', 'MODECRAP_NUM', None, 'INIT') self.state.add_transition ('h', 'MODECRAP_NUM', None, 'INIT') @@ -241,18 +242,26 @@ class ANSI (term): self.state.add_transition (';', 'NUMBER_1', None, 'SEMICOLON') self.state.add_transition_any ('SEMICOLON', DoLog, 'INIT') self.state.add_transition_list (string.digits, 'SEMICOLON', DoStartNumber, 'NUMBER_2') - self.state.add_transition_list (string.digits, 'NUMBER_2', BuildNumber, 'NUMBER_2') + self.state.add_transition_list (string.digits, 'NUMBER_2', DoBuildNumber, 'NUMBER_2') self.state.add_transition_any ('NUMBER_2', DoLog, 'INIT') self.state.add_transition ('H', 'NUMBER_2', DoHome, 'INIT') self.state.add_transition ('f', 'NUMBER_2', DoHome, 'INIT') self.state.add_transition ('r', 'NUMBER_2', DoScrollRegion, 'INIT') ### It gets worse... the 'm' code can have infinite number of - ### "number;number;number" arguments before it. See also - ### the line of code that handles 'm' when in state 'NUMBER_1': - ### self.state.add_transition ('m', 'NUMBER_1', + ### number;number;number before it. I've never seen more than two, + ### but the specs say it's allowed. crap! self.state.add_transition ('m', 'NUMBER_2', None, 'INIT') - ### LED control. Same implementation problem as 'm' code. + ### LED control. Same problem as 'm' code. self.state.add_transition ('q', 'NUMBER_2', None, 'INIT') + self.state.add_transition (';', 'NUMBER_2', None, 'SEMICOLON_X') + + # Create a state for 'q' and 'm' which allows an infinite number of ignored numbers + self.state.add_transition_any ('SEMICOLON_X', DoLog, 'INIT') + self.state.add_transition_list (string.digits, 'SEMICOLON_X', None, 'NUMBER_X') + self.state.add_transition_any ('NUMBER_X', DoLog, 'INIT') + self.state.add_transition ('m', 'NUMBER_X', None, 'INIT') + self.state.add_transition ('q', 'NUMBER_X', None, 'INIT') + self.state.add_transition (';', 'NUMBER_2', None, 'SEMICOLON_X') def process (self, c): @@ -282,7 +291,6 @@ class ANSI (term): if ch == '\r': self.cr() - # self.crlf() return if ch == '\n': self.crlf() |