From 926bbcc746e9da8193dbdf781a26fb1151239f39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bazyli=20Brz=C3=B3ska?= Date: Mon, 9 Sep 2013 13:32:41 +0200 Subject: [PATCH] Implement xterm extended mouse mode --- src/terminal/terminaldisplay.cc | 6 ++++++ src/terminal/terminalframebuffer.cc | 2 +- src/terminal/terminalframebuffer.h | 4 +++- src/terminal/terminalfunctions.cc | 2 ++ 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/terminal/terminaldisplay.cc b/src/terminal/terminaldisplay.cc index ba7f751..5b0b580 100644 --- a/src/terminal/terminaldisplay.cc +++ b/src/terminal/terminaldisplay.cc @@ -298,6 +298,12 @@ std::string Display::new_frame( bool initialized, const Framebuffer &last, const frame.append( f.ds.xterm_mouse ? "\033[?1002h" : "\033[?1002l" ); } + /* has xterm mouse mode changed (SET_ANY_EVENT_MOUSE)? */ + if ( (!initialized) + || (f.ds.xterm_extended_mouse != frame.last_frame.ds.xterm_extended_mouse) ) { + frame.append( f.ds.xterm_extended_mouse ? "\033[?1006h" : "\033[?1006l" ); + } + return frame.str; } diff --git a/src/terminal/terminalframebuffer.cc b/src/terminal/terminalframebuffer.cc index c8a13ec..0659c31 100644 --- a/src/terminal/terminalframebuffer.cc +++ b/src/terminal/terminalframebuffer.cc @@ -62,7 +62,7 @@ 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 ), xterm_mouse( false ), + bracketed_paste( false ), xterm_mouse( false ), xterm_extended_mouse( false ), application_mode_cursor_keys( false ) { reinitialize_tabs( 0 ); diff --git a/src/terminal/terminalframebuffer.h b/src/terminal/terminalframebuffer.h index 16edc83..01576b7 100644 --- a/src/terminal/terminalframebuffer.h +++ b/src/terminal/terminalframebuffer.h @@ -191,6 +191,7 @@ namespace Terminal { bool reverse_video; bool bracketed_paste; bool xterm_mouse; + bool xterm_extended_mouse; bool application_mode_cursor_keys; @@ -240,7 +241,8 @@ 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 ) && ( xterm_mouse == x.xterm_mouse ); + ( bracketed_paste == x.bracketed_paste ) && ( xterm_mouse == x.xterm_mouse ) && + ( xterm_extended_mouse == x.xterm_extended_mouse ); } }; diff --git a/src/terminal/terminalfunctions.cc b/src/terminal/terminalfunctions.cc index 563b253..992c63f 100644 --- a/src/terminal/terminalfunctions.cc +++ b/src/terminal/terminalfunctions.cc @@ -271,6 +271,8 @@ static bool *get_DEC_mode( int param, Framebuffer *fb ) { case 1000: /* xterm mouse 1 (normal) */ case 1002: /* xterm mouse 2 (inc. button drags) */ return &(fb->ds.xterm_mouse); + case 1006: /* xterm extended mouse */ + return &(fb->ds.xterm_extended_mouse); case 2004: /* bracketed paste */ return &(fb->ds.bracketed_paste); }