GNU Octave 7.1.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
TerminalModel.h
Go to the documentation of this file.
1/*
2 This file is part of Konsole, an X terminal.
3
4 Copyright (C) 2007 by Robert Knight <robertknight@gmail.com>
5 Copyright (C) 1997,1998 by Lars Doelle <lars.doelle@on-line.de>
6
7 Rewritten for QT4 by e_k <e_k at users.sourceforge.net>, Copyright (C)2008
8 Copyright (C) 2012-2019 Jacob Dawid <jacob.dawid@cybercatalyst.com>
9
10 This program is free software: you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23 02110-1301 USA.
24*/
25
26#ifndef TERMINALMODEL_H
27#define TERMINALMODEL_H
28
29// Qt
30#include <QtCore/QStringList>
31#include <QtCore>
32#include <QWidget>
33
34#include "unix/SelfListener.h"
35
36// Konsole
37#include "unix/History.h"
38#include "unix/kpty.h"
39
40class KProcess;
41
42class Emulation;
43class PseudoTerminal;
44class TerminalView;
45
46/**
47 * Represents a terminal session consisting of a pseudo-teletype and a terminal emulation.
48 * The pseudo-teletype (or PTY) handles I/O between the terminal process and Konsole.
49 * The terminal emulation ( Emulation and subclasses ) processes the output stream from the
50 * PTY and produces a character image which is then shown on views connected to the session.
51 *
52 * Each Session can be connected to one or more views by using the addView() method.
53 * The attached views can then display output from the program running in the terminal
54 * or send input to the program in the terminal in the form of keypresses and mouse
55 * activity.
56 */
57class TerminalModel : public QObject {
58Q_OBJECT
59
60public:
61 Q_PROPERTY(QString keyBindings READ keyBindings WRITE setKeyBindings)
62 Q_PROPERTY(QSize size READ size WRITE setSize)
63
64 /**
65 * Constructs a new session.
66 *
67 * To start the terminal process, call the run() method,
68 * after specifying the program and arguments
69 * using setProgram() and setArguments()
70 *
71 * If no program or arguments are specified explicitly, the Session
72 * falls back to using the program specified in the SHELL environment
73 * variable.
74 */
75 TerminalModel(KPty *kpty);
77
78
79 /**
80 * Sets the profile associated with this session.
81 *
82 * @param profileKey A key which can be used to obtain the current
83 * profile settings from the SessionManager
84 */
85 void setProfileKey(const QString& profileKey);
86 /**
87 * Returns the profile key associated with this session.
88 * This can be passed to the SessionManager to obtain the current
89 * profile settings.
90 */
91 QString profileKey() const;
92
93 /**
94 * Adds a new view for this session.
95 *
96 * The viewing widget will display the output from the terminal and
97 * input from the viewing widget (key presses, mouse activity etc.)
98 * will be sent to the terminal.
99 *
100 * Views can be removed using removeView(). The session is automatically
101 * closed when the last view is removed.
102 */
103 void addView(TerminalView* widget);
104 /**
105 * Removes a view from this session. When the last view is removed,
106 * the session will be closed automatically.
107 *
108 * @p widget will no longer display output from or send input
109 * to the terminal
110 */
111 void removeView(TerminalView* widget);
112
113 /**
114 * Returns the views connected to this session
115 */
117
118 /**
119 * Returns the terminal emulation instance being used to encode / decode
120 * characters to / from the process.
121 */
122 Emulation* emulation() const;
123
124
125
126 /**
127 * Sets the type of history store used by this session.
128 * Lines of output produced by the terminal are added
129 * to the history store. The type of history store
130 * used affects the number of lines which can be
131 * remembered before they are lost and the storage
132 * (in memory, on-disk etc.) used.
133 */
134 void setHistoryType(const HistoryType& type);
135 /**
136 * Returns the type of history store used by this session.
137 */
138 const HistoryType& historyType() const;
139 /**
140 * Clears the history store used by this session.
141 */
142 void clearHistory();
143
144 /**
145 * Enables monitoring for activity in the session.
146 * This will cause notifySessionState() to be emitted
147 * with the NOTIFYACTIVITY state flag when output is
148 * received from the terminal.
149 */
150 void setMonitorActivity(bool);
151 /** Returns true if monitoring for activity is enabled. */
152 bool isMonitorActivity() const;
153
154 /**
155 * Enables monitoring for silence in the session.
156 * This will cause notifySessionState() to be emitted
157 * with the NOTIFYSILENCE state flag when output is not
158 * received from the terminal for a certain period of
159 * time, specified with setMonitorSilenceSeconds()
160 */
161 void setMonitorSilence(bool);
162 /**
163 * Returns true if monitoring for inactivity (silence)
164 * in the session is enabled.
165 */
166 bool isMonitorSilence() const;
167 /** See setMonitorSilence() */
168 void setMonitorSilenceSeconds(int seconds);
169
170 /**
171 * Sets the key bindings used by this session. The bindings
172 * specify how input key sequences are translated into
173 * the character stream which is sent to the terminal.
174 *
175 * @param id The name of the key bindings to use. The
176 * names of available key bindings can be determined using the
177 * KeyboardTranslatorManager class.
178 */
179 void setKeyBindings(const QString& id);
180 /** Returns the name of the key bindings used by this session. */
181 QString keyBindings() const;
182
183
184 /** Specifies whether a utmp entry should be created for the pty used by this session. */
185 void setAddToUtmp(bool);
186
187 /**
188 * Specifies whether to close the session automatically when the terminal
189 * process terminates.
190 */
191 void setAutoClose(bool b) { _autoClose = b; }
192
193 /**
194 * Sends @p text to the current foreground terminal program.
195 */
196 void sendText(const QString& text) const;
197
198
199 /** Returns the terminal session's window size in lines and columns. */
200 QSize size();
201 /**
202 * Emits a request to resize the session to accommodate
203 * the specified window size.
204 *
205 * @param size The size in lines and columns to request.
206 */
207 void setSize(const QSize& size);
208
209 /** Sets the text codec used by this session's terminal emulation. */
210 void setCodec(QTextCodec* codec);
211
212 /**
213 * Sets whether the session has a dark background or not. The session
214 * uses this information to set the COLORFGBG variable in the process's
215 * environment, which allows the programs running in the terminal to determine
216 * whether the background is light or dark and use appropriate colors by default.
217 *
218 * This has no effect once the session is running.
219 */
220 void setDarkBackground(bool darkBackground);
221 /**
222 * Returns true if the session has a dark background.
223 * See setDarkBackground()
224 */
225 bool hasDarkBackground() const;
226
227 /**
228 * Attempts to get the shell program to redraw the current display area.
229 * This can be used after clearing the screen, for example, to get the
230 * shell to redraw the prompt line.
231 */
232 void refresh();
233
234public slots:
235
236 /**
237 * Starts the terminal session.
238 *
239 * This creates the terminal process and connects the teletype to it.
240 */
241 void run();
242
243 /**
244 * Closes the terminal session. This sends a hangup signal
245 * (SIGHUP) to the terminal process and causes the done(Session*)
246 * signal to be emitted.
247 */
248 void close();
249
250signals:
251
252 /** Emitted when the terminal process starts. */
253 void started();
254
255 /**
256 * Emitted when the terminal process exits.
257 */
258 void finished();
259
260 /**
261 * Emitted when output is received from the terminal process.
262 */
263 void receivedData( const QString& text );
264
265 /** Emitted when the session's title has changed. */
267
268 /** Emitted when the session's profile has changed. */
269 void profileChanged(const QString& profile);
270
271 /**
272 * Emitted when the activity state of this session changes.
273 *
274 * @param state The new state of the session. This may be one
275 * of NOTIFYNORMAL, NOTIFYSILENCE or NOTIFYACTIVITY
276 */
278
279 /** Emitted when a bell event occurs in the session. */
280 void bellRequest( const QString& message );
281
282 /**
283 * Requests that the color the text for any tabs associated with
284 * this session should be changed;
285 *
286 * TODO: Document what the parameter does
287 */
289
290 /**
291 * Requests that the background color of views on this session
292 * should be changed.
293 */
294 void changeBackgroundColorRequest(const QColor&);
295
296 /** TODO: Document me. */
297 void openUrlRequest(const QString& url);
298
299 /**
300 * Emitted when the terminal process requests a change
301 * in the size of the terminal window.
302 *
303 * @param size The requested window size in terms of lines and columns.
304 */
305 void resizeRequest(const QSize& size);
306
307 /**
308 * Emitted when a profile change command is received from the terminal.
309 *
310 * @param text The text of the command. This is a string of the form
311 * "PropertyName=Value;PropertyName=Value ..."
312 */
313 void profileChangeCommandReceived(const QString& text);
314
315private slots:
316 void done(int);
317
318 void onReceiveBlock(const char* buffer, int len );
319 void monitorTimerDone();
320
321 void onViewSizeChange(int height, int width);
322 void onEmulationSizeChange(int lines , int columns);
323
324 void activityStateSet(int);
325
326 //automatically detach views from sessions when view is destroyed
327 void viewDestroyed(QObject* view);
328
329 void sendData(const char* buf, int len);
330
331private:
332
333 void updateTerminalSize();
334 WId windowId() const;
335
337
338 PseudoTerminal* _shellProcess;
340
342
350
352
355
358
361
362
363 QColor _modifiedBackground; // as set by: echo -en '\033]11;Color\007
364
365 QString _profileKey;
366
368};
369
370
371#endif // TERMINALMODEL_H
Base class for terminal emulation back-ends.
Definition: Emulation.h:119
Provides primitives for opening & closing a pseudo TTY pair, assigning the controlling TTY,...
Definition: kpty.h:35
Represents a terminal session consisting of a pseudo-teletype and a terminal emulation.
Definition: TerminalModel.h:57
void onReceiveBlock(const char *buffer, int len)
void setProfileKey(const QString &profileKey)
Sets the profile associated with this session.
void bellRequest(const QString &message)
Emitted when a bell event occurs in the session.
QColor _modifiedBackground
Emulation * _emulation
QSize size()
Returns the terminal session's window size in lines and columns.
TerminalModel(KPty *kpty)
Constructs a new session.
QString keyBindings
Definition: TerminalModel.h:61
void setCodec(QTextCodec *codec)
Sets the text codec used by this session's terminal emulation.
void profileChangeCommandReceived(const QString &text)
Emitted when a profile change command is received from the terminal.
Emulation * emulation() const
Returns the terminal emulation instance being used to encode / decode characters to / from the proces...
void setAutoClose(bool b)
Specifies whether to close the session automatically when the terminal process terminates.
void updateTerminalSize()
QString _profileKey
QList< TerminalView * > _views
void viewDestroyed(QObject *view)
void setMonitorSilence(bool)
Enables monitoring for silence in the session.
void sendText(const QString &text) const
Sends text to the current foreground terminal program.
WId windowId() const
void run()
Starts the terminal session.
void resizeRequest(const QSize &size)
Emitted when the terminal process requests a change in the size of the terminal window.
PseudoTerminal * _shellProcess
void titleChanged()
Emitted when the session's title has changed.
QList< TerminalView * > views() const
Returns the views connected to this session.
bool _hasDarkBackground
void activityStateSet(int)
void sendData(const char *buf, int len)
void addView(TerminalView *widget)
Adds a new view for this session.
QTimer * _monitorTimer
void stateChanged(int state)
Emitted when the activity state of this session changes.
void onViewSizeChange(int height, int width)
void changeBackgroundColorRequest(const QColor &)
Requests that the background color of views on this session should be changed.
void receivedData(const QString &text)
Emitted when output is received from the terminal process.
void refresh()
Attempts to get the shell program to redraw the current display area.
const HistoryType & historyType() const
Returns the type of history store used by this session.
void onEmulationSizeChange(int lines, int columns)
bool isMonitorActivity() const
Returns true if monitoring for activity is enabled.
bool isMonitorSilence() const
Returns true if monitoring for inactivity (silence) in the session is enabled.
void setMonitorActivity(bool)
Enables monitoring for activity in the session.
void setKeyBindings(const QString &id)
Sets the key bindings used by this session.
void started()
Emitted when the terminal process starts.
void changeTabTextColorRequest(int)
Requests that the color the text for any tabs associated with this session should be changed;.
QString profileKey() const
Returns the profile key associated with this session.
void setAddToUtmp(bool)
Specifies whether a utmp entry should be created for the pty used by this session.
void clearHistory()
Clears the history store used by this session.
void setDarkBackground(bool darkBackground)
Sets whether the session has a dark background or not.
void openUrlRequest(const QString &url)
TODO: Document me.
void setSize(const QSize &size)
Emits a request to resize the session to accommodate the specified window size.
void removeView(TerminalView *widget)
Removes a view from this session.
void monitorTimerDone()
bool hasDarkBackground() const
Returns true if the session has a dark background.
void profileChanged(const QString &profile)
Emitted when the session's profile has changed.
void close()
Closes the terminal session.
void finished()
Emitted when the terminal process exits.
void setMonitorSilenceSeconds(int seconds)
See setMonitorSilence()
bool _notifiedActivity
SelfListener * _selfListener
void setHistoryType(const HistoryType &type)
Sets the type of history store used by this session.
A widget which displays output from a terminal emulation and sends input keypresses and mouse activit...
Definition: TerminalView.h:64
void message(const char *name, const char *fmt,...)
Definition: error.cc:948
static uint32_t state[624]
Definition: randmtzig.cc:192
F77_RET_T len
Definition: xerbla.cc:61