Esempio n. 1
0
    def Active(self):
        selected = True
        # highlight current widget to show it is active
        self.Highlight()
        
        while selected:
            key = self.Win.getch()
            
            # capture ENTER, TAB, and BACKTAB keystrokes
            if key in [curses.KEY_ENTER, ord('\n'), 10]:
                self.UnHighlight()
                selected = False
                self.CallMethod()
            
            elif key in [ord('\t'), 9] and not self.DisableTab:
                # stop highlighting current widget
                self.UnHighlight()
                selected = False
                curses.ungetch(key)     # pass tab along so Screen will know to go to next widget

            # go to menu (SHIFT-M or F1)
            # or go to status screen (SHIFT-M or F8)
            elif key in [curses.KEY_F1, 77, curses.KEY_F8, 76] and not self.DisableScreenSwitch:
                selected = False
                curses.ungetch(key)
Esempio n. 2
0
 def read_key(self, flush_first=False):
   if flush_first:
     self.flush_input()
   key = self._window.getch()
   if key == curses.KEY_MOUSE:
     try:
       mouse = curses.getmouse()
       if mouse[4] & curses.BUTTON1_RELEASED:
         key = "MOUSE_1RELEASED"
       elif (mouse[4] & curses.BUTTON2_RELEASED        |
             mouse[4] & curses.BUTTON2_CLICKED         |
             mouse[4] & curses.BUTTON2_DOUBLE_CLICKED  |
             mouse[4] & curses.BUTTON2_TRIPLE_CLICKED  |
            mouse[4] & curses.BUTTON2_PRESSED):
         key = "MOUSE_SCROLL_DOWN"
       elif mouse[4] & curses.BUTTON3_RELEASED:
         key = "MOUSE_3RELEASED"
       elif (mouse[4] & curses.BUTTON4_RELEASED        |
             mouse[4] & curses.BUTTON4_CLICKED         |
             mouse[4] & curses.BUTTON4_DOUBLE_CLICKED  |
             mouse[4] & curses.BUTTON4_TRIPLE_CLICKED  |
             mouse[4] & curses.BUTTON4_PRESSED):
         key = "MOUSE_SCROLL_UP"
       else: key = "MOUSE_UNKNOWN"
       self.mouse_location = (mouse[1], mouse[2])
     except:
       key = "MOUSE_UNKNOWN"
   else:
     curses.ungetch(key)
     key = self._window.getkey()
     if key == "KEY_RESIZE": return "WINDOW_RESIZED"
   return key
Esempio n. 3
0
 def _inject_key(screen, char):
     """
     Inject a specified character into the input buffers.
     """
     if sys.platform == "win32":
         event = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
         event.RepeatCount = 1
         event.ControlKeyState = 0
         event.VirtualScanCode = 0
         if char >= 0:
             event.Char = chr(char)
             event.VirtualKeyCode = ord(chr(char).upper())
         else:
             # Lookup in mapping dicts
             reverse = dict(
                 (v, k) for k, v in screen._EXTRA_KEY_MAP.items())
             if char in reverse:
                 event.VirtualKeyCode = reverse[char]
             else:
                 # Fudge key state required for BACK_TAB if needed.
                 if char == Screen.KEY_BACK_TAB:
                     char = Screen.KEY_TAB
                     event.ControlKeyState = win32con.SHIFT_PRESSED
                 reverse = dict((v, k) for k, v in screen._KEY_MAP.items())
                 event.VirtualKeyCode = reverse[char]
         event.KeyDown = 1
         screen._stdin.WriteConsoleInput([event])
         event.KeyDown = 0
         screen._stdin.WriteConsoleInput([event])
     else:
         curses.ungetch(char)
Esempio n. 4
0
 def kbhit(self):
     ch = self.win.getch()
     if (ch != -1):
         curses.ungetch(ch)
         return 1
     else:
         return 0
Esempio n. 5
0
 def CaptureText(self):
     # Special keys handled by CaptureText()
     #   ESC:       exits without capturing anything, current widget still highlighted
     #   ENTER:     exits with capturing all previously entered text, current widget still highlighted
     #   TAB:       exits with capturing and moves to next widget
     #   BACKSPACE: removes last character from self.Text
     
     capturing = True
     old_text = self.Text
     self.UnHighlight()
     
     while capturing:
         self.Win.move(0, min(len(self.Text), self.Characters - 1))
         
         key = self.Win.getch()
         
         # in case no delay mode is set to true
         if key == -1:
             pass
         
         # ESC
         # 27 can mean either ALT or ESC in ncurses
         # following code from http://stackoverflow.com/questions/5977395/ncurses-and-esc-alt-keys
         # used to resolve ESC vs ALT+key with key input
         if key == 27:
             self.Win.nodelay(True)
             n = self.Win.getch()
             if n == -1:
                 # ESC was pressed and not ALT
                 self.Text = old_text
                 self.DisplayMode = "STANDARD"
                 self.Highlight()
                 capturing = False
             self.Win.nodelay(False)
     
         # ENTER
         elif key in [curses.KEY_ENTER, ord('\n'), 10]:
             self.DisplayMode = "STANDARD"
             self.Highlight()
             capturing = False
         
         # TAB
         elif key in [ord('\t'), 9]:
             self.DisplayMode = "STANDARD"
             self.UnHighlight()
             capturing = False
             curses.ungetch('\t') # Notify the core that tab was pressed
         
         # -- Added 8 and 127, additional possible backspace inputs (127 on my system)
         # http://stackoverflow.com/questions/4363309/how-to-check-for-the-backspace-character-in-c
         elif key in [curses.KEY_BACKSPACE, ord('\b'), 10, 8, 127]:
             # erase last character entered
             self.Text = self.Text[:-1]
             self.DisplayMode = "TYPING"
         
         else:
             self.Text += chr(key)
             self.DisplayMode = "TYPING"
             
         self.UpdateDisplay()
 def SetNextScreen(self):
     # if connection is set or user is going to ConnectionWizard screen
     if not CDBCore.CDBCore.Connection and self.CurrentWidget > 0:
         msg = "Error: No Connection Detected.\nSelect Connection Wizard to connect to a\ndatabase."
         CDBCore.CDBCore.StatusScreen.AddStatusMessage(msg)
         CDBCore.CDBCore.PopUp = PopUpOk(msg)
         CDBCore.CDBCore.PopUp.MakeActive()
     # if a connection is established but a database is not set
     elif CDBCore.CDBCore.Connection and not CDBCore.CDBCore.Connection.Database and (self.CurrentWidget == 2 or self.CurrentWidget == 3 or self.CurrentWidget == 5):
         msg = "Error: No Database Detected.\nSelect or Create a Database first."
         CDBCore.CDBCore.StatusScreen.AddStatusMessage(msg)
         CDBCore.CDBCore.PopUp = PopUpOk(msg)
         CDBCore.CDBCore.PopUp.MakeActive()
     elif CDBCore.CDBCore.Connection and CDBCore.CDBCore.Connection.DBType == "PostgreSQL" and self.CurrentWidget == 1:
         msg = "Select Database unavailable for PostgreSQL\nserver.\n\nPlease Use a New Connection to access a\ndifferent database."
         CDBCore.CDBCore.StatusScreen.AddStatusMessage(msg)
         CDBCore.CDBCore.PopUp = PopUpOk(msg)
         CDBCore.CDBCore.PopUp.MakeActive()
     elif CDBCore.CDBCore.Connection and CDBCore.CDBCore.Connection.DBType == "PostgreSQL" and self.CurrentWidget == 4:
         msg = "Error: Cannot create databases when using\nPostgreSQL connector.\n\nUse PSQL tool."
         CDBCore.CDBCore.StatusScreen.AddStatusMessage(msg)
         CDBCore.CDBCore.PopUp = PopUpOk(msg)
         CDBCore.CDBCore.PopUp.MakeActive()
     else:
         self.NextScreen = self.Screens[self.CurrentWidget]
         curses.ungetch('\n')
Esempio n. 7
0
 def _inject_key(screen, char):
     """
     Inject a specified character into the input buffers.
     """
     if sys.platform == "win32":
         event = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
         event.RepeatCount = 1
         event.ControlKeyState = 0
         event.VirtualScanCode = 0
         if char >= 0:
             event.Char = chr(char)
             event.VirtualKeyCode = ord(chr(char).upper())
         else:
             # Lookup in mapping dicts
             reverse = dict((v, k) for k, v in
                            screen._EXTRA_KEY_MAP.items())
             if char in reverse:
                 event.VirtualKeyCode = reverse[char]
             else:
                 # Fudge key state required for BACK_TAB if needed.
                 if char == Screen.KEY_BACK_TAB:
                     char = Screen.KEY_TAB
                     event.ControlKeyState = win32con.SHIFT_PRESSED
                 reverse = dict((v, k) for k, v in
                                screen._KEY_MAP.items())
                 event.VirtualKeyCode = reverse[char]
         event.KeyDown = 1
         screen._stdin.WriteConsoleInput([event])
         event.KeyDown = 0
         screen._stdin.WriteConsoleInput([event])
     else:
         curses.ungetch(char)
 def test_menu_item_textentryitem(self):
     """Test that TextEntryItem obtains user input when called and that get_value() returns the stored value."""
     curses.initscr()
     curses.ungetch("\n")
     curses.ungetch("a")
     self.textentryitem()
     self.assertEqual(self.textentryitem.get_value(), "a")
Esempio n. 9
0
 def editCurrentTextbox(self):
     curses.curs_set(1)
     curses.ungetch(0)
     self.fieldValues[self.currentField()] = self.currentTextbox()[0].edit().strip()
     if not self.checkCurrentField():
         self.fieldValues[self.currentField()] = ""
     curses.curs_set(0)
 def TestConnection(self):
     # Check that either MySQL or Postgre has been checked        
     if self.ActionWidgets[self.Input["MySQL"]].Value() and self.ActionWidgets[self.Input["PostgreSQL"]].Value():
         self.ResetScreen("Check either MySQL or PostgresSQL, not both.")
         return
         
     if not self.ActionWidgets[self.Input["MySQL"]].Value() and not self.ActionWidgets[self.Input["PostgreSQL"]].Value():
         self.ResetScreen("Must select MySQL or PostgresSQL.")
         return
             
     isMySQL = False
     if self.ActionWidgets[self.Input["MySQL"]].Value():
         isMySQL = True
             
     # Retrieve the database if one has been provided
     database = None
     if len(self.ActionWidgets[self.Input["Database (Optional)"]].Text) > 0:
         database = self.ActionWidgets[self.Input["Database (Optional)"]].Text
     
     # If Postgres, make sure a database has been provided
     if not isMySQL and database == None:
         self.ResetScreen("Database required for PostgreSQL connection.")
         return
     
     # Get the port
     port = 0
     try:
         port = int(self.ActionWidgets[self.Input["Port"]].Text)
     except ValueError:
         pass
     
     # Create the connection
     con = None
     
     if isMySQL:
         con = MySQLConnection(self.ActionWidgets[self.Input["User Name"]].Text,
                               self.ActionWidgets[self.Input["Password"]].Text,
                               self.ActionWidgets[self.Input["Host"]].Text,
                               port,
                               database)
     else:
         con = PostgresConnection(self.ActionWidgets[self.Input["User Name"]].Text,
                                  self.ActionWidgets[self.Input["Password"]].Text,
                                  database,
                                  self.ActionWidgets[self.Input["Host"]].Text,
                                  port)
     
     # Attempt to connect with the given information
     CDBCore.CDBCore.StatusScreen.AddStatusMessage("Attempting to Connect to Database...")
     results = con.Connect()
     if results.Success:
         CDBCore.CDBCore.Connection = con
         CDBCore.CDBCore.StatusScreen.AddStatusMessage("Connection established.")
         curses.ungetch('\n') # Notify the core to move to next screen
         return
     else:
         CDBCore.CDBCore.StatusScreen.AddStatusMessage(results.Message)
         msg = "Could not connect to database."
         self.ResetScreen(msg)
         return
Esempio n. 11
0
 def test_menu_unsupportedfooteroption(self):
     """Test that unsupported footer strings raise MenuUnsupportedFooterOptionError when encountered."""
     self.menu.footer_items = ["a"]
     curses.ungetch("\n")
     with self.assertRaises(ec2rlcore.menu.MenuUnsupportedFooterOptionError) as error:
         self.assertTrue(self.menu())
     self.assertEqual(str(error.exception), "Encountered unsupported footer selection: a")
Esempio n. 12
0
File: ui.py Progetto: Foohx/kwak_cli
    def wait_input(self, prompt=""):
        """

        Wait for the user to input a message and hit enter.
        Puts the message into self.inputbuffer

        """
        self.inputbuffer = prompt
        self.redraw_chatline()
        self.boxes['chatline'].cursyncup()
        last = -1
        while last != ord('\n'):
            last = self.stdscr.getch()
            if last == ord('\n'):
                tmp = self.inputbuffer
                self.inputbuffer = ""
                self.redraw_chatline()
                self.boxes['chatline'].cursyncup()
                return tmp[len(prompt):]
            elif last == curses.KEY_BACKSPACE or last == 127:
                if len(self.inputbuffer) > len(prompt):
                    self.inputbuffer = self.inputbuffer[:-1]
            elif last==curses.KEY_LEFT or last==curses.KEY_UP or last==curses.KEY_DOWN or last==curses.KEY_RIGHT:
                self.redraw_ui()
            elif last == curses.KEY_RESIZE:
                self.resize()
            else:
                curses.ungetch(last)
                self.inputbuffer += self.stdscr.get_wch()
            self.redraw_chatline()
 def CreateTable(self):
     try:
         # Construct the create table query from the user's input
         query = self.ConstructQuery()
         
         # Attempt to create the table
         result = CDBCore.CDBCore.Connection.QueryString(query)
         
         # Ensure that the query was successful
         if not result.Success:
             raise Exception(result.Message)
         
         # Notify of successful
         CDBCore.CDBCore.StatusScreen.AddStatusMessage("Successfully created table: " + self.Name)
         
         # Move on to next screen
         curses.ungetch('\n')
         
     except Exception as ex:
         # TODO: Add multi-line once status supports it
         msg = "Failed to create table:" + self.Name
         CDBCore.CDBCore.StatusScreen.AddStatusMessage(msg)
         self.ActionWidgets[0].selected = True
         self.ActionWidgets[0].Highlight()
         self.ActionWidgets[0].Active()
         return
Esempio n. 14
0
 def test_menu_config_select_module_exit_selection_no_colors(self, mock_side_effect_function):
     """Test drawing and exiting the menu when the terminal doesn't support colors."""
     curses.initscr()
     curses.ungetch("\n")
     curses.ungetch(curses.KEY_RIGHT)
     self.assertTrue(self.menu())
     self.assertTrue(mock_side_effect_function.called)
Esempio n. 15
0
File: dos.py Progetto: yzz127/qiling
 def int16(self):
     ah = self.ql.reg.ah
     if ah == 0x0:
         curses.nonl()
         key = self._parse_key(self.stdscr.getch())
         self.ql.dprint(0, f"Get key: {hex(key)}")
         if curses.ascii.isascii(key):
             self.ql.reg.al = key
         else:
             self.ql.reg.al = 0
         self.ql.reg.ah = self._get_scan_code(key)
         curses.nl()
     elif ah == 0x1:
         curses.nonl()
         # set non-blocking
         self.stdscr.timeout(0)
         key = self._parse_key(self.stdscr.getch())
         if key == -1:
             self.set_flag(0x40)
             self.ql.reg.ax = 0
         else:
             self.ql.dprint(0, f"Has key: {hex(key)} ({curses.ascii.unctrl(key)})")
             self.ql.reg.al = key
             self.ql.reg.ah = self._get_scan_code(key)
             self.clear_flag(0x40)
             # Buffer shouldn't be removed in this interrupt.
             curses.ungetch(key)
         self.stdscr.timeout(-1)
         curses.nl()
Esempio n. 16
0
    def input(self):
        v = None

        l.debug("memcurses input")
        c = self._screen.getch()
        if c == ord('q'):
            l.debug("... quitting")
            return False
        elif c == ord('X'):
            l.debug("... closing %r", self.views[-1])
            self.views[-1].close()
            self._screen.clear()
        elif c == curses.KEY_RESIZE:
            l.debug("... window resized")
            self._screen.clear()
        elif c == curses.KEY_F2:
            self._screen.clear()
            self.views.append(MemViewDebug(self))
        else:
            l.debug("... ungetting %r", c)
            curses.ungetch(c)

        for v in reversed(self.views):
            l.debug("Input to %r", v)
            r = v.input()
            if r is None:
                l.debug("... it handled it")
                break
            elif isinstance(r, MemView):
                l.debug("... it created %r", r)
                self.views.append(r)
                self._screen.clear()
                break

        return True
Esempio n. 17
0
    def input(self):
        v = None

        l.debug("memcurses input")
        c = self._screen.getch()
        if c == ord('q'):
            l.debug("... quitting")
            return False
        elif c == ord('X'):
            l.debug("... closing %r", self.views[-1])
            self.views[-1].close()
            self._screen.clear()
        elif c == curses.KEY_RESIZE:
            l.debug("... window resized")
            self._screen.clear()
        elif c == curses.KEY_F2:
            self._screen.clear()
            self.views.append(MemViewDebug(self))
        else:
            l.debug("... ungetting %r", c)
            curses.ungetch(c)

        for v in reversed(self.views):
            l.debug("Input to %r", v)
            r = v.input()
            if r is None:
                l.debug("... it handled it")
                break
            elif isinstance(r, MemView):
                l.debug("... it created %r", r)
                self.views.append(r)
                self._screen.clear()
                break

        return True
Esempio n. 18
0
 def Active(self):        
     # Special keys handled by Active()
     #   ENTER:     enters into capture text mode
     #   TAB:       exits with capturing and moves to next widget
     
     self.Highlight()
     capturing = True
     
     while capturing:
         #self.Win.move(0,0)
         key = self.Win.getch()
         
         # ENTER
         if key in [curses.KEY_ENTER, ord('\n'), 10]:
             self.CaptureText()
         
         # TAB
         elif key in [ord('\t'), 9]:
             self.UnHighlight()
             curses.ungetch('\t') # Notify the core that tab was pressed
             capturing = False
         
         # go to menu (SHIFT-M or F1)
         # or go to status screen (SHIFT-M or F8)
         elif key in [curses.KEY_F1, 77, curses.KEY_F8, 76] and not self.DisableScreenSwitch:
             capturing = False
             curses.ungetch(key)
Esempio n. 19
0
 def test_menu_textentryitem__ascii_bel(self):
     """Test that the input_caller returns the expected string value."""
     curses.initscr()
     curses.ungetch("\n")
     curses.ungetch(curses.ascii.BEL)
     # BEL is a non-printable character so the return value should be an empty string
     self.textentryitem()
     self.assertEqual(self.textentryitem.get_value(), "")
Esempio n. 20
0
def _interrupt_handler(signum, frame):
    # if a keyboard-interrupt occurs...
    if _do_catch_interrupt:
        # push a Ctrl+C (ascii value 3) to the curses getch stack
        curses.ungetch(3)
    else:
        # use the default handler
        signal.default_int_handler(signum, frame)
Esempio n. 21
0
def get_key(stdscr):
	"""Workaround for weird Return handling of get_wch()
	"""
	key = stdscr.getch()
	if key == 10:
		return curses.KEY_ENTER
	curses.ungetch(key)
	return stdscr.get_wch()
Esempio n. 22
0
 def end():
     self.finished = True
     curses.ungetch(27)
     self.joinKeyListenerThread()
     curses.nocbreak()
     self.screen.keypad(False)
     curses.echo()
     curses.endwin()
Esempio n. 23
0
def _interrupt_handler(signum, frame):
    # if a keyboard-interrupt occurs...
    if _do_catch_interrupt:
        # push a Ctrl+C (ascii value 3) to the curses getch stack
        curses.ungetch(3)
    else:
        # use the default handler
        signal.default_int_handler(signum, frame)
Esempio n. 24
0
 def test_menu_config_key_right_gt_footer_len(self):
     """Test behavior when attempting to select an item to the right of the rightmost footer items."""
     curses.initscr()
     curses.ungetch("\n")
     curses.ungetch(curses.KEY_LEFT)
     curses.ungetch(curses.KEY_RIGHT)
     curses.ungetch(curses.KEY_RIGHT)
     curses.ungetch(curses.KEY_RIGHT)
     self.assertTrue(self.menu())
Esempio n. 25
0
	def handlerResize(self, signum="", frame=""):
		if self.isInScroll==1:
			curses.ungetch("q")
		curses.endwin()
		self.__init__(1)
		curses.ungetch(curses.ascii.NL)
		self.printHistory()
		self.setTitle(self.channel,self.peersCount)
		curses.curs_set(1)
Esempio n. 26
0
    def loot(self, random_loot):
        """
            Loot interface

            :param random_loot = loot generated in monster class, specific to that mob

            :return None
        """
        k = -1
        start = 10
        offset = 15
        # random_loot = self.opponent.generate_loot()
        # if random_loot:
        #     loot_list = [helper.get_item(item)() for item in random_loot]
        # else:
        #     loot_list = []
        selected_item = 0
        height, width = self.screen.getmaxyx()

        while k != ord("q"):
            self.screen.erase()

            start = 10
            loot_text = "{} dropped the following loot".format(self.opponent.readable_name)
            self.screen.addstr(8, int((width / 2) - (len(loot_text) / 2)), loot_text)

            if self.loot_list:
                for i in range(len(self.loot_list)):
                    if selected_item == i:
                        self.screen.attron(curses.color_pair(5))
                    self.screen.addstr(start, offset, self.loot_list[i].readable_name)
                    if selected_item == i:
                        self.screen.attroff(curses.color_pair(5))
                    start += 1
            else:
                self.screen.addstr(start, offset, "No loot")

            if k == curses.KEY_DOWN:
                if len(self.loot_list) != 0:
                    selected_item += 1
                    if selected_item >= len(self.loot_list) - 1:
                        selected_item = len(self.loot_list) - 1

            if k == curses.KEY_UP:
                if len(self.loot_list) != 0:
                    selected_item -= 1
                    if selected_item <= 0:
                        selected_item = 0

            if k == ord(" "):
                if len(self.loot_list) != 0:
                    self.player.inventory.append(self.loot_list.pop(selected_item))
                selected_item = 0
                curses.ungetch(curses.KEY_F0)
            k = self.screen.getch()
        curses.ungetch(curses.KEY_F0)
Esempio n. 27
0
def kbhit(window):
    ch = window.getch()
    if (ch != curses.ERR):
        curses.ungetch(ch)
        if (ch != 'x'):
            ch = window.getch()
            return 1
        else:
            return 0
    else:

        return 0
Esempio n. 28
0
def kbhit(window):
    ch = window.getch();
    if (ch != curses.ERR):
        curses.ungetch(ch)
        if (ch != 'x'):
            ch = window.getch();
            return 1
        else:
            return 0
    else:
        
        return 0
 def Create(self):
     try:
         name = self.ActionWidgets[0].Text
         result = CDBCore.CDBCore.Connection.QueryString("CREATE DATABASE " + name)
         if result.Success:
             CDBCore.CDBCore.StatusScreen.AddStatusMessage("Successfully created database: "+ name)
             curses.ungetch('\n') # Notify the core to move to next screen
         else:
             raise Exception(result.Message)
     except Exception as ex:
         msg = "Could not create database: " + name
         CDBCore.CDBCore.StatusScreen.AddStatusMessage(msg)
Esempio n. 30
0
 def check_shortcuts(self):
     key = self.parent.getch(False)
     if key == -1:
         return
     handler = self.shortcuts.get(key)
     # Close all other shortcut handlers
     for shortcut in self.shortcuts.values():
         if shortcut[1] is not None:
             shortcut[1]()
     if handler is not None:
         handler[0]()
     else:
         curses.ungetch(key)
Esempio n. 31
0
 def process_ch(self, ch) -> str:
     if ch == 27:
         # Escape key
         return 'Escape'
     elif ch == 8:
         # Backspace key
         return 'Backspace'
     elif ch == 10:
         # Enter key
         return 'Enter'
     else:
         curses.ungetch(ch)
     return None
Esempio n. 32
0
    def DropTblMethod(self):
        q = "DROP TABLE {}".format(self.Table)

        result = CDBCore.CDBCore.Connection.QueryString(q)

        if result.Success:
            CDBCore.CDBCore.StatusScreen.AddStatusMessage("Drop Table success")

            curses.ungetch('\n')

        else:
            CDBCore.CDBCore.StatusScreen.AddStatusMessage("Drop Table failed")
            self.MakeActive()
Esempio n. 33
0
 def _controller_(self, ch):
     """Control if the character is a control key"""
     if ch in [curses.KEY_UP, curses.KEY_DOWN, curses.ascii.TAB,
               curses.ascii.CR, curses.ascii.ESC, curses.KEY_MOUSE]:
         curses.ungetch(ch)
         return curses.ascii.NL
     elif ch in [curses.ascii.DEL]:
         return curses.ascii.BS
     elif curses.ascii.isctrl(ch):
         if chr(ch + 64) in self.shortcuts:
             curses.ungetch(ch)
             return curses.ascii.NL
     else:
         return ch
Esempio n. 34
0
    def flash(self):
        '''Flash this error window'''
        if self.visible:
            cursor_loc = curses.getsyx()
#            flash_color = self.highlight_color ^ curses.A_REVERSE
#            self.set_color(flash_color)
            curses.setsyx(cursor_loc[0], cursor_loc[1])
            curses.doupdate()
            gotch = self.window.getch()
            if gotch != -1:
                curses.ungetch(gotch)
#            self.set_color(self.highlight_color)
            curses.setsyx(cursor_loc[0], cursor_loc[1])
            curses.doupdate()
Esempio n. 35
0
 def _controller_(self, ch):
     """Control if the character is a control key"""
     if ch in [curses.KEY_UP, curses.KEY_DOWN, curses.ascii.TAB,
               curses.ascii.CR, curses.ascii.ESC, curses.KEY_MOUSE]:
         curses.ungetch(ch)
         return curses.ascii.NL
     elif ch in [curses.ascii.DEL]:
         return curses.ascii.BS
     elif curses.ascii.isctrl(ch):
         if chr(ch + 64) in self.shortcuts:
             curses.ungetch(ch)
             return curses.ascii.NL
     else:
         return ch
 def flash(self):
     '''Flash this error window'''
     if self.visible:
         cursor_loc = curses.getsyx()
         flash_color = self.highlight_color ^ curses.A_REVERSE
         self.set_color(flash_color)
         curses.setsyx(cursor_loc[0], cursor_loc[1])
         curses.doupdate()
         gotch = self.window.getch()
         if gotch != -1:
             curses.ungetch(gotch)
         self.set_color(self.highlight_color)
         curses.setsyx(cursor_loc[0], cursor_loc[1])
         curses.doupdate()
Esempio n. 37
0
    def read(self, screen):
        #insert read book here
        screen.erase()
        k = -1

        selected_page = 0
        max_page = len(self.pages) - 1

        while k != ord("q"):
            screen.erase()
            start = 10
            for item in self.pages[selected_page]:
                if start == 10:
                    screen.attron(curses.color_pair(135))
                if "[" in item:
                    before, keyword, after = item.split("[")[0], item.split(
                        "[")[1].split("]")[0], item.split("]")[1]
                    screen.addstr(start, 34, before)
                    screen.attron(curses.color_pair(136))
                    screen.addstr(start, 34 + len(before), keyword)
                    screen.attroff(curses.color_pair(136))
                    screen.addstr(start, 34 + len(before) + len(keyword),
                                  after)
                else:
                    screen.addstr(start, 34, item)

                if start == 10:
                    screen.attroff(curses.color_pair(135))

                start += 1

            if selected_page != 0:
                screen.addch(47, 32, curses.ACS_LARROW)

            screen.addstr(47, 34,
                          f"Page {selected_page + 1} of {max_page + 1}")

            if selected_page < max_page:
                screen.addch(
                    47,
                    36 + len(f"Page {selected_page + 1} of {max_page + 1}"),
                    curses.ACS_RARROW)

            k = screen.getch()

            if k == curses.KEY_LEFT:
                selected_page = max(0, selected_page - 1)
            elif k == curses.KEY_RIGHT:
                selected_page = min(len(self.pages) - 1, selected_page + 1)
        curses.ungetch(curses.KEY_F0)
 def test_menu_config_key_resize(self):
     """Test redrawing the window in response to a resize keypress."""
     curses.initscr()
     curses.ungetch("\n")
     curses.ungetch("\n")
     curses.ungetch(curses.KEY_RESIZE)
     curses.ungetch(curses.KEY_RIGHT)
     self.assertTrue(self.menu())
Esempio n. 39
0
    def start(self, timeout=-1):
        """See mother class"""

        # Automatic lock screen
        counter = 0
        timer = Configuration.lock * 60 * 1000  # Timer in ms

        while True:
            # Start default controller (timeout of 100 ms)
            result = TitledOnBorderWindow.start(self, 100)

            # Lock screen ?
            if result == 'timeout' and timer > 0:
                counter += 100
                if counter >= timer:
                    self.parent.lock_screen()
                    counter = 0
            else:
                counter = 0

            # Try to create or update the block
            if result == self.patternEditor:
                self.do_search()

            # Navigate in result panel
            elif result == self.resultPanel:
                self.update_status("Navigate or hit return to edit")
                result = self.resultPanel.start(timeout=100)
                self.update_status("")
                if result == -1:
                    self.index -= 1  # Focus on previous item
                elif result == 1 or result is False:
                    self.index -= 1  # Focus on next item
                    curses.ungetch(curses.ascii.ESC)  # Quit window
                elif isinstance(result, Component):
                    idblock, sib = result.get_data()
                    # Return number_type, idblock
                    return int(sib['info1'].decode()), idblock

            # Quit window or Escape
            elif result == 1 or result == -1 or result is False:
                self.index = 0  # For focusing on first item at the return
                self.update_status("")  # Clear status bar
                if self.nbResult == 0:
                    # Hide pattern editor if there is no result
                    self.patternEditor.hide()
                return False, False
Esempio n. 40
0
 def test_menu_textentryitem__key_up(self):
     """Test that the input_caller returns the expected string value."""
     curses.initscr()
     curses.ungetch("\n")
     curses.ungetch(curses.KEY_UP)
     curses.ungetch(curses.KEY_DOWN)
     curses.ungetch("a")
     self.textentryitem()
     self.assertEqual(self.textentryitem.get_value(), "a")
Esempio n. 41
0
    def start(self, timeout=-1):
        """See mother class"""

        # Automatic lock screen
        counter = 0
        timer = Configuration.lock * 60 * 1000  # Timer in ms

        while True:
            # Start default controller (timeout of 100 ms)
            result = TitledOnBorderWindow.start(self, 100)

            # Lock screen ?
            if result == 'timeout' and timer > 0:
                counter += 100
                if counter >= timer:
                    self.parent.lock_screen()
                    counter = 0
            else:
                counter = 0

            # Try to create or update the block
            if result == self.patternEditor:
                self.do_search()

            # Navigate in result panel
            elif result == self.resultPanel:
                self.update_status("Navigate or hit return to edit")
                result = self.resultPanel.start(timeout=100)
                self.update_status("")
                if result == -1:
                    self.index -= 1  # Focus on previous item
                elif result == 1 or result is False:
                    self.index -= 1  # Focus on next item
                    curses.ungetch(curses.ascii.ESC)  # Quit window
                elif isinstance(result, Component):
                    idblock, sib = result.get_data()
                    # Return number_type, idblock
                    return int(sib['info1'].decode()), idblock

            # Quit window or Escape
            elif result == 1 or result == -1 or result is False:
                self.index = 0  # For focusing on first item at the return
                self.update_status("")  # Clear status bar
                if self.nbResult == 0:
                    # Hide pattern editor if there is no result
                    self.patternEditor.hide()
                return False, False
Esempio n. 42
0
	def handlerResize(self, signum="", frame=""):
		if self.isInScroll==1:
			curses.ungetch("q")
		curses.endwin()
		self.__init__(1)
		curses.ungetch(curses.ascii.NL)
		oldH = self.doHistory
		oldT = self.timestamp
		self.mainWindow.clear()
		self.doHistory = False
		self.timestamp = False
		for histLine in self.history:
			self.printMessage(histLine)
		self.doHistory = oldH
		self.timestamp = oldT
		self.setTitle(self.channel,self.peersCount)
		curses.curs_set(1)
 def SetDatabase(self):
     try:
         name = self.ActionWidgets[0].Text            
         result = CDBCore.CDBCore.Connection.SetDatabase(name)
         if result.Success:
             CDBCore.CDBCore.Connection.Database = name
             CDBCore.CDBCore.StatusScreen.AddStatusMessage("Set database to: " + name)
             curses.ungetch('\n') # Notify the core to move to next screen
         else:
             raise Exception(result.Message)
     except Exception as ex:
         # Could not set the database
         msg = "Could not set the database to: " + name
         CDBCore.CDBCore.StatusScreen.AddStatusMessage(msg)
         self.ActionWidgets[self.CurrentWidget].selected = True
         self.ActionWidgets[self.CurrentWidget].Highlight()
         self.ActionWidgets[self.CurrentWidget].Active
Esempio n. 44
0
 def edit(self, validate=None, initial_text=None):
     "Edit in the widget window and collect the results."
     if initial_text is None:
         initial_text = ""
     initial_text_list = list(initial_text)
     while 1:
         if initial_text_list:
             curses.ungetch(ord(initial_text_list.pop(0)))
         ch = self.win.getch()
         if validate:
             ch = validate(ch)
         if not ch:
             continue
         if not self.do_command(ch):
             break
         self.win.refresh()
     return self.gather()
Esempio n. 45
0
def modify_matrix(stdscr, tr_x, tr_y, space, rows, cols):
    stdscr.keypad(True)
    lengths = [[1 for i in range(rows)] for j in range(cols)]
    values = [["0" for i in range(cols)] for j in range(rows)]
    pos = [0, 0]
    stdscr.move(tr_x, tr_y + 1)
    while True:
        ch = stdscr.getch()
        if ch == curses.KEY_UP:
            if pos[1] != 0:
                pos[1] -= 1
                move_newpos(stdscr, tr_x, tr_y, space, rows, cols, lengths,
                            pos[0], pos[1])
        elif ch == curses.KEY_DOWN:
            if pos[1] != rows - 1:
                pos[1] += 1
                move_newpos(stdscr, tr_x, tr_y, space, rows, cols, lengths,
                            pos[0], pos[1])
        elif ch == curses.KEY_RIGHT:
            if pos[0] != cols - 1:
                pos[0] += 1
                move_newpos(stdscr, tr_x, tr_y, space, rows, cols, lengths,
                            pos[0], pos[1])
        elif ch == curses.KEY_LEFT:
            if pos[0] != 0:
                pos[0] -= 1
                move_newpos(stdscr, tr_x, tr_y, space, rows, cols, lengths,
                            pos[0], pos[1])
        else:
            try:
                if str(ch) == "127":
                    if (lengths[pos[0]][pos[1]] > 0):
                        stdscr.addstr("\b \b")
                        lengths[pos[0]][pos[1]] -= 1
                        values[pos[1]][pos[0]] = values[pos[1]][pos[0]][:-1]
                elif str(ch) == "10":
                    curses.ungetch(curses.KEY_DOWN)
                elif str(ch) == "9":
                    return values
                else:
                    s = str(chr(int(str(ch))))[0]
                    lengths[pos[0]][pos[1]] += 1
                    values[pos[1]][pos[0]] += s
                    stdscr.addstr(s)
            except Exception as _:
                return
Esempio n. 46
0
 def bgreaderloop(s):
     while 1:
         s.statuslock.acquire()
         if s.lockheld or s.bgchar == None:
             s.statuslock.release()
             s.startup.wait()
         else:
             s.statuslock.release()
             ch = s.c.stdscr.getch()
             s.statuslock.acquire()
             try:
                 if s.lockheld or s.bgchar == None:
                     curses.ungetch(ch)
                 else:
                     s.bgchar(ch)
             finally:
                 s.statuslock.release()
Esempio n. 47
0
 def bgreaderloop(s):
     while 1:
         s.statuslock.acquire()
         if s.lockheld or s.bgchar == None:
             s.statuslock.release()
             s.startup.wait()
         else:
             s.statuslock.release()
             ch = s.c.stdscr.getch()
             s.statuslock.acquire()
             try:
                 if s.lockheld or s.bgchar == None:
                     curses.ungetch(ch)
                 else:
                     s.bgchar(ch)
             finally:
                 s.statuslock.release()
Esempio n. 48
0
 def edit(self, validate=None, initial_text=None):
     "Edit in the widget window and collect the results."
     if initial_text is None:
         initial_text = ""
     initial_text_list = list(initial_text)
     while 1:
         if initial_text_list:
             curses.ungetch(ord(initial_text_list.pop(0)))
         ch = self.win.getch()
         if validate:
             ch = validate(ch)
         if not ch:
             continue
         if not self.do_command(ch):
             break
         self.win.refresh()
     return self.gather()
Esempio n. 49
0
def kbhit(window, char, no):
    ch = window.getch()
    if ch == -1:
        return 0

    try:
        nch = int(str(chr(ch)))
    except ValueError:
        nch = -1

    if (nch == char or nch in no):
        if (nch == char):
            curses.ungetch(ch)
            return 1
        else:
            return 2
    else:
        return 0
Esempio n. 50
0
def kbhit(window,char,no):
    ch = window.getch();
    if ch == -1:
        return 0

    try:
        nch = int(str(chr(ch)))
    except ValueError:
        nch = -1

    if (nch == char or nch in no):
        if (nch == char):
            curses.ungetch(ch)
            return 1
        else:
            return 2
    else:
        return 0
Esempio n. 51
0
    def __init__(self,
                 screen,
                 area_size,
                 raw_lines,
                 base,
                 margin=5,
                 print_infos=print):
        screen_height, screen_width = area_size

        self.outer_margin = margin
        self.inner_margin = 2
        self.width = screen_width - self.outer_margin * 2
        self.text_width = self.width - self.inner_margin * 2

        lines = []
        for l in raw_lines:
            lines.extend(format_string(l, self.text_width, truncate=False))

        self.height = len(lines) + 2  # for border

        # Compute first line position
        if self.height > screen_height:
            lines = lines[:screen_height - 2]
            lines[-1] = lines[-1][:-1] + '…'
            print_infos('Truncated, too many lines!')
            self.height = len(lines) + 2

        start = max(1, base - int(len(lines) / 2))
        if start + self.height - 1 > screen_height:
            start = max(1, screen_height + 1 - self.height)

        self.win = curses.newwin(self.height, self.width, start,
                                 self.outer_margin)
        self.win.bkgd(curses.color_pair(3))
        self.win.keypad(1)
        self.win.border('|', '|', '-', '-', '+', '+', '+', '+')

        for line in range(len(lines)):
            self.win.move(line + 1, self.inner_margin)
            self.win.addstr(line + 1, self.inner_margin, str(lines[line]))
        self.win.refresh()

        key = screen.getch()
        curses.ungetch(key)
Esempio n. 52
0
File: nss.py Progetto: Grissess/nSS
    def do_stop(self, line):
        '''stop

Shuts down the server gently...ish.'''
        global RUNNING
        RUNNING=False
        #In order to finalize this, we need to wake up all
        #threads. Main is awake on a one-second loop, the
        #server does acquiry every 5 seconds, and the client
        #manager every fraction of a second. Our UIthread will
        #respond to a character, so lets put one on there:
        if curses:
            curses.ungetch('\x00')
        elif msvcrt:
            msvcrt.putch('\x00')
        #else, panic.
        #after that's done, all the threads should realize that
        #it's time to pack up.
        print 'This will take up to 5 seconds...'
Esempio n. 53
0
def __leaf_01(ql: Qiling):
    curses.nonl()
    # set non-blocking
    ql.os.stdscr.timeout(0)
    key = parse_key(ql.os.stdscr.getch())

    if key == -1:
        ql.os.set_zf()
        ql.arch.regs.ax = 0
    else:
        ql.log.debug(f"Has key: {hex(key)} ({curses.ascii.unctrl(key)})")
        ql.arch.regs.al = key
        ql.arch.regs.ah = get_scan_code(key)
        ql.os.clear_zf()
        # Buffer shouldn't be removed in this interrupt.
        curses.ungetch(key)

    ql.os.stdscr.timeout(-1)
    curses.nl()
Esempio n. 54
0
 def startup(self):
     self.game_over = False
     self.stage.units = []
     self.stage.field.clear()
     self.main_unit = u.MainUnit('./units/invader',
                                 'invader',
                                 color=curses.COLOR_RED)
     self.player = Player(self.player.name, self.stage)
     self.stage.build_floor(self.FLOOR_LVL)
     self.stage.add_unit(self.main_unit,
                         20,
                         self.stage.floor_level.y,
                         main=True)
     self.generator = Generator(self.stage, self.main_unit.width.length(),
                                self.velocity)
     self.stage.bitmap.print_units(self.stage.units, self.main_unit)
     # send enter key to start moving the unit
     curses.ungetch(10)
     self.stage.draw_units2()
Esempio n. 55
0
 def change_focus(self, option_nr):
     all = self.inputs + self.options
     for opt in all:
         index = all.index(opt)
         if index == option_nr:
             self.selected_index = index
             opt.focus = True
             if opt.name != 'input':
                 opt.color = 'selected'
                 self.pixel_color_change(opt, 'selected')
             elif opt.textbox is not None:
                 curses.curs_set(1)
                 opt.value = opt.textbox.textbox.edit()
                 curses.curs_set(0)
                 # logging.debug(opt.value)
                 curses.ungetch(10)
         else:
             opt.focus = False
             opt.color = curses.COLOR_WHITE
             self.pixel_color_change(opt, curses.COLOR_WHITE)
Esempio n. 56
0
 def _inject_key(screen, char):
     """
     Inject a specified character into the input buffers.
     """
     if sys.platform == "win32":
         event = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
         event.RepeatCount = 1
         event.ControlKeyState = 0
         event.VirtualScanCode = 0
         if char >= 0:
             event.Char = chr(char)
             event.VirtualKeyCode = ord(chr(char).upper())
         else:
             # Lookup in mapping dicts
             reverse = dict((v, k) for k, v in
                            screen._EXTRA_KEY_MAP.items())
             if char in reverse:
                 event.VirtualKeyCode = reverse[char]
             else:
                 # Fudge key state required for BACK_TAB if needed.
                 if char == Screen.KEY_BACK_TAB:
                     char = Screen.KEY_TAB
                     event.ControlKeyState = win32con.SHIFT_PRESSED
                 reverse = dict((v, k) for k, v in
                                screen._KEY_MAP.items())
                 event.VirtualKeyCode = reverse[char]
         event.KeyDown = 1
         screen._stdin.WriteConsoleInput([event])
         event.KeyDown = 0
         screen._stdin.WriteConsoleInput([event])
     else:
         if char > 0:
             # Curses uses a LIFO stack for key injection, so reverse the
             # byte string to be injected.  Note that this still works for
             # ASCII as it is a single char subset of UTF-8.
             for c in reversed(bytes(chr(char).encode("utf-8"))):
                 curses.ungetch(c)
         else:
             reverse = dict((v, k) for k, v in
                            screen._KEY_MAP.items())
             curses.ungetch(reverse[char])
Esempio n. 57
0
def time_task(offset):
    """Log time to task.

    :param offset: Current offset of task pad

    Display time logged every second and write it to the task when finished.

    """
    item = current_item(task_pad, offset)
    task = items[item]
    t0 = datetime.now()
    status = "Started at %s" % datetime.now().strftime("%H:%M")
    write_status(status)
    # With halfdelay on, getch returns -1 every second if no key is pressed
    curses.halfdelay(10)
    while 1:
        c = stdscr.getch()
        t1 = datetime.now()
        logged_time = t1 - t0
        if c == -1:
            logged_str = str(logged_time).split('.')[0]
            timed_status = "%s -- %s" % (status, logged_str)
            write_status(timed_status)
        elif c == ord('+'):
            edit_time(task, 'add')
            # Restore halfdelay to continue timer
            curses.halfdelay(10)
        elif c == ord('-'):
            edit_time(task, 'sub')
            # Restore halfdelay to continue timer
            curses.halfdelay(10)
        elif c == ord('t'):
            stop_timer(task, logged_time)
            curses.cbreak()
            break
        elif c == ord('q'):
            stop_timer(task, logged_time)
            # Pass 'q' to next getch in the main loop, so we can quit from here
            curses.ungetch('q')
            break
    def process(self, input_key):
        '''Process a keystroke. For an EditField, this means preparing the
        textpad for processing and passing the input_key in.

        Try to enable the blinking cursor (if it was disabled) before
        editing begins, so the user can see where they're typing. Once
        finished, restore the cursor state to its previous condition.

        After editing, return self.input_key, which will either be None
        (indicating all keystrokes were processed by the Textbox) or
        a special character (such as F2) which caused EditField.handle_input
        to stop processing text through the Textbox.

        '''
        try:
            curses.curs_set(2)
        except curses.error:
            terminalui.LOGGER.debug("Got curses.error when enabling cursor")

        if input_key is not None and not self.is_special_char(input_key):
            # Put input_key back on stack so that textbox.edit can read it
            curses.ungetch(input_key)
            if self.numeric_pad is not None:
                self._set_text(self.get_text().lstrip(self.numeric_pad),
                               do_pad=False)

            if self.clear_on_enter:
                self.clear_text()
            else:
                # Move to end of previous input.
                self.textbox.do_command(EditField.CMD_MV_EOL)
            self.edit_loop()
            return_key = self.input_key
            if self.numeric_pad is not None:
                self._set_text(self.get_text())
        else:
            return_key = input_key
        terminalui.LOGGER.debug("Returning: %s", return_key)
        return return_key
    def MakeActive(self):
        self.CursorActive = True
        self.UpdateLogLabels()

        while self.CursorActive:
            currentLabelIndex = 1 + self.TotalLabelsInScreen - (self.CursorPos - self.LogDisplayPos)
            try:
                key = self.PassiveWidgets[currentLabelIndex].Win.getch()
            except:
                CDBCore.CDBCore.StatusScreen.AddStatusMessage("Error displaying messages.  Exiting message log")
                self.CursorPos = 0
                self.CursorActive = False
                self.UpdateLogLabels()
                curses.ungetch(key)
                return

            if key in [curses.KEY_DOWN, ord("s")]:
                if self.CursorPos > 0:
                    self.CursorPos -= 1
                    if self.LogDisplayPos > self.CursorPos:
                        self.LogDisplayPos = self.CursorPos
                self.UpdateLogLabels()
            elif key in [curses.KEY_UP, ord("w")]:
                if self.CursorPos < (len(self.Log) - 1):
                    self.CursorPos += 1
                    if self.LogDisplayPos < self.CursorPos - self.TotalLabelsInScreen + 1:
                        self.LogDisplayPos += 1
                self.UpdateLogLabels()
            elif key in [curses.KEY_F8, 76]:  # SHIFT-L or F8 all exit message log
                # exit for screen
                self.CursorPos = 0
                self.CursorActive = False
                self.UpdateLogLabels()
                curses.ungetch(key)
            elif key in [ord("\n"), 10]:  # ENTER
                if len(self.Log) > 0:
                    self.DisplayPopUpMessage(self.Log[self.CursorPos])
                    self.UpdateLogLabels()
Esempio n. 60
0
    def Active(self):
        selected = True
        # highlight current widget to show it is active
        self.Highlight()

        while selected:
            key = self.Win.getch()

            # capture ENTER, TAB, and BACKTAB keystrokes
            if key in [curses.KEY_ENTER, ord("\n"), 10]:
                self.Check()

            elif key in [ord("\t"), 9]:
                # stop highlighting current widget
                self.UnHighlight()
                selected = False
                curses.ungetch(key)

            # go to menu (SHIFT-M or F1)
            # or go to status screen (SHIFT-M or F8)
            elif key in [curses.KEY_F1, 77, curses.KEY_F8, 76] and not self.DisableScreenSwitch:
                selected = False
                curses.ungetch(key)