コード例 #1
0
ファイル: parser.py プロジェクト: wenyuesr/kitty
 def test_dcs_codes(self):
     s = self.create_screen()
     c = s.callbacks
     pb = partial(self.parse_bytes_dump, s)
     q = hexlify(b'kind').decode('ascii')
     pb('a\033P+q{}\x9cbcde'.format(q), 'a',
        ('screen_request_capabilities', 43, q), 'bcde')
     self.ae(str(s.line(0)), 'abcde')
     self.ae(c.wtcbuf, '1+r{}={}'.format(q, '1b5b313b3242').encode('ascii'))
     c.clear()
     pb('\033P$q q\033\\', ('screen_request_capabilities', ord('$'), ' q'))
     self.ae(c.wtcbuf, b'\033P1$r1 q\033\\')
     c.clear()
     pb('\033P$qm\033\\', ('screen_request_capabilities', ord('$'), 'm'))
     self.ae(c.wtcbuf, b'\033P1$rm\033\\')
     for sgr in '0;34;102;1;2;3;4 0;38:5:200;58:2:10:11:12'.split():
         expected = set(sgr.split(';')) - {'0'}
         c.clear()
         parse_bytes(s,
                     '\033[{}m\033P$qm\033\\'.format(sgr).encode('ascii'))
         r = c.wtcbuf.decode('ascii').partition('r')[2].partition('m')[0]
         self.ae(expected, set(r.split(';')))
     c.clear()
     pb('\033P$qr\033\\', ('screen_request_capabilities', ord('$'), 'r'))
     self.ae(
         c.wtcbuf,
         '\033P1$r{};{}r\033\\'.format(s.margin_top + 1,
                                       s.margin_bottom + 1).encode('ascii'))
コード例 #2
0
    def process_input_from_child(self, timeout=10):
        rd, wd, err = select.select([self.master_fd],
                                    [self.master_fd] if self.write_buf else [],
                                    [self.master_fd], timeout)
        if err:
            raise OSError('master_fd is in error condition')
        while wd:
            try:
                n = os.write(self.master_fd, self.write_buf)
            except (BlockingIOError, OSError):
                n = 0
            if not n:
                break
            self.write_buf = self.write_buf[n:]

        bytes_read = 0
        while rd:
            try:
                data = os.read(self.master_fd, io.DEFAULT_BUFFER_SIZE)
            except (BlockingIOError, OSError):
                data = b''
            if not data:
                break
            bytes_read += len(data)
            self.received_bytes += data
            parse_bytes(self.screen, data)
        return bytes_read
コード例 #3
0
ファイル: screen.py プロジェクト: dandycheung/kitty
 def t(q, use_pending_mode, *expected):
     c.clear()
     if use_pending_mode:
         parse_bytes(s, b'\033[?2026h')
     send(q)
     if use_pending_mode:
         self.ae(c.cc_buf, [])
         parse_bytes(s, b'\033[?2026l')
     self.ae(c.cc_buf, list(expected))
コード例 #4
0
ファイル: graphics.py プロジェクト: zippyy/kitty
def send_command(screen, cmd, payload=b''):
    cmd = '\033_G' + cmd
    if payload:
        if isinstance(payload, str):
            payload = payload.encode('utf-8')
        payload = standard_b64encode(payload).decode('ascii')
        cmd += ';' + payload
    cmd += '\033\\'
    c = screen.callbacks
    c.clear()
    parse_bytes(screen, cmd.encode('ascii'))
    return c.wtcbuf
コード例 #5
0
ファイル: parser.py プロジェクト: luisriverag/kitty
    def test_simple_parsing(self):
        s = self.create_screen()
        pb = partial(self.parse_bytes_dump, s)

        pb('12', '12')
        self.ae(str(s.line(0)), '12')
        self.ae(s.cursor.x, 2)
        pb('3456', '3456')
        self.ae(str(s.line(0)), '12345')
        self.ae(str(s.line(1)), '6')
        pb(b'\n123\n\r45', ('screen_linefeed',), '123', ('screen_linefeed',), ('screen_carriage_return',), '45')
        self.ae(str(s.line(1)), '6')
        self.ae(str(s.line(2)), ' 123')
        self.ae(str(s.line(3)), '45')
        parse_bytes(s, b'\rabcde')
        self.ae(str(s.line(3)), 'abcde')
        pb('\rßxyz1', ('screen_carriage_return',), 'ßxyz1')
        self.ae(str(s.line(3)), 'ßxyz1')
        pb('ニチ ', 'ニチ ')
        self.ae(str(s.line(4)), 'ニチ ')
コード例 #6
0
ファイル: screen.py プロジェクト: studiovc/kitty
 def test_rep(self):
     s = self.create_screen()
     s.draw('a')
     parse_bytes(s, b'\x1b[b')
     self.ae(str(s.line(0)), 'aa')
     parse_bytes(s, b'\x1b[3b')
     self.ae(str(s.line(0)), 'a' * 5)
     s.draw(' ')
     parse_bytes(s, b'\x1b[3b')
     self.ae(str(s.line(1)), ' ' * 4)
コード例 #7
0
ファイル: screen.py プロジェクト: tim-clifford/kitty
 def set_link(url=None, id=None):
     parse_bytes(s, '\x1b]8;id={};{}\x1b\\'.format(id or '', url or '').encode('utf-8'))
コード例 #8
0
ファイル: screen.py プロジェクト: studiovc/kitty
 def w(code):
     return parse_bytes(s, ('\033[' + code).encode('ascii'))
コード例 #9
0
ファイル: screen.py プロジェクト: z49x2vmq/kitty
 def ac(flags):
     parse_bytes(s, '\033[?u'.encode('ascii'))
     self.ae(c.wtcbuf, f'\033[?{flags}u'.encode('ascii'))
     c.clear()
コード例 #10
0
ファイル: screen.py プロジェクト: z49x2vmq/kitty
 def w(code, p1='', p2=''):
     p = f'{p1}'
     if p2:
         p += f';{p2}'
     return parse_bytes(s, f'\033[{code}{p}u'.encode('ascii'))
コード例 #11
0
ファイル: screen.py プロジェクト: dandycheung/kitty
 def mark_output():
     parse_bytes(s, b'\033]133;C\007')
コード例 #12
0
ファイル: screen.py プロジェクト: dandycheung/kitty
 def mark_prompt():
     parse_bytes(s, b'\033]133;A\007')
コード例 #13
0
ファイル: screen.py プロジェクト: dandycheung/kitty
 def send(what: str):
     return parse_bytes(s, f'\033]52;p;{what}\a'.encode('ascii'))
コード例 #14
0
ファイル: screen.py プロジェクト: luisriverag/kitty
 def mark_output():
     parse_bytes(s, '\033]133;C\007'.encode('ascii'))
コード例 #15
0
ファイル: screen.py プロジェクト: luisriverag/kitty
 def mark_prompt():
     parse_bytes(s, '\033]133;A\007'.encode('ascii'))