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:
@@ -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
@@ -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. */
|
||||
|
||||
@@ -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 ®exp, int startLine, int startColumn, bool forwards)
|
||||
{
|
||||
HistorySearch *history = new HistorySearch( QPointer<Emulation>(m_session->emulation()), QRegExp(regexp), forwards, startColumn, startLine, this);
|
||||
|
||||
@@ -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 ®exp, int startLine = 0, int startColumn = 0, bool forwards = true );
|
||||
|
||||
|
||||
Reference in New Issue
Block a user