~verzegnassi-stefano/+junk/ubuntu-terminal-app-uitk13

« back to all changes in this revision

Viewing changes to src/plugin/qmltermwidget/qtermwidget/lib/Pty.h

  • Committer: Filippo Scognamiglio
  • Date: 2014-10-25 04:42:31 UTC
  • Revision ID: flscogna@gmail.com-20141025044231-javjhusbqa171127
Initial reboot commit.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * This file is a part of QTerminal - http://gitorious.org/qterminal
 
3
 *
 
4
 * This file was un-linked from KDE and modified
 
5
 * by Maxim Bourmistrov <maxim@unixconn.com>
 
6
 *
 
7
 */
 
8
 
 
9
/*
 
10
    This file is part of Konsole, KDE's terminal emulator. 
 
11
    
 
12
    Copyright 2007-2008 by Robert Knight <robertknight@gmail.com>
 
13
    Copyright 1997,1998 by Lars Doelle <lars.doelle@on-line.de>
 
14
 
 
15
    This program is free software; you can redistribute it and/or modify
 
16
    it under the terms of the GNU General Public License as published by
 
17
    the Free Software Foundation; either version 2 of the License, or
 
18
    (at your option) any later version.
 
19
 
 
20
    This program is distributed in the hope that it will be useful,
 
21
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 
22
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
23
    GNU General Public License for more details.
 
24
 
 
25
    You should have received a copy of the GNU General Public License
 
26
    along with this program; if not, write to the Free Software
 
27
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 
28
    02110-1301  USA.
 
29
*/
 
30
 
 
31
#ifndef PTY_H
 
32
#define PTY_H
 
33
 
 
34
// Qt
 
35
#include <QStringList>
 
36
#include <QVector>
 
37
#include <QList>
 
38
#include <QSize>
 
39
 
 
40
// KDE
 
41
#include "kptyprocess.h"
 
42
 
 
43
namespace Konsole {
 
44
 
 
45
/**
 
46
 * The Pty class is used to start the terminal process, 
 
47
 * send data to it, receive data from it and manipulate 
 
48
 * various properties of the pseudo-teletype interface
 
49
 * used to communicate with the process.
 
50
 *
 
51
 * To use this class, construct an instance and connect
 
52
 * to the sendData slot and receivedData signal to
 
53
 * send data to or receive data from the process.
 
54
 *
 
55
 * To start the terminal process, call the start() method
 
56
 * with the program name and appropriate arguments. 
 
57
 */
 
58
class Pty: public KPtyProcess
 
59
{
 
60
Q_OBJECT
 
61
 
 
62
  public:
 
63
    
 
64
    /** 
 
65
     * Constructs a new Pty.
 
66
     * 
 
67
     * Connect to the sendData() slot and receivedData() signal to prepare
 
68
     * for sending and receiving data from the terminal process.
 
69
     *
 
70
     * To start the terminal process, call the run() method with the 
 
71
     * name of the program to start and appropriate arguments.
 
72
     */
 
73
    explicit Pty(QObject* parent = 0);
 
74
 
 
75
    /** 
 
76
     * Construct a process using an open pty master.
 
77
     * See KPtyProcess::KPtyProcess()
 
78
     */
 
79
    explicit Pty(int ptyMasterFd, QObject* parent = 0);
 
80
 
 
81
    ~Pty();
 
82
 
 
83
    /**
 
84
     * Starts the terminal process.  
 
85
     *
 
86
     * Returns 0 if the process was started successfully or non-zero
 
87
     * otherwise.
 
88
     *
 
89
     * @param program Path to the program to start
 
90
     * @param arguments Arguments to pass to the program being started
 
91
     * @param environment A list of key=value pairs which will be added
 
92
     * to the environment for the new process.  At the very least this
 
93
     * should include an assignment for the TERM environment variable.
 
94
     * @param winid Specifies the value of the WINDOWID environment variable
 
95
     * in the process's environment.
 
96
     * @param addToUtmp Specifies whether a utmp entry should be created for
 
97
     * the pty used.  See K3Process::setUsePty() 
 
98
     * @param dbusService Specifies the value of the KONSOLE_DBUS_SERVICE 
 
99
     * environment variable in the process's environment.
 
100
     * @param dbusSession Specifies the value of the KONSOLE_DBUS_SESSION
 
101
     * environment variable in the process's environment. 
 
102
     */
 
103
    int start( const QString& program, 
 
104
               const QStringList& arguments, 
 
105
               const QStringList& environment, 
 
106
               ulong winid, 
 
107
               bool addToUtmp
 
108
             );
 
109
 
 
110
    /** TODO: Document me */
 
111
    void setWriteable(bool writeable);
 
112
 
 
113
    /** 
 
114
     * Enables or disables Xon/Xoff flow control.  The flow control setting
 
115
     * may be changed later by a terminal application, so flowControlEnabled()
 
116
     * may not equal the value of @p on in the previous call to setFlowControlEnabled()
 
117
     */
 
118
    void setFlowControlEnabled(bool on);
 
119
 
 
120
    /** Queries the terminal state and returns true if Xon/Xoff flow control is enabled. */
 
121
    bool flowControlEnabled() const;
 
122
 
 
123
    /** 
 
124
     * Sets the size of the window (in lines and columns of characters) 
 
125
     * used by this teletype.
 
126
     */
 
127
    void setWindowSize(int lines, int cols);
 
128
    
 
129
    /** Returns the size of the window used by this teletype.  See setWindowSize() */
 
130
    QSize windowSize() const;
 
131
 
 
132
    /** TODO Document me */
 
133
    void setErase(char erase);
 
134
 
 
135
    /** */
 
136
    char erase() const;
 
137
 
 
138
    /**
 
139
     * Returns the process id of the teletype's current foreground
 
140
     * process.  This is the process which is currently reading
 
141
     * input sent to the terminal via. sendData()
 
142
     *
 
143
     * If there is a problem reading the foreground process group,
 
144
     * 0 will be returned.
 
145
     */
 
146
    int foregroundProcessGroup() const;
 
147
   
 
148
  public slots:
 
149
 
 
150
    /**
 
151
     * Put the pty into UTF-8 mode on systems which support it.
 
152
     */
 
153
    void setUtf8Mode(bool on);
 
154
 
 
155
    /**
 
156
     * Suspend or resume processing of data from the standard 
 
157
     * output of the terminal process.
 
158
     *
 
159
     * See K3Process::suspend() and K3Process::resume()
 
160
     *
 
161
     * @param lock If true, processing of output is suspended,
 
162
     * otherwise processing is resumed.
 
163
     */
 
164
    void lockPty(bool lock);
 
165
    
 
166
    /** 
 
167
     * Sends data to the process currently controlling the 
 
168
     * teletype ( whose id is returned by foregroundProcessGroup() )
 
169
     *
 
170
     * @param buffer Pointer to the data to send.
 
171
     * @param length Length of @p buffer.
 
172
     */
 
173
    void sendData(const char* buffer, int length);
 
174
 
 
175
  signals:
 
176
 
 
177
    /**
 
178
     * Emitted when a new block of data is received from
 
179
     * the teletype.
 
180
     *
 
181
     * @param buffer Pointer to the data received.
 
182
     * @param length Length of @p buffer
 
183
     */
 
184
    void receivedData(const char* buffer, int length);
 
185
   
 
186
  protected:
 
187
      void setupChildProcess();
 
188
 
 
189
  private slots:
 
190
    // called when data is received from the terminal process 
 
191
    void dataReceived(); 
 
192
    
 
193
  private:
 
194
      void init();
 
195
 
 
196
    // takes a list of key=value pairs and adds them
 
197
    // to the environment for the process
 
198
    void addEnvironmentVariables(const QStringList& environment);
 
199
 
 
200
    int  _windowColumns; 
 
201
    int  _windowLines;
 
202
    char _eraseChar;
 
203
    bool _xonXoff;
 
204
    bool _utf8;
 
205
};
 
206
 
 
207
}
 
208
 
 
209
#endif // PTY_H