コード例 #1
0
 def edit_str(self, target, c, is_num=False):
     # detect backspace
     if c in [8, 127, 263] and target:
         target = target[:-1]
     elif not is_num or curses.unctrl(c) in '0123456789.':
         target += curses.unctrl(c)
     return target
コード例 #2
0
ファイル: gui_text.py プロジェクト: appealing-alexey/ew
 def edit_str(self, target, c, is_num=False):
     chars = '0123456789.' if is_num else '0123456789.:;,!?abcdefghigklmnoprstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
     if curses.unctrl(c) in chars:
         target += curses.unctrl(c)
     elif c==263 and target:
         target = target[:-1]
     return target
コード例 #3
0
ファイル: batchMon.py プロジェクト: nlurkin/batchMon
def mainLoop(screen):
    mon.monitor(screen)
    screen.displayTime(mon.config.startTime)
    screen.displaySummary(mon.config.getStatusStats())

    if mon.config.finalizeFinished():
        screen.displayFinalResult(mon.config.finalJob)

    if mon.submitReady:
        if len(mon.submitList) == 0:
            screen.resetSubmit(mon.config.getJobsNumberReady())
        else:
            screen.resetSubmit(len(mon.submitList))
        for job in mon.generateJobs():
            mon.submit(job)
            screen.displaySubmit(job.jobID, job.index)

    screen.repaint()
    k = screen.getch()
    if k != -1:
        if screen.stdscr != None:
            if curses.unctrl(k) == "^R":
                mon.reSubmitFailed()
            if curses.unctrl(k) == "^T":
                screen.setWaitingTime()
            if curses.unctrl(k) == "^G":
                mon.submitInit()
コード例 #4
0
ファイル: display2.py プロジェクト: nlurkin/batchMon
    def keyPressed(self, key):
        if curses.unctrl(key) == "K":
            return DCommands(DCommands.Kill)
        elif curses.unctrl(key) == "r":
            return DCommands(DCommands.Refresh)

        return MyWindow.keyPressed(self, key)
コード例 #5
0
ファイル: text.py プロジェクト: keepkey/electrum
 def main_command(self):
     c = self.stdscr.getch()
     print c
     if c == curses.KEY_RIGHT:
         self.tab = (self.tab + 1) % self.num_tabs
     elif c == curses.KEY_LEFT:
         self.tab = (self.tab - 1) % self.num_tabs
     elif c == curses.KEY_DOWN:
         self.pos += 1
     elif c == curses.KEY_UP:
         self.pos -= 1
     elif c == 9:
         self.pos += 1  # tab
     elif curses.unctrl(c) in ["^W", "^C", "^X", "^Q"]:
         self.tab = -1
     elif curses.unctrl(c) in ["^N"]:
         self.network_dialog()
     elif curses.unctrl(c) == "^S":
         self.settings_dialog()
     else:
         return c
     if self.pos < 0:
         self.pos = 0
     if self.pos >= self.maxpos:
         self.pos = self.maxpos - 1
コード例 #6
0
 def edit_str(self, target, c, is_num=False):
     chars = '0123456789.' if is_num else '0123456789.:;,!?abcdefghigklmnoprstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
     if curses.unctrl(c) in chars:
         target += curses.unctrl(c)
     elif c == 263 and target:
         target = target[:-1]
     return target
コード例 #7
0
ファイル: text.py プロジェクト: paulmadore/electrum-ltc
 def edit_str(self, target, c, is_num=False):
     # detect backspace
     if c in [8, 127, 263] and target:
         target = target[:-1]
     elif not is_num or curses.unctrl(c) in '0123456789.':
         target += curses.unctrl(c)
     return target
コード例 #8
0
ファイル: display2.py プロジェクト: nlurkin/batchMon
 def keyPressed(self, key):
     if key == curses.KEY_LEFT:
         return DCommands(DCommands.Back)
     elif curses.unctrl(key) == "^R":
         return DCommands(DCommands.Refresh)
     elif curses.unctrl(key) == "^G":
         return DCommands(DCommands.Submit)
     elif curses.unctrl(key) == "^K":
         return DCommands(DCommands.Switch)
     elif curses.unctrl(key) == "^T":
         self.setWaitingTime()
     return MyWindow.keyPressed(self, key)
コード例 #9
0
ファイル: gui_text.py プロジェクト: appealing-alexey/ew
 def main_command(self):
     c = self.stdscr.getch()
     if   c == curses.KEY_RIGHT: self.tab = (self.tab + 1)%self.num_tabs
     elif c == curses.KEY_LEFT: self.tab = (self.tab - 1)%self.num_tabs
     elif c == curses.KEY_DOWN: self.pos +=1
     elif c == curses.KEY_UP: self.pos -= 1
     elif c == 9: self.pos +=1 # tab
     elif curses.unctrl(c) in ['^W', '^C', '^X', '^Q']: self.tab = -1
     elif curses.unctrl(c) in ['^N']: self.network_dialog()
     elif curses.unctrl(c) == '^S': self.settings_dialog()
     else: return c
     if self.pos<0: self.pos=0
     if self.pos>=self.maxpos: self.pos=self.maxpos - 1
コード例 #10
0
 def main_command(self):
     c = self.stdscr.getch()
     if c == curses.KEY_RIGHT: self.tab = (self.tab + 1) % self.num_tabs
     elif c == curses.KEY_LEFT: self.tab = (self.tab - 1) % self.num_tabs
     elif c == curses.KEY_DOWN: self.pos += 1
     elif c == curses.KEY_UP: self.pos -= 1
     elif c == 9: self.pos += 1  # tab
     elif curses.unctrl(c) in ['^W', '^C', '^X', '^Q']: self.tab = -1
     elif curses.unctrl(c) in ['^N']: self.network_dialog()
     elif curses.unctrl(c) == '^S': self.settings_dialog()
     else: return c
     if self.pos < 0: self.pos = 0
     if self.pos >= self.maxpos: self.pos = self.maxpos - 1
コード例 #11
0
ファイル: cu1.py プロジェクト: OlgaVe/PyClassLessons
def potato(bananascreen):
    """ Curses is controlled from here.
        This might be called 'the loop' in a game.

        game loop: http://gameprogrammingpatterns.com/game-loop.html
    """

    curses.textpad.rectangle(bananascreen,0,0,10,10)

    keypress = int()
    # 113 is the lowercase 'q' key.
    while keypress != 113:
        keypress = bananascreen.getch()
        print curses.unctrl(keypress), keypress
コード例 #12
0
ファイル: cu1.py プロジェクト: usherbond/PyClassLessons
def potato(bananascreen):
    """ Curses is controlled from here.
        This might be called 'the loop' in a game.

        game loop: http://gameprogrammingpatterns.com/game-loop.html
    """

    curses.textpad.rectangle(bananascreen, 0, 0, 10, 10)

    keypress = int()
    # 113 is the lowercase 'q' key.
    while keypress != 113:
        keypress = bananascreen.getch()
        print curses.unctrl(keypress), keypress
コード例 #13
0
ファイル: cu2.py プロジェクト: usherbond/PyClassLessons
def potato(bananawindow):
    """ Curses is controlled from here.
        This might be called 'the loop' in a game.
    """
    def background():
        """ Writes the default background each screen rewrite.

        """
        bananawindow.border()
        bananawindow.bkgdset('+')

        winheight, winwidth = bananawindow.getmaxyx()
        winheight_str = str(winheight)
        winwidth_str = str(winwidth)
        bananawindow.addstr(winheight - 2, winwidth - 10, winheight_str)
        bananawindow.addstr(winheight - 2, winwidth - 10 + len(winheight_str),
                            "," + winwidth_str)

    background()
    keypress = int()
    # 113 is the lowercase 'q' key.
    while curses.keyname(keypress) != '^D':
        keypress = bananawindow.getch()
        bananawindow.erase()
        background()
        # Lets actually add the character to the screen now.
        bananawindow.addch(1, 10, keypress)
        bananawindow.addstr(2, 10, curses.unctrl(keypress))
        bananawindow.addstr(3, 10, curses.keyname(keypress))
コード例 #14
0
ファイル: cu2.py プロジェクト: OlgaVe/PyClassLessons
def potato(bananawindow):
    """ Curses is controlled from here.
        This might be called 'the loop' in a game.
    """

    def background():
        """ Writes the default background each screen rewrite.

        """
        bananawindow.border()
        bananawindow.bkgdset('+')

        winheight, winwidth = bananawindow.getmaxyx()
        winheight_str = str(winheight)
        winwidth_str = str(winwidth)
        bananawindow.addstr(winheight-2, winwidth-10, winheight_str)
        bananawindow.addstr(winheight-2, winwidth-10+len(winheight_str), ","+winwidth_str)

    background()
    keypress = int()
    # 113 is the lowercase 'q' key.
    while curses.keyname(keypress) != '^D':
        keypress = bananawindow.getch()
        bananawindow.erase()
        background()
        # Lets actually add the character to the screen now.
        bananawindow.addch(1,10,keypress)
        bananawindow.addstr(2,10,curses.unctrl(keypress))
        bananawindow.addstr(3,10,curses.keyname(keypress))
コード例 #15
0
 def draw(self, disp):
     disp.inv.clear()
     for i in range(self.max_inv):
         if i in self.eqp:
             color = curses.A_BOLD | curses.color_pair(2)
         else:
             color = curses.A_NORMAL | curses.color_pair(2)
         if self.charges[i] > 0:
             disp.inv.addstr(
                 "%s %s %d\n" %
                 (curses.unctrl(ord('a') + i), items[self.inv[i]]['name'],
                  self.charges[i]), color)
         else:
             disp.inv.addstr(
                 "%s %s\n" %
                 (curses.unctrl(ord('a') + i), items[self.inv[i]]['name']),
                 color)
コード例 #16
0
 def _handle_input(self, c):
     if c == 27:  # escape
         self._wc.end_input(True)
     elif c == 10:  # enter
         self._wc.end_input()
     elif c == 127:  # backspace
         self._wc.backspace()
     elif c in range(32, 127):
         self._wc.input_char(curses.unctrl(c).decode("utf-8"))
コード例 #17
0
def loop():

	draw()
	inp = scr.getch(root.cursor_r,root.cursor_c)
	dummy_allkeys = [False]*(keys.K_MAX+1)#curses wont tell us what other keys are pressed at any moment
	if inp in curses2sdl:
		lemon.handle(lemon.KeypressEvent(dummy_allkeys, False, curses2sdl[inp], 0))
	else:
		lemon.handle(lemon.KeypressEvent(dummy_allkeys, unichr(inp), 0, 0))
	log(inp, c.unctrl(inp))
コード例 #18
0
    def handlekeypressed(self, keypressed, opts):
        """
        Perform actions based on pressed keys.

        Return true to exit the main loop.
        """
        if keypressed in ["k", "KEY_UP"]:
            self.uparrowevent()
        if keypressed in ["K", "KEY_PPAGE"]:
            self.uparrowshiftevent()
        elif keypressed in ["j", "KEY_DOWN"]:
            self.downarrowevent()
        elif keypressed in ["J", "KEY_NPAGE"]:
            self.downarrowshiftevent()
        elif keypressed in ["l", "KEY_RIGHT"]:
            self.rightarrowevent()
        elif keypressed in ["h", "KEY_LEFT"]:
            self.leftarrowevent()
        elif keypressed in ["H", "KEY_SLEFT"]:
            self.leftarrowshiftevent()
        elif keypressed in ["q"]:
            raise util.Abort(_('user quit'))
        elif keypressed in ['a']:
            self.toggleamend(opts)
        elif keypressed in ["c"]:
            if self.confirmcommit():
                opts['commit'] = True
                return True
        elif keypressed in ["s"]:
            opts['commit'] = False
            if self.confirmcommit(stage=True):
                opts['commit'] = False
                return True
        elif keypressed in ["r"]:
            if self.confirmcommit(review=True):
                opts['commit'] = True
                opts['crecord_reviewpatch'] = True
                return True
        elif keypressed in [' ']:
            self.toggleapply()
        elif keypressed in ['A']:
            self.toggleall()
        elif keypressed in ["f"]:
            self.togglefolded()
        elif keypressed in ["F"]:
            self.togglefolded(foldParent=True)
        elif keypressed in ["?"]:
            self.helpwindow()
            self.stdscr.clear()
            self.stdscr.refresh()
        elif curses.unctrl(keypressed) in ["^L"]:
            # scroll the current line to the top of the screen
            self.scrolllines(self.selecteditemstartline)
        return False
コード例 #19
0
ファイル: display.py プロジェクト: nlurkin/batchMon
	def confirm(self):
		self.stdscr.nodelay(False)
		try:
			k = self.stdscr.getkey()
			if curses.unctrl(k)=="d":
				curses.cbreak()
				return True
		except:
			pass
		curses.cbreak()
		return False
コード例 #20
0
def input_idnp():
    stdscr = panouri.stdscr()
    stdscr.keypad(1)
    stdscr.clear()
    h, w = stdscr.getmaxyx()
    idnp = ''
    while True:
        stdscr.clear()
        stdscr.addstr(h // 2, w // 2, "IDNP:")
        stdscr.addstr(h // 2 + 1, w // 2 - 4, idnp)
        char = stdscr.get_wch()
        if isinstance(char, str) and char.isprintable():
            idnp += char
        elif str(curses.unctrl(char)) == "b\'^H\'":  # Daca backspace este apasat, sterge un char.
            idnp = idnp[:-1]
        elif str(curses.unctrl(char)) == "b\'^J\'":  # Daca este apasat enter, then submit.
            stdscr.clear()
            panouri.panou_content().clear()
            content.alerta("Iau datele, te rog asteapta!")
            return check(idnp)
        else:
            continue  # Daca este apasata o alta tasta neprintabila, nu fa nimic.
コード例 #21
0
def get_char_list(s):
    ret_list = []
    while True:
        try:
            key = s.get_wch()
        except curses.error:
            # No input, this means a timeout occurs.
            return ret_list
        except ValueError:  # invalid input
            log.debug('Invalid character entered.')
            return ret_list
        # Set to non-blocking. We try to read more bytes. If there are no
        # more data to read, it will immediately timeout and return with the
        # data we have so far
        s.timeout(0)
        if isinstance(key, int):
            ret_list.append(curses.keyname(key).decode())
        else:
            if curses.ascii.isctrl(key):
                key = curses.unctrl(key).decode()
                # Here special cases for alt keys, where we get a ^[ and then a second char
                if key == '^[':
                    try:
                        part = s.get_wch()
                        if part == '[':
                            # CTRL+arrow and meta+arrow keys have a long format
                            part += s.get_wch() + s.get_wch() + s.get_wch(
                            ) + s.get_wch()
                    except curses.error:
                        pass
                    except ValueError:  # invalid input
                        log.debug('Invalid character entered.')
                    else:
                        key = 'M-%s' % part
                    # and an even more special case for keys like
                    # ctrl+arrows, where we get ^[, then [, then a third
                    # char.
                    if key == 'M-[':
                        try:
                            part = s.get_wch()
                        except curses.error:
                            pass
                        except ValueError:
                            log.debug('Invalid character entered.')
                        else:
                            key = '%s-%s' % (key, part)
            if key == '\x7f' or key == '\x08':
                key = '^?'
            elif key == '\r':
                key = '^M'
            ret_list.append(key)
コード例 #22
0
ファイル: keyboard.py プロジェクト: David96/poezio_lima-gold
def get_char_list(s):
    ret_list = []
    while True:
        try:
            key = s.get_wch()
        except curses.error:
            # No input, this means a timeout occurs.
            return ret_list
        except ValueError: # invalid input
            log.debug('Invalid character entered.')
            return ret_list
        # Set to non-blocking. We try to read more bytes. If there are no
        # more data to read, it will immediately timeout and return with the
        # data we have so far
        s.timeout(0)
        if isinstance(key, int):
            ret_list.append(curses.keyname(key).decode())
        else:
            if curses.ascii.isctrl(key):
                key = curses.unctrl(key).decode()
                # Here special cases for alt keys, where we get a ^[ and then a second char
                if key == '^[':
                    try:
                        part = s.get_wch()
                        if part == '[':
                            # CTRL+arrow and meta+arrow keys have a long format
                            part += s.get_wch() + s.get_wch() + s.get_wch() + s.get_wch()
                    except curses.error:
                        pass
                    except ValueError: # invalid input
                        log.debug('Invalid character entered.')
                    else:
                        key = 'M-%s' % part
                    # and an even more special case for keys like
                    # ctrl+arrows, where we get ^[, then [, then a third
                    # char.
                    if key == 'M-[':
                        try:
                            part = s.get_wch()
                        except curses.error:
                            pass
                        except ValueError:
                            log.debug('Invalid character entered.')
                        else:
                            key = '%s-%s' % (key, part)
            if key == '\x7f' or key == '\x08':
                key = '^?'
            elif key == '\r':
                key = '^M'
            ret_list.append(key)
コード例 #23
0
ファイル: castorView.py プロジェクト: nlurkin/batchMon
def mainLoop():
	global screen
	
	screen.repaint()
	k = screen.getch()
	if k != -1:
		if curses.unctrl(k) == "^W":
			screen.switchList()
		elif k == curses.KEY_DOWN:
			screen.currList.goDown()
		elif k == curses.KEY_UP:
			screen.currList.goUp()
		elif curses.unctrl(k) == " ":
			screen.currList.select()
		elif curses.unctrl(k) == "c":
			copy()
		elif curses.unctrl(k) == "d":
			delete()
		elif k == curses.KEY_RIGHT:
			levelDown()
		elif k == curses.KEY_LEFT:
			levelUp()
		elif curses.unctrl(k) == "^D":
			sys.exit(0)
コード例 #24
0
ファイル: tmux.py プロジェクト: arthaud/pytmux
    def write(self, data):
        '''Write data at the current cursor position'''
        assert self.offset + self.cursor.y < len(self.lines)

        if isinstance(data, bytes):
            data = data.decode('utf8', 'replace')

        log.debug('write: %r', data)
        replay.info('%d:WRITE %s', time.time(), json.dumps(data))

        current = ''
        while data:
            c = data[0]
            remove = 1

            if c == '\x1b':
                self._write_line(current)
                remove = self._control_seq(data)
                current = ''
            elif c == '\a':
                curses.beep()
            elif c == '\b':
                self._write_line(current)
                self.cursor.x = max(0, self.cursor.x - 1)
                current = ''
            elif c == '\t':
                current = self._expand_tab(current)
            elif c == '\n':
                self._write_line(current)
                self._cursor_newline(real=True)
                current = ''
            elif c == '\r':
                self._write_line(current)
                self.cursor.x = 0
                current = ''
            else:
                if unicodedata.category(c) in ('Cc', 'Cf', 'Cn', 'Cs'): # control characters
                    c = curses.unctrl(ord(c)).decode('utf8')

                current += c

            data = data[remove:]

        self._write_line(current)
        self._log_state()
コード例 #25
0
ファイル: views.py プロジェクト: moneytech/tg-1
    def get_keys(self) -> Tuple[int, str]:
        keys = repeat_factor = ""

        for _ in range(MAX_KEYBINDING_LENGTH):
            ch = self.stdscr.getch()
            log.info("raw ch without unctrl: %s", ch)
            try:
                key = curses.unctrl(ch).decode()
            except Exception:
                log.warning("cant uncrtl: %s", ch)
                break
            if key.isdigit():
                repeat_factor += key
                continue
            keys += key
            # if match found or there are not any shortcut matches at all
            if all(p == keys or not p.startswith(keys)
                   for p in MULTICHAR_KEYBINDINGS):
                break

        return cast(int, num(repeat_factor, default=1)), keys or "UNKNOWN"
コード例 #26
0
ファイル: core.py プロジェクト: notaLonelyDay/telegram-cli
    def loop(self):
        while True:
            wch = self.main_window.get_wch()

            # handling escape sequences
            try:
                s = curses.unctrl(wch)
                if s.decode() == '^[':
                    self.main_window.nodelay(True)
                    while True:
                        try:
                            s += self._unctr(self.main_window.get_wch())
                        except _curses.error:
                            break
                    self.main_window.nodelay(False)
                s = s.decode()
            except OverflowError or LookupError or UnicodeDecodeError:
                print('overflow')
                s = wch

            # print(s)

            self.key_handler(s)
            self.refresh()
コード例 #27
0
ファイル: test_curses.py プロジェクト: circinusX1/minimarmfs
def module_funcs(stdscr):
    "Test module-level functions"

    for func in [curses.baudrate, curses.beep, curses.can_change_color,
                 curses.cbreak, curses.def_prog_mode, curses.doupdate,
                 curses.filter, curses.flash, curses.flushinp,
                 curses.has_colors, curses.has_ic, curses.has_il,
                 curses.isendwin, curses.killchar, curses.longname,
                 curses.nocbreak, curses.noecho, curses.nonl,
                 curses.noqiflush, curses.noraw,
                 curses.reset_prog_mode, curses.termattrs,
                 curses.termname, curses.erasechar, curses.getsyx]:
        func()

    # Functions that actually need arguments
    if curses.tigetstr("cnorm"):
        curses.curs_set(1)
    curses.delay_output(1)
    curses.echo() ; curses.echo(1)

    f = tempfile.TemporaryFile()
    stdscr.putwin(f)
    f.seek(0)
    curses.getwin(f)
    f.close()

    curses.halfdelay(1)
    curses.intrflush(1)
    curses.meta(1)
    curses.napms(100)
    curses.newpad(50,50)
    win = curses.newwin(5,5)
    win = curses.newwin(5,5, 1,1)
    curses.nl() ; curses.nl(1)
    curses.putp('abc')
    curses.qiflush()
    curses.raw() ; curses.raw(1)
    curses.setsyx(5,5)
    curses.tigetflag('hc')
    curses.tigetnum('co')
    curses.tigetstr('cr')
    curses.tparm('cr')
    curses.typeahead(sys.__stdin__.fileno())
    curses.unctrl('a')
    curses.ungetch('a')
    curses.use_env(1)

    # Functions only available on a few platforms
    if curses.has_colors():
        curses.start_color()
        curses.init_pair(2, 1,1)
        curses.color_content(1)
        curses.color_pair(2)
        curses.pair_content(curses.COLOR_PAIRS - 1)
        curses.pair_number(0)

        if hasattr(curses, 'use_default_colors'):
            curses.use_default_colors()

    if hasattr(curses, 'keyname'):
        curses.keyname(13)

    if hasattr(curses, 'has_key'):
        curses.has_key(13)

    if hasattr(curses, 'getmouse'):
        (availmask, oldmask) = curses.mousemask(curses.BUTTON1_PRESSED)
        # availmask indicates that mouse stuff not available.
        if availmask != 0:
            curses.mouseinterval(10)
            # just verify these don't cause errors
            m = curses.getmouse()
            curses.ungetmouse(*m)
コード例 #28
0
ファイル: gui_text.py プロジェクト: crazyrabbitLTC/electrum
 def edit_str(self, target, c, is_num=False):
     if c==263 and target:
         target = target[:-1]
     elif not is_num or curses.unctrl(c) in '0123456789.':
         target += curses.unctrl(c)
     return target
コード例 #29
0
ファイル: test_curses.py プロジェクト: mcyril/ravel-ftn
#
コード例 #30
0
def main(screen):
    """Main text editor loop."""
    buffer = [""]
    while True:
        key = screen.getkey()
        y, x = screen.getyx()
        if len(key) == 1 and curses.unctrl(key) == b"^X":
            break
        elif len(key) == 1 and curses.unctrl(key) == b"^P":
            screen.addstr(10, 0, "\n".join(buffer))

        elif key == "KEY_BACKSPACE":
            if x == 0:
                if y != 0:
                    x = len(buffer[y - 1])
                    buffer[y - 1] += buffer[y]
                    buffer[y:] = buffer[y + 1 :]
                    screen.clear()
                    y -= 1
            else:
                buffer[y] = buffer[y][: x - 1] + buffer[y][x:]
                x -= 1
                screen.delch(y, x)

        elif key == "KEY_DC":
            if x == len(buffer[y]):
                if y != len(buffer) - 1:
                    buffer[y] += buffer[y + 1]
                    buffer[y + 1 :] = buffer[y + 2 :]
                    screen.clear()
            else:
                buffer[y] = buffer[y][:x] + buffer[y][x + 1 :]
                screen.clear()

        elif key == "KEY_LEFT":
            if x == 0:
                if y != 0:
                    y -= 1
                    x = len(buffer[y])
            else:
                x -= 1

        elif key == "KEY_RIGHT":
            if x == len(buffer[y]):
                if y != len(buffer) - 1:
                    x = 0
                    y += 1
            else:
                x += 1

        elif key == "KEY_UP":
            if y != 0:
                y -= 1
            x = min(x, len(buffer[y]))

        elif key == "KEY_DOWN":
            if y != len(buffer) - 1:
                y += 1
                x = min(x, len(buffer[y]))

        elif key == "KEY_HOME":
            x = 0

        elif key == "KEY_END":
            x = len(buffer[y])

        elif key in string.printable:
            if key == "\t":
                key = " " * 4
            if key == "\n":
                buffer.insert(y + 1, buffer[y][x:])
                buffer[y] = buffer[y][:x]
                y += 1
                x = 0
            else:
                buffer[y] = buffer[y][:x] + key + buffer[y][x:]
                x += len(key)
        else:
            pass

        screen.addstr(0, 0, "\n".join(buffer))
        screen.move(y, x)
コード例 #31
0
ファイル: ncurse-ui.py プロジェクト: mvonthron/rtm-ncurses
def main(stdscr):
    global _x, _y, width, height

    init_colors()

    _x = 0
    _y = 0
    width = curses.COLS
    height = curses.LINES - 5

    # titlebar
    titlebar_win = make_titlebar()
    titlebar_win.refresh()

    # content window
    content_win = make_contentwin(height, width)
    content_win.refresh(_y, _x, 1, 0, height - 1, width - 1)

    # statusbar
    statusbar_win = make_statusbar()
    statusbar_win.refresh()

    # inputbar
    inputbar_win = make_inputbar()
    inputbar_win.refresh()

    # main input buffer
    input_buffer = ""

    arrow = '➤'
    light = '⚡'

    content_win.addstr("test :" + arrow + ": test")
    content_win.refresh()

    while True:
        # move to own thread
        time.sleep(0.01)
        ch = inputbar_win.getch()

        if (-1 == ch):
            continue
        elif (curses.ascii.isprint(ch)):
            inputbar_win.addch(chr(ch))
            input_buffer += chr(ch)
        elif ch == curses.KEY_BACKSPACE or ch == curses.ascii.BS or ch == curses.ascii.DEL:
            inputbar_win.delch(inputbar_win.getyx()[0],
                               inputbar_win.getyx()[1] - 1)
            input_buffer = input_buffer[:-1]
        elif ch == curses.KEY_UP:
            inputbar_win.addstr("<KEY_UP>")
        elif ch == curses.ascii.DLE:
            inputbar_win.addstr("<DLE>")  #CTRL+P
        elif ch == curses.ascii.SO:
            inputbar_win.addstr("<SO>")  #CTRL+N
        elif ch == curses.ascii.TAB:
            inputbar_win.addstr("<TAB>")
        elif ch == curses.ascii.NAK:  #CTRL+U
            inputbar_win.addstr("<CTRL+U>")
        elif ch == curses.ascii.ESC:
            inputbar_win.addstr("<ESC>")
        elif ch == curses.ascii.NL or ch == curses.KEY_ENTER:
            inputbar_win.erase()
            inputbar_win.addstr('[channel] ')

            if input_buffer == "populate":
                content_win = populate(content_win)
            elif input_buffer == "next":
                _x = width
            elif input_buffer == "prev":
                _x = 0
            else:
                input_buffer += "\n"
                content_win.addstr(input_buffer)

            content_win.refresh(_y, _x, 1, 0, height - 1, width - 1)

            input_buffer = ""
        elif curses.ascii.isctrl(ch):
            inputbar_win.addstr("<CTRL> %d [%s]" % (ch, curses.unctrl(ch)))

        inputbar_win.refresh()

    time.sleep(8)
コード例 #32
0
ファイル: key.py プロジェクト: vonshednob/pter
    def parse(cls, value):
        if value == curses.KEY_BACKSPACE:
            return Key(Key.BACKSPACE, True)
        elif value == curses.KEY_DC:
            return Key(Key.DELETE, True)
        elif value == curses.KEY_LEFT:
            return Key(Key.LEFT, True)
        elif value == curses.KEY_RIGHT:
            return Key(Key.RIGHT, True)
        elif value == curses.KEY_UP:
            return Key(Key.UP, True)
        elif value == curses.KEY_DOWN:
            return Key(Key.DOWN, True)
        elif value == curses.KEY_END:
            return Key(Key.END, True)
        elif value == curses.KEY_HOME:
            return Key(Key.HOME, True)
        elif value == curses.KEY_NPAGE:
            return Key(Key.PGDN, True)
        elif value == curses.KEY_PPAGE:
            return Key(Key.PGUP, True)
        elif value == curses.KEY_F1:
            return Key(Key.F1, True)
        elif value == curses.KEY_F2:
            return Key(Key.F2, True)
        elif value == curses.KEY_F3:
            return Key(Key.F3, True)
        elif value == curses.KEY_F4:
            return Key(Key.F4, True)
        elif value == curses.KEY_F5:
            return Key(Key.F5, True)
        elif value == curses.KEY_F6:
            return Key(Key.F6, True)
        elif value == curses.KEY_F7:
            return Key(Key.F7, True)
        elif value == curses.KEY_F8:
            return Key(Key.F8, True)
        elif value == curses.KEY_F9:
            return Key(Key.F9, True)
        elif value == curses.KEY_F10:
            return Key(Key.F10, True)
        elif value == curses.KEY_F11:
            return Key(Key.F11, True)
        elif value == curses.KEY_F12:
            return Key(Key.F12, True)
        elif value == curses.KEY_RESIZE:
            return Key(Key.RESIZE, True)
        elif isinstance(value, int):
            # no idea what key that is
            return Key('', True)
        elif isinstance(value, str):
            try:
                ctrlkey = str(curses.unctrl(value), 'ascii')
            except OverflowError:
                # some unicode, you probably want to see it
                return Key(value, False)

            if value in "\n\r":
                return Key(Key.RETURN, special=True)

            if value == ' ':
                return Key(Key.SPACE)

            if value == "\t":
                return Key(Key.TAB)

            if ctrlkey in ['^H', '^?']:
                return Key(Key.BACKSPACE, special=True)

            if ctrlkey == '^[':
                return Key(Key.ESCAPE, True)

            if ctrlkey != value:
                return Key(ctrlkey[1:], True)
            else:
                return Key(value)
コード例 #33
0
#
コード例 #34
0
ファイル: 1337.py プロジェクト: gemdude46/1337
def app(stdscr):
    global scrmap, osz, URI
    
    focus = 'mouse'
    
    goto('http://info.cern.ch')
    
    stdscr.nodelay(True)
    
    eval_cache = {}
    
    if curses.has_colors() and curses.COLORS >= 8 and curses.COLOR_PAIRS >= 64:
        for i in range(8):
            for j in range(8):
                if i + j:
                    curses.init_pair(i + j * 8, i, j)
    
    while stdscr.getch() > -1: pass
    while True:
        ender = False
        evtrsp = []
        size = stdscr.getmaxyx()
        document.cssize = (size[0] - MG_TOP - MG_BOTTOM, size[1])
        
        clickz = False
        
        if tuple(size) != osz:
            osz = tuple(size)
            scrmap = [[{} for _ in xrange(size[0]-4)] for _ in xrange(size[1])]
        
        kin = -2
        while kin != -1:
            if kin == 27:
                focus = 'mouse'
            if focus == 'mouse':
                curses.curs_set(False)
                if kin == curses.KEY_UP:
                    mouse[1] -= 1
                if kin == curses.KEY_DOWN:
                    mouse[1] += 1
                if kin == curses.KEY_LEFT:
                    mouse[0] -= 1
                if kin == curses.KEY_RIGHT:
                    mouse[0] += 1
                if kin in (curses.KEY_ENTER, 10, 13):
                    clickz = True
                    if mouse[1] == 1 and mouse[0] > 10 and mouse[0] < size[1] - 10:
                        focus = 'uri'
            elif focus == 'uri':
                curses.curs_set(True)
                mouse[1] = 1
                if mouse[0] > len(URI) + 11:
                    mouse[0] = len(URI) + 11
                cpos = mouse[0] - 11
                if kin == curses.KEY_LEFT:
                    mouse[0] -= 1
                elif kin == curses.KEY_RIGHT:
                    mouse[0] += 1
                elif kin in (curses.KEY_BACKSPACE, 127, 27):
                    mouse[0] -= 1
                    URI = URI[:cpos-1] + URI[cpos:]
                elif kin in (curses.KEY_ENTER, 10, 13):
                    ender = True
                    focus = 'mouse'
                elif kin > 0:
                    p = curses.unctrl(kin)
                    if len(p) == 1:
                        URI = URI[:cpos] + p + URI[cpos:]
                        mouse[0] += 1
            kin = stdscr.getch()
        
        if   mouse[0] < 0          : mouse[0] = 0
        elif mouse[0] > size[1] - 1: mouse[0] = size[1] - 1
        if   mouse[1] < 1          : mouse[1] = 1
        elif mouse[1] > size[0] - 1: mouse[1] = size[0] - 1
        
        document.tick(evtrsp)
        
        stdscr.addstr(0, 0, (u'{:^%i}' % size[1]).format(browser_name).encode(encoding), curses.A_BOLD | cp(white, blue))
        stdscr.addstr(1, 0, (u' [<=] [>] [{:<%i}|reload] ' % (size[1] - 20)).format(URI).encode(encoding), curses.A_BOLD | cp(black, white))
        stdscr.addstr(2, 0, (u'{:^%i}' % size[1]).format(document.getTitle()).encode(encoding), curses.A_UNDERLINE | cp(black, white))
        
        try: stdscr.addstr(size[0]-1, 0, ' ' * size[1], cp(black, white))
        except curses.error: pass
        
        def setpxcb(xy, c, f, e):
            if xy[0] >= 0 and xy[1] >= 0 and xy[0] < size[1] and xy[1] < size[0] - (MG_TOP + MG_BOTTOM):
                scrmap[xy[0]][xy[1]]['e'] = e
                cpn = curses.pair_number(scrmap[xy[0]][xy[1]].get('a', 0))
                f = f.format(fg = cpn % 8, bg = cpn // 8)
                if f in eval_cache:
                    fp = eval_cache[f]
                else:
                    eval_cache[f] = eval(f)
                    fp = eval_cache[f]
                scrmap[xy[0]][xy[1]]['a'] = fp
                stdscr.addstr(xy[1]+MG_TOP, xy[0], c.encode(encoding), fp)
        
        
        for x in range(size[1]):
            for y in range(size[0]):
                setpxcb((x,y), ' ', 'cp(0,%s)'%document.__dict__.get('bgc', 'white'), document)
        
        document.getElementsByTagName('body')[0].render(setpxcb, [0,0])
        
        if focus == 'mouse':
            try:
                E = scrmap[mouse[0]][mouse[1]-3]['e'] if mouse[1] >= MG_TOP and mouse[1] < size[0] - MG_BOTTOM else None
                mp = (
                    css_constants.cursors.get(E.CSS().get('cursor'), css_constants.cursors['default']) 
                        if mouse[1] >= MG_TOP and mouse[1] < size[0] - MG_BOTTOM else 
                            css_constants.cursors['default']
                     )
                
                stdscr.addstr(mouse[1], mouse[0], mp, cp(black, white))
                if clickz and E:
                    E.click(evtrsp)
            except curses.error: pass
        else:
            stdscr.move(mouse[1], mouse[0])
        
        for e in evtrsp: eval(e)
        if ender: goto(URI)
        stdscr.refresh()
コード例 #35
0
ファイル: core.py プロジェクト: notaLonelyDay/telegram-cli
 def _unctr(char):
     try:
         unctr = curses.unctrl(char)
         return unctr
     except OverflowError:
         return ''
コード例 #36
0
def main(stdscr):
    # Clear screen
    c = 0
    # worker = 0
    # devices = 1
    msg = ""
    cmd = 0
    curses.init_pair(1, curses.COLOR_RED, curses.COLOR_BLACK)
    stdscr.timeout(200)

    exit = False
    while not exit:
        now = time.time()
        rows, cols = stdscr.getmaxyx()
        cfg["rows"] = rows
        cfg["cols"] = cols
        stdscr.addstr(0, 4, str(c))
        stdscr.addstr(0, 10, "Screen %dx%d Lab: %s Select: %d" % (cols, rows, cfg["lab"]["name"], cfg["select"]))
        # print help
        stdscr.addstr(0, rows - 2, "HELP: UP DOWN TAB")
        if cfg["tab"] == 1:
            stdscr.addstr(1, 0, "DEVICE HELP: h+[u]")
        if cfg["tab"] == 2:
            stdscr.addstr(1, 0, "JOB HELP: v")
        stdscr.addstr(2, 0, msg)
        if cfg["tab"] != 2:
            cfg["sjob"] = None

        y = 3
        if cfg["workers"]["enable"]:
            update_workers()
            check_limits()
            
            stdscr.addstr(y, 0, "Workers %d-%d/%d (refresh %d/%d)" %
                (
                1,
                cfg["workers"]["count"],
                cfg["workers"]["count"],
                now - cache["workers"]["time"],
                cfg["workers"]["refresh"]
                ))
            y += 1
            cfg["wpad"].refresh(0, 0, y, 0, rows - 1, cols - 1)
            y += cfg["workers"]["count"] + 1

        # devices
        if cfg["devices"]["enable"]:
            update_devices()
            y_max = rows - 15
            cfg["devices"]["display"] = y_max - y
            if cfg["devices"]["display"] > cfg["devices"]["count"]:
                cfg["devices"]["display"] = cfg["devices"]["count"]
            stdscr.addstr(y, 0, "Devices %d-%d/%d (refresh %d/%d)" %
                (
                cfg["devices"]["offset"] + 1,
                cfg["devices"]["display"] + cfg["devices"]["offset"],
                cfg["devices"]["max"],
                now - cache["device"]["time"],
                cfg["devices"]["refresh"]
                ))
            y += 1
            #verify that select is printable
            check_limits()
            cfg["dpad"].refresh(cfg["devices"]["offset"], 0, y, 0, y_max, cols - 1)
            y += cfg["devices"]["display"]

        if cfg["jobs"]["enable"]:
            update_jobs()
            cfg["jpad"].refresh(0, 0, y, 0, rows - 1, cols - 1)

        if cfg["vjob"] != None:
            update_job(cfg["vjob"])

        stdscr.refresh()

        if cfg["vjob"] != None:
            wj[cfg["vjob"]]["wjob"].box("=", "-")
            wj[cfg["vjob"]]["wjob"].refresh()
            wj[cfg["vjob"]]["vjpad"].refresh(cfg["vjob_off"], 0, 9, 9, rows - 9, cols - 9)
        #curses.doupdate()
        y += 1
        msg = ""
        c = stdscr.getch()
        if c == curses.KEY_UP:
            cfg["select"] -= 1
            if cfg["tab"] == 1:
                cache["device"]["redraw"] = True
            elif cfg["tab"] == 0:
                cache["workers"]["redraw"] = True
            else:
                cache["jobs"]["redraw"] = True
        elif c == curses.KEY_DOWN:
            cfg["select"] += 1
            if cfg["tab"] == 1:
                cache["device"]["redraw"] = True
            elif cfg["tab"] == 0:
                cache["workers"]["redraw"] = True
            else:
                cache["jobs"]["redraw"] = True
        elif c == curses.KEY_PPAGE:
            if cfg["tab"] == 1:
                #scroll devices
                cfg["devices"]["offset"] -= 5
                cache["device"]["redraw"] = True
                if cfg["devices"]["offset"] < 0:
                    cfg["devices"]["offset"] = 0
                if cfg["select"] > cfg["devices"]["offset"] + cfg["devices"]["display"]:
                    cfg["select"] = cfg["devices"]["offset"] + cfg["devices"]["display"]
            else:
                # scroll job output
                cfg["vjob_off"] -= 100
        elif c == curses.KEY_NPAGE:
            if cfg["tab"] == 1:
                #scroll devices
                cfg["devices"]["offset"] += 5
                cache["device"]["redraw"] = True
                if cfg["devices"]["offset"] > cfg["devices"]["max"] - 20:
                    cfg["devices"]["offset"] = 0
                if cfg["select"] < cfg["devices"]["offset"]:
                    cfg["select"] = cfg["devices"]["offset"]
            else:
                # scroll job output
                cfg["vjob_off"] += 100
        elif c == ord(" "):
            if cfg["tab"] == 1:
                if cfg["sdev"] in cfg["devices"]["select"]:
                    cfg["devices"]["select"].remove(cfg["sdev"])
                else:
                    cfg["devices"]["select"].append(cfg["sdev"])
        elif c == 9:
            # TAB
            if cfg["tab"] == 0:
                cfg["tab"] = 1
                cache["workers"]["redraw"] = True
                cache["device"]["redraw"] = True
                msg = "Switched to devices tab"
            elif cfg["tab"] == 1:
                cfg["tab"] = 2
                cache["device"]["redraw"] = True
                cache["jobs"]["redraw"] = True
                msg = "Switched to jobs tab"
            else:
                cfg["tab"] = 0
                cache["jobs"]["redraw"] = True
                cache["workers"]["redraw"] = True
                msg = "Switched to worker tab"
        elif cmd > 0:
            # want a subcommand
            if cmd == ord('h'):
                if c == ord('u'):
                    msg = "Set %s to unknow" % cfg["sdev"]
                    cfg["lserver"].scheduler.devices.update(cfg["sdev"], None, None, None, None, 'UNKNOWN')
                    cache["device"]["time"] = 0
                    cmd = 0
                elif c == ord('m'):
                    msg = "Set %s to maintenance" % cfg["sdev"]
                    cfg["lserver"].scheduler.devices.update(cfg["sdev"], None, None, None, None, 'MAINTENANCE')
                    cache["device"]["time"] = 0
                    cmd = 0
                elif c > 0:
                    cmd = 0
                    msg = "Invalid health %s" % curses.unctrl(c)
            elif cmd == ord('l'):
                if c == ord('n'):
                    cmd = 0
                    msg = switch_lab()
            else:
                cmd = 0
                msg = "Invalid subcomand %s" % curses.unctrl(c)
        elif c == ord('w'):
            # worker window
            cfg["workers"]["enable"] = not cfg["workers"]["enable"]
            msg = "Windows worker"
        elif c == ord('j'):
            # jobs window
            cfg["jobs"]["enable"] = not cfg["jobs"]["enable"]
            msg = "Windows jobs"
        elif c == ord('l'):
            # lab switch
            cmd = c
            msg = "lab switch: Next or lab number"
        elif c == ord('h'):
            if cfg["tab"] == 1:
                cmd = c
                msg = "Set health of %s to " % cfg["sdev"]
            else:
                msg = "Invalid"
                cmd = 0
        elif c == ord('x'):
            cmd = 0
            cfg["vjob"] = None
            if cfg["vjpad"] != None:
                cfg["vjpad"].clear()
        elif c == ord('r'):
            if cfg["tab"] == 0:
                cache["workers"]["time"] = 0
            elif cfg["tab"] == 1:
                cache["device"]["time"] = 0
            else:
                cache["jobs"]["time"] = 0
        elif c == ord('R'):
            #refresh all
            cache["workers"]["time"] = 0
            cache["device"]["time"] = 0
            cache["jobs"]["time"] = 0
            msg = "Refresh all"
        elif c == ord('v'):
            if cfg["tab"] == 2:
                msg = "View job %s" % cfg["sjob"]
                cfg["vjob"] = cfg["sjob"]
            else:
                msg = "Invalid"
        if cfg["vjob_off"] < 0:
            cfg["vjob_off"] = 0
            msg = "STOP"
        if cfg["tab"] > 2:
            cfg["tab"] = 0
        if cfg["tab"] == 0 and not cfg["workers"]["enable"]:
            cfg["tab"] = 1
        if c == 27 or c == ord('q'):
            exit = True
        check_limits()
コード例 #37
0
ファイル: ncurse-ui.py プロジェクト: mvonthron/rtm-ncurses
def main(stdscr):
  global _x, _y, width, height
  
  init_colors()
  
  _x = 0
  _y = 0
  width  = curses.COLS
  height = curses.LINES-5
  
  # titlebar
  titlebar_win = make_titlebar()
  titlebar_win.refresh()
  
  # content window
  content_win = make_contentwin(height, width)
  content_win.refresh(_y, _x, 1, 0, height-1, width-1)
  
  # statusbar
  statusbar_win = make_statusbar()
  statusbar_win.refresh()
  
  # inputbar
  inputbar_win = make_inputbar()
  inputbar_win.refresh()  
  
  # main input buffer
  input_buffer = ""
  

  arrow = '➤'
  light = '⚡'

  content_win.addstr("test :"+arrow+": test")
  content_win.refresh()

  while True:
    # move to own thread
    time.sleep(0.01)
    ch = inputbar_win.getch()
    
    if(-1 == ch):
      continue
    elif(curses.ascii.isprint(ch)):
      inputbar_win.addch(chr(ch))
      input_buffer += chr(ch)
    elif ch == curses.KEY_BACKSPACE or ch == curses.ascii.BS or ch == curses.ascii.DEL:
      inputbar_win.delch(inputbar_win.getyx()[0], inputbar_win.getyx()[1]-1)
      input_buffer = input_buffer[:-1]
    elif ch == curses.KEY_UP:
      inputbar_win.addstr("<KEY_UP>")
    elif ch == curses.ascii.DLE:
      inputbar_win.addstr("<DLE>") #CTRL+P
    elif ch == curses.ascii.SO:
      inputbar_win.addstr("<SO>") #CTRL+N
    elif ch == curses.ascii.TAB:
      inputbar_win.addstr("<TAB>")
    elif ch == curses.ascii.NAK:  #CTRL+U
      inputbar_win.addstr("<CTRL+U>")
    elif ch == curses.ascii.ESC:
      inputbar_win.addstr("<ESC>")
    elif ch == curses.ascii.NL or ch == curses.KEY_ENTER:
      inputbar_win.erase()
      inputbar_win.addstr('[channel] ')
      
      if input_buffer == "populate":
        content_win = populate(content_win)
      elif input_buffer == "next":
        _x = width
      elif input_buffer == "prev":
        _x = 0
      else:
        input_buffer += "\n"
        content_win.addstr(input_buffer)
      
      content_win.refresh(_y, _x, 1, 0, height-1, width-1)
      
      input_buffer = ""
    elif curses.ascii.isctrl(ch):
      inputbar_win.addstr("<CTRL> %d [%s]" % (ch, curses.unctrl(ch)))
        
    inputbar_win.refresh()
  
  time.sleep(8)
コード例 #38
0
ファイル: test.py プロジェクト: iblaauw/hexeditor
def do_thing(char, screen):
    print curses.unctrl(char)
コード例 #39
0
ファイル: gui_text.py プロジェクト: tigereye/electrum
 def edit_str(self, target, c, is_num=False):
     if c==263 and target:
         target = target[:-1]
     elif not is_num or curses.unctrl(c) in '0123456789.':
         target += curses.unctrl(c)
     return target