 e4938ce3cc
			
		
	
	e4938ce3cc
	
	
	
		
			
			read_key_without_echo() reads from stdin but uses /dev/tty when it
disables echo. This is unfortunate as there no guarantee that stdin is
the same device as /dev/tty. The perl version of "add -p" uses stdin
when it sets the terminal mode, this commit does the same for the
builtin version. There is still a difference between the perl and
builtin versions though - the perl version will ignore any errors when
setting the terminal mode[1] and will still read single bytes when
stdin is not a terminal. The builtin version displays a warning if
setting the terminal mode fails and switches to reading a line at a
time.
[1] b061c913bb/ReadKey.xs (L1090)
Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
	
		
			
				
	
	
		
			28 lines
		
	
	
		
			875 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			875 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef COMPAT_TERMINAL_H
 | |
| #define COMPAT_TERMINAL_H
 | |
| 
 | |
| enum save_term_flags {
 | |
| 	/* Save input and output settings */
 | |
| 	SAVE_TERM_DUPLEX = 1 << 0,
 | |
| 	/* Save stdin rather than /dev/tty (fails if stdin is not a terminal) */
 | |
| 	SAVE_TERM_STDIN  = 1 << 1,
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * Save the terminal attributes so they can be restored later by a
 | |
|  * call to restore_term(). Note that every successful call to
 | |
|  * save_term() must be matched by a call to restore_term() even if the
 | |
|  * attributes have not been changed. Returns 0 on success, -1 on
 | |
|  * failure.
 | |
|  */
 | |
| int save_term(enum save_term_flags flags);
 | |
| /* Restore the terminal attributes that were saved with save_term() */
 | |
| void restore_term(void);
 | |
| 
 | |
| char *git_terminal_prompt(const char *prompt, int echo);
 | |
| 
 | |
| /* Read a single keystroke, without echoing it to the terminal */
 | |
| int read_key_without_echo(struct strbuf *buf);
 | |
| 
 | |
| #endif /* COMPAT_TERMINAL_H */
 |