##
14.8.1 Textbox objects

You can instantiate a `Textbox` object as follows:

class `Textbox`( | win)

  Return a textbox widget object. The win argument should be a curses `WindowObject` in which the textbox is to be contained. The edit cursor of the textbox is initially located at the upper left hand corner of the containing window, with coordinates `(0, 0)`. The instance's `stripspaces` flag is initially on.

`Textbox` objects have the following methods:

`edit`( | [validator])

  This is the entry point you will normally use. It accepts editing keystrokes until one of the termination keystrokes is entered. If validator is supplied, it must be a function. It will be called for each keystroke entered with the keystroke as a parameter; command dispatch is done on the result. This method returns the window contents as a string; whether blanks in the window are included is affected by the `stripspaces` member.

`do_command`( | ch)

  Process a single command keystroke. Here are the supported special keystrokes:

  Keystroke | Action
  --- | ---
  `Control-A` | Go to left edge of window.
  `Control-B` | Cursor left, wrapping to previous line if appropriate.
  `Control-D` | Delete character under cursor.
  `Control-E` | Go to right edge (stripspaces off) or end of line (stripspaces on).
  `Control-F` | Cursor right, wrapping to next line when appropriate.
  `Control-G` | Terminate, returning the window contents.
  `Control-H` | Delete character backward.
  `Control-J` | Terminate if the window is 1 line, otherwise insert newline.
  `Control-K` | If line is blank, delete it, otherwise clear to end of line.
  `Control-L` | Refresh screen.
  `Control-N` | Cursor down; move down one line.
  `Control-O` | Insert a blank line at cursor location.
  `Control-P` | Cursor up; move up one line.

  Move operations do nothing if the cursor is at an edge where the movement is not possible. The following synonyms are supported where possible:

  Constant | Keystroke
  --- | ---
  `KEY_LEFT` | `Control-B`
  `KEY_RIGHT` | `Control-F`
  `KEY_UP` | `Control-P`
  `KEY_DOWN` | `Control-N`
  `KEY_BACKSPACE` | `Control-h`

  All other keystrokes are treated as a command to insert the given character and move right (with line wrapping).

`gather`( | )

  This method returns the window contents as a string; whether blanks in the window are included is affected by the `stripspaces` member.

`stripspaces`
  This data member is a flag which controls the interpretation of blanks in the window. When it is on, trailing blanks on each line are ignored; any cursor motion that would land the cursor on a trailing blank goes to the end of that line instead, and trailing blanks are stripped when the window contents are gathered.