Exemple #1
0
    def test_create(self):
        b = Buffer()
        s = Screen()
        s.activate_buffer(b)

        self.assertEqual(s.buffer.y, 0)
        self.assertIs(s.buffer.current_line, s.buffer[0])
        self.assertEqual(s.buffer.current_line.text, '')
Exemple #2
0
    def test_edit_mode(self):
        b = Buffer()
        s = Screen()
        s.activate_buffer(b)

        s.mode = Mode.EDIT

        ###

        for cp in 'abc':
            s.handle_code_point(cp)
        self.assertEqual(len(s.buffer), 1)
        self.assertEqual(s.buffer.y, 0)
        self.assertEqual(s.buffer.x, 3)
        self.assertEqual(s.buffer.current_line.text, 'abc')

        for cp in 'def\nghi':
            s.handle_code_point(cp)
        self.assertEqual(len(s.buffer), 2)
        self.assertEqual(s.buffer.y, 1)
        self.assertEqual(s.buffer.x, 3)
        self.assertEqual(s.buffer[0].text, 'abcdef')
        self.assertEqual(s.buffer.current_line.text, 'ghi')

        for cp in '\x7f' * 3:
            s.handle_code_point(cp)
        self.assertEqual(len(s.buffer), 2)
        self.assertEqual(s.buffer.y, 1)
        self.assertEqual(s.buffer.x, 0)
        self.assertEqual(s.buffer[0].text, 'abcdef')
        self.assertEqual(s.buffer.current_line.text, '')

        for cp in '\x7f' * 2:
            s.handle_code_point(cp)
        self.assertEqual(len(s.buffer), 1)
        self.assertEqual(s.buffer.y, 0)
        self.assertEqual(s.buffer.x, 5)
        self.assertEqual(s.buffer.current_line.text, 'abcde')

        for cp in '\x7f' * 5:
            s.handle_code_point(cp)
        self.assertEqual(len(s.buffer), 1)
        self.assertEqual(s.buffer.y, 0)
        self.assertEqual(s.buffer.x, 0)
        self.assertEqual(s.buffer.current_line.text, '')

        for cp in '\x7f' * 10:
            s.handle_code_point(cp)
        self.assertEqual(len(s.buffer), 1)
        self.assertEqual(s.buffer.y, 0)
        self.assertEqual(s.buffer.x, 0)
        self.assertEqual(s.buffer.current_line.text, '')
Exemple #3
0
    def test_movement(self):
        b = Buffer()
        s = Screen()
        s.activate_buffer(b)

        s.mode = Mode.EDIT

        for cp in '\n'.join(('0123', '01', '0123')):
            s.handle_code_point(cp)
        s.handle_code_point('\x04')  # C-d
        self.assertEqual(s.buffer.y, 2)
        self.assertEqual(s.buffer.x, 4)

        ###

        s.handle_code_point('j')
        self.assertEqual(s.buffer.y, 2)
        self.assertEqual(s.buffer.x, 3)
        self.assertNoMovement(s, 'k')
        self.assertMovement(s, 'j', 'l', ';', 'J', ':')

        s.handle_code_point('J')
        self.assertEqual(s.buffer.y, 2)
        self.assertEqual(s.buffer.x, 0)
        self.assertNoMovement(s, 'j', 'J', 'k')
        self.assertMovement(s, 'l', ';', ':')

        s.handle_code_point(';')
        self.assertEqual(s.buffer.y, 2)
        self.assertEqual(s.buffer.x, 1)
        self.assertNoMovement(s, 'k')
        self.assertMovement(s, 'j', 'l', ';', 'J', ':')

        s.handle_code_point(':')
        self.assertEqual(s.buffer.y, 2)
        self.assertEqual(s.buffer.x, 4)
        self.assertNoMovement(s, ';', ':', 'k')
        self.assertMovement(s, 'j', 'l', 'J')

        s.handle_code_point('l')
        self.assertEqual(s.buffer.y, 1)
        self.assertEqual(s.buffer.x, 2)
        self.assertNoMovement(s, ';', ':')
        self.assertMovement(s, 'j', 'k', 'l', 'J')

        s.handle_code_point('l')
        self.assertEqual(s.buffer.y, 0)
        self.assertEqual(s.buffer.x, 2)
        self.assertNoMovement(s, 'l')
        self.assertMovement(s, 'j', 'k', ';', 'J', ':')
Exemple #4
0
def main(stdscr):
    stdscr.keypad(False)
    stdscr.clear()
    b = Buffer()
    b.filename = 'testfile'
    try:
        with open(b.filename, 'r') as f:
            for line in f.read().splitlines():
                b.append_line(line)
    except FileNotFoundError:
        pass
    height, width = stdscr.getmaxyx()
    width -= 1
    s = Screen(height=height, width=width)
    s.activate_buffer(b)
    s.redraw_lines(stdscr, range(len(s.buffer)))
    while True:
        try:
            modified = s.handle_code_point(get_code_point(stdscr))
            s.redraw_lines(stdscr, modified)
        except KeyboardInterrupt:
            s.buffer.save()
            raise