[Python-checkins] CVS: python/dist/src/Lib/curses textpad.py,1.1,1.2

A.M. Kuchling python-dev@python.org
Mon, 26 Jun 2000 17:53:14 -0700


Update of /cvsroot/python/python/dist/src/Lib/curses
In directory slayer.i.sourceforge.net:/tmp/cvs-serv26276

Modified Files:
	textpad.py 
Log Message:
Sync to ESR's current version


Index: textpad.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/curses/textpad.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** textpad.py	2000/06/26 23:55:42	1.1
--- textpad.py	2000/06/27 00:53:12	1.2
***************
*** 16,20 ****
      win.addch(lry, ulx, curses.ACS_LLCORNER)
  
! class textbox:
      """Editing widget using the interior of a window object.
       Supports the following Emacs-like key bindings:
--- 16,20 ----
      win.addch(lry, ulx, curses.ACS_LLCORNER)
  
! class Textbox:
      """Editing widget using the interior of a window object.
       Supports the following Emacs-like key bindings:
***************
*** 26,29 ****
--- 26,30 ----
      Ctrl-F      Cursor right, wrapping to next line when appropriate.
      Ctrl-G      Terminate, returning the window contents.
+     Ctrl-H      Delete character backward.
      Ctrl-J      Terminate if the window is 1 line, otherwise insert newline.
      Ctrl-K      If line is blank, delete it, otherwise clear to end of line.
***************
*** 37,40 ****
--- 38,42 ----
  
      KEY_LEFT = Ctrl-B, KEY_RIGHT = Ctrl-F, KEY_UP = Ctrl-P, KEY_DOWN = Ctrl-N
+     KEY_BACKSPACE = Ctrl-h
      """
      def __init__(self, win):
***************
*** 44,62 ****
          self.maxx = self.maxx - 1
          self.stripspaces = 1
          win.keypad(1)
  
      def firstblank(self, y):
          "Go to the location of the first blank on the given line."
!         (oldy, oldx) = self.win.getyx()
!         self.win.move(y, self.maxx-1)
!         last = self.maxx-1
          while 1:
-             if last == 0:
-                 break
              if ascii.ascii(self.win.inch(y, last)) != ascii.SP:
                  last = last + 1
                  break
              last = last - 1
-         self.win.move(oldy, oldx)
          return last
  
--- 46,62 ----
          self.maxx = self.maxx - 1
          self.stripspaces = 1
+         self.lastcmd = None
          win.keypad(1)
  
      def firstblank(self, y):
          "Go to the location of the first blank on the given line."
!         last = self.maxx
          while 1:
              if ascii.ascii(self.win.inch(y, last)) != ascii.SP:
                  last = last + 1
                  break
+             elif last == 0:
+                 break
              last = last - 1
          return last
  
***************
*** 64,67 ****
--- 64,68 ----
          "Process a single editing command."
          (y, x) = self.win.getyx()
+         self.lastcmd = ch
          if ascii.isprint(ch):
              if y < self.maxy or x < self.maxx:
***************
*** 73,79 ****
                  except ERR:
                      pass
!         elif ch == ascii.SOH:				# Ctrl-a
              self.win.move(y, 0)
!         elif ch in (ascii.STX, curses.KEY_LEFT):	# Ctrl-b
              if x > 0:
                  self.win.move(y, x-1)
--- 74,80 ----
                  except ERR:
                      pass
!         elif ch == ascii.SOH:				# ^a
              self.win.move(y, 0)
!         elif ch in (ascii.STX,curses.KEY_LEFT, ascii.BS,curses.KEY_BACKSPACE):
              if x > 0:
                  self.win.move(y, x-1)
***************
*** 84,124 ****
              else:
                  self.win.move(y-1, self.maxx)
!         elif ch == ascii.EOT:				# Ctrl-d
              self.win.delch()
!         elif ch == ascii.ENQ:				# Ctrl-e
              if self.stripspaces:
                  self.win.move(y, self.firstblank(y, maxx))
              else:
                  self.win.move(y, self.maxx)
!         elif ch in (ascii.ACK, curses.KEY_RIGHT):	# Ctrl-f
              if x < self.maxx:
                  self.win.move(y, x+1)
!             elif y == self.maxx:
                  pass
              else:
                  self.win.move(y+1, 0)
!         elif ch == ascii.BEL:				# Ctrl-g
              return 0
!         elif ch == ascii.NL:				# Ctrl-j
              if self.maxy == 0:
                  return 0
              elif y < self.maxy:
                  self.win.move(y+1, 0)
!         elif ch == ascii.VT:				# Ctrl-k
              if x == 0 and self.firstblank(y) == 0:
                  self.win.deleteln()
              else:
                  self.win.clrtoeol()
!         elif ch == ascii.FF:				# Ctrl-l
              self.win.refresh()
!         elif ch in (ascii.SO, curses.KEY_DOWN):		# Ctrl-n
              if y < self.maxy:
                  self.win.move(y+1, x)
!         elif ch == ascii.SI:				# Ctrl-o
              self.win.insertln()
!         elif ch in (ascii.DLE, curses.KEY_UP):		# Ctrl-p
              if y > 0:
                  self.win.move(y-1, x)
-         self.win.refresh()
          return 1
          
--- 85,126 ----
              else:
                  self.win.move(y-1, self.maxx)
!             if ch in (ascii.BS, curses.KEY_BACKSPACE):
!                 self.win.delch()
!         elif ch == ascii.EOT:				# ^d
              self.win.delch()
!         elif ch == ascii.ENQ:				# ^e
              if self.stripspaces:
                  self.win.move(y, self.firstblank(y, maxx))
              else:
                  self.win.move(y, self.maxx)
!         elif ch in (ascii.ACK, curses.KEY_RIGHT):	# ^f
              if x < self.maxx:
                  self.win.move(y, x+1)
!             elif y == self.maxy:
                  pass
              else:
                  self.win.move(y+1, 0)
!         elif ch == ascii.BEL:				# ^g
              return 0
!         elif ch == ascii.NL:				# ^j
              if self.maxy == 0:
                  return 0
              elif y < self.maxy:
                  self.win.move(y+1, 0)
!         elif ch == ascii.VT:				# ^k
              if x == 0 and self.firstblank(y) == 0:
                  self.win.deleteln()
              else:
                  self.win.clrtoeol()
!         elif ch == ascii.FF:				# ^l
              self.win.refresh()
!         elif ch in (ascii.SO, curses.KEY_DOWN):		# ^n
              if y < self.maxy:
                  self.win.move(y+1, x)
!         elif ch == ascii.SI:				# ^o
              self.win.insertln()
!         elif ch in (ascii.DLE, curses.KEY_UP):		# ^p
              if y > 0:
                  self.win.move(y-1, x)
          return 1
          
***************
*** 129,132 ****
--- 131,135 ----
              self.win.move(y, 0)
              stop = self.firstblank(y)
+             #sys.stderr.write("y=%d, firstblank(y)=%d\n" % (y, stop))
              if stop == 0 and self.stripspaces:
                  continue
***************
*** 145,150 ****
--- 148,156 ----
              if validate:
                  ch = validate(ch)
+             if not ch:
+                 continue
              if not self.do_command(ch):
                  break
+             self.win.refresh()
          return self.gather()
  
***************
*** 154,158 ****
          rectangle(stdscr, 14, 19, 19, 29)
          stdscr.refresh()
!         return textbox(win).edit()
  
      str = curses.wrapper(test_editbox)
--- 160,164 ----
          rectangle(stdscr, 14, 19, 19, 29)
          stdscr.refresh()
!         return Textbox(win).edit()
  
      str = curses.wrapper(test_editbox)