From 5ef7f43479327b2ad3e96439c4785af2c658dfab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bazyli=20Brz=C3=B3ska?= Date: Mon, 9 Sep 2013 01:45:03 +0200 Subject: [PATCH] Implement xterm mouse mode --- src/terminal/terminaldisplay.cc | 6 ++++++ src/terminal/terminalframebuffer.cc | 3 ++- src/terminal/terminalframebuffer.h | 3 ++- src/terminal/terminalfunctions.cc | 3 +++ 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/terminal/terminaldisplay.cc b/src/terminal/terminaldisplay.cc index a8dcf2e..ba7f751 100644 --- a/src/terminal/terminaldisplay.cc +++ b/src/terminal/terminaldisplay.cc @@ -292,6 +292,12 @@ std::string Display::new_frame( bool initialized, const Framebuffer &last, const frame.append( f.ds.bracketed_paste ? "\033[?2004h" : "\033[?2004l" ); } + /* has xterm mouse mode changed (SET_ANY_EVENT_MOUSE)? */ + if ( (!initialized) + || (f.ds.xterm_mouse != frame.last_frame.ds.xterm_mouse) ) { + frame.append( f.ds.xterm_mouse ? "\033[?1002h" : "\033[?1002l" ); + } + return frame.str; } diff --git a/src/terminal/terminalframebuffer.cc b/src/terminal/terminalframebuffer.cc index 66ca876..c8a13ec 100644 --- a/src/terminal/terminalframebuffer.cc +++ b/src/terminal/terminalframebuffer.cc @@ -62,7 +62,8 @@ DrawState::DrawState( int s_width, int s_height ) renditions( 0 ), save(), next_print_will_wrap( false ), origin_mode( false ), auto_wrap_mode( true ), insert_mode( false ), cursor_visible( true ), reverse_video( false ), - bracketed_paste( false ), application_mode_cursor_keys( false ) + bracketed_paste( false ), xterm_mouse( false ), + application_mode_cursor_keys( false ) { reinitialize_tabs( 0 ); } diff --git a/src/terminal/terminalframebuffer.h b/src/terminal/terminalframebuffer.h index 7ecb2f3..16edc83 100644 --- a/src/terminal/terminalframebuffer.h +++ b/src/terminal/terminalframebuffer.h @@ -190,6 +190,7 @@ namespace Terminal { bool cursor_visible; bool reverse_video; bool bracketed_paste; + bool xterm_mouse; bool application_mode_cursor_keys; @@ -239,7 +240,7 @@ namespace Terminal { return ( width == x.width ) && ( height == x.height ) && ( cursor_col == x.cursor_col ) && ( cursor_row == x.cursor_row ) && ( cursor_visible == x.cursor_visible ) && ( reverse_video == x.reverse_video ) && ( renditions == x.renditions ) && - ( bracketed_paste == x.bracketed_paste ); + ( bracketed_paste == x.bracketed_paste ) && ( xterm_mouse == x.xterm_mouse ); } }; diff --git a/src/terminal/terminalfunctions.cc b/src/terminal/terminalfunctions.cc index ec2e27b..563b253 100644 --- a/src/terminal/terminalfunctions.cc +++ b/src/terminal/terminalfunctions.cc @@ -268,6 +268,9 @@ static bool *get_DEC_mode( int param, Framebuffer *fb ) { return &(fb->ds.auto_wrap_mode); case 25: return &(fb->ds.cursor_visible); + case 1000: /* xterm mouse 1 (normal) */ + case 1002: /* xterm mouse 2 (inc. button drags) */ + return &(fb->ds.xterm_mouse); case 2004: /* bracketed paste */ return &(fb->ds.bracketed_paste); }