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, '')
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, '')
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', ':')
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