Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: third_party/twisted_8_1/twisted/conch/insults/client.py

Issue 12261012: Remove third_party/twisted_8_1 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 """
2 You don't really want to use this module. Try insults.py instead.
3 """
4
5 from twisted.internet import protocol
6
7 class InsultsClient(protocol.Protocol):
8
9 escapeTimeout = 0.2
10
11 def __init__(self):
12 self.width = self.height = None
13 self.xpos = self.ypos = 0
14 self.commandQueue = []
15 self.inEscape = ''
16
17 def setSize(self, width, height):
18 call = 0
19 if self.width:
20 call = 1
21 self.width = width
22 self.height = height
23 if call:
24 self.windowSizeChanged()
25
26 def dataReceived(self, data):
27 from twisted.internet import reactor
28 for ch in data:
29 if ch == '\x1b':
30 if self.inEscape:
31 self.keyReceived(ch)
32 self.inEscape = ''
33 else:
34 self.inEscape = ch
35 self.escapeCall = reactor.callLater(self.escapeTimeout,
36 self.endEscape)
37 elif ch in 'ABCD' and self.inEscape:
38 self.inEscape = ''
39 self.escapeCall.cancel()
40 if ch == 'A':
41 self.keyReceived('<Up>')
42 elif ch == 'B':
43 self.keyReceived('<Down>')
44 elif ch == 'C':
45 self.keyReceived('<Right>')
46 elif ch == 'D':
47 self.keyReceived('<Left>')
48 elif self.inEscape:
49 self.inEscape += ch
50 else:
51 self.keyReceived(ch)
52
53 def endEscape(self):
54 ch = self.inEscape
55 self.inEscape = ''
56 self.keyReceived(ch)
57
58 def initScreen(self):
59 self.transport.write('\x1b=\x1b[?1h')
60
61 def gotoXY(self, x, y):
62 """Go to a position on the screen.
63 """
64 self.xpos = x
65 self.ypos = y
66 self.commandQueue.append(('gotoxy', x, y))
67
68 def writeCh(self, ch):
69 """Write a character to the screen. If we're at the end of the row,
70 ignore the write.
71 """
72 if self.xpos < self.width - 1:
73 self.commandQueue.append(('write', ch))
74 self.xpos += 1
75
76 def writeStr(self, s):
77 """Write a string to the screen. This does not wrap a the edge of the
78 screen, and stops at \\r and \\n.
79 """
80 s = s[:self.width-self.xpos]
81 if '\n' in s:
82 s=s[:s.find('\n')]
83 if '\r' in s:
84 s=s[:s.find('\r')]
85 self.commandQueue.append(('write', s))
86 self.xpos += len(s)
87
88 def eraseToLine(self):
89 """Erase from the current position to the end of the line.
90 """
91 self.commandQueue.append(('eraseeol',))
92
93 def eraseToScreen(self):
94 """Erase from the current position to the end of the screen.
95 """
96 self.commandQueue.append(('eraseeos',))
97
98 def clearScreen(self):
99 """Clear the screen, and return the cursor to 0, 0.
100 """
101 self.commandQueue = [('cls',)]
102 self.xpos = self.ypos = 0
103
104 def setAttributes(self, *attrs):
105 """Set the attributes for drawing on the screen.
106 """
107 self.commandQueue.append(('attributes', attrs))
108
109 def refresh(self):
110 """Redraw the screen.
111 """
112 redraw = ''
113 for command in self.commandQueue:
114 if command[0] == 'gotoxy':
115 redraw += '\x1b[%i;%iH' % (command[2]+1, command[1]+1)
116 elif command[0] == 'write':
117 redraw += command[1]
118 elif command[0] == 'eraseeol':
119 redraw += '\x1b[0K'
120 elif command[0] == 'eraseeos':
121 redraw += '\x1b[OJ'
122 elif command[0] == 'cls':
123 redraw += '\x1b[H\x1b[J'
124 elif command[0] == 'attributes':
125 redraw += '\x1b[%sm' % ';'.join(map(str, command[1]))
126 else:
127 print command
128 self.commandQueue = []
129 self.transport.write(redraw)
130
131 def windowSizeChanged(self):
132 """Called when the size of the window changes.
133 Might want to redraw the screen here, or something.
134 """
135
136 def keyReceived(self, key):
137 """Called when the user hits a key.
138 """
OLDNEW
« no previous file with comments | « third_party/twisted_8_1/twisted/conch/insults/__init__.py ('k') | third_party/twisted_8_1/twisted/conch/insults/colors.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698