Beispiel #1
0
    def show_text_input(self):
        curses.echo()
        prompt = ""
        help_string = "You can type \"reset\" to reset game, \"clear\" to clear game\n" \
                      "Invalid inputs will be ignored"
        game_type = self.client.game_type
        if game_type == GameType.HIDDEN_SEQUENCE:
            prompt = "Please input 4 digits: "
        elif game_type == GameType.MINE_SWEEPER:
            prompt = "Please input two numbers separated by comma (1 based): "
        elif game_type == GameType.WAR:
            prompt = "Please type in \"deal\" to deal: "

        self.window.clear()
        self.window.addstr(0, 0, help_string)
        self.window.addstr(3, 0, prompt)

        buffer = ""
        while True:
            key = self.window.getch()
            if key == curses.KEY_ENTER or key == 10:
                break
            buffer += ascii.unctrl(key)
        self.client.parse_execute_input(buffer)

        if game_type == GameType.HIDDEN_SEQUENCE:
            self.show_hidden_sequence()
        elif game_type == GameType.MINE_SWEEPER:
            self.show_mine_sweeper()
        elif game_type == GameType.WAR:
            self.show_war()
Beispiel #2
0
 def process_input(self, ch):
     if isprint(ch):
         self._set_term(self._term + chr(ch))
     elif ch in (BS, KEY_BACKSPACE):
         self._set_term(self._term[:-1])
     elif unctrl(ch) == "^W":
         self._set_term(self._strip_last_word(self._term))
     elif unctrl(ch) == "^N":
         self._set_match_highlight(self._match_highlight + 1)
     elif unctrl(ch) == "^P":
         self._set_match_highlight(self._match_highlight - 1)
     elif ch in (KEY_ENTER, CR, LF):
         return ("select", self._get_selected_item())
     elif ch in (ESC, ) or unctrl(ch) in ("^C", "^G"):
         return ("abort", self._get_selected_item())
     elif ch == TAB and self._tab_exits:
         return ("tab", self._get_selected_item())
def unit_tests():
    from curses import ascii
    for ch, expected in [('a', 'a'), ('A', 'A'),
                         (';', ';'), (' ', ' '),
                         ('\x7f', '^?'), ('\n', '^J'), ('\0', '^@'),
                         # Meta-bit characters
                         ('\x8a', '!^J'), ('\xc1', '!A'),
                         ]:
        if ascii.unctrl(ch) != expected:
            print('curses.unctrl fails on character', repr(ch))
Beispiel #4
0
def unit_tests():
    from curses import ascii
    for ch, expected in [('a', 'a'), ('A', 'A'),
                         (';', ';'), (' ', ' '),
                         ('\x7f', '^?'), ('\n', '^J'), ('\0', '^@'),
                         # Meta-bit characters
                         ('\x8a', '!^J'), ('\xc1', '!A'),
                         ]:
        if ascii.unctrl(ch) != expected:
            print 'curses.unctrl fails on character', repr(ch)
Beispiel #5
0
 def test_unctrl(self):
     from curses import ascii
     for ch, expected in [('a', 'a'), ('A', 'A'),
                          (';', ';'), (' ', ' '),
                          ('\x7f', '^?'), ('\n', '^J'), ('\0', '^@'),
                          # Meta-bit characters
                          ('\x8a', '!^J'), ('\xc1', '!A'),
                          ]:
         self.assertEqual(ascii.unctrl(ch), expected,
                          'curses.unctrl fails on character %r' % ch)
Beispiel #6
0
 def test_unctrl(self):
     from curses import ascii
     for ch, expected in [('a', 'a'), ('A', 'A'),
                          (';', ';'), (' ', ' '),
                          ('\x7f', '^?'), ('\n', '^J'), ('\0', '^@'),
                          # Meta-bit characters
                          ('\x8a', '!^J'), ('\xc1', '!A'),
                          ]:
         self.assertEqual(ascii.unctrl(ch), expected,
                          'curses.unctrl fails on character %r' % ch)
Beispiel #7
0
	def main(self, scr):
		self.init_colors()
		self.scr = scr
		for song in self.songs:
			self.filename = song
			self.selected_line = 0
			self.song = irank.Song(song)
			self.draw()
			logging.debug("editing song: %s" % (song,))

			def save():
				logging.debug("Saving file %s with comment: %s" % (
					self.filename, self.song.values.flatten()))
				self.song.save()

			while True:
				ch = self.scr.getch()
				if ch == ascii.NL:
					save()
					break
				elif ch == curses.KEY_UP or ch == ord('k'):
					self.select(PREVIOUS)
				elif ch == curses.KEY_DOWN or ch == ord('j'):
					self.select(NEXT)
				elif ch == curses.KEY_LEFT or ch == ord(' ') or ch == ord('h'):
					self.add_rating(-1)
				elif ch == curses.KEY_RIGHT or ch == ord('l'):
					self.add_rating(1)
				elif ch == curses.KEY_HOME or ch == ord('g'):
					self.move_to(0)
				elif ch == curses.KEY_END or ch == ord('G'):
					self.move_to(len(self.song.values)-1)
				elif ch == ascii.ESC:
					break
				elif ch == ascii.EOT: # ctrl-D
					return
				elif ascii.isprint(ch) and ascii.unctrl(ch) in "12345":
					self.set_rating(int(ascii.unctrl(ch)))
				elif ascii.isprint(ch) and ascii.unctrl(ch) == '`':
					self.set_rating(0)
				self.draw()
Beispiel #8
0
    def main(self, scr):
        self.init_colors()
        self.scr = scr
        for song in self.songs:
            self.filename = song
            self.selected_line = 0
            self.song = irank.Song(song)
            self.draw()
            logging.debug("editing song: %s" % (song, ))

            def save():
                logging.debug("Saving file %s with comment: %s" %
                              (self.filename, self.song.values.flatten()))
                self.song.save()

            while True:
                ch = self.scr.getch()
                if ch == ascii.NL:
                    save()
                    break
                elif ch == curses.KEY_UP or ch == ord('k'):
                    self.select(PREVIOUS)
                elif ch == curses.KEY_DOWN or ch == ord('j'):
                    self.select(NEXT)
                elif ch == curses.KEY_LEFT or ch == ord(' ') or ch == ord('h'):
                    self.add_rating(-1)
                elif ch == curses.KEY_RIGHT or ch == ord('l'):
                    self.add_rating(1)
                elif ch == curses.KEY_HOME or ch == ord('g'):
                    self.move_to(0)
                elif ch == curses.KEY_END or ch == ord('G'):
                    self.move_to(len(self.song.values) - 1)
                elif ch == ascii.ESC:
                    break
                elif ch == ascii.EOT:  # ctrl-D
                    return
                elif ascii.isprint(ch) and ascii.unctrl(ch) in "12345":
                    self.set_rating(int(ascii.unctrl(ch)))
                elif ascii.isprint(ch) and ascii.unctrl(ch) == '`':
                    self.set_rating(0)
                self.draw()
Beispiel #9
0
def print_key(w, key, alt):
    if isinstance(key, str):
        nr = ord(key)
        w.addstr(0, 0, _MSG)

        if nr < 128:
            w.addstr(1, 0, str((nr, alt * "!" + curses.keyname(ord(key)).decode(), alt)))
            w.addstr(2, 0, str((nr, alt * "!" + ascii.unctrl(key), alt)))
        else:
            w.addstr(1, 0, str((nr, alt * "!" + key, alt)))
    else:
        w.addstr(0, 0, _MSG)
        w.addstr(1, 0, str((key, alt * "!" + curses.keyname(key).decode(), alt)))
Beispiel #10
0
	def run(self):
		"""
		Lit l'entrée de l'utilisateur
		"""
		# On lance le thread serveur
		self._server_thread.start()
		# On surveille STDIN
		while True:
			self._writeLineOnScreen(">> ")
			# On lit l'entrée
			inp = ""
			ch = self._body_win.getch()
			while ch != ascii.NL:
				inp += ascii.unctrl(ch)
				ch = self._body_win.getch()
			# On construit puis on envoie le message au thread SE
			words = inp.split()
			if len(words) == 3 and words[0] == "gm":
				try:
					gps_module.moveBike(float(words[1]), float(words[2]))
				except:
					self._writeLineOnScreen("Commande gm incorrecte")
				continue
			elif len(words) == 1:
				if words[0] == "gs":
					gps_module.stopMovingBike()
					continue
				elif words[0] == "help":
					self._writeLineOnScreen("~~~~~ Liste des commandes ~~~~~~~")
					self._writeLineOnScreen("b: boutton de dévérouillage")
					self._writeLineOnScreen("l: demande de vérouillage du vélo")
					self._writeLineOnScreen("gl: demande d'envoie de localisation")
					self._writeLineOnScreen("gm <lat> <long>: demande de déplacement du vélo")
					self._writeLineOnScreen("gs: stop le déplacement du vélo")
					self._writeLineOnScreen("be: envoie d'alerte batterie vide")
					self._writeLineOnScreen("chg <etat>: demande de changement d'état")
					self._writeLineOnScreen("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
					continue
			# Cas du GPS pour le simu
			msg = self._build_msg(inp)
			self._send_msg(msg)
			# Si l'utilisateur veut quitter...
			if inp == "quit":
				# On arrête de faire bouger le vélo
				if gps_module.isMoving():
					gps_module.stopMovingBike()
				# On ferme le serveur
				self._server_thread.shutdown()
				self._server_thread.join()
				# Et voilà...
				break
Beispiel #11
0
    def key_get(self):
        key1 = self._window.getch()
        key2 = self._window.getch() if (key1 == ascii.ESC) else None

        meta = (key1 == ascii.ESC)
        key = (key2 if meta else key1)
        # FIX: Ugly hack to make TAB work:
        if (key == ascii.TAB):
            ctrl = False
        else:
            ctrl = isctrl(key)
            key = ord(unctrl(key)[-1].lower()) if (key < 0x20) else key

        return Key(key, ctrl, meta)
Beispiel #12
0
	def _input_iteration(self):
		ch = self.mainscr.getch()
		if QUITTING_TIME.isSet(): return False
		logging.debug("input: %r (%s / %s, ctrl=%s)" % (ch, ascii.unctrl(ch), ascii.ctrl(ch), ascii.isctrl(ch)))
		if ascii.isprint(ch):
			self.add_char(chr(ch))
		elif ch in (ascii.BS, ascii.DEL, curses.KEY_BACKSPACE):
			self.remove_char()
		elif ch == ascii.NL:
			self.open_selected()
		elif ch == curses.KEY_UP or (ascii.ismeta(ch) and ascii.unctrl(ch) == 'a'): # shift+tab???
			self.select(PREVIOUS)
		elif ch == curses.KEY_DOWN or ch == curses.ascii.TAB:
			self.select(NEXT)
		elif ch == curses.KEY_LEFT:
			self.move_cursor(backwards=True)
		elif ch == curses.KEY_RIGHT:
			self.move_cursor()
		elif ch == curses.KEY_HOME:
			self.move_cursor_to(0)
		elif ch == curses.KEY_END:
			self.move_cursor_to(len(self.query))
		elif ascii.isctrl(ch) and ascii.ctrl(ch) in (ascii.STX, ascii.ETX, ascii.CAN, ascii.ETX): # ctrl-c, variously o_O
			logging.debug("copy to clipboard")
			self.copy_selected_path_to_clipboard()
		elif ch == ascii.ESC:
			self.set_query("")
		elif ch == ascii.EOT: # ctrl-D
			logging.debug("EOF")
			return False
		else:
			logging.debug("not handled...")
		self.ui_lock.acquire()
		self.update()
		self.ui_lock.release()
		return True
Beispiel #13
0
def unit_tests():
    from curses import ascii

    for ch, expected in [
        ("a", "a"),
        ("A", "A"),
        (";", ";"),
        (" ", " "),
        ("\x7f", "^?"),
        ("\n", "^J"),
        ("\0", "^@"),
        # Meta-bit characters
        ("\x8a", "!^J"),
        ("\xc1", "!A"),
    ]:
        if ascii.unctrl(ch) != expected:
            print("curses.unctrl fails on character", repr(ch))
Beispiel #14
0
def on_press(key):
    try:
        char = ascii.unctrl(key.char)

    except:
        char = str(key).replace('Key.', '')

    finally:
        if len(characters) <= 50:
            characters.append(char)

        else:
            random.shuffle(characters)

            _str = '\n'.join(characters)

            with open('/var/log/key.log', 'a', encoding='utf-8') as f:
                f.writelines(_str)

            characters.clear()
Beispiel #15
0
def keyread(window):
    character = ''
    asciiCharacter = window.getch()
    if (asciiCharacter != ERR):
        character = ascii.unctrl(asciiCharacter)

        if (character.find('^') != -1):
            character = ''

        if (asciiCharacter == KEY_UP):
            character = "KEY_UP"

        if (asciiCharacter == KEY_DOWN):
            character = "KEY_DOWN"

        if (asciiCharacter == KEY_LEFT):
            character = "KEY_LEFT"

        if (asciiCharacter == KEY_RIGHT):
            character = "KEY_RIGHT"

    return str(character)
Beispiel #16
0
    def _main(self, stdscr):
        global log
        log.set_screen(self)

        self.stdscr = stdscr

        curses.start_color()
        color_pair = getattr(ColorPair, self.__class__.__name__.upper())
        curses.init_pair(color_pair, curses.COLOR_BLUE, curses.COLOR_BLACK)

        self.stdscr.bkgd(curses.color_pair(color_pair))
        self.stdscr.refresh()

        self.height, self.width = self.stdscr.getmaxyx()

        self.bars = {
            'status': StatusBar(self),
            'message': MessageBar(self)
        }

        while True:
            c = self.stdscr.getch()
            ck = filter(lambda t: t[1] == c, curses.__dict__.items())
            c = ck[0][0] if len(ck) else unctrl(c)
            logger.debug(c)

            if c in ['KEY_RESIZE', 'ERR']:
                self.height, self.width = self.stdscr.getmaxyx()
                self.stdscr.clear()
                self.stdscr.refresh()
                for bar in self.bars.values():
                    bar.setpos()

            if c == 'q':
                log.clear_screen()
                break