diff --git a/src/Emulation.h b/src/Emulation.h --- a/src/Emulation.h +++ b/src/Emulation.h @@ -324,6 +324,8 @@ */ void programUsesMouseChanged(bool usesMouse); + void enableAlternateScrolling(bool enable); + void programBracketedPasteModeChanged(bool bracketedPasteMode); /** diff --git a/src/Profile.h b/src/Profile.h --- a/src/Profile.h +++ b/src/Profile.h @@ -280,6 +280,8 @@ * affects vim only if it indicates that it's not interested in * mouse events. * Default value is true. + * See also, MODE_Mouse1007 in the Emulation header, which toggles + * Alternate Scrolling with escape sequences. */ AlternateScrolling, /** (int) Keyboard modifiers to show URL hints */ diff --git a/src/Session.cpp b/src/Session.cpp --- a/src/Session.cpp +++ b/src/Session.cpp @@ -310,6 +310,8 @@ widget->setUsesMouse(_emulation->programUsesMouse()); + connect(_emulation, &Konsole::Emulation::enableAlternateScrolling, widget, &Konsole::TerminalDisplay::setAlternateScrolling); + connect(_emulation, &Konsole::Emulation::programBracketedPasteModeChanged, widget, &Konsole::TerminalDisplay::setBracketedPasteMode); widget->setBracketedPasteMode(_emulation->programBracketedPasteMode()); diff --git a/src/Vt102Emulation.h b/src/Vt102Emulation.h --- a/src/Vt102Emulation.h +++ b/src/Vt102Emulation.h @@ -42,12 +42,13 @@ #define MODE_Mouse1003 (MODES_SCREEN+6) // Use all motion mouse tracking #define MODE_Mouse1005 (MODES_SCREEN+7) // Xterm-style extended coordinates #define MODE_Mouse1006 (MODES_SCREEN+8) // 2nd Xterm-style extended coordinates -#define MODE_Mouse1015 (MODES_SCREEN+9) // Urxvt-style extended coordinates -#define MODE_Ansi (MODES_SCREEN+10) // Use US Ascii for character sets G0-G3 (DECANM) -#define MODE_132Columns (MODES_SCREEN+11) // 80 <-> 132 column mode switch (DECCOLM) -#define MODE_Allow132Columns (MODES_SCREEN+12) // Allow DECCOLM mode -#define MODE_BracketedPaste (MODES_SCREEN+13) // Xterm-style bracketed paste mode -#define MODE_total (MODES_SCREEN+14) +#define MODE_Mouse1007 (MODES_SCREEN+9) // XTerm Alternate Scroll mode; also check AlternateScrolling profile property +#define MODE_Mouse1015 (MODES_SCREEN+10) // Urxvt-style extended coordinates +#define MODE_Ansi (MODES_SCREEN+11) // Use US Ascii for character sets G0-G3 (DECANM) +#define MODE_132Columns (MODES_SCREEN+12) // 80 <-> 132 column mode switch (DECCOLM) +#define MODE_Allow132Columns (MODES_SCREEN+13) // Allow DECCOLM mode +#define MODE_BracketedPaste (MODES_SCREEN+14) // Xterm-style bracketed paste mode +#define MODE_total (MODES_SCREEN+15) namespace Konsole { extern unsigned short vt100_graphics[32]; diff --git a/src/Vt102Emulation.cpp b/src/Vt102Emulation.cpp --- a/src/Vt102Emulation.cpp +++ b/src/Vt102Emulation.cpp @@ -839,6 +839,11 @@ case token_csi_pr('s', 1006) : saveMode (MODE_Mouse1006); break; //XTERM case token_csi_pr('r', 1006) : restoreMode (MODE_Mouse1006); break; //XTERM + case token_csi_pr('h', 1007) : setMode (MODE_Mouse1007); break; //XTERM + case token_csi_pr('l', 1007) : resetMode (MODE_Mouse1007); break; //XTERM + case token_csi_pr('s', 1007) : saveMode (MODE_Mouse1007); break; //XTERM + case token_csi_pr('r', 1007) : restoreMode (MODE_Mouse1007); break; //XTERM + case token_csi_pr('h', 1015) : setMode (MODE_Mouse1015); break; //URXVT case token_csi_pr('l', 1015) : resetMode (MODE_Mouse1015); break; //URXVT case token_csi_pr('s', 1015) : saveMode (MODE_Mouse1015); break; //URXVT @@ -1327,6 +1332,7 @@ resetMode(MODE_Mouse1003); saveMode(MODE_Mouse1003); resetMode(MODE_Mouse1005); saveMode(MODE_Mouse1005); resetMode(MODE_Mouse1006); saveMode(MODE_Mouse1006); + resetMode(MODE_Mouse1007); saveMode(MODE_Mouse1007); resetMode(MODE_Mouse1015); saveMode(MODE_Mouse1015); resetMode(MODE_BracketedPaste); saveMode(MODE_BracketedPaste); @@ -1354,6 +1360,9 @@ case MODE_Mouse1003: emit programUsesMouseChanged(false); break; + case MODE_Mouse1007: + emit enableAlternateScrolling(true); + break; case MODE_BracketedPaste: emit programBracketedPasteModeChanged(true); @@ -1388,6 +1397,9 @@ case MODE_Mouse1003: emit programUsesMouseChanged(true); break; + case MODE_Mouse1007: + emit enableAlternateScrolling(false); + break; case MODE_BracketedPaste: emit programBracketedPasteModeChanged(false);