KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have a python script that takes manages the stdin, stdout, and stderr of any application and allows for readline to be inserted gracefully. Think of any application that has lots of console output, but also accepts commands from stdin. In any case, my script uses these two functions: def blank_current_readline(): # Next line said to be reasonably portable for various Unixes (rows,cols) = struct.unpack('hh', fcntl.ioctl(sys.stdout, termios.TIOCGWINSZ,'1234')) text_len = len(readline.get_line_buffer())+2 # ANSI escape sequences (All VT100 except ESC[0G) sys.stdout.write('\x1b[2K') # Clear current line sys.stdout.write('\x1b[1A\x1b[2K'*(text_len/cols)) # Move cursor up and clear line sys.stdout.write('\x1b[0G') # Move to start of line def print_line(line): global cmd_state blank_current_readline() print line, sys.stdout.write(cmd_state["prompt"] + readline.get_line_buffer()) sys.stdout.flush() When handling stdout, I call print_line(). This blanks whatever the user might be typing, prints the line, then restores the user's input text. This all happens without the user noticing a thing. The problem occurs when the cursor is not at the end of whatever input the user is typing. When the cursor is in the middle of the test and a line is printed, the cursor will automatically be placed at the end of the input. To solve this, I want to do something like this in print_line: def print_line(line): global cmd_state cursorPos = getCurrentCursorPos() #Doesn't exist blank_current_readline() print line, sys.stdout.write(cmd_state["prompt"] + readline.get_line_buffer()) sys.stdout.setCurrentCursorPos(cursorPos) #Doesn't exist sys.stdout.flush() Edit: To try and visualize what I have written: The terminal looks like this: ---------
Tags (comma-separated)
Save Edits
Cancel