mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	[3.13] gh-111201: Support pyrepl on Windows (GH-119559) (GH-119850)
(cherry picked from commit 0d07182821)
Co-authored-by: Dino Viehland <dinoviehland@gmail.com>
Co-authored-by: Anthony Shaw <anthony.p.shaw@gmail.com>
Co-authored-by: Łukasz Langa <lukasz@langa.pl>
			
			
This commit is contained in:
		
							parent
							
								
									6e57bd01e0
								
							
						
					
					
						commit
						d6faac6d1f
					
				
					 15 changed files with 1019 additions and 49 deletions
				
			
		|  | @ -143,18 +143,7 @@ def __init__( | |||
|         - term (str): Terminal name. | ||||
|         - encoding (str): Encoding to use for I/O operations. | ||||
|         """ | ||||
| 
 | ||||
|         self.encoding = encoding or sys.getdefaultencoding() | ||||
| 
 | ||||
|         if isinstance(f_in, int): | ||||
|             self.input_fd = f_in | ||||
|         else: | ||||
|             self.input_fd = f_in.fileno() | ||||
| 
 | ||||
|         if isinstance(f_out, int): | ||||
|             self.output_fd = f_out | ||||
|         else: | ||||
|             self.output_fd = f_out.fileno() | ||||
|         super().__init__(f_in, f_out, term, encoding) | ||||
| 
 | ||||
|         self.pollob = poll() | ||||
|         self.pollob.register(self.input_fd, select.POLLIN) | ||||
|  | @ -592,14 +581,19 @@ def __write_changed_line(self, y, oldline, newline, px_coord): | |||
|         px_pos = 0 | ||||
|         j = 0 | ||||
|         for c in oldline: | ||||
|             if j >= px_coord: break | ||||
|             if j >= px_coord: | ||||
|                 break | ||||
|             j += wlen(c) | ||||
|             px_pos += 1 | ||||
| 
 | ||||
|         # reuse the oldline as much as possible, but stop as soon as we | ||||
|         # encounter an ESCAPE, because it might be the start of an escape | ||||
|         # sequene | ||||
|         while x_coord < minlen and oldline[x_pos] == newline[x_pos] and newline[x_pos] != "\x1b": | ||||
|         while ( | ||||
|             x_coord < minlen | ||||
|             and oldline[x_pos] == newline[x_pos] | ||||
|             and newline[x_pos] != "\x1b" | ||||
|         ): | ||||
|             x_coord += wlen(newline[x_pos]) | ||||
|             x_pos += 1 | ||||
| 
 | ||||
|  | @ -619,7 +613,11 @@ def __write_changed_line(self, y, oldline, newline, px_coord): | |||
|             self.__posxy = x_coord + character_width, y | ||||
| 
 | ||||
|         # if it's a single character change in the middle of the line | ||||
|         elif x_coord < minlen and oldline[x_pos + 1 :] == newline[x_pos + 1 :] and wlen(oldline[x_pos]) == wlen(newline[x_pos]): | ||||
|         elif ( | ||||
|             x_coord < minlen | ||||
|             and oldline[x_pos + 1 :] == newline[x_pos + 1 :] | ||||
|             and wlen(oldline[x_pos]) == wlen(newline[x_pos]) | ||||
|         ): | ||||
|             character_width = wlen(newline[x_pos]) | ||||
|             self.__move(x_coord, y) | ||||
|             self.__write(newline[x_pos]) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Miss Islington (bot)
						Miss Islington (bot)