~pythonregexp2.7/python/issue2636-09-01+10

« back to all changes in this revision

Viewing changes to Lib/curses/textpad.py

  • Committer: Jeffrey C. "The TimeHorse" Jacobs
  • Date: 2008-09-22 21:39:45 UTC
  • mfrom: (39055.1.33 Regexp-2.7)
  • Revision ID: darklord@timehorse.com-20080922213945-23717m5eiqpamcyn
Merged in changes from the Single-Loop Engine branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
"""Simple textbox editing widget with Emacs-like keybindings."""
2
2
 
3
 
import curses, ascii
 
3
import curses
 
4
import curses.ascii
4
5
 
5
6
def rectangle(win, uly, ulx, lry, lrx):
6
7
    """Draw a rectangle with corners at the provided upper-left
54
55
        returning the index of the last non-blank character."""
55
56
        last = self.maxx
56
57
        while True:
57
 
            if ascii.ascii(self.win.inch(y, last)) != ascii.SP:
 
58
            if curses.ascii.ascii(self.win.inch(y, last)) != curses.ascii.SP:
58
59
                last = min(self.maxx, last+1)
59
60
                break
60
61
            elif last == 0:
76
77
                pass
77
78
            if self.insert_mode:
78
79
                (backy, backx) = self.win.getyx()
79
 
                if ascii.isprint(oldch):
 
80
                if curses.ascii.isprint(oldch):
80
81
                    self._insert_printable_char(oldch)
81
82
                    self.win.move(backy, backx)
82
83
 
84
85
        "Process a single editing command."
85
86
        (y, x) = self.win.getyx()
86
87
        self.lastcmd = ch
87
 
        if ascii.isprint(ch):
 
88
        if curses.ascii.isprint(ch):
88
89
            if y < self.maxy or x < self.maxx:
89
90
                self._insert_printable_char(ch)
90
 
        elif ch == ascii.SOH:                           # ^a
 
91
        elif ch == curses.ascii.SOH:                           # ^a
91
92
            self.win.move(y, 0)
92
 
        elif ch in (ascii.STX,curses.KEY_LEFT, ascii.BS,curses.KEY_BACKSPACE):
 
93
        elif ch in (curses.ascii.STX,curses.KEY_LEFT, curses.ascii.BS,curses.KEY_BACKSPACE):
93
94
            if x > 0:
94
95
                self.win.move(y, x-1)
95
96
            elif y == 0:
98
99
                self.win.move(y-1, self._end_of_line(y-1))
99
100
            else:
100
101
                self.win.move(y-1, self.maxx)
101
 
            if ch in (ascii.BS, curses.KEY_BACKSPACE):
 
102
            if ch in (curses.ascii.BS, curses.KEY_BACKSPACE):
102
103
                self.win.delch()
103
 
        elif ch == ascii.EOT:                           # ^d
 
104
        elif ch == curses.ascii.EOT:                           # ^d
104
105
            self.win.delch()
105
 
        elif ch == ascii.ENQ:                           # ^e
 
106
        elif ch == curses.ascii.ENQ:                           # ^e
106
107
            if self.stripspaces:
107
108
                self.win.move(y, self._end_of_line(y))
108
109
            else:
109
110
                self.win.move(y, self.maxx)
110
 
        elif ch in (ascii.ACK, curses.KEY_RIGHT):       # ^f
 
111
        elif ch in (curses.ascii.ACK, curses.KEY_RIGHT):       # ^f
111
112
            if x < self.maxx:
112
113
                self.win.move(y, x+1)
113
114
            elif y == self.maxy:
114
115
                pass
115
116
            else:
116
117
                self.win.move(y+1, 0)
117
 
        elif ch == ascii.BEL:                           # ^g
 
118
        elif ch == curses.ascii.BEL:                           # ^g
118
119
            return 0
119
 
        elif ch == ascii.NL:                            # ^j
 
120
        elif ch == curses.ascii.NL:                            # ^j
120
121
            if self.maxy == 0:
121
122
                return 0
122
123
            elif y < self.maxy:
123
124
                self.win.move(y+1, 0)
124
 
        elif ch == ascii.VT:                            # ^k
 
125
        elif ch == curses.ascii.VT:                            # ^k
125
126
            if x == 0 and self._end_of_line(y) == 0:
126
127
                self.win.deleteln()
127
128
            else:
128
129
                # first undo the effect of self._end_of_line
129
130
                self.win.move(y, x)
130
131
                self.win.clrtoeol()
131
 
        elif ch == ascii.FF:                            # ^l
 
132
        elif ch == curses.ascii.FF:                            # ^l
132
133
            self.win.refresh()
133
 
        elif ch in (ascii.SO, curses.KEY_DOWN):         # ^n
 
134
        elif ch in (curses.ascii.SO, curses.KEY_DOWN):         # ^n
134
135
            if y < self.maxy:
135
136
                self.win.move(y+1, x)
136
137
                if x > self._end_of_line(y+1):
137
138
                    self.win.move(y+1, self._end_of_line(y+1))
138
 
        elif ch == ascii.SI:                            # ^o
 
139
        elif ch == curses.ascii.SI:                            # ^o
139
140
            self.win.insertln()
140
 
        elif ch in (ascii.DLE, curses.KEY_UP):          # ^p
 
141
        elif ch in (curses.ascii.DLE, curses.KEY_UP):          # ^p
141
142
            if y > 0:
142
143
                self.win.move(y-1, x)
143
144
                if x > self._end_of_line(y-1):
155
156
            for x in range(self.maxx+1):
156
157
                if self.stripspaces and x > stop:
157
158
                    break
158
 
                result = result + chr(ascii.ascii(self.win.inch(y, x)))
 
159
                result = result + chr(curses.ascii.ascii(self.win.inch(y, x)))
159
160
            if self.maxy > 0:
160
161
                result = result + "\n"
161
162
        return result