Mercurial > octave
changeset 29336:036079c9ee12 stable
make bracketed paste mode work in GUI terminal
Import relevant parts of the following qtermwidget changes:
commit c472676560e4fd87038cc9dba86d3021784d6e4b
Author: Igor <f2404@yandex.ru>
Date: Mon Feb 1 19:26:39 2016 +0300
Bracketed paste mode implementation
commit 1d4ddc8afd4185c8683f09ecbb933d76f74d4446
Author: Zang MingJie <zealot0630@gmail.com>
Date: Fri Dec 29 19:40:06 2017 +0800
Expose bracket text function
commit 7514ebbe1a54be25a8b5d63eb9bc9f71fc637196
Author: Tsu Jan <tsujan2000@gmail.com>
Date: Sun Dec 20 20:57:26 2020 +0330
Added a QTermWidget method to disable bracketed paste mode
Will be followed and used by a QTerminal patch.
commit f792b5f5ca5f34aeeb54d77c418cd2a7aca32287
Author: Paulo Lieuthier <paulolieuthier@gmail.com>
Date: Fri Nov 6 08:58:23 2015 -0300
Rebase Vt102Emulation to Konsole
* Emulation.h, Emulation.cpp (Emulation::_bracketedPasteMode):
New data member.
(Emulation::Emulation): Connect programBracketedPasteModeChanged
signal to bracketedPasteModeChanged slot.
(Emulation::programBracketedPasteMode(void)): New function.
(Emulation::programBracketedPasteModeChanged(bool)): New signal.
(Emulation::bracketedPasteModeChanged(bool)): New private slot.
* TerminalModel.cpp (TerminalModel::addView): Connect
_emulation->programBracketedPasteModeChanged signal to
widget->setBracketedPasteMode slot. Set widget bracketedPasteMode to
_emulation programBracketedPasteMode.
* TerminalView.h, TerminalView.cpp
(TerminalView::__disabledBracketedPasteMode): New data member.
(TerminalView::TerminalView): Set initial bracketed paste mode.
(TerminalView::setBracketedPasteMode, TerminalView::bracketedPasteMode):
New slots.
(TerminalView::bracketText): New function.
(TerminalView::emitSelection): Call bracketText on pasted text.
* Vt102Emulation.h, Vt102Emulation.cpp (Vt102Emulation::tau):
Handle bracketed paste escape sequences.
(Vt102Emulation::resetModes): Also reset and save MODE_BracketedPaste.
(Vt102Emulation::setMode, Vt102Emulation::resetMode):
Also handle MODE_BracketedPaste.
(MODE_BracketedPaste): New macro.
(MODE_total): Update value.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 27 Jan 2021 08:36:45 -0500 |
parents | 3180f830d396 |
children | cabb840fc3f6 |
files | libgui/qterminal/libqterminal/unix/Emulation.cpp libgui/qterminal/libqterminal/unix/Emulation.h libgui/qterminal/libqterminal/unix/TerminalModel.cpp libgui/qterminal/libqterminal/unix/TerminalView.cpp libgui/qterminal/libqterminal/unix/TerminalView.h libgui/qterminal/libqterminal/unix/Vt102Emulation.cpp libgui/qterminal/libqterminal/unix/Vt102Emulation.h |
diffstat | 7 files changed, 83 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/qterminal/libqterminal/unix/Emulation.cpp Wed Jan 27 06:42:38 2021 -0500 +++ b/libgui/qterminal/libqterminal/unix/Emulation.cpp Wed Jan 27 08:36:45 2021 -0500 @@ -54,7 +54,8 @@ _codec(nullptr), _decoder(nullptr), _keyTranslator(nullptr), - _usesMouse(false) + _usesMouse(false), + _bracketedPasteMode(false) { // create screens with a default size @@ -68,6 +69,8 @@ // listen for mouse status changes connect( this , SIGNAL(programUsesMouseChanged(bool)) , SLOT(usesMouseChanged(bool)) ); + connect(this , SIGNAL(programBracketedPasteModeChanged(bool)) , + SLOT(bracketedPasteModeChanged(bool))); } bool Emulation::programUsesMouse() const @@ -80,6 +83,16 @@ _usesMouse = usesMouse; } +bool Emulation::programBracketedPasteMode() const +{ + return _bracketedPasteMode; +} + +void Emulation::bracketedPasteModeChanged(bool bracketedPasteMode) +{ + _bracketedPasteMode = bracketedPasteMode; +} + ScreenWindow* Emulation::createWindow() { ScreenWindow* window = new ScreenWindow();
--- a/libgui/qterminal/libqterminal/unix/Emulation.h Wed Jan 27 06:42:38 2021 -0500 +++ b/libgui/qterminal/libqterminal/unix/Emulation.h Wed Jan 27 08:36:45 2021 -0500 @@ -213,6 +213,8 @@ */ bool programUsesMouse() const; + bool programBracketedPasteMode() const; + public slots: /** Change the size of the emulation's image */ @@ -317,6 +319,8 @@ */ void programUsesMouseChanged(bool usesMouse); + void programBracketedPasteModeChanged(bool bracketedPasteMode); + /** * Emitted when the contents of the screen image change. * The emulation buffers the updates from successive image changes, @@ -445,9 +449,12 @@ void usesMouseChanged(bool usesMouse); + void bracketedPasteModeChanged(bool bracketedPasteMode); + private: bool _usesMouse; + bool _bracketedPasteMode; QTimer _bulkTimer1; QTimer _bulkTimer2;
--- a/libgui/qterminal/libqterminal/unix/TerminalModel.cpp Wed Jan 27 06:42:38 2021 -0500 +++ b/libgui/qterminal/libqterminal/unix/TerminalModel.cpp Wed Jan 27 08:36:45 2021 -0500 @@ -131,6 +131,11 @@ widget->setUsesMouse( _emulation->programUsesMouse() ); + connect( _emulation , SIGNAL(programBracketedPasteModeChanged(bool)) , + widget , SLOT(setBracketedPasteMode(bool)) ); + + widget->setBracketedPasteMode(_emulation->programBracketedPasteMode()); + widget->setScreenWindow(_emulation->createWindow()); }
--- a/libgui/qterminal/libqterminal/unix/TerminalView.cpp Wed Jan 27 06:42:38 2021 -0500 +++ b/libgui/qterminal/libqterminal/unix/TerminalView.cpp Wed Jan 27 08:36:45 2021 -0500 @@ -254,6 +254,7 @@ ,_resizing(false) ,_terminalSizeHint(false) ,_terminalSizeStartup(true) + ,_disabledBracketedPasteMode(false) ,_actSel(0) ,_wordSelectionMode(false) ,_lineSelectionMode(false) @@ -312,6 +313,7 @@ // QCursor::setAutoHideCursor( this, true ); setUsesMouse(true); + setBracketedPasteMode(false); setColorTable(base_color_table); setMouseTracking(true); @@ -2187,6 +2189,16 @@ return _mouseMarks; } +void TerminalView::setBracketedPasteMode(bool on) +{ + _bracketedPasteMode = on; +} +bool TerminalView::bracketedPasteMode() const +{ + return _bracketedPasteMode; +} + + /* ------------------------------------------------------------------------- */ /* */ /* Clipboard */ @@ -2208,6 +2220,7 @@ if ( ! text.isEmpty() ) { text.replace("\n", "\r"); + bracketText(text); QKeyEvent e(QEvent::KeyPress, 0, Qt::NoModifier, text); emit keyPressedSignal(&e); // expose as a big fat keypress event @@ -2215,6 +2228,15 @@ } } +void TerminalView::bracketText(QString& text) +{ + if (bracketedPasteMode() && !_disabledBracketedPasteMode) + { + text.prepend("\033[200~"); + text.append("\033[201~"); + } +} + void TerminalView::setSelection(const QString& t) { QApplication::clipboard()->setText(t, QClipboard::Selection);
--- a/libgui/qterminal/libqterminal/unix/TerminalView.h Wed Jan 27 06:42:38 2021 -0500 +++ b/libgui/qterminal/libqterminal/unix/TerminalView.h Wed Jan 27 08:36:45 2021 -0500 @@ -160,6 +160,9 @@ void emitSelection(bool useXselection,bool appendReturn); + /** change and wrap text corresponding to paste mode **/ + void bracketText(QString& text); + /** * This enum describes the available shapes for the keyboard cursor. * See setKeyboardCursorShape() @@ -379,6 +382,9 @@ */ void visibility_changed (bool visible); + void disableBracketedPasteMode(bool disable) { _disabledBracketedPasteMode = disable; } + bool bracketedPasteModeIsDisabled() const { return _disabledBracketedPasteMode; } + public slots: /** @@ -455,6 +461,9 @@ /** See setUsesMouse() */ bool usesMouse() const; + void setBracketedPasteMode(bool bracketedPasteMode); + bool bracketedPasteMode() const; + signals: void interrupt_signal (void); @@ -663,6 +672,8 @@ bool _terminalSizeHint; bool _terminalSizeStartup; bool _mouseMarks; + bool _bracketedPasteMode; + bool _disabledBracketedPasteMode; QPoint _iPntSel; // initial selection point QPoint _pntSel; // current selection point
--- a/libgui/qterminal/libqterminal/unix/Vt102Emulation.cpp Wed Jan 27 06:42:38 2021 -0500 +++ b/libgui/qterminal/libqterminal/unix/Vt102Emulation.cpp Wed Jan 27 08:36:45 2021 -0500 @@ -752,6 +752,11 @@ case TY_CSI_PR('h', 1049) : saveCursor(); _screen[1]->clearEntireScreen(); setMode(MODE_AppScreen); break; //XTERM case TY_CSI_PR('l', 1049) : resetMode(MODE_AppScreen); restoreCursor(); break; //XTERM + case TY_CSI_PR('h', 2004) : setMode (MODE_BracketedPaste); break; //XTERM + case TY_CSI_PR('l', 2004) : resetMode (MODE_BracketedPaste); break; //XTERM + case TY_CSI_PR('s', 2004) : saveMode (MODE_BracketedPaste); break; //XTERM + case TY_CSI_PR('r', 2004) : restoreMode (MODE_BracketedPaste); break; //XTERM + //FIXME: weird DEC reset sequence case TY_CSI_PE('p' ) : /* IGNORED: reset ( ) */ break; @@ -1137,6 +1142,7 @@ resetMode(MODE_Mouse1001); saveMode(MODE_Mouse1001); resetMode(MODE_Mouse1002); saveMode(MODE_Mouse1002); resetMode(MODE_Mouse1003); saveMode(MODE_Mouse1003); + resetMode(MODE_BracketedPaste); saveMode(MODE_BracketedPaste); resetMode(MODE_AppScreen); saveMode(MODE_AppScreen); // here come obsolete modes @@ -1157,6 +1163,10 @@ emit programUsesMouseChanged(false); break; + case MODE_BracketedPaste: + emit programBracketedPasteModeChanged(true); + break; + case MODE_AppScreen : _screen[1]->clearSelection(); setScreen(1); break; @@ -1180,6 +1190,10 @@ emit programUsesMouseChanged(true); break; + case MODE_BracketedPaste: + emit programBracketedPasteModeChanged(false); + break; + case MODE_AppScreen : _screen[0]->clearSelection(); setScreen(0); break;
--- a/libgui/qterminal/libqterminal/unix/Vt102Emulation.h Wed Jan 27 06:42:38 2021 -0500 +++ b/libgui/qterminal/libqterminal/unix/Vt102Emulation.h Wed Jan 27 08:36:45 2021 -0500 @@ -37,15 +37,16 @@ #include "unix/Emulation.h" #include "unix/Screen.h" -#define MODE_AppScreen (MODES_SCREEN+0) -#define MODE_AppCuKeys (MODES_SCREEN+1) -#define MODE_AppKeyPad (MODES_SCREEN+2) -#define MODE_Mouse1000 (MODES_SCREEN+3) -#define MODE_Mouse1001 (MODES_SCREEN+4) -#define MODE_Mouse1002 (MODES_SCREEN+5) -#define MODE_Mouse1003 (MODES_SCREEN+6) -#define MODE_Ansi (MODES_SCREEN+7) -#define MODE_total (MODES_SCREEN+8) +#define MODE_AppScreen (MODES_SCREEN+0) +#define MODE_AppCuKeys (MODES_SCREEN+1) +#define MODE_AppKeyPad (MODES_SCREEN+2) +#define MODE_Mouse1000 (MODES_SCREEN+3) +#define MODE_Mouse1001 (MODES_SCREEN+4) +#define MODE_Mouse1002 (MODES_SCREEN+5) +#define MODE_Mouse1003 (MODES_SCREEN+6) +#define MODE_Ansi (MODES_SCREEN+7) +#define MODE_BracketedPaste (MODES_SCREEN+8) +#define MODE_total (MODES_SCREEN+9) struct DECpar {