mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	[3.13] gh-123024: Correctly prepare/restore around help and show-history commands (GH-124485) (#129155)
gh-123024: Correctly prepare/restore around help and show-history commands (GH-124485)
(cherry picked from commit 5a9afe2362)
Co-authored-by: Lysandros Nikolaou <lisandrosnik@gmail.com>
Co-authored-by: Emily Morehouse <emily@cuttlesoft.com>
Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
			
			
This commit is contained in:
		
							parent
							
								
									3048dcd15a
								
							
						
					
					
						commit
						0ddcb61ffe
					
				
					 7 changed files with 77 additions and 57 deletions
				
			
		|  | @ -240,7 +240,7 @@ def refresh(self, screen, c_xy): | |||
|                 self.__hide_cursor() | ||||
|                 self.__move(0, len(self.screen) - 1) | ||||
|                 self.__write("\n") | ||||
|                 self.__posxy = 0, len(self.screen) | ||||
|                 self.posxy = 0, len(self.screen) | ||||
|                 self.screen.append("") | ||||
|         else: | ||||
|             while len(self.screen) < len(screen): | ||||
|  | @ -250,7 +250,7 @@ def refresh(self, screen, c_xy): | |||
|             self.__gone_tall = 1 | ||||
|             self.__move = self.__move_tall | ||||
| 
 | ||||
|         px, py = self.__posxy | ||||
|         px, py = self.posxy | ||||
|         old_offset = offset = self.__offset | ||||
|         height = self.height | ||||
| 
 | ||||
|  | @ -271,7 +271,7 @@ def refresh(self, screen, c_xy): | |||
|         if old_offset > offset and self._ri: | ||||
|             self.__hide_cursor() | ||||
|             self.__write_code(self._cup, 0, 0) | ||||
|             self.__posxy = 0, old_offset | ||||
|             self.posxy = 0, old_offset | ||||
|             for i in range(old_offset - offset): | ||||
|                 self.__write_code(self._ri) | ||||
|                 oldscr.pop(-1) | ||||
|  | @ -279,7 +279,7 @@ def refresh(self, screen, c_xy): | |||
|         elif old_offset < offset and self._ind: | ||||
|             self.__hide_cursor() | ||||
|             self.__write_code(self._cup, self.height - 1, 0) | ||||
|             self.__posxy = 0, old_offset + self.height - 1 | ||||
|             self.posxy = 0, old_offset + self.height - 1 | ||||
|             for i in range(offset - old_offset): | ||||
|                 self.__write_code(self._ind) | ||||
|                 oldscr.pop(0) | ||||
|  | @ -299,7 +299,7 @@ def refresh(self, screen, c_xy): | |||
|         while y < len(oldscr): | ||||
|             self.__hide_cursor() | ||||
|             self.__move(0, y) | ||||
|             self.__posxy = 0, y | ||||
|             self.posxy = 0, y | ||||
|             self.__write_code(self._el) | ||||
|             y += 1 | ||||
| 
 | ||||
|  | @ -321,7 +321,7 @@ def move_cursor(self, x, y): | |||
|             self.event_queue.insert(Event("scroll", None)) | ||||
|         else: | ||||
|             self.__move(x, y) | ||||
|             self.__posxy = x, y | ||||
|             self.posxy = x, y | ||||
|             self.flushoutput() | ||||
| 
 | ||||
|     def prepare(self): | ||||
|  | @ -350,7 +350,7 @@ def prepare(self): | |||
| 
 | ||||
|         self.__buffer = [] | ||||
| 
 | ||||
|         self.__posxy = 0, 0 | ||||
|         self.posxy = 0, 0 | ||||
|         self.__gone_tall = 0 | ||||
|         self.__move = self.__move_short | ||||
|         self.__offset = 0 | ||||
|  | @ -559,7 +559,7 @@ def clear(self): | |||
|         self.__write_code(self._clear) | ||||
|         self.__gone_tall = 1 | ||||
|         self.__move = self.__move_tall | ||||
|         self.__posxy = 0, 0 | ||||
|         self.posxy = 0, 0 | ||||
|         self.screen = [] | ||||
| 
 | ||||
|     @property | ||||
|  | @ -644,8 +644,8 @@ def __write_changed_line(self, y, oldline, newline, px_coord): | |||
|         # if we need to insert a single character right after the first detected change | ||||
|         if oldline[x_pos:] == newline[x_pos + 1 :] and self.ich1: | ||||
|             if ( | ||||
|                 y == self.__posxy[1] | ||||
|                 and x_coord > self.__posxy[0] | ||||
|                 y == self.posxy[1] | ||||
|                 and x_coord > self.posxy[0] | ||||
|                 and oldline[px_pos:x_pos] == newline[px_pos + 1 : x_pos + 1] | ||||
|             ): | ||||
|                 x_pos = px_pos | ||||
|  | @ -654,7 +654,7 @@ def __write_changed_line(self, y, oldline, newline, px_coord): | |||
|             self.__move(x_coord, y) | ||||
|             self.__write_code(self.ich1) | ||||
|             self.__write(newline[x_pos]) | ||||
|             self.__posxy = x_coord + character_width, y | ||||
|             self.posxy = x_coord + character_width, y | ||||
| 
 | ||||
|         # if it's a single character change in the middle of the line | ||||
|         elif ( | ||||
|  | @ -665,7 +665,7 @@ def __write_changed_line(self, y, oldline, newline, px_coord): | |||
|             character_width = wlen(newline[x_pos]) | ||||
|             self.__move(x_coord, y) | ||||
|             self.__write(newline[x_pos]) | ||||
|             self.__posxy = x_coord + character_width, y | ||||
|             self.posxy = x_coord + character_width, y | ||||
| 
 | ||||
|         # if this is the last character to fit in the line and we edit in the middle of the line | ||||
|         elif ( | ||||
|  | @ -677,14 +677,14 @@ def __write_changed_line(self, y, oldline, newline, px_coord): | |||
|         ): | ||||
|             self.__hide_cursor() | ||||
|             self.__move(self.width - 2, y) | ||||
|             self.__posxy = self.width - 2, y | ||||
|             self.posxy = self.width - 2, y | ||||
|             self.__write_code(self.dch1) | ||||
| 
 | ||||
|             character_width = wlen(newline[x_pos]) | ||||
|             self.__move(x_coord, y) | ||||
|             self.__write_code(self.ich1) | ||||
|             self.__write(newline[x_pos]) | ||||
|             self.__posxy = character_width + 1, y | ||||
|             self.posxy = character_width + 1, y | ||||
| 
 | ||||
|         else: | ||||
|             self.__hide_cursor() | ||||
|  | @ -692,7 +692,7 @@ def __write_changed_line(self, y, oldline, newline, px_coord): | |||
|             if wlen(oldline) > wlen(newline): | ||||
|                 self.__write_code(self._el) | ||||
|             self.__write(newline[x_pos:]) | ||||
|             self.__posxy = wlen(newline), y | ||||
|             self.posxy = wlen(newline), y | ||||
| 
 | ||||
|         if "\x1b" in newline: | ||||
|             # ANSI escape characters are present, so we can't assume | ||||
|  | @ -711,32 +711,36 @@ def __maybe_write_code(self, fmt, *args): | |||
|             self.__write_code(fmt, *args) | ||||
| 
 | ||||
|     def __move_y_cuu1_cud1(self, y): | ||||
|         dy = y - self.__posxy[1] | ||||
|         assert self._cud1 is not None | ||||
|         assert self._cuu1 is not None | ||||
|         dy = y - self.posxy[1] | ||||
|         if dy > 0: | ||||
|             self.__write_code(dy * self._cud1) | ||||
|         elif dy < 0: | ||||
|             self.__write_code((-dy) * self._cuu1) | ||||
| 
 | ||||
|     def __move_y_cuu_cud(self, y): | ||||
|         dy = y - self.__posxy[1] | ||||
|         dy = y - self.posxy[1] | ||||
|         if dy > 0: | ||||
|             self.__write_code(self._cud, dy) | ||||
|         elif dy < 0: | ||||
|             self.__write_code(self._cuu, -dy) | ||||
| 
 | ||||
|     def __move_x_hpa(self, x: int) -> None: | ||||
|         if x != self.__posxy[0]: | ||||
|         if x != self.posxy[0]: | ||||
|             self.__write_code(self._hpa, x) | ||||
| 
 | ||||
|     def __move_x_cub1_cuf1(self, x: int) -> None: | ||||
|         dx = x - self.__posxy[0] | ||||
|         assert self._cuf1 is not None | ||||
|         assert self._cub1 is not None | ||||
|         dx = x - self.posxy[0] | ||||
|         if dx > 0: | ||||
|             self.__write_code(self._cuf1 * dx) | ||||
|         elif dx < 0: | ||||
|             self.__write_code(self._cub1 * (-dx)) | ||||
| 
 | ||||
|     def __move_x_cub_cuf(self, x: int) -> None: | ||||
|         dx = x - self.__posxy[0] | ||||
|         dx = x - self.posxy[0] | ||||
|         if dx > 0: | ||||
|             self.__write_code(self._cuf, dx) | ||||
|         elif dx < 0: | ||||
|  | @ -766,12 +770,12 @@ def __show_cursor(self): | |||
| 
 | ||||
|     def repaint(self): | ||||
|         if not self.__gone_tall: | ||||
|             self.__posxy = 0, self.__posxy[1] | ||||
|             self.posxy = 0, self.posxy[1] | ||||
|             self.__write("\r") | ||||
|             ns = len(self.screen) * ["\000" * self.width] | ||||
|             self.screen = ns | ||||
|         else: | ||||
|             self.__posxy = 0, self.__offset | ||||
|             self.posxy = 0, self.__offset | ||||
|             self.__move(0, self.__offset) | ||||
|             ns = self.height * ["\000" * self.width] | ||||
|             self.screen = ns | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Miss Islington (bot)
						Miss Islington (bot)