mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	Switch tty key input over to happen on a read event. This is a bit more
complicated because of escape input, but in that case instead of processing a key immediately, schedule a timer and reprocess the bufer when it expires. This currently assumes that keys will be atomic (ie that if eg F1 is pressed the entire sequence is present in the buffer). This is usually but not always true, a change in the tree format so it can differentiate potential (partial) key sequences will happens soon and will allow this to be fixed.
This commit is contained in:
		
							
								
								
									
										13
									
								
								tty.c
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								tty.c
									
									
									
									
									
								
							@@ -28,6 +28,7 @@
 | 
			
		||||
 | 
			
		||||
#include "tmux.h"
 | 
			
		||||
 | 
			
		||||
void	tty_read_callback(struct bufferevent *, void *);
 | 
			
		||||
void	tty_error_callback(struct bufferevent *, short, void *);
 | 
			
		||||
 | 
			
		||||
void	tty_fill_acs(struct tty *);
 | 
			
		||||
@@ -113,7 +114,7 @@ tty_open(struct tty *tty, const char *overrides, char **cause)
 | 
			
		||||
	tty->flags &= ~(TTY_NOCURSOR|TTY_FREEZE|TTY_ESCAPE);
 | 
			
		||||
 | 
			
		||||
	tty->event = bufferevent_new(
 | 
			
		||||
	    tty->fd, NULL, NULL, tty_error_callback, tty);
 | 
			
		||||
	    tty->fd, tty_read_callback, NULL, tty_error_callback, tty);
 | 
			
		||||
 | 
			
		||||
	tty_start_tty(tty);
 | 
			
		||||
 | 
			
		||||
@@ -124,6 +125,15 @@ tty_open(struct tty *tty, const char *overrides, char **cause)
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
tty_read_callback(unused struct bufferevent *bufev, void *data)
 | 
			
		||||
{
 | 
			
		||||
	struct tty	*tty = data;
 | 
			
		||||
 | 
			
		||||
	while (tty_keys_next(tty))
 | 
			
		||||
		;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
tty_error_callback(
 | 
			
		||||
    unused struct bufferevent *bufev, unused short what, unused void *data)
 | 
			
		||||
@@ -259,6 +269,7 @@ tty_close(struct tty *tty)
 | 
			
		||||
		tty->log_fd = -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	evtimer_del(&tty->key_timer);
 | 
			
		||||
	tty_stop_tty(tty);
 | 
			
		||||
 | 
			
		||||
	if (tty->flags & TTY_OPENED) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user