Merge pull request #60 from f2404/48_bracketed_input

Bracketed paste mode implementation
This commit is contained in:
Petr Vanek
2016-05-25 09:10:46 +02:00
6 changed files with 57 additions and 4 deletions
+16 -3
View File
@@ -55,7 +55,8 @@ Emulation::Emulation() :
_codec(0),
_decoder(0),
_keyTranslator(0),
_usesMouse(false)
_usesMouse(false),
_bracketedPasteMode(false)
{
// create screens with a default size
_screen[0] = new Screen(40,80);
@@ -66,8 +67,10 @@ Emulation::Emulation() :
QObject::connect(&_bulkTimer2, SIGNAL(timeout()), this, SLOT(showBulk()) );
// listen for mouse status changes
connect( this , SIGNAL(programUsesMouseChanged(bool)) ,
SLOT(usesMouseChanged(bool)) );
connect(this , SIGNAL(programUsesMouseChanged(bool)) ,
SLOT(usesMouseChanged(bool)));
connect(this , SIGNAL(programBracketedPasteModeChanged(bool)) ,
SLOT(bracketedPasteModeChanged(bool)));
}
bool Emulation::programUsesMouse() const
@@ -80,6 +83,16 @@ void Emulation::usesMouseChanged(bool usesMouse)
_usesMouse = usesMouse;
}
bool Emulation::programBracketedPasteMode() const
{
return _bracketedPasteMode;
}
void Emulation::bracketedPasteModeChanged(bool bracketedPasteMode)
{
_bracketedPasteMode = bracketedPasteMode;
}
ScreenWindow* Emulation::createWindow()
{
ScreenWindow* window = new ScreenWindow();
+7
View File
@@ -218,6 +218,8 @@ public:
*/
bool programUsesMouse() const;
bool programBracketedPasteMode() const;
public slots:
/** Change the size of the emulation's image */
@@ -325,6 +327,8 @@ signals:
*/
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,
@@ -471,8 +475,11 @@ private slots:
void usesMouseChanged(bool usesMouse);
void bracketedPasteModeChanged(bool bracketedPasteMode);
private:
bool _usesMouse;
bool _bracketedPasteMode;
QTimer _bulkTimer1;
QTimer _bulkTimer2;
+5
View File
@@ -186,6 +186,11 @@ void Session::addView(TerminalDisplay * widget)
widget->setUsesMouse( _emulation->programUsesMouse() );
connect( _emulation , SIGNAL(programBracketedPasteModeChanged(bool)) ,
widget , SLOT(setBracketedPasteMode(bool)) );
widget->setBracketedPasteMode(_emulation->programBracketedPasteMode());
widget->setScreenWindow(_emulation->createWindow());
}
+15
View File
@@ -371,6 +371,7 @@ TerminalDisplay::TerminalDisplay(QWidget *parent)
// KCursor::setAutoHideCursor( this, true );
setUsesMouse(true);
setBracketedPasteMode(false);
setColorTable(base_color_table);
setMouseTracking(true);
@@ -2487,6 +2488,15 @@ bool TerminalDisplay::usesMouse() const
return _mouseMarks;
}
void TerminalDisplay::setBracketedPasteMode(bool on)
{
_bracketedPasteMode = on;
}
bool TerminalDisplay::bracketedPasteMode() const
{
return _bracketedPasteMode;
}
/* ------------------------------------------------------------------------- */
/* */
/* Clipboard */
@@ -2508,6 +2518,11 @@ void TerminalDisplay::emitSelection(bool useXselection,bool appendReturn)
if ( ! text.isEmpty() )
{
text.replace('\n', '\r');
if ( bracketedPasteMode() )
{
text.prepend("\e[200~");
text.append("\e[201~");
}
QKeyEvent e(QEvent::KeyPress, 0, Qt::NoModifier, text);
emit keyPressedSignal(&e); // expose as a big fat keypress event
+4
View File
@@ -475,6 +475,9 @@ public slots:
/** See setUsesMouse() */
bool usesMouse() const;
void setBracketedPasteMode(bool bracketedPasteMode);
bool bracketedPasteMode() const;
/**
* Shows a notification that a bell event has occurred in the terminal.
* TODO: More documentation here
@@ -727,6 +730,7 @@ private:
bool _terminalSizeStartup;
bool _bidiEnabled;
bool _mouseMarks;
bool _bracketedPasteMode;
QPoint _iPntSel; // initial selection point
QPoint _pntSel; // current selection point
+10 -1
View File
@@ -1170,6 +1170,7 @@ void Vt102Emulation::resetModes()
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);
resetMode(MODE_AppCuKeys); saveMode(MODE_AppCuKeys);
@@ -1193,7 +1194,11 @@ void Vt102Emulation::setMode(int m)
case MODE_Mouse1001:
case MODE_Mouse1002:
case MODE_Mouse1003:
emit programUsesMouseChanged(false);
emit programUsesMouseChanged(false);
break;
case MODE_BracketedPaste:
emit programBracketedPasteModeChanged(true);
break;
case MODE_AppScreen : _screen[1]->clearSelection();
@@ -1223,6 +1228,10 @@ void Vt102Emulation::resetMode(int m)
emit programUsesMouseChanged(true);
break;
case MODE_BracketedPaste:
emit programBracketedPasteModeChanged(false);
break;
case MODE_AppScreen :
_screen[0]->clearSelection();
setScreen(0);