def do_command()

in ec2rlcore/menu_textpad_mod.py [0:0]


    def do_command(self, ch):
        """Process a single editing command."""
        (y, x) = self.win.getyx()
        self.lastcmd = ch
        if curses.ascii.isprint(ch):
            if y < self.maxy or x < self.maxx:
                self._insert_printable_char(ch)
        elif ch == curses.ascii.SOH:                           # ^a # pragma: no coverage
            self.win.move(y, 0)
        # The backspace on a Lenovo T510 maps to ascii delete (127)
        # and the delete key maps to KEY_DC
        elif ch in (curses.ascii.DEL, curses.KEY_DC,
                    curses.ascii.STX, curses.KEY_LEFT,
                    curses.ascii.BS, curses.KEY_BACKSPACE):
            if x > 0:
                self.win.move(y, x - 1)
            elif y == 0:
                pass
            elif self.stripspaces:
                self.win.move(y - 1, self._end_of_line(y - 1))
            else:
                self.win.move(y - 1, self.maxx)
            # The backspace on a Lenovo T510 maps to ascii delete (127)
            # and the delete key maps to KEY_DC
            if ch in (curses.ascii.DEL, curses.KEY_DC,
                      curses.ascii.BS, curses.KEY_BACKSPACE):
                self.win.delch()
        elif ch == curses.ascii.EOT:                           # ^d
            self.win.delch()
        elif ch == curses.ascii.ENQ:                           # ^e  # pragma: no coverage
            if self.stripspaces:
                self.win.move(y, self._end_of_line(y))
            else:
                self.win.move(y, self.maxx)
        elif ch in (curses.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 == curses.ascii.BEL:                           # ^g
            return 0
        elif ch == curses.ascii.NL:                            # ^j
            if self.maxy == 0:
                return 0
            elif y < self.maxy:
                self.win.move(y + 1, 0)
        elif ch == curses.ascii.VT:                            # ^k # pragma: no coverage
            if x == 0 and self._end_of_line(y) == 0:
                self.win.deleteln()
            else:
                # first undo the effect of self._end_of_line
                self.win.move(y, x)
                self.win.clrtoeol()
        elif ch == curses.ascii.FF:                            # ^l # pragma: no coverage
            self.win.refresh()
        elif ch in (curses.ascii.SO, curses.KEY_DOWN):         # ^n
            if y < self.maxy:
                self.win.move(y + 1, x)
                if x > self._end_of_line(y + 1):
                    self.win.move(y + 1, self._end_of_line(y + 1))
        elif ch == curses.ascii.SI:                            # ^o # pragma: no coverage
            self.win.insertln()
        elif ch in (curses.ascii.DLE, curses.KEY_UP):          # ^p
            if y > 0:
                self.win.move(y - 1, x)
                if x > self._end_of_line(y - 1):
                    self.win.move(y - 1, self._end_of_line(y - 1))
        return 1