mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Preliminary mouse support.
This commit is contained in:
		
							
								
								
									
										4
									
								
								CHANGES
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								CHANGES
									
									
									
									
									
								
							@@ -1,5 +1,7 @@
 | 
			
		||||
27 November 2007
 | 
			
		||||
 | 
			
		||||
* Enable/disable mouse when asked, if terminal claims to support it. Mouse
 | 
			
		||||
  sequences are just passed through unaltered for the moment.
 | 
			
		||||
* Big internal reorganisation. Rather than leaving control of the tty solely in
 | 
			
		||||
  the client and piping all data through a socket to it, change so that the
 | 
			
		||||
  server opens the tty again and reads and writes to it directly. This avoids
 | 
			
		||||
@@ -283,4 +285,4 @@
 | 
			
		||||
  (including mutt, emacs). No status bar yet and no key remapping or other
 | 
			
		||||
  customisation.
 | 
			
		||||
 | 
			
		||||
$Id: CHANGES,v 1.87 2007-11-27 19:23:32 nicm Exp $
 | 
			
		||||
$Id: CHANGES,v 1.88 2007-11-27 23:28:51 nicm Exp $
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										23
									
								
								TODO
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								TODO
									
									
									
									
									
								
							@@ -65,3 +65,26 @@
 | 
			
		||||
- anything which uses cmd_{send,recv}_string will break if the string is
 | 
			
		||||
  split. string length should be part of the command size
 | 
			
		||||
- echo \\033[35\;46m\\033[2J last line quirk (with C-b r)
 | 
			
		||||
 | 
			
		||||
--------
 | 
			
		||||
kmous -- \E[M
 | 
			
		||||
 | 
			
		||||
mouse init:     putp("\033[?1000h");
 | 
			
		||||
mouse deinit:   putp("\033[?1000l");
 | 
			
		||||
 | 
			
		||||
\e[M CbCxCy
 | 
			
		||||
         * On button press or release, xterm sends ESC [ M CbCxCy.
 | 
			
		||||
         * The low two bits of Cb encode button information: 0=MB1
 | 
			
		||||
         * pressed, 1=MB2 pressed, 2=MB3 pressed, 3=release.  The
 | 
			
		||||
         * upper bits encode what modifiers were down when the
 | 
			
		||||
         * button was pressed and are added together.  4=Shift,
 | 
			
		||||
         * 8=Meta, 16=Control.  Cx and Cy are the x and y coordinates
 | 
			
		||||
         * of the mouse event.  The upper left corner is (1,1).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
       get_mouse                 getm     Gm   Curses should get
 | 
			
		||||
                                               button events
 | 
			
		||||
       key_mouse                 kmous    Km   Mouse event has
 | 
			
		||||
                                               occurred
 | 
			
		||||
       mouse_info                minfo    Mi   Mouse status
 | 
			
		||||
                                               information
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								input.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								input.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: input.c,v 1.41 2007-11-27 23:01:27 nicm Exp $ */
 | 
			
		||||
/* $Id: input.c,v 1.42 2007-11-27 23:28:51 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -913,6 +913,10 @@ input_handle_sequence_sm(struct input_ctx *ictx)
 | 
			
		||||
			s->mode |= MODE_CURSOR;
 | 
			
		||||
			input_write(ictx, TTY_CURSORON);
 | 
			
		||||
			break;
 | 
			
		||||
		case 1000:
 | 
			
		||||
			s->mode |= MODE_MOUSE;
 | 
			
		||||
			input_write(ictx, TTY_MOUSEON);
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			log_debug("unknown SM [%hhu]: %u", ictx->private, n);
 | 
			
		||||
			break;
 | 
			
		||||
@@ -954,6 +958,10 @@ input_handle_sequence_rm(struct input_ctx *ictx)
 | 
			
		||||
			s->mode &= ~MODE_CURSOR;
 | 
			
		||||
			input_write(ictx, TTY_CURSOROFF);
 | 
			
		||||
			break;
 | 
			
		||||
		case 1000:
 | 
			
		||||
			s->mode &= ~MODE_MOUSE;
 | 
			
		||||
			input_write(ictx, TTY_MOUSEOFF);
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			log_debug("unknown RM [%hhu]: %u", ictx->private, n);
 | 
			
		||||
			break;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: tmux.h,v 1.105 2007-11-27 23:01:27 nicm Exp $ */
 | 
			
		||||
/* $Id: tmux.h,v 1.106 2007-11-27 23:28:51 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -282,6 +282,8 @@ struct buffer {
 | 
			
		||||
#define TTY_KKEYPADOFF 22
 | 
			
		||||
#define TTY_KKEYPADON 23
 | 
			
		||||
#define TTY_TITLE 24
 | 
			
		||||
#define TTY_MOUSEON 25
 | 
			
		||||
#define TTY_MOUSEOFF 26 /* XXX merge allon/off into 1 arg? */ 
 | 
			
		||||
 | 
			
		||||
/* Message codes. */
 | 
			
		||||
enum hdrtype {
 | 
			
		||||
@@ -343,6 +345,7 @@ struct msg_resize_data {
 | 
			
		||||
#define MODE_HIDDEN 0x020
 | 
			
		||||
#define MODE_BACKGROUND 0x040
 | 
			
		||||
#define MODE_BGCURSOR 0x080
 | 
			
		||||
#define MODE_MOUSE 0x100
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Virtual screen. This is stored as three blocks of 8-bit values, one for
 | 
			
		||||
@@ -558,7 +561,7 @@ struct client {
 | 
			
		||||
 | 
			
		||||
#define CLIENT_TERMINAL 0x1
 | 
			
		||||
#define CLIENT_PREFIX 0x2
 | 
			
		||||
#define CLIENT_ATTACHED 0x4
 | 
			
		||||
#define CLIENT_MOUSE 0x4
 | 
			
		||||
	int		 flags;
 | 
			
		||||
 | 
			
		||||
	struct session	*session;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								tty.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								tty.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: tty.c,v 1.6 2007-11-27 23:01:27 nicm Exp $ */
 | 
			
		||||
/* $Id: tty.c,v 1.7 2007-11-27 23:28:51 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -324,7 +324,15 @@ tty_vwrite(struct tty *tty, int cmd, va_list ap)
 | 
			
		||||
	case TTY_KKEYPADON:
 | 
			
		||||
		if (keypad_xmit != NULL)
 | 
			
		||||
			tty_puts(tty, keypad_xmit);
 | 
			
		||||
		break;
 | 
			
		||||
#endif
 | 
			
		||||
	case TTY_MOUSEOFF:
 | 
			
		||||
		if (key_mouse != NULL)
 | 
			
		||||
			tty_puts(tty, "\e[?1000l");
 | 
			
		||||
		break;
 | 
			
		||||
	case TTY_MOUSEON:
 | 
			
		||||
		if (key_mouse != NULL)
 | 
			
		||||
			tty_puts(tty, "\e[?1000h");
 | 
			
		||||
		break;
 | 
			
		||||
	case TTY_TITLE:
 | 
			
		||||
		break;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user