From 0be97a80bdce88a6a17e8e99387552000c1f8a6b Mon Sep 17 00:00:00 2001 From: Andrew Chin Date: Tue, 9 Sep 2014 20:48:44 -0400 Subject: [PATCH] Implement UTF8 mouse mode (SET_EXT_MODE_MOUSE DECSET 1005) Signed-off-by: Andrew Chin --- src/terminal/terminaldisplay.cc | 5 +++++ src/terminal/terminalframebuffer.cc | 2 +- src/terminal/terminalframebuffer.h | 6 ++++-- src/terminal/terminalfunctions.cc | 2 ++ 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/terminal/terminaldisplay.cc b/src/terminal/terminaldisplay.cc index c80b215..70d698c 100644 --- a/src/terminal/terminaldisplay.cc +++ b/src/terminal/terminaldisplay.cc @@ -309,6 +309,11 @@ std::string Display::new_frame( bool initialized, const Framebuffer &last, const || (f.ds.xterm_extended_mouse != frame.last_frame.ds.xterm_extended_mouse) ) { frame.append( f.ds.xterm_extended_mouse ? "\033[?1006h" : "\033[?1006l" ); } + + if ( (!initialized) + || (f.ds.xterm_utf8_mouse != frame.last_frame.ds.xterm_utf8_mouse) ) { + frame.append( f.ds.xterm_utf8_mouse ? "\033[?1005h" : "\033[?1005l" ); + } return frame.str; } diff --git a/src/terminal/terminalframebuffer.cc b/src/terminal/terminalframebuffer.cc index c1ba094..43bd6b4 100644 --- a/src/terminal/terminalframebuffer.cc +++ b/src/terminal/terminalframebuffer.cc @@ -63,7 +63,7 @@ DrawState::DrawState( int s_width, int s_height ) next_print_will_wrap( false ), origin_mode( false ), auto_wrap_mode( true ), insert_mode( false ), cursor_visible( true ), reverse_video( false ), bracketed_paste( false ), vt100_mouse( false ), xterm_mouse( false ), - xterm_extended_mouse( false ), application_mode_cursor_keys( false ) + xterm_extended_mouse( false ), xterm_utf8_mouse( false ), application_mode_cursor_keys( false ) { reinitialize_tabs( 0 ); } diff --git a/src/terminal/terminalframebuffer.h b/src/terminal/terminalframebuffer.h index 68c288f..97fd355 100644 --- a/src/terminal/terminalframebuffer.h +++ b/src/terminal/terminalframebuffer.h @@ -192,7 +192,8 @@ namespace Terminal { bool bracketed_paste; bool vt100_mouse; bool xterm_mouse; - bool xterm_extended_mouse; + bool xterm_extended_mouse; // aka SGR + bool xterm_utf8_mouse; bool application_mode_cursor_keys; @@ -243,7 +244,8 @@ namespace Terminal { && ( cursor_row == x.cursor_row ) && ( cursor_visible == x.cursor_visible ) && ( reverse_video == x.reverse_video ) && ( renditions == x.renditions ) && ( bracketed_paste == x.bracketed_paste ) && ( vt100_mouse == x.vt100_mouse ) && - ( xterm_mouse == x.xterm_mouse ) && ( xterm_extended_mouse == x.xterm_extended_mouse ); + ( xterm_mouse == x.xterm_mouse ) && ( xterm_extended_mouse == x.xterm_extended_mouse ) && + ( xterm_utf8_mouse == x.xterm_utf8_mouse ); } }; diff --git a/src/terminal/terminalfunctions.cc b/src/terminal/terminalfunctions.cc index 8598ad9..63558f0 100644 --- a/src/terminal/terminalfunctions.cc +++ b/src/terminal/terminalfunctions.cc @@ -272,6 +272,8 @@ static bool *get_DEC_mode( int param, Framebuffer *fb ) { return &(fb->ds.vt100_mouse); case 1002: /* xterm mouse 2 (inc. button drags) */ return &(fb->ds.xterm_mouse); + case 1005: /* xterm UTF8 mouse */ + return &(fb->ds.xterm_utf8_mouse); case 1006: /* xterm extended mouse */ return &(fb->ds.xterm_extended_mouse); case 2004: /* bracketed paste */