Expose complete history to QML

The use case for this functionality is to be able to e.g. display the terminal application's output after it was terminated.
This requires exposing a `clearScreen` method to QML as the history only contains the lines not currently displayed in the widget. If we want to access the whole output we have to be able to flush the screen beforehand.

The single argument overload of `Emulation::writeToStream` simplifies reading the complete history at once without having to further expose it's length.
This commit is contained in:
Adrian Kummerlaender
2015-08-29 22:04:32 +02:00
parent 0d755b010f
commit 06321bd308
4 changed files with 39 additions and 1 deletions
+5
View File
@@ -296,6 +296,11 @@ void Emulation::writeToStream( TerminalCharacterDecoder* _decoder ,
_currentScreen->writeLinesToStream(_decoder,startLine,endLine);
}
void Emulation::writeToStream( TerminalCharacterDecoder* _decoder)
{
_currentScreen->writeLinesToStream(_decoder, 0, _currentScreen->getHistLines());
}
int Emulation::lineCount() const
{
// sum number of lines currently on _screen plus number of lines in history
+11 -1
View File
@@ -171,7 +171,17 @@ public:
* @param endLine Index of last line to copy
*/
virtual void writeToStream(TerminalCharacterDecoder* decoder,int startLine,int endLine);
/**
* Copies the complete output history into @p stream, using @p decoder to convert
* the terminal characters into text.
*
* @param decoder A decoder which converts lines of terminal characters with
* appearance attributes into output text. PlainTextDecoder is the most commonly
* used decoder.
*/
virtual void writeToStream(TerminalCharacterDecoder* decoder);
/** Returns the codec used to decode incoming characters. See setCodec() */
const QTextCodec* codec() const { return _codec; }
/** Sets the codec used to decode incoming characters. */
+18
View File
@@ -209,6 +209,19 @@ int KSession::historySize() const
}
}
QString KSession::getHistory() const
{
QString history;
QTextStream historyStream(&history);
PlainTextDecoder historyDecoder;
historyDecoder.begin(&historyStream);
m_session->emulation()->writeToStream(&historyDecoder);
historyDecoder.end();
return history;
}
void KSession::sendText(QString text)
{
m_session->sendText(text);
@@ -227,6 +240,11 @@ void KSession::sendKey(int rep, int key, int mod) const
// }
}
void KSession::clearScreen()
{
m_session->emulation()->clearEntireScreen();
}
void KSession::search(const QString &regexp, int startLine, int startColumn, bool forwards)
{
HistorySearch *history = new HistorySearch( QPointer<Emulation>(m_session->emulation()), QRegExp(regexp), forwards, startColumn, startLine, this);
+5
View File
@@ -39,6 +39,7 @@ class KSession : public QObject
Q_PROPERTY(QString title READ getTitle WRITE setTitle NOTIFY titleChanged)
Q_PROPERTY(QString shellProgram WRITE setShellProgram)
Q_PROPERTY(QStringList shellProgramArgs WRITE setArgs)
Q_PROPERTY(QString history READ getHistory)
public:
KSession(QObject *parent = 0);
@@ -68,6 +69,8 @@ public:
void setHistorySize(int lines); //infinite if lines < 0
int historySize() const;
QString getHistory() const;
// Sets whether flow control is enabled
void setFlowControlEnabled(bool enabled);
@@ -132,6 +135,8 @@ public slots:
// Send some text to terminal
void sendKey(int rep, int key, int mod) const;
void clearScreen();
// Search history
void search(const QString &regexp, int startLine = 0, int startColumn = 0, bool forwards = true );