Merge pull request #60 from f2404/48_bracketed_input
Bracketed paste mode implementation
This commit is contained in:
+16
-3
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user