summaryrefslogtreecommitdiff
path: root/core/apps/embeddedkonsole
Unidiff
Diffstat (limited to 'core/apps/embeddedkonsole') (more/less context) (show whitespace changes)
-rw-r--r--core/apps/embeddedkonsole/MyPty.cpp8
-rw-r--r--core/apps/embeddedkonsole/TEHistory.cpp269
-rw-r--r--core/apps/embeddedkonsole/TEHistory.h42
-rw-r--r--core/apps/embeddedkonsole/TEScreen.cpp18
-rw-r--r--core/apps/embeddedkonsole/TEWidget.cpp110
-rw-r--r--core/apps/embeddedkonsole/TEWidget.h14
-rw-r--r--core/apps/embeddedkonsole/TEmulation.cpp1
-rw-r--r--core/apps/embeddedkonsole/commandeditdialog.cpp4
-rw-r--r--core/apps/embeddedkonsole/konsole.cpp1542
-rw-r--r--core/apps/embeddedkonsole/konsole.h80
-rw-r--r--core/apps/embeddedkonsole/main.cpp1
-rw-r--r--core/apps/embeddedkonsole/session.cpp20
-rw-r--r--core/apps/embeddedkonsole/session.h5
13 files changed, 1505 insertions, 609 deletions
diff --git a/core/apps/embeddedkonsole/MyPty.cpp b/core/apps/embeddedkonsole/MyPty.cpp
index 7e820ad..e7d8274 100644
--- a/core/apps/embeddedkonsole/MyPty.cpp
+++ b/core/apps/embeddedkonsole/MyPty.cpp
@@ -81,2 +81,3 @@
81 81
82#undef HAVE_OPENPTY
82#ifdef HAVE_OPENPTY 83#ifdef HAVE_OPENPTY
@@ -148,2 +149,8 @@ int MyPty::run(const char* cmd, QStrList &, const char*, int)
148 for (int sig = 1; sig < NSIG; sig++) signal(sig,SIG_DFL); 149 for (int sig = 1; sig < NSIG; sig++) signal(sig,SIG_DFL);
150
151 // attempt to keep apm driver from killing us on power on/off
152 signal(SIGSTOP, SIG_IGN);
153 signal(SIGCONT, SIG_IGN);
154 signal(SIGTSTP, SIG_IGN);
155
149 int ttyfd = open(ttynam, O_RDWR); 156 int ttyfd = open(ttynam, O_RDWR);
@@ -165,3 +172,2 @@ int MyPty::run(const char* cmd, QStrList &, const char*, int)
165 tcsetattr( STDIN_FILENO, TCSANOW, &ttmode ); 172 tcsetattr( STDIN_FILENO, TCSANOW, &ttmode );
166 if(strlen(getenv("TERM"))<=0)
167 setenv("TERM","vt100",1); 173 setenv("TERM","vt100",1);
diff --git a/core/apps/embeddedkonsole/TEHistory.cpp b/core/apps/embeddedkonsole/TEHistory.cpp
index db9d10c..504cd13 100644
--- a/core/apps/embeddedkonsole/TEHistory.cpp
+++ b/core/apps/embeddedkonsole/TEHistory.cpp
@@ -8,3 +8,3 @@
8/* */ 8/* */
9/* This file is part of Konsole - an X terminal for KDE */ 9/* This file is part of Qkonsole - an X terminal for KDE */
10/* */ 10/* */
@@ -12,3 +12,3 @@
12/* */ 12/* */
13/* Ported Konsole to Qt/Embedded */ 13/* Ported Qkonsole to Qt/Embedded */
14/* */ 14/* */
@@ -26,2 +26,4 @@
26 26
27#include <qpe/config.h>
28
27#define HERE printf("%s(%d): here\n",__FILE__,__LINE__) 29#define HERE printf("%s(%d): here\n",__FILE__,__LINE__)
@@ -42,123 +44,46 @@
42 44
43FIXME: some complain about the history buffer comsuming the
44 memory of their machines. This problem is critical
45 since the history does not behave gracefully in cases
46 where the memory is used up completely.
47
48 I put in a workaround that should handle it problem
49 now gracefully. I'm not satisfied with the solution.
50
51FIXME: Terminating the history is not properly indicated
52 in the menu. We should throw a signal.
53
54FIXME: There is noticable decrease in speed, also. Perhaps,
55 there whole feature needs to be revisited therefore.
56 Disadvantage of a more elaborated, say block-oriented
57 scheme with wrap around would be it's complexity.
58*/ 45*/
59 46
60//FIXME: tempory replacement for tmpfile
61// this is here one for debugging purpose.
62
63//#define tmpfile xTmpFile
64
65FILE* xTmpFile()
66{
67 static int fid = 0;
68 char fname[80];
69 sprintf(fname,"TmpFile.%d",fid++);
70 return fopen(fname,"w");
71}
72
73
74// History Buffer ///////////////////////////////////////////
75
76/*
77 A Row(X) data type which allows adding elements to the end.
78*/
79
80HistoryBuffer::HistoryBuffer()
81{
82 ion = -1;
83 length = 0;
84}
85 47
86HistoryBuffer::~HistoryBuffer() 48HistoryScroll::HistoryScroll()
87{ 49{
88 setScroll(FALSE); 50 m_lines = NULL;
51 m_max_lines = 0;
52 m_cells = NULL;
53 m_max_cells = 0;
54 m_num_lines = 0;
55 m_first_line = 0;
56 m_last_cell = 0;
57 m_start_line = 0;
89} 58}
90 59
91void HistoryBuffer::setScroll(bool on) 60HistoryScroll::~HistoryScroll()
92{
93 if (on == hasScroll()) return;
94
95 if (on)
96 {
97 assert( ion < 0 );
98 assert( length == 0);
99 FILE* tmp = tmpfile(); if (!tmp) { perror("konsole: cannot open temp file.\n"); return; }
100 ion = dup(fileno(tmp)); if (ion<0) perror("konsole: cannot dup temp file.\n");
101 fclose(tmp);
102 }
103 else
104 { 61 {
105 assert( ion >= 0 ); 62 setSize(0,0);
106 close(ion);
107 ion = -1;
108 length = 0;
109 }
110} 63}
111 64
112bool HistoryBuffer::hasScroll() 65void HistoryScroll::setSize(int lines, int cells)
113{ 66{
114 return ion >= 0; 67 // could try to preserve the existing data...
115} 68 // printf("setSize(%d,%d)\n", lines, cells);
116 69 if (m_lines) {
117void HistoryBuffer::add(const unsigned char* bytes, int len) 70 delete m_lines;
118{ int rc; 71 m_lines = NULL;
119 assert(hasScroll());
120 rc = lseek( ion, length, SEEK_SET);
121 if (rc < 0) { perror("HistoryBuffer::add.seek"); setScroll(FALSE); return; }
122 rc = write( ion, bytes, len);
123 if (rc < 0) { perror("HistoryBuffer::add.write"); setScroll(FALSE); return; }
124 length += rc;
125}
126
127void HistoryBuffer::get(unsigned char* bytes, int len, int loc) {
128 int rc;
129 assert(hasScroll());
130// qDebug("history get len %d, loc %d, length %d", len, loc, length);
131 if (loc < 0 || len < 0 || loc + len > length)
132 fprintf(stderr,"getHist(...,%d,%d): invalid args.\n",len,loc);
133
134 rc = lseek( ion, loc, SEEK_SET);
135 if (rc < 0) { perror("HistoryBuffer::get.seek"); setScroll(FALSE); return; }
136 rc = read( ion, bytes, len);
137 if (rc < 0) { perror("HistoryBuffer::get.read"); setScroll(FALSE); return; }
138} 72}
139 73 if (m_cells) {
140int HistoryBuffer::len() 74 delete m_cells;
141{ 75 m_cells = NULL;
142 return length;
143} 76}
144 77 m_max_lines = m_max_cells = 0;
145// History Scroll ////////////////////////////////////// 78 if (lines > 0 && cells > 0) {
146 79 m_max_lines = lines;
147/* 80 m_lines = new int[m_max_lines];
148 The history scroll makes a Row(Row(Cell)) from 81 m_lines[0] = 0;
149 two history buffers. The index buffer contains 82 m_max_cells = cells;
150 start of line positions which refere to the cells 83 m_cells = new ca[m_max_cells];
151 buffer.
152
153 Note that index[0] addresses the second line
154 (line #1), while the first line (line #0) starts
155 at 0 in cells.
156*/
157
158HistoryScroll::HistoryScroll()
159{
160} 84}
161 85 m_first_line = 0;
162HistoryScroll::~HistoryScroll() 86 m_num_lines = 0;
163{ 87 m_last_cell = 0;
88 m_start_line = 0;
164} 89}
@@ -167,4 +92,13 @@ void HistoryScroll::setScroll(bool on)
167{ 92{
168 index.setScroll(on); 93 Config cfg("Qkonsole");
169 cells.setScroll(on); 94 cfg.setGroup("History");
95 // printf("setScroll(%d)\n", on);
96 if (on) {
97 int lines = cfg.readNumEntry("history_lines",300);
98 int avg_line = cfg.readNumEntry("avg_line_length",60);
99 int cells = lines * avg_line;
100 setSize(lines,cells);
101 } else {
102 setSize(0,0);
103 }
170} 104}
@@ -173,3 +107,3 @@ bool HistoryScroll::hasScroll()
173{ 107{
174 return index.hasScroll() && cells.hasScroll(); 108 return (m_max_lines > 0);
175} 109}
@@ -178,4 +112,3 @@ int HistoryScroll::getLines()
178{ 112{
179 if (!hasScroll()) return 0; 113 return(m_num_lines);
180 return index.len() / sizeof(int);
181} 114}
@@ -185,3 +118,12 @@ int HistoryScroll::getLineLen(int lineno)
185 if (!hasScroll()) return 0; 118 if (!hasScroll()) return 0;
186 return (startOfLine(lineno+1) - startOfLine(lineno)) / sizeof(ca); 119 if (lineno >= m_num_lines) {
120 // printf("getLineLen(%d) out of range %d\n", lineno, m_num_lines);
121 return(0);
122 }
123 int len = startOfLine(lineno+1) - startOfLine(lineno);
124 if (len < 0) {
125 len += m_max_cells;
126 }
127 // printf("getLineLen(%d) = %d\n", lineno, len);
128 return(len);
187} 129}
@@ -190,23 +132,79 @@ int HistoryScroll::startOfLine(int lineno)
190{ 132{
191 if (lineno <= 0) return 0; 133 // printf("startOfLine(%d) =", lineno);
192 if (!hasScroll()) return 0; 134 if (!hasScroll()) return 0;
193 if (lineno <= getLines()) 135 assert(lineno >= 0 && lineno <= m_num_lines);
194 { int res; 136 if (lineno < m_num_lines) {
195 index.get((unsigned char*)&res,sizeof(int),(lineno-1)*sizeof(int)); 137 int index = lineno + m_first_line;
196 return res; 138 if (index >= m_max_lines)
139 index -= m_max_lines;
140 // printf("%d\n", m_lines[index]);
141 return(m_lines[index]);
142 } else {
143 // printf("last %d\n", m_last_cell);
144 return(m_last_cell);
197 } 145 }
198 return cells.len();
199} 146}
200 147
201void HistoryScroll::getCells(int lineno, int colno, int count, ca res[]) 148void HistoryScroll::getCells(int lineno, int colno, int count, ca *res)
202{ 149{
150 // printf("getCells(%d,%d,%d) num_lines=%d\n", lineno, colno, count, m_num_lines);
203 assert(hasScroll()); 151 assert(hasScroll());
204//get(unsigned char* bytes, int len, int loc) 152 assert(lineno >= 0 && lineno < m_num_lines);
205 cells.get( (unsigned char*)res, count * sizeof(ca), startOfLine( lineno) + colno * sizeof(ca) ); 153 int index = lineno + m_first_line;
154 if (index >= m_max_lines)
155 index -= m_max_lines;
156 assert(index >= 0 && index < m_max_lines);
157 index = m_lines[index] + colno;
158 assert(index >= 0 && index < m_max_cells);
159 while(count-- > 0) {
160 *res++ = m_cells[index];
161 if (++index >= m_max_cells) {
162 index = 0;
163 }
164 }
206} 165}
207 166
208void HistoryScroll::addCells(ca text[], int count) 167void HistoryScroll::addCells(ca *text, int count)
209{ 168{
210 if (!hasScroll()) return; 169 if (!hasScroll()) return;
211 cells.add((unsigned char*)text,count*sizeof(ca)); 170 int start_cell = m_last_cell;
171 // printf("addCells count=%d start=%d first_line=%d first_cell=%d lines=%d\n",
172 // count, start_cell, m_first_line, m_lines[m_first_line], m_num_lines);
173 if (count <= 0) {
174 return;
175 }
176 while(count-- > 0) {
177 assert (m_last_cell >= 0 && m_last_cell < m_max_cells );
178 m_cells[m_last_cell] = *text++;
179 if (++m_last_cell >= m_max_cells) {
180 m_last_cell = 0;
181 }
182 }
183 if (m_num_lines > 1) {
184 if (m_last_cell > start_cell) {
185 while(m_num_lines > 0
186 && m_lines[m_first_line] >= start_cell
187 && m_lines[m_first_line] < m_last_cell) {
188 // printf("A remove %d>%d && %d<%d first_line=%d num_lines=%d\n",
189 // m_lines[m_first_line], start_cell, m_lines[m_first_line], m_last_cell,
190 // m_first_line, m_num_lines);
191 if (++m_first_line >= m_max_lines) {
192 m_first_line = 0;
193 }
194 m_num_lines--;
195 }
196 } else {
197 while(m_num_lines > 0
198 && (m_lines[m_first_line] >= start_cell
199 || m_lines[m_first_line] < m_last_cell)) {
200 // printf("B remove %d>%d || %d<%d first_line=%d num_lines=%d\n",
201 // m_lines[m_first_line], start_cell, m_lines[m_first_line], m_last_cell,
202 // m_first_line, m_num_lines);
203 if (++m_first_line >= m_max_lines) {
204 m_first_line = 0;
205 }
206 m_num_lines--;
207 }
208 }
209 }
212} 210}
@@ -216,4 +214,17 @@ void HistoryScroll::addLine()
216 if (!hasScroll()) return; 214 if (!hasScroll()) return;
217 int locn = cells.len(); 215 int index = m_first_line + m_num_lines;
218 index.add((unsigned char*)&locn,sizeof(int)); 216 if (index >= m_max_lines) {
217 index -= m_max_lines;
218 }
219 // printf("addLine line=%d cell=%d\n", index, m_last_cell);
220 assert(index >= 0 && index < m_max_lines);
221 m_lines[index] = m_start_line;
222 m_start_line = m_last_cell;
223 if (m_num_lines >= m_max_lines) {
224 if (++m_first_line >= m_num_lines) {
225 m_first_line = 0;
226 }
227 } else {
228 m_num_lines++;
229 }
219} 230}
diff --git a/core/apps/embeddedkonsole/TEHistory.h b/core/apps/embeddedkonsole/TEHistory.h
index 11eb150..fcf6496 100644
--- a/core/apps/embeddedkonsole/TEHistory.h
+++ b/core/apps/embeddedkonsole/TEHistory.h
@@ -23,25 +23,2 @@
23 23
24/*
25 An extendable tmpfile(1) based buffer.
26*/
27class HistoryBuffer
28{
29public:
30 HistoryBuffer();
31 ~HistoryBuffer();
32
33public:
34 void setScroll(bool on);
35 bool hasScroll();
36
37public:
38 void add(const unsigned char* bytes, int len);
39 void get(unsigned char* bytes, int len, int loc);
40 int len();
41
42private:
43 int ion;
44 int length;
45};
46
47class HistoryScroll 24class HistoryScroll
@@ -53,2 +30,3 @@ public:
53public: 30public:
31 void setSize(int lines, int cells);
54 void setScroll(bool on); 32 void setScroll(bool on);
@@ -56,12 +34,9 @@ public:
56 34
57public: // access to history
58 int getLines(); 35 int getLines();
59 int getLineLen(int lineno); 36 int getLineLen(int lineno);
60 void getCells(int lineno, int colno, int count, ca res[]); 37 void getCells(int lineno, int colno, int count, ca *res);
61 38
62public: // backward compatibility (obsolete)
63 ca getCell(int lineno, int colno) { ca res; getCells(lineno,colno,1,&res); return res; } 39 ca getCell(int lineno, int colno) { ca res; getCells(lineno,colno,1,&res); return res; }
64 40
65public: // adding lines. 41 void addCells(ca *text, int count);
66 void addCells(ca a[], int count);
67 void addLine(); 42 void addLine();
@@ -70,4 +45,11 @@ private:
70 int startOfLine(int lineno); 45 int startOfLine(int lineno);
71 HistoryBuffer index; // lines Row(int) 46
72 HistoryBuffer cells; // text Row(ca) 47 int m_max_lines;
48 int *m_lines;
49 int m_max_cells;
50 ca *m_cells;
51 int m_first_line;
52 int m_last_cell;
53 int m_num_lines;
54 int m_start_line;
73}; 55};
diff --git a/core/apps/embeddedkonsole/TEScreen.cpp b/core/apps/embeddedkonsole/TEScreen.cpp
index a6cf6a1..4ebc28e 100644
--- a/core/apps/embeddedkonsole/TEScreen.cpp
+++ b/core/apps/embeddedkonsole/TEScreen.cpp
@@ -512,2 +512,6 @@ ca* TEScreen::getCookedImage()
512 512
513 if (histCursor > hist.getLines()) {
514 histCursor = hist.getLines();
515 }
516
513 for (y = 0; (y < lines) && (y < (hist.getLines()-histCursor)); y++) 517 for (y = 0; (y < lines) && (y < (hist.getLines()-histCursor)); y++)
@@ -560,3 +564,3 @@ void TEScreen::reset()
560{ 564{
561 Config cfg("Konsole"); 565 Config cfg("Qkonsole");
562 cfg.setGroup("ScrollBar"); 566 cfg.setGroup("ScrollBar");
@@ -973,2 +977,5 @@ void TEScreen::setSelBeginXY(const int x, const int y)
973{ 977{
978 if (histCursor > hist.getLines()) {
979 histCursor = hist.getLines();
980 }
974 sel_begin = loc(x,y+histCursor) ; 981 sel_begin = loc(x,y+histCursor) ;
@@ -981,2 +988,5 @@ void TEScreen::setSelExtentXY(const int x, const int y)
981 if (sel_begin == -1) return; 988 if (sel_begin == -1) return;
989 if (histCursor > hist.getLines()) {
990 histCursor = hist.getLines();
991 }
982 int l = loc(x,y + histCursor); 992 int l = loc(x,y + histCursor);
@@ -1187,2 +1197,8 @@ void TEScreen::setHistCursor(int cursor)
1187 histCursor = cursor; //FIXME:rangecheck 1197 histCursor = cursor; //FIXME:rangecheck
1198 if (histCursor > hist.getLines()) {
1199 histCursor = hist.getLines();
1200 }
1201 if (histCursor < 0) {
1202 histCursor = 0;
1203 }
1188} 1204}
diff --git a/core/apps/embeddedkonsole/TEWidget.cpp b/core/apps/embeddedkonsole/TEWidget.cpp
index ec1b30c..98c3cdf 100644
--- a/core/apps/embeddedkonsole/TEWidget.cpp
+++ b/core/apps/embeddedkonsole/TEWidget.cpp
@@ -68,2 +68,3 @@
68#include <qdragobject.h> 68#include <qdragobject.h>
69#include <qnamespace.h>
69 70
@@ -246,14 +247,8 @@ void TEWidget::fontChange(const QFont &)
246 font_h = fm.height(); 247 font_h = fm.height();
247
248 // font_w = max width of ASCII chars (U.B.)
249 font_w = 0;
250 int fw;
251 for (int i = 0x20; i < 0x80; i++) {
252 if (isprint(i) && font_w < (fw = fm.width(i))) {
253 font_w = fw;
254 }
255 }
256 //font_w = fm.maxWidth(); 248 //font_w = fm.maxWidth();
257 249 font_w = fm.width("m");
258 font_a = fm.ascent(); 250 font_a = fm.ascent();
251 printf("font h=%d max_width=%d width_m=%d assent=%d\n", font_h,
252 fm.maxWidth(), font_w, font_a);
253
259//printf("font_h: %d\n",font_h); 254//printf("font_h: %d\n",font_h);
@@ -309,3 +304,3 @@ TEWidget::TEWidget(QWidget *parent, const char *name) : QFrame(parent,name)
309 hScrollbar->setOrientation(QScrollBar::Horizontal); 304 hScrollbar->setOrientation(QScrollBar::Horizontal);
310 hScrollbar->setMaximumHeight(16); 305 // hScrollbar->setMaximumHeight(16);
311 306
@@ -313,3 +308,3 @@ TEWidget::TEWidget(QWidget *parent, const char *name) : QFrame(parent,name)
313 308
314 Config cfg("Konsole"); 309 Config cfg("Qkonsole");
315 cfg.setGroup("ScrollBar"); 310 cfg.setGroup("ScrollBar");
@@ -686,3 +681,4 @@ void TEWidget::mousePressEvent(QMouseEvent* ev)
686 681
687 word_selection_mode = FALSE; 682 mouse_down_x = ev->x();
683 mouse_down_y = ev->y();
688 684
@@ -693,2 +689,4 @@ void TEWidget::mousePressEvent(QMouseEvent* ev)
693 689
690 word_selection_mode = (ev->state() & ShiftButton);
691
694 if ( ev->state() & ControlButton ) preserve_line_breaks = FALSE ; 692 if ( ev->state() & ControlButton ) preserve_line_breaks = FALSE ;
@@ -817,2 +815,8 @@ void TEWidget::mouseReleaseEvent(QMouseEvent* ev)
817 { 815 {
816 if (QABS(ev->x() - mouse_down_x) < 3
817 && QABS(ev->y() - mouse_down_y) < 3
818 && ev->y() < qApp->desktop()->height()/8) {
819 emit setFullScreen(false);
820 }
821
818 if ( actSel > 1 ) emit endSelectionSignal(preserve_line_breaks); 822 if ( actSel > 1 ) emit endSelectionSignal(preserve_line_breaks);
@@ -1032,3 +1036,2 @@ bool TEWidget::eventFilter( QObject *obj, QEvent *e )
1032 bool dele=FALSE; 1036 bool dele=FALSE;
1033
1034 if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { 1037 if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
@@ -1071,16 +1074,75 @@ bool TEWidget::eventFilter( QObject *obj, QEvent *e )
1071// qDebug("key pressed is 0x%x, ascii is 0x%x, state %d", ke->key(), ke->ascii(), ke->state()); 1074// qDebug("key pressed is 0x%x, ascii is 0x%x, state %d", ke->key(), ke->ascii(), ke->state());
1072 if(ke->key() == Key_Escape) {
1073 qDebug("key pressed is 0x%x, ascii is 0x%x, state %d", ke->key(), ke->ascii(), ke->state());
1074 1075
1076 bool special_function = true;
1077 switch(ke->key()) {
1078 //case 0x201b: // fn-5
1079 //case Key_F1:
1080 // switch sessions (?)
1081 // emitText("\\"); // expose (??)
1082 // break;
1083
1084 case 0x2016: // fn-p
1085 case Key_F2:
1086 pasteClipboard();
1087 break;
1088
1089 case 0x2018: // fn-S
1090 case Key_F3:
1091 emit changeSession(1);
1092 break;
1093
1094 case 0x2019: // fn-n
1095 emit newSession();
1096 break;
1097
1098 case Qt::Key_Tab:
1099 if (ke->state() == ControlButton) {
1100 emit changeSession(1);
1101 } else {
1102 special_function = false;
1103 }
1104 break;
1105
1106#if 0
1107 case Qt::Key_Left:
1108 if (vcolumns == 0) {
1109 emit changeSession(-1);
1110 } else {
1111 special_function = false;
1112 }
1113 break;
1114
1115 case Qt::Key_Right:
1116 if (vcolumns == 0) {
1117 emit changeSession(1);
1118 } else {
1119 special_function = false;
1075 } 1120 }
1121 break;
1122#endif
1076 1123
1077 if( ke->state() == ShiftButton && ke->key() == Key_Tab) { 1124 case 0x201b: // fn-5
1078 //lets hardcode this sucker 1125 case Key_F4:
1126 emit toggleFullScreen();
1127 break;
1128
1129 case 0x200f: // fn-1 magnify minus
1130 case Key_F5:
1131 emit changeFontSize(-1);
1132 break;
1079 1133
1080// qDebug("key pressed 2 is 0x%x", ke->key()); 1134 case 0x2010: // fn-2 magnify plus
1081 emitText("\\"); // expose 1135 case Key_F6:
1136 emit changeFontSize(1);
1137 break;
1138
1139 default:
1140 special_function = false;
1082 } 1141 }
1083 else if( ke->state() == ControlButton && ke->key() == Key_V) { 1142 if (special_function) {
1084 pasteClipboard(); 1143 return true;
1085 } 1144 }
1145 // else if( ke->state() == ControlButton && ke->key() == Key_V) {
1146 // pasteClipboard();
1147 // }
1086// else if( ke->state() == ControlButton && ke->key() == Key_C) { 1148// else if( ke->state() == ControlButton && ke->key() == Key_C) {
@@ -1088,3 +1150,2 @@ bool TEWidget::eventFilter( QObject *obj, QEvent *e )
1088// } 1150// }
1089 else
1090 emit keyPressedSignal(ke); // expose 1151 emit keyPressedSignal(ke); // expose
@@ -1118,3 +1179,2 @@ void TEWidget::frameChanged()
1118} 1179}
1119
1120/* ------------------------------------------------------------------------- */ 1180/* ------------------------------------------------------------------------- */
@@ -1169,3 +1229,3 @@ void TEWidget::calcGeometry()
1169 int dcolumns; 1229 int dcolumns;
1170 Config cfg("Konsole"); 1230 Config cfg("Qkonsole");
1171 cfg.setGroup("ScrollBar"); 1231 cfg.setGroup("ScrollBar");
diff --git a/core/apps/embeddedkonsole/TEWidget.h b/core/apps/embeddedkonsole/TEWidget.h
index 5597f27..792b109 100644
--- a/core/apps/embeddedkonsole/TEWidget.h
+++ b/core/apps/embeddedkonsole/TEWidget.h
@@ -39,3 +39,4 @@ class TEWidget : public QFrame
39// a widget representing attributed text 39// a widget representing attributed text
40{ Q_OBJECT 40{
41 Q_OBJECT
41 42
@@ -76,2 +77,3 @@ public:
76 bool useBeep; 77 bool useBeep;
78 int color_menu_item;
77 79
@@ -95,2 +97,7 @@ signals:
95 97
98 void changeFontSize(int);
99 void toggleFullScreen();
100 void setFullScreen(bool);
101 void changeSession(int);
102 void newSession();
96 103
@@ -154,3 +161,3 @@ private:
154 161
155 bool fixed_font; // has fixed pitch 162 // bool fixed_font; // has fixed pitch
156 int font_h; // height 163 int font_h; // height
@@ -186,2 +193,3 @@ private:
186 193
194 int mouse_down_x, mouse_down_y;
187 195
@@ -196,2 +204,3 @@ private:
196 QString dropText; 204 QString dropText;
205
197 public: 206 public:
@@ -199,2 +208,3 @@ private:
199 TESession *currentSession; 208 TESession *currentSession;
209
200private slots: 210private slots:
diff --git a/core/apps/embeddedkonsole/TEmulation.cpp b/core/apps/embeddedkonsole/TEmulation.cpp
index c19f2a1..a539757 100644
--- a/core/apps/embeddedkonsole/TEmulation.cpp
+++ b/core/apps/embeddedkonsole/TEmulation.cpp
@@ -197,2 +197,3 @@ void TEmulation::onRcvChar(int c)
197 c &= 0xff; 197 c &= 0xff;
198
198 switch (c) 199 switch (c)
diff --git a/core/apps/embeddedkonsole/commandeditdialog.cpp b/core/apps/embeddedkonsole/commandeditdialog.cpp
index dd35466..03cba87 100644
--- a/core/apps/embeddedkonsole/commandeditdialog.cpp
+++ b/core/apps/embeddedkonsole/commandeditdialog.cpp
@@ -104,3 +104,3 @@ connect(ToolButton5,SIGNAL(clicked()),m_PlayListSelection,SLOT(moveSelectedDown(
104 m_SuggestedCommandList->ensureItemVisible( m_SuggestedCommandList->selectedItem() ); 104 m_SuggestedCommandList->ensureItemVisible( m_SuggestedCommandList->selectedItem() );
105 Config cfg("Konsole"); 105 Config cfg("Qkonsole");
106 cfg.setGroup("Commands"); 106 cfg.setGroup("Commands");
@@ -154,3 +154,3 @@ void CommandEditDialog::accept()
154int i = 0; 154int i = 0;
155 Config *cfg = new Config("Konsole"); 155 Config *cfg = new Config("Qkonsole");
156 cfg->setGroup("Commands"); 156 cfg->setGroup("Commands");
diff --git a/core/apps/embeddedkonsole/konsole.cpp b/core/apps/embeddedkonsole/konsole.cpp
index ce8fb6b..d10b66d 100644
--- a/core/apps/embeddedkonsole/konsole.cpp
+++ b/core/apps/embeddedkonsole/konsole.cpp
@@ -1 +1,2 @@
1
1/* ---------------------------------------------------------------------- */ 2/* ---------------------------------------------------------------------- */
@@ -23,3 +24,3 @@
23 24
24#include "signal.h" 25#include <stdlib.h>
25 26
@@ -46,11 +47,12 @@
46#include <qtabbar.h> 47#include <qtabbar.h>
48#include <qpe/config.h>
47#include <qstringlist.h> 49#include <qstringlist.h>
48#include <qpalette.h> 50#include <qpalette.h>
49#include <qpe/config.h> 51#include <qfontdatabase.h>
50#include <qpe/qpeapplication.h> 52#include <qfile.h>
53#include <qspinbox.h>
54#include <qlayout.h>
55#include <qvbox.h>
51 56
52#include <unistd.h> 57#include <sys/wait.h>
53#include <pwd.h>
54#include <sys/types.h>
55//#include <sys/wait.h>
56#include <stdio.h> 58#include <stdio.h>
@@ -67,8 +69,11 @@
67 69
68 #include <qfontdatabase.h>// U.B. 70class EKNumTabBar : public QTabBar
69 #include <qstringlist.h>// U.B. 71{
70 #include <qvaluelist.h> // U.B.
71
72class EKNumTabBar : public QTabBar {
73public: 72public:
73 EKNumTabBar(QWidget *parent = 0, const char *name = 0) :
74 QTabBar(parent, name)
75 {}
76
77 // QList<QTab> *getTabList() { return(tabList()); }
78
74 void numberTabs() 79 void numberTabs()
@@ -78,3 +83,4 @@ public:
78 int m=INT_MIN; 83 int m=INT_MIN;
79 for (int i=0; i<count(); i++) { 84 for (int i=0; i<count(); i++)
85 {
80 QTab* left=0; 86 QTab* left=0;
@@ -82,5 +88,7 @@ public:
82 int x=INT_MAX; 88 int x=INT_MAX;
83 for( QTab* t; (t=it.current()); ++it ) { 89 for( QTab* t; (t=it.current()); ++it )
90 {
84 int tx = t->rect().x(); 91 int tx = t->rect().x();
85 if ( tx<x && tx>m ) { 92 if ( tx<x && tx>m )
93 {
86 x = tx; 94 x = tx;
@@ -89,3 +97,4 @@ public:
89 } 97 }
90 if ( left ) { 98 if ( left )
99 {
91 left->setText(QString::number(i+1)); 100 left->setText(QString::number(i+1));
@@ -95,5 +104,26 @@ public:
95 } 104 }
105
106 virtual QSize sizeHint() const
107 {
108 if (isHidden())
109 {
110 return(QSize(0,0));
111 }
112 else
113 {
114 QSize size = QTabBar::sizeHint();
115 int shrink = 5;
116 if (qApp->desktop()->width() > 600 || qApp->desktop()->height() > 600)
117 {
118 shrink = 10;
119 }
120 size.setHeight(size.height() - shrink);
121 return(size);
122 }
123 }
124
96}; 125};
97 126
98class EKNumTabWidget : public QTabWidget { 127class EKNumTabWidget : public QTabWidget
128{
99public: 129public:
@@ -101,4 +131,12 @@ public:
101 { 131 {
132 setTabBar(new EKNumTabBar(parent,"EKTabBar"));
133 setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
102 } 134 }
103 135
136 EKNumTabBar *getTabBar() const
137 {
138 return ((EKNumTabBar*)tabBar());
139 }
140
141
104 void addTab(QWidget* w) 142 void addTab(QWidget* w)
@@ -183,39 +221,2 @@ static const char *commonCmds[] =
183 221
184static void konsoleInit(const char** shell) {
185 if(setuid(getuid()) !=0) qDebug("setuid failed");
186 if(setgid(getgid()) != 0) qDebug("setgid failed"); // drop privileges
187
188 // signal (SIGSTOP, SIG_IGN);
189
190// QPEApplication::grabKeyboard(); // for CTRL and ALT
191
192// qDebug("keyboard grabbed");
193#ifdef FAKE_CTRL_AND_ALT
194 qDebug("Fake Ctrl and Alt defined");
195 QPEApplication::grabKeyboard(); // for CTRL and ALT
196#endif
197
198 *shell = getenv("SHELL");
199// qWarning("SHell initially is %s", *shell );
200
201 if (shell == NULL || *shell == '\0') {
202 struct passwd *ent = 0;
203 uid_t me = getuid();
204 *shell = "/bin/sh";
205
206 while ( (ent = getpwent()) != 0 ) {
207 if (ent->pw_uid == me) {
208 if (ent->pw_shell != "")
209 *shell = ent->pw_shell;
210 break;
211 }
212 }
213 endpwent();
214 }
215
216// qWarning("SHELL now is %s", *shell );
217
218 if( putenv((char*)"COLORTERM=") !=0)
219 qDebug("putenv failed"); // to trigger mc's color detection
220}
221 222
@@ -224,12 +225,36 @@ Konsole::Konsole(QWidget* parent, const char* name, WFlags fl) :
224{ 225{
225 QStrList tmp; const char* shell; 226 QStrList args;
226 227 init("/bin/bash",args);
227 setCaption( tr("Terminal") ); 228}
228 229
229 konsoleInit( &shell); 230Konsole::Konsole(const char* name, const char* _pgm, QStrList & _args, int)
230// qWarning("Using shell %s", shell); 231 : QMainWindow(0, name)
231 init(shell,tmp); 232{
233 init(_pgm,_args);
232} 234}
233 235
236struct HistoryItem
237{
238 HistoryItem(int c, const QString &l)
239 {
240 count = c;
241 line = l;
242 }
243 int count;
244 QString line;
245};
234 246
247class HistoryList : public QList<HistoryItem>
248{
249 virtual int compareItems( QCollection::Item item1, QCollection::Item item2)
250 {
251 int c1 = ((HistoryItem*)item1)->count;
252 int c2 = ((HistoryItem*)item2)->count;
253 if (c1 > c2)
254 return(1);
255 if (c1 < c2)
256 return(-1);
257 return(0);
258 }
259};
235 260
@@ -238,14 +263,75 @@ void Konsole::initCommandList()
238// qDebug("Konsole::initCommandList"); 263// qDebug("Konsole::initCommandList");
239 Config cfg("Konsole"); 264 Config cfg("Qkonsole");
240 cfg.setGroup("Commands"); 265 cfg.setGroup("Commands");
241 commonCombo->setInsertionPolicy(QComboBox::AtCurrent); 266 // commonCombo->setInsertionPolicy(QComboBox::AtCurrent);
242 commonCombo->clear(); 267 commonCombo->clear();
243 if (cfg.readEntry("Commands Set","FALSE") == "FALSE") { 268
244 for (int i = 0; commonCmds[i] != NULL; i++) { 269 if (cfg.readEntry("ShellHistory","TRUE") == "TRUE")
245 commonCombo->insertItem(commonCmds[i],i); 270 {
271 QString histfilename = QString(getenv("HOME")) + "/.bash_history";
272 histfilename = cfg.readEntry("ShellHistoryPath",histfilename);
273 QFile histfile(histfilename);
274 // note: compiler barfed on:
275 // QFile histfile(QString(getenv("HOME")) + "/.bash_history");
276 if (histfile.open( IO_ReadOnly ))
277 {
278 QString line;
279 uint i;
280 HistoryList items;
281
282 int lineno = 0;
283 while(!histfile.atEnd())
284 {
285 if (histfile.readLine(line, 200) < 0)
286 {
287 break;
246 } 288 }
247 } else { 289 line = line.left(line.length()-1);
248 for (int i = 0; i < 100; i++) { 290 lineno++;
291
292 for(i=0; i<items.count(); i++)
293 {
294 if (line == items.at(i)->line)
295 {
296 // weight recent commands & repeated commands more
297 // by adding up the index of each command
298 items.at(i)->count += lineno;
299 break;
300 }
301 }
302 if (i >= items.count())
303 {
304 items.append(new HistoryItem(lineno, line));
305 }
306 }
307 items.sort();
308 int n = items.count();
309 if (n > 40)
310 {
311 n = 40;
312 }
313 for(int i=0; i<n; i++)
314 {
315 // should insert start of command, but keep whole thing
316 if (items.at(items.count()-i-1)->line.length() < 30)
317 {
318 commonCombo->insertItem(items.at(items.count()-i-1)->line);
319 }
320 }
321 histfile.close();
322 }
323 }
324 if (cfg.readEntry("Commands Set","FALSE") == "FALSE")
325 {
326 for (int i = 0; commonCmds[i] != NULL; i++)
327 {
328 commonCombo->insertItem(commonCmds[i]);
329 }
330 }
331 else
332 {
333 for (int i = 0; i < 100; i++)
334 {
249 if (!(cfg.readEntry( QString::number(i),"")).isEmpty()) 335 if (!(cfg.readEntry( QString::number(i),"")).isEmpty())
250 commonCombo->insertItem((cfg.readEntry( QString::number(i),""))); 336 commonCombo->insertItem(cfg.readEntry( QString::number(i),""));
251 } 337 }
@@ -253,2 +339,8 @@ void Konsole::initCommandList()
253 339
340
341}
342
343static void sig_handler(int x)
344{
345 printf("got signal %d\n",x);
254} 346}
@@ -257,2 +349,16 @@ void Konsole::init(const char* _pgm, QStrList & _args)
257{ 349{
350
351#if 0
352 for(int i=1; i<=31; i++)
353 {
354 if (i != SIGPIPE && i != SIGPROF && i != SIGSEGV
355 && i != SIGINT && i != SIGILL && i != SIGTERM
356 && i != SIGBUS)
357 signal(i,sig_handler);
358 }
359#endif
360 signal(SIGSTOP, sig_handler);
361 signal(SIGCONT, sig_handler);
362 signal(SIGTSTP, sig_handler);
363
258 b_scroll = TRUE; // histon; 364 b_scroll = TRUE; // histon;
@@ -262,86 +368,114 @@ void Konsole::init(const char* _pgm, QStrList & _args)
262 fromMenu = FALSE; 368 fromMenu = FALSE;
369 fullscreen = false;
263 370
264 setCaption( tr("Terminal") ); 371 setCaption( "Qkonsole" );
265 setIcon( Resource::loadPixmap( "konsole" ) ); 372 setIcon( Resource::loadPixmap( "qkonsole/qkonsole" ) );
266 373
267 Config cfg("Konsole"); 374 Config cfg("Qkonsole");
268 cfg.setGroup("Konsole"); 375 cfg.setGroup("Font");
269 QString tmp; 376 QString tmp;
270 // initialize the list of allowed fonts ///////////////////////////////////
271 cfont = cfg.readNumEntry("FontID", 1);
272
273 QFont f = QFont("Micro", 4, QFont::Normal);
274 f.setFixedPitch(TRUE);
275 fonts.append(new VTFont(tr("Micro"), f));
276 377
277 f = QFont("Fixed", 7, QFont::Normal); 378 // initialize the list of allowed fonts ///////////////////////////////////
278 f.setFixedPitch(TRUE);
279 fonts.append(new VTFont(tr("Small Fixed"), f));
280 379
281 f = QFont("Fixed", 12, QFont::Normal); 380 QString cfgFontName = cfg.readEntry("FontName","Lcfont");
282 f.setFixedPitch(TRUE); 381 int cfgFontSize = cfg.readNumEntry("FontSize",18);
283 fonts.append(new VTFont(tr("Medium Fixed"), f));
284 382
285// NEW STUFF 383 cfont = -1;
286 384
287 QStringList ignfont = cfg.readListEntry("IgnFont", ','); 385 // this code causes repeated access to all the font files
288 /* If there is no "IgnFont = ..." entry in "myonsole.conf", 386 // which does slow down startup
289 * put some Japanese fonts of the SL-C7x0 to "ignfont". */ 387 QFontDatabase fontDB;
388 QStringList familyNames;
389 familyNames = fontDB.families( FALSE );
390 QString s;
391 int fontIndex = 0;
392 int familyNum = 0;
393 fontList = new QPopupMenu( this );
290 394
291 if (ignfont.isEmpty()) { 395 for(uint j = 0; j < (uint)familyNames.count(); j++)
292 ignfont = QStringList::split (',',"jisupasp,mmkjg1,mmkjg4,mmkjg5"); 396 {
397 s = familyNames[j];
398 if ( s.contains('-') )
399 {
400 int i = s.find('-');
401 s = s.right( s.length() - i - 1 ) + " [" + s.left( i ) + "]";
293 } 402 }
403 s[0] = s[0].upper();
294 404
295 //QFont 405 QValueList<int> sizes = fontDB.pointSizes( familyNames[j] );
296 f = QFont("Fixed", 16, QFont::Normal);
297 f.setFixedPitch(true);
298 fonts.append(new VTFont(tr("Default"), f));
299
300 int fcount = 1;
301 406
302 f.setCharSet(QFont::AnyCharSet); 407 printf("family[%d] = %s with %d sizes\n", j, familyNames[j].latin1(),
303 f.setStyleHint(QFont::TypeWriter, QFont::PreferMatch); 408 sizes.count());
304// f.setWeight(QFont::Normal);
305 409
306 /* 410 if (sizes.count() > 0)
307 * Look for installed font families. If the family is not in 411 {
308 * the "ignfont" list, look for available sizes. 412 QPopupMenu *sizeMenu;
309 * If it is fixed pitch font, put the font and the size 413 QFont f;
310 * to the fontlist. 414 int last_width = -1;
311 */ 415 sizeMenu = NULL;
312 QFontDatabase fdb;
313 QStringList ff = fdb.families(false);
314
315 for (QStringList::Iterator it = ff.begin(); it != ff.end(); ++it ) {
316 QString fit = *it;
317 416
318 if( fit != "fixed" && fit != "micro" ) { 417 for(uint i = 0; i < (uint)sizes.count() + 4; i++)
319 if ( ignfont.contains(*it) == 0) { 418 {
320 QValueList<int> pt = fdb.pointSizes(*it); 419 // printf("family %s size %d ", familyNames[j].latin1(), sizes[i]);
420 // need to divide by 10 on the Z, but not otherwise
421 int size;
321 422
322 for (QValueList<int>::Iterator itv = pt.begin(); 423 if (i >= (uint)sizes.count())
323 itv != pt.end(); ++itv ) { 424 {
324 int size = (*itv)/10; 425 // try for expandable fonts
325 if(size > 0) { 426 size = sizes[sizes.count()-1] + 2 * (i - sizes.count() + 1);
326 f.setFamily(*it);
327 f.setPointSize(size);
328 } 427 }
428 else
429 {
430 printf("sizes[%d] = %d\n", i, sizes[i]);
431 size = sizes[i];
432 }
433#ifndef __i386__
434 // a hack, sizes on Z seem to be points*10
435 size /= 10;
436#endif
329 437
330 QFontMetrics fm(f); 438 f = QFont(familyNames[j], size);
331
332//qDebug("%s %d:\twidth('i')=%d, width('w')=%d", (*it).latin1(), (*itv)/10, fm.width('i'), fm.width('w'));
333
334 if (fm.width('i') == fm.width('w') ) {
335 qDebug((*it));
336 f.setFixedPitch(true); 439 f.setFixedPitch(true);
337 fonts.append(new VTFont(*it + ' ' + QString::number(size), f)); 440 QFontMetrics fm(f);
338 fcount++; 441 // don't trust f.fixedPitch() or f.exactMatch(), they lie!!
442 if (fm.width("l") == fm.width("m")
443 && (i < (uint)sizes.count()
444 || fm.width("m") > last_width))
445 {
446 if (i < (uint)sizes.count())
447 {
448 last_width = fm.width("m");
339 } 449 }
450 if (sizeMenu == NULL)
451 {
452 sizeMenu = new QPopupMenu();
453 }
454 int id = sizeMenu->insertItem(QString("%1").arg(size), fontIndex);
455 sizeMenu->setItemParameter(id, fontIndex);
456 sizeMenu->connectItem(id, this, SLOT(setFont(int)));
457 QString name = s + " " + QString::number(size);
458 fonts.append(new VTFont(name, f, familyNames[j], familyNum, size));
459 if (familyNames[j] == cfgFontName && size == cfgFontSize)
460 {
461 cfont = fontIndex;
340 } 462 }
463 printf("FOUND: %s family %s size %d\n", name.latin1(), familyNames[j].latin1(), size);
464 fontIndex++;
341 } 465 }
342 } 466 }
467 if (sizeMenu)
468 {
469 fontList->insertItem(s, sizeMenu, familyNum + 1000);
470
471 familyNum++;
472 }
343 } 473 }
344 474
345// END NEW STUFF 475 }
346 476
477 if (cfont < 0 || cfont >= (int)fonts.count())
478 {
479 cfont = 0;
480 }
347 481
@@ -351,3 +485,3 @@ void Konsole::init(const char* _pgm, QStrList & _args)
351 tab = new EKNumTabWidget(this); 485 tab = new EKNumTabWidget(this);
352 486 // tab->setMargin(tab->margin()-5);
353 connect(tab, SIGNAL(currentChanged(QWidget*)), this, SLOT(switchSession(QWidget*))); 487 connect(tab, SIGNAL(currentChanged(QWidget*)), this, SLOT(switchSession(QWidget*)));
@@ -356,3 +490,3 @@ void Konsole::init(const char* _pgm, QStrList & _args)
356 setToolBarsMovable( FALSE ); 490 setToolBarsMovable( FALSE );
357 QToolBar *menuToolBar = new QToolBar( this ); 491 menuToolBar = new QToolBar( this );
358 menuToolBar->setHorizontalStretchable( TRUE ); 492 menuToolBar->setHorizontalStretchable( TRUE );
@@ -361,9 +495,12 @@ void Konsole::init(const char* _pgm, QStrList & _args)
361 495
362 fontList = new QPopupMenu( this ); 496 bool c7xx = false;
363 for(uint i = 0; i < fonts.count(); i++) { 497 if (qApp->desktop()->width() > 600 || qApp->desktop()->height() > 600)
364 VTFont *fnt = fonts.at(i); 498 {
365 fontList->insertItem(fnt->getName(), i); 499 c7xx = true;
366 } 500 }
501 QFont menuFont;
502 menuFont.setPointSize(c7xx? 18 : 10);
503 qApp->setFont(menuFont, true);
367 504
368 fontChanged(cfont); 505 setFont(cfont);
369 506
@@ -378,7 +515,10 @@ void Konsole::init(const char* _pgm, QStrList & _args)
378 cfg.setGroup("Menubar"); 515 cfg.setGroup("Menubar");
379 if( cfg.readEntry("Hidden","FALSE") == "TRUE") { 516 if( cfg.readEntry("Hidden","FALSE") == "TRUE")
380 editCommandListMenu->insertItem( tr( "Show command list" )); 517 {
518 ec_cmdlist = editCommandListMenu->insertItem( tr( "Show command list" ));
381 listHidden=TRUE; 519 listHidden=TRUE;
382 } else { 520 }
383 editCommandListMenu->insertItem( tr( "Hide command list" )); 521 else
522 {
523 ec_cmdlist = editCommandListMenu->insertItem( tr( "Hide command list" ));
384 listHidden=FALSE; 524 listHidden=FALSE;
@@ -387,27 +527,47 @@ void Konsole::init(const char* _pgm, QStrList & _args)
387 cfg.setGroup("Tabs"); 527 cfg.setGroup("Tabs");
388 tmp=cfg.readEntry("Position","Bottom"); 528
389 if(tmp=="Top") { 529 tabMenu = new QPopupMenu(this);
530 tm_bottom = tabMenu->insertItem(tr("Bottom" ));
531 tm_top = tabMenu->insertItem(tr("Top"));
532 tm_hidden = tabMenu->insertItem(tr("Hidden"));
533
534 configMenu->insertItem(tr("Tabs"), tabMenu);
535
536 tmp=cfg.readEntry("Position","Top");
537 if(tmp=="Top")
538 {
390 tab->setTabPosition(QTabWidget::Top); 539 tab->setTabPosition(QTabWidget::Top);
391 configMenu->insertItem( tr( "Tabs on Bottom" ) ); 540 tab->getTabBar()->show();
392 } else { 541 tabPos = tm_top;
542 }
543 else if (tmp=="Bottom")
544 {
393 tab->setTabPosition(QTabWidget::Bottom); 545 tab->setTabPosition(QTabWidget::Bottom);
394 configMenu->insertItem(tr("Tabs on Top")); 546 tab->getTabBar()->show();
395 } 547 tabPos = tm_bottom;
396 configMenu->insertSeparator(2); 548 }
397 549 else
398 colorMenu->insertItem(tr( "Green on Black")); 550 {
399 colorMenu->insertItem(tr( "Black on White")); 551 tab->getTabBar()->hide();
400 colorMenu->insertItem(tr( "White on Black")); 552 tab->setMargin(tab->margin());
401 colorMenu->insertItem(tr( "Black on Transparent")); 553 tabPos = tm_hidden;
402 colorMenu->insertItem(tr( "Black on Red")); 554 }
403 colorMenu->insertItem(tr( "Red on Black")); 555
404 colorMenu->insertItem(tr( "Green on Yellow")); 556 cm_bw = colorMenu->insertItem(tr( "Black on White"));
405 colorMenu->insertItem(tr( "Blue on Magenta")); 557 cm_wb = colorMenu->insertItem(tr( "White on Black"));
406 colorMenu->insertItem(tr( "Magenta on Blue")); 558 cm_gb = colorMenu->insertItem(tr( "Green on Black"));
407 colorMenu->insertItem(tr( "Cyan on White")); 559 // cm_bt = colorMenu->insertItem(tr( "Black on Transparent"));
408 colorMenu->insertItem(tr( "White on Cyan")); 560 cm_br = colorMenu->insertItem(tr( "Black on Pink"));
409 colorMenu->insertItem(tr( "Blue on Black")); 561 cm_rb = colorMenu->insertItem(tr( "Pink on Black"));
410 colorMenu->insertItem(tr( "Amber on Black")); 562 cm_gy = colorMenu->insertItem(tr( "Green on Yellow"));
563 cm_bm = colorMenu->insertItem(tr( "Blue on Magenta"));
564 cm_mb = colorMenu->insertItem(tr( "Magenta on Blue"));
565 cm_cw = colorMenu->insertItem(tr( "Cyan on White"));
566 cm_wc = colorMenu->insertItem(tr( "White on Cyan"));
567 cm_bb = colorMenu->insertItem(tr( "Blue on Black"));
568 cm_ab = colorMenu->insertItem(tr( "Amber on Black"));
569 cm_default = colorMenu->insertItem(tr("default"));
411 570
412#ifdef QT_QWS_OPIE 571#ifdef QT_QWS_OPIE
572
413 colorMenu->insertItem(tr( "Custom")); 573 colorMenu->insertItem(tr( "Custom"));
@@ -415,14 +575,21 @@ void Konsole::init(const char* _pgm, QStrList & _args)
415 575
416 configMenu->insertItem( tr("Font"), fontList );
417 configMenu->insertItem(tr( "Colors") ,colorMenu); 576 configMenu->insertItem(tr( "Colors") ,colorMenu);
418 577
419 connect( fontList, SIGNAL( activated(int) ), this, SLOT( fontChanged(int) )); 578 sessionList = new QPopupMenu(this);
579 sessionList-> insertItem ( Resource::loadPixmap ( "qkonsole/qkonsole" ), tr( "new session" ), this,
580 SLOT(newSession()) );
581
582 // connect( fontList, SIGNAL( activated(int) ), this, SLOT( fontChanged(int) ));
420 connect( configMenu, SIGNAL( activated(int) ), this, SLOT( configMenuSelected(int) )); 583 connect( configMenu, SIGNAL( activated(int) ), this, SLOT( configMenuSelected(int) ));
421 connect( colorMenu, SIGNAL( activated(int) ), this, SLOT( colorMenuIsSelected(int) )); 584 connect( colorMenu, SIGNAL( activated(int) ), this, SLOT( colorMenuIsSelected(int) ));
585 connect( tabMenu, SIGNAL( activated(int) ), this, SLOT( tabMenuSelected(int) ));
422 connect( scrollMenu, SIGNAL(activated(int)),this,SLOT(scrollMenuSelected(int))); 586 connect( scrollMenu, SIGNAL(activated(int)),this,SLOT(scrollMenuSelected(int)));
423 connect(editCommandListMenu,SIGNAL(activated(int)),this,SLOT(editCommandListMenuSelected(int))); 587 connect(editCommandListMenu,SIGNAL(activated(int)),this,SLOT(editCommandListMenuSelected(int)));
588 connect( sessionList, SIGNAL(activated(int)), this, SLOT( sessionListSelected(int) ) );
424 589
425 menuBar->insertItem( tr("Options"), configMenu ); 590 menuBar->insertItem( tr("View"), configMenu );
591 menuBar->insertItem( tr("Fonts"), fontList );
592 menuBar->insertItem( tr("Sessions"), sessionList );
426 593
427 QToolBar *toolbar = new QToolBar( this ); 594 toolBar = new QToolBar( this );
428 595
@@ -431,22 +598,32 @@ void Konsole::init(const char* _pgm, QStrList & _args)
431 // Button Commands 598 // Button Commands
432 a = new QAction( tr("New"), Resource::loadPixmap( "konsole" ), QString::null, 0, this, 0 ); 599 a = new QAction( tr("New"), Resource::loadPixmap( "konsole/Terminal" ), QString::null, 0, this, 0 );
433 connect( a, SIGNAL( activated() ), this, SLOT( newSession() ) ); a->addTo( toolbar ); 600 connect( a, SIGNAL( activated() ), this, SLOT( newSession() ) );
601 a->addTo( toolBar );
602
603 a = new QAction( tr("Full Screen"), Resource::loadPixmap( "fullscreen" ), QString::null, 0, this, 0 );
604 connect( a, SIGNAL( activated() ), this, SLOT( toggleFullScreen() ) );
605 a->addTo( toolBar );
606
607 a = new QAction( tr("Zoom"), Resource::loadPixmap( "zoom" ), QString::null, 0, this, 0 );
608 connect( a, SIGNAL( activated() ), this, SLOT( cycleZoom() ) );
609 a->addTo( toolBar );
610
611
612 /*
434 a = new QAction( tr("Enter"), Resource::loadPixmap( "konsole/enter" ), QString::null, 0, this, 0 ); 613 a = new QAction( tr("Enter"), Resource::loadPixmap( "konsole/enter" ), QString::null, 0, this, 0 );
435 connect( a, SIGNAL( activated() ), this, SLOT( hitEnter() ) ); a->addTo( toolbar ); 614 connect( a, SIGNAL( activated() ), this, SLOT( hitEnter() ) ); a->addTo( toolBar );
436 a = new QAction( tr("Space"), Resource::loadPixmap( "konsole/space" ), QString::null, 0, this, 0 ); 615 a = new QAction( tr("Space"), Resource::loadPixmap( "konsole/space" ), QString::null, 0, this, 0 );
437 connect( a, SIGNAL( activated() ), this, SLOT( hitSpace() ) ); a->addTo( toolbar ); 616 connect( a, SIGNAL( activated() ), this, SLOT( hitSpace() ) ); a->addTo( toolBar );
438 a = new QAction( tr("Tab"), Resource::loadPixmap( "konsole/tab" ), QString::null, 0, this, 0 ); 617 a = new QAction( tr("Tab"), Resource::loadPixmap( "konsole/tab" ), QString::null, 0, this, 0 );
439 connect( a, SIGNAL( activated() ), this, SLOT( hitTab() ) ); a->addTo( toolbar ); 618 connect( a, SIGNAL( activated() ), this, SLOT( hitTab() ) ); a->addTo( toolBar );
619 */
620 /*
440 a = new QAction( tr("Up"), Resource::loadPixmap( "konsole/up" ), QString::null, 0, this, 0 ); 621 a = new QAction( tr("Up"), Resource::loadPixmap( "konsole/up" ), QString::null, 0, this, 0 );
441 connect( a, SIGNAL( activated() ), this, SLOT( hitUp() ) ); a->addTo( toolbar ); 622 connect( a, SIGNAL( activated() ), this, SLOT( hitUp() ) ); a->addTo( toolBar );
442 a = new QAction( tr("Down"), Resource::loadPixmap( "konsole/down" ), QString::null, 0, this, 0 ); 623 a = new QAction( tr("Down"), Resource::loadPixmap( "konsole/down" ), QString::null, 0, this, 0 );
443 connect( a, SIGNAL( activated() ), this, SLOT( hitDown() ) ); a->addTo( toolbar ); 624 connect( a, SIGNAL( activated() ), this, SLOT( hitDown() ) ); a->addTo( toolBar );
444 a = new QAction( tr("Paste"), Resource::loadPixmap( "paste" ), QString::null, 0, this, 0 );
445 connect( a, SIGNAL( activated() ), this, SLOT( hitPaste() ) ); a->addTo( toolbar );
446/*
447 a = new QAction( tr("Up"), Resource::loadPixmap( "up" ), QString::null, 0, this, 0 );
448 connect( a, SIGNAL( activated() ), this, SLOT( hitUp() ) ); a->addTo( toolbar );
449 a = new QAction( tr("Down"), Resource::loadPixmap( "down" ), QString::null, 0, this, 0 );
450 connect( a, SIGNAL( activated() ), this, SLOT( hitDown() ) ); a->addTo( toolbar );
451*/ 625*/
626 a = new QAction( tr("Paste"), Resource::loadPixmap( "paste" ), QString::null, 0, this, 0 );
627 connect( a, SIGNAL( activated() ), this, SLOT( hitPaste() ) );
628 a->addTo( toolBar );
452 629
@@ -456,10 +633,11 @@ void Konsole::init(const char* _pgm, QStrList & _args)
456 commonCombo = new QComboBox( secondToolBar ); 633 commonCombo = new QComboBox( secondToolBar );
457 commonCombo->setMaximumWidth(236); 634 // commonCombo->setMaximumWidth(236);
458 635
459 editCommandListMenu->insertItem( tr( "Quick Edit" ) ); 636 ec_quick = editCommandListMenu->insertItem( tr( "Quick Edit" ) );
460 if( listHidden) { 637 if( listHidden)
638 {
461 secondToolBar->hide(); 639 secondToolBar->hide();
462 editCommandListMenu->setItemEnabled(-23 ,FALSE); 640 editCommandListMenu->setItemEnabled(ec_quick ,FALSE);
463 } 641 }
464 editCommandListMenu->insertItem(tr( "Edit" ) ); 642 ec_edit = editCommandListMenu->insertItem(tr( "Edit" ) );
465 643
@@ -478,5 +656,5 @@ void Konsole::init(const char* _pgm, QStrList & _args)
478 656
479 scrollMenu->insertItem(tr( "None" )); 657 sm_none = scrollMenu->insertItem(tr( "None" ));
480 scrollMenu->insertItem(tr( "Left" )); 658 sm_left = scrollMenu->insertItem(tr( "Left" ));
481 scrollMenu->insertItem(tr( "Right" )); 659 sm_right = scrollMenu->insertItem(tr( "Right" ));
482// scrollMenu->insertSeparator(4); 660// scrollMenu->insertSeparator(4);
@@ -486,11 +664,24 @@ void Konsole::init(const char* _pgm, QStrList & _args)
486 664
487 int jut = configMenu->insertItem(tr( "Wrap" )); 665 configMenu->insertItem(tr( "History" ), this, SLOT(historyDialog()));
666
667 cm_wrap = configMenu->insertItem(tr( "Wrap" ));
488 cfg.setGroup("ScrollBar"); 668 cfg.setGroup("ScrollBar");
489 configMenu->setItemChecked(jut, cfg.readBoolEntry("HorzScroll",0)); 669 configMenu->setItemChecked(cm_wrap, cfg.readBoolEntry("HorzScroll",0));
490 670
491 jut = configMenu->insertItem(tr( "Use Beep" )); 671 cm_beep = configMenu->insertItem(tr( "Use Beep" ));
492 cfg.setGroup("Menubar"); 672 cfg.setGroup("Menubar");
673 configMenu->setItemChecked(cm_beep, cfg.readBoolEntry("useBeep",0));
493 674
494 configMenu->setItemChecked(jut, cfg.readBoolEntry("useBeep",0)); 675 fullscreen_msg = new QLabel(this);
676 fullscreen_msg-> setAlignment ( AlignCenter | SingleLine );
677 fullscreen_msg-> hide();
678 fullscreen_msg-> setSizePolicy ( QSizePolicy ( QSizePolicy::Expanding, QSizePolicy::Expanding ));
679 fullscreen_msg-> setAutoResize(true);
680 fullscreen_msg-> setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
681 fullscreen_msg-> setText(tr("To exit fullscreen, tap here."));
495 682
683 fullscreen_timer = new QTimer(this);
684 connect(fullscreen_timer, SIGNAL(timeout()),
685 this, SLOT(fullscreenTimeout()));
686 show_fullscreen_msg = true;
496 687
@@ -512,3 +703,4 @@ void Konsole::init(const char* _pgm, QStrList & _args)
512 for (int i = 0; i < KeyTrans::count(); i++) 703 for (int i = 0; i < KeyTrans::count(); i++)
513 { KeyTrans* s = KeyTrans::find(i); 704 {
705 KeyTrans* s = KeyTrans::find(i);
514 assert( s ); 706 assert( s );
@@ -518,4 +710,32 @@ void Konsole::init(const char* _pgm, QStrList & _args)
518 se_args = _args; 710 se_args = _args;
711
712 cfg.setGroup("CommandLine");
713
714 if (cfg.hasKey("shell_args"))
715 {
716 QStringList se_args_list = cfg.readListEntry("shell_args",'|');
717 for(uint i = 0; i < se_args_list.count(); i++)
718 {
719 se_args.prepend(se_args_list[se_args_list.count() - i - 1].latin1());
720 }
721 }
722 else
723 {
519 se_args.prepend("--login"); 724 se_args.prepend("--login");
725 }
726
727 se_pgm = cfg.readEntry("shell_bin", QString(se_pgm));
728
729 // this is the "documentation" for those who know to look
730 if (! cfg.hasKey("shell_args"))
731 {
732 cfg.writeEntry("shell_args",QStringList::fromStrList(se_args),'|');
733 }
734 if (! cfg.hasKey("shell_bin"))
735 {
736 cfg.writeEntry("shell_bin",QString(se_pgm));
737 }
738
520parseCommandLine(); 739parseCommandLine();
740
521 // read and apply default values /////////////////////////////////////////// 741 // read and apply default values ///////////////////////////////////////////
@@ -525,2 +745,7 @@ parseCommandLine();
525 defaultSize = size(); 745 defaultSize = size();
746
747
748 /* allows us to catch cancel/escape */
749 reparent ( 0, WStyle_Customize | WStyle_NoBorder,
750 QPoint ( 0, 0 ));
526} 751}
@@ -529,3 +754,4 @@ void Konsole::show()
529{ 754{
530 if ( !nsessions ) { 755 if ( !nsessions )
756 {
531 newSession(); 757 newSession();
@@ -543,11 +769,176 @@ Konsole::~Konsole()
543{ 769{
544 while (nsessions > 0) { 770 while (nsessions > 0)
545 doneSession(getTe()->currentSession, 0); 771 {
772 doneSession(getTe(), 0);
773 }
774}
775
776void
777Konsole::historyDialog()
778{
779 QDialog *d = new QDialog ( this, "histdlg", true );
780 // d-> setCaption ( tr( "History" ));
781
782 QBoxLayout *lay = new QVBoxLayout ( d, 4, 4 );
783
784 QLabel *l = new QLabel ( tr( "History Lines:" ), d );
785 lay-> addWidget ( l );
786
787 Config cfg("Qkonsole");
788 cfg.setGroup("History");
789 int hist = cfg.readNumEntry("history_lines",300);
790 int avg_line = cfg.readNumEntry("avg_line_length",60);
791
792 QSpinBox *spin = new QSpinBox ( 1, 100000, 20, d );
793 spin-> setValue ( hist );
794 spin-> setWrapping ( true );
795 spin-> setButtonSymbols ( QSpinBox::PlusMinus );
796 lay-> addWidget ( spin );
797
798 if ( d-> exec ( ) == QDialog::Accepted )
799 {
800 cfg.writeEntry("history_lines", spin->value());
801 cfg.writeEntry("avg_line_length", avg_line);
802 if (getTe() != NULL)
803 {
804 getTe()->currentSession->setHistory(true);
805 }
806 }
807
808 delete d;
809}
810
811
812void Konsole::cycleZoom()
813{
814 TEWidget* te = getTe();
815 QFont font = te->getVTFont();
816 int size = font.pointSize();
817 changeFontSize(1);
818 font = te->getVTFont();
819 if (font.pointSize() <= size)
820 {
821 do
822 {
823 font = te->getVTFont();
824 size = font.pointSize();
825 changeFontSize(-1);
826 font = te->getVTFont();
827 }
828 while (font.pointSize() < size);
829 }
830}
831
832void Konsole::changeFontSize(int delta)
833{
834 // printf("delta font size %d\n", delta);
835 TEWidget* te = getTe();
836 QFont font = te->getVTFont();
837 int size = font.pointSize();
838 int closest = delta > 0? 10000 : -10000;
839 int closest_font = -1;
840 for(uint i = 0; i < fonts.count(); i++)
841 {
842 if (fonts.at(i)->getFont() == font)
843 {
844 if (delta > 0)
845 {
846 if (i+1 < fonts.count()
847 && fonts.at(i+1)->getFamilyNum() == fonts.at(i)->getFamilyNum())
848 {
849 setFont(i+1);
850 printf("font %d\n", i+1);
851 return;
852 }
853 }
854 else if (delta < 0)
855 {
856 if (i > 0
857 && fonts.at(i-1)->getFamilyNum() == fonts.at(i)->getFamilyNum())
858 {
859 setFont(i-1);
860 printf("font %d\n", i-1);
861 return;
862 }
863 }
864 }
865 int fsize = fonts.at(i)->getSize();
866 printf("%d size=%d fsize=%d closest=%d\n", i, size, fsize, closest);
867 if ((delta > 0 && fsize > size && fsize < closest)
868 || (delta < 0 && fsize < size && fsize > closest))
869 {
870 closest = fsize;
871 closest_font = i;
872 }
873 }
874 if (closest_font >= 0)
875 {
876 printf("font closest %d (%d)\n", closest_font, closest);
877 setFont(closest_font);
878 }
546 } 879 }
547 880
548 Config cfg("Konsole"); 881int Konsole::findFont(QString name, int size, bool exactMatch)
549 cfg.setGroup("Konsole"); 882{
550 cfg.writeEntry("FontID", cfont); 883 for(uint i = 0; i < fonts.count(); i++)
884 {
885 if (fonts.at(i)->getName() == name
886 && fonts.at(i)->getSize() == size)
887 {
888 return(i);
889 }
890 }
891 if (exactMatch)
892 {
893 return(-1);
894 }
895 for(uint i = 0; i < fonts.count(); i++)
896 {
897 if (fonts.at(i)->getSize() == size)
898 {
899 return(i);
900 }
901 }
902 return(-1);
551} 903}
552 904
905void Konsole::setFont(int f)
906{
907 VTFont* font = fonts.at(f);
908 if (font)
909 {
910 TEWidget* te = getTe();
911 if (te != 0)
912 {
913 te->setVTFont(font->getFont());
914 }
915 cfont = f;
916
917 int familyNum = font->getFamilyNum();
918 int size = font->getSize();
919 printf("familyNum = %d size = %d count=%d\n", familyNum, size,
920 fontList->count());
921 for(int i = 0; i < (int)fontList->count(); i++)
922 {
923 fontList->setItemChecked(i + 1000, i == familyNum);
924 }
925 for(int i = 0; i < (int)fonts.count(); i++)
926 {
927 fontList->setItemChecked(i, fonts.at(i)->getFamilyNum() == familyNum
928 && fonts.at(i)->getSize() == size);
929 }
930 Config cfg("Qkonsole");
931 cfg.setGroup("Font");
932 QString ss = "Session"+ QString::number(tab->currentPageIndex()+1);
933 if (tab->currentPageIndex() == 0)
934 {
935 cfg.writeEntry("FontName", fonts.at(cfont)->getFamily());
936 cfg.writeEntry("FontSize", fonts.at(cfont)->getSize());
937 }
938 cfg.writeEntry("FontName"+ss, fonts.at(cfont)->getFamily());
939 cfg.writeEntry("FontSize"+ss, fonts.at(cfont)->getSize());
940 }
941}
942
943#if 0
553void Konsole::fontChanged(int f) 944void Konsole::fontChanged(int f)
@@ -555,4 +946,6 @@ void Konsole::fontChanged(int f)
555 VTFont* font = fonts.at(f); 946 VTFont* font = fonts.at(f);
556 if (font != 0) { 947 if (font != 0)
557 for(uint i = 0; i < fonts.count(); i++) { 948 {
949 for(uint i = 0; i < fonts.count(); i++)
950 {
558 fontList->setItemChecked(i, (i == (uint) f) ? TRUE : FALSE); 951 fontList->setItemChecked(i, (i == (uint) f) ? TRUE : FALSE);
@@ -563,3 +956,4 @@ void Konsole::fontChanged(int f)
563 TEWidget* te = getTe(); 956 TEWidget* te = getTe();
564 if (te != 0) { 957 if (te != 0)
958 {
565 te->setVTFont(font->getFont()); 959 te->setVTFont(font->getFont());
@@ -568,2 +962,3 @@ void Konsole::fontChanged(int f)
568} 962}
963#endif
569 964
@@ -573,7 +968,11 @@ void Konsole::enterCommand(int c)
573 TEWidget* te = getTe(); 968 TEWidget* te = getTe();
574 if (te != 0) { 969 if (te != 0)
575 if(!commonCombo->editable()) { 970 {
971 if(!commonCombo->editable())
972 {
576 QString text = commonCombo->text(c); //commonCmds[c]; 973 QString text = commonCombo->text(c); //commonCmds[c];
577 te->emitText(text); 974 te->emitText(text);
578 } else { 975 }
976 else
977 {
579 changeCommand( commonCombo->text(c), c); 978 changeCommand( commonCombo->text(c), c);
@@ -586,3 +985,4 @@ void Konsole::hitEnter()
586 TEWidget* te = getTe(); 985 TEWidget* te = getTe();
587 if (te != 0) { 986 if (te != 0)
987 {
588 te->emitText(QString("\r")); 988 te->emitText(QString("\r"));
@@ -594,3 +994,4 @@ void Konsole::hitSpace()
594 TEWidget* te = getTe(); 994 TEWidget* te = getTe();
595 if (te != 0) { 995 if (te != 0)
996 {
596 te->emitText(QString(" ")); 997 te->emitText(QString(" "));
@@ -602,3 +1003,4 @@ void Konsole::hitTab()
602 TEWidget* te = getTe(); 1003 TEWidget* te = getTe();
603 if (te != 0) { 1004 if (te != 0)
1005 {
604 te->emitText(QString("\t")); 1006 te->emitText(QString("\t"));
@@ -610,3 +1012,4 @@ void Konsole::hitPaste()
610 TEWidget* te = getTe(); 1012 TEWidget* te = getTe();
611 if (te != 0) { 1013 if (te != 0)
1014 {
612 te->pasteClipboard(); 1015 te->pasteClipboard();
@@ -618,3 +1021,4 @@ void Konsole::hitUp()
618 TEWidget* te = getTe(); 1021 TEWidget* te = getTe();
619 if (te != 0) { 1022 if (te != 0)
1023 {
620 QKeyEvent ke( QKeyEvent::KeyPress, Qt::Key_Up, 0, 0); 1024 QKeyEvent ke( QKeyEvent::KeyPress, Qt::Key_Up, 0, 0);
@@ -627,3 +1031,4 @@ void Konsole::hitDown()
627 TEWidget* te = getTe(); 1031 TEWidget* te = getTe();
628 if (te != 0) { 1032 if (te != 0)
1033 {
629 QKeyEvent ke( QKeyEvent::KeyPress, Qt::Key_Down, 0, 0); 1034 QKeyEvent ke( QKeyEvent::KeyPress, Qt::Key_Down, 0, 0);
@@ -637,8 +1042,12 @@ void Konsole::hitDown()
637 */ 1042 */
638QSize Konsole::calcSize(int columns, int lines) { 1043QSize Konsole::calcSize(int columns, int lines)
1044{
639 TEWidget* te = getTe(); 1045 TEWidget* te = getTe();
640 if (te != 0) { 1046 if (te != 0)
1047 {
641 QSize size = te->calcSize(columns, lines); 1048 QSize size = te->calcSize(columns, lines);
642 return size; 1049 return size;
643 } else { 1050 }
1051 else
1052 {
644 QSize size; 1053 QSize size;
@@ -665,3 +1074,5 @@ void Konsole::setColLin(int columns, int lines)
665 resize(defaultSize); 1074 resize(defaultSize);
666 } else { 1075 }
1076 else
1077 {
667 resize(calcSize(columns, lines)); 1078 resize(calcSize(columns, lines));
@@ -699,5 +1110,4 @@ void Konsole::setFont(int fontno)
699 1110
700void Konsole::changeColumns(int columns) 1111void Konsole::changeColumns(int /*columns*/)
701{ 1112{ //FIXME this seems to cause silliness when reset command is executed
702 //FIXME this seems to cause silliness when reset command is executed
703 // qDebug("change columns"); 1113 // qDebug("change columns");
@@ -714,6 +1124,25 @@ void Konsole::changeColumns(int columns)
714 1124
715void Konsole::doneSession(TESession*, int ) 1125void Konsole::doneSession(TEWidget* te, int )
1126{
1127 // TEWidget *te = NULL;
1128 // if (sess->currentSession == tab->currentPage()) {
1129 // printf("done current session\n");
1130 // te = getTe();
1131 // } else {
1132 // int currentPage = tab->currentPageIndex();
1133 // printf("done not current session\n");
1134 // for(int i = 0; i < nsessions; i++) {
1135 // tab->setCurrentPage(i);
1136 // printf("find session %d tab page %x session %x\n",
1137 // i, tab->currentPage(), sess->currentSession);
1138 // if (tab->currentPage() == sess->currentSession) {
1139 // printf("found session %d\n", i);
1140 // te = tab->currentPage();
1141 // break;
1142 // }
1143 // }
1144 // tab->setCurrentPage(currentPage);
1145 // }
1146 if (te != 0)
716{ 1147{
717 TEWidget *te = getTe();
718 if (te != 0) {
719 te->currentSession->setConnect(FALSE); 1148 te->currentSession->setConnect(FALSE);
@@ -722,6 +1151,7 @@ void Konsole::doneSession(TESession*, int )
722 delete te; 1151 delete te;
1152 sessionList->removeItem(nsessions);
723 nsessions--; 1153 nsessions--;
724 } 1154 }
725 1155 if (nsessions == 0)
726 if (nsessions == 0) { 1156 {
727 close(); 1157 close();
@@ -730,11 +1160,39 @@ void Konsole::doneSession(TESession*, int )
730 1160
731void Konsole::newSession() { 1161void Konsole::changeTitle(TEWidget* te, QString newTitle )
732 if(nsessions < 15) { // seems to be something weird about 16 tabs on the Zaurus.... memory? 1162{
1163 if (te == getTe())
1164 {
1165 setCaption(newTitle + " - QKonsole");
1166 }
1167}
1168
1169
1170void Konsole::newSession()
1171{
1172 if(nsessions < 15)
1173 { // seems to be something weird about 16 tabs on the Zaurus.... memory?
733 TEWidget* te = new TEWidget(tab); 1174 TEWidget* te = new TEWidget(tab);
734 Config c("Konsole"); 1175 Config cfg("Qkonsole");
735 c.setGroup("Menubar"); 1176 cfg.setGroup("Menubar");
736 te->useBeep=c.readBoolEntry("useBeep",0); 1177
1178 // FIXME use more defaults from config file
1179 te->useBeep=cfg.readBoolEntry("useBeep",0);
737 1180
738// te->setBackgroundMode(PaletteBase); //we want transparent!! 1181// te->setBackgroundMode(PaletteBase); //we want transparent!!
1182
1183 cfg.setGroup("Font");
1184 QString sn = "Session" + QString::number(nsessions+1);
1185 printf("read font session %s\n", sn.latin1());
1186 QString fontName = cfg.readEntry("FontName"+sn,
1187 cfg.readEntry("FontName",
1188 fonts.at(cfont)->getFamily()));
1189 int fontSize = cfg.readNumEntry("FontSize"+sn,
1190 cfg.readNumEntry("FontSize",
1191 fonts.at(cfont)->getSize()));
1192 cfont = findFont(fontName, fontSize, false);
1193 printf("lookup font %s size %d got %d\n", fontName.latin1(), fontSize, cfont);
1194 if (cfont < 0)
1195 cfont = 0;
739 te->setVTFont(fonts.at(cfont)->getFont()); 1196 te->setVTFont(fonts.at(cfont)->getFont());
1197
740 tab->addTab(te); 1198 tab->addTab(te);
@@ -742,3 +1200,10 @@ void Konsole::newSession() {
742 te->currentSession = se; 1200 te->currentSession = se;
743 connect( se, SIGNAL(done(TESession*,int)), this, SLOT(doneSession(TESession*,int)) ); 1201 connect( se, SIGNAL(done(TEWidget*,int)), this, SLOT(doneSession(TEWidget*,int)) );
1202 connect( se, SIGNAL(changeTitle(TEWidget*,QString)), this,
1203 SLOT(changeTitle(TEWidget*,QString)) );
1204 connect(te, SIGNAL(changeFontSize(int)), this, SLOT(changeFontSize(int)));
1205 connect(te, SIGNAL(changeSession(int)), this, SLOT(changeSession(int)));
1206 connect(te, SIGNAL(newSession()), this, SLOT(newSession()));
1207 connect(te, SIGNAL(toggleFullScreen()), this, SLOT(toggleFullScreen()));
1208 connect(te, SIGNAL(setFullScreen(bool)), this, SLOT(setFullScreen(bool)));
744 se->run(); 1209 se->run();
@@ -746,6 +1211,7 @@ void Konsole::newSession() {
746 se->setHistory(b_scroll); 1211 se->setHistory(b_scroll);
747 tab->setCurrentPage(nsessions);
748 nsessions++; 1212 nsessions++;
1213 sessionList->insertItem(QString::number(nsessions), nsessions);
1214 sessionListSelected(nsessions);
749 doWrap(); 1215 doWrap();
750 setColor(); 1216 setColor(nsessions-1);
751 } 1217 }
@@ -753,6 +1219,10 @@ void Konsole::newSession() {
753 1219
754TEWidget* Konsole::getTe() { 1220TEWidget* Konsole::getTe()
755 if (nsessions) { 1221{
1222 if (nsessions)
1223 {
756 return (TEWidget *) tab->currentPage(); 1224 return (TEWidget *) tab->currentPage();
757 } else { 1225 }
1226 else
1227 {
758 return 0; 1228 return 0;
@@ -761,7 +1231,66 @@ TEWidget* Konsole::getTe() {
761 1231
762void Konsole::switchSession(QWidget* w) { 1232void Konsole::sessionListSelected(int id)
763 TEWidget* te = (TEWidget *) w; 1233{
1234 if (id < 0)
1235 {
1236 return;
1237 }
1238 QString selected = sessionList->text(id);
1239 EKNumTabBar *tabBar = tab->getTabBar();
1240
1241 int n = 0;
1242 for(int i = 0; n < tabBar->count(); i++)
1243 {
1244 if (tabBar->tab(i))
1245 {
1246 // printf("selected = %s tab %d = %s\n", selected.latin1(),
1247 // i, tabBar->tab(i)->text().latin1());
1248 if (tabBar->tab(i)->text() == selected)
1249 {
1250 tab->setCurrentPage(i);
1251 break;
1252 }
1253 n++;
1254 }
1255 }
1256}
764 1257
1258
1259void Konsole::changeSession(int delta)
1260{
1261 printf("delta session %d\n", delta);
1262 QTabBar *tabBar = tab->getTabBar();
1263 int i = tabBar->tab(tabBar->currentTab())->text().toInt() - 1;
1264 i += delta;
1265 if (i < 0)
1266 i += tabBar->count();
1267 if (i >= tabBar->count())
1268 i -= tabBar->count();
1269
1270 QString selected = QString::number(i+1);
1271 int n = 0;
1272 for(int i = 0; n < tabBar->count(); i++)
1273 {
1274 if (tabBar->tab(i))
1275 {
1276 printf("selected = %s tab %d = %s\n", selected.latin1(),
1277 i, tabBar->tab(i)->text().latin1());
1278 if (tabBar->tab(i)->text() == selected)
1279 {
1280 tab->setCurrentPage(i);
1281 break;
1282 }
1283 n++;
1284 }
1285 }
1286}
1287
1288void Konsole::switchSession(QWidget* w)
1289{
1290 TEWidget* te = (TEWidget *) w;
765 QFont teFnt = te->getVTFont(); 1291 QFont teFnt = te->getVTFont();
766 for(uint i = 0; i < fonts.count(); i++) { 1292 int familyNum = -1;
1293
1294 for(uint i = 0; i < fonts.count(); i++)
1295 {
767 VTFont *fnt = fonts.at(i); 1296 VTFont *fnt = fonts.at(i);
@@ -769,9 +1298,103 @@ void Konsole::switchSession(QWidget* w) {
769 fontList->setItemChecked(i, cf); 1298 fontList->setItemChecked(i, cf);
770 if (cf) { 1299 if (cf)
1300 {
771 cfont = i; 1301 cfont = i;
1302 familyNum = fnt->getFamilyNum();
1303 }
1304 }
1305 for(int i = 0; i < (int)fontList->count(); i++)
1306 {
1307 fontList->setItemChecked(i + 1000, i == familyNum);
1308 }
1309 if (! te->currentSession->Title().isEmpty() )
1310 {
1311 setCaption(te->currentSession->Title() + " - QKonsole");
1312 }
1313 else
1314 {
1315 setCaption( "Qkonsole" );
1316 }
1317 // colorMenuSelected(te->color_menu_item);
772 } 1318 }
1319
1320
1321void Konsole::toggleFullScreen()
1322{
1323 setFullScreen(! fullscreen);
1324}
1325
1326void Konsole::setFullScreen ( bool b )
1327{
1328 static QSize normalsize;
1329 static bool listHidden;
1330
1331 if (b == fullscreen)
1332 {
1333 return;
1334 }
1335
1336 fullscreen = b;
1337
1338 if ( b )
1339 {
1340 if ( !normalsize. isValid ( ))
1341 {
1342 normalsize = size ( );
773 } 1343 }
1344
1345 setFixedSize ( qApp-> desktop ( )-> size ( ));
1346 showNormal ( );
1347 reparent ( 0, WStyle_Customize | WStyle_NoBorder,
1348 QPoint ( 0, 0 ));
1349 showFullScreen ( );
1350
1351 menuToolBar->hide();
1352 toolBar->hide();
1353 listHidden = secondToolBar->isHidden();
1354 secondToolBar->hide();
1355 // commonCombo->hide();
1356 tab->getTabBar()->hide();
1357 tab->setMargin(tab->margin());
1358
1359 if (show_fullscreen_msg)
1360 {
1361 fullscreen_msg-> move(tab->x() + tab->width()/2 - fullscreen_msg->width()/2,
1362 qApp->desktop()->height()/16 - fullscreen_msg->height()/2);
1363 fullscreen_msg->show();
1364 fullscreen_timer->start(3000, true);
1365 show_fullscreen_msg = false;
1366 }
1367 }
1368 else
1369 {
1370 showNormal ( );
1371 reparent ( 0, WStyle_Customize, QPoint ( 0, 0 ));
1372 resize ( normalsize );
1373 showMaximized ( );
1374 normalsize = QSize ( );
1375
1376 menuToolBar->show();
1377 toolBar->show();
1378 if(! listHidden)
1379 {
1380 secondToolBar->show();
1381 }
1382 // commonCombo->show();
1383 menuToolBar->show();
1384 if (tabPos != tm_hidden)
1385 {
1386 tab->getTabBar()->show();
1387 }
1388 }
1389 tab->setMargin(tab->margin()); // cause setup to run
1390}
1391
1392
1393void Konsole::fullscreenTimeout()
1394{
1395 fullscreen_msg->hide();
774} 1396}
775 1397
776void Konsole::colorMenuIsSelected(int iD) { 1398void Konsole::colorMenuIsSelected(int iD)
1399{
777 fromMenu = TRUE; 1400 fromMenu = TRUE;
@@ -781,4 +1404,7 @@ void Konsole::colorMenuIsSelected(int iD) {
781/// ------------------------------- some new stuff by L.J. Potter 1404/// ------------------------------- some new stuff by L.J. Potter
1405
1406
782void Konsole::colorMenuSelected(int iD) 1407void Konsole::colorMenuSelected(int iD)
783{ // this is NOT pretty, elegant or anything else besides functional 1408{
1409 // this is NOT pretty, elegant or anything else besides functional
784// QString temp; 1410// QString temp;
@@ -787,13 +1413,30 @@ void Konsole::colorMenuSelected(int iD)
787 TEWidget* te = getTe(); 1413 TEWidget* te = getTe();
788 Config cfg("Konsole"); 1414 Config cfg("Qkonsole");
789 cfg.setGroup("Colors"); 1415 cfg.setGroup("Colors");
790// QColor foreground; 1416
791// QColor background;
792 colorMenu->setItemChecked(lastSelectedMenu,FALSE);
793 ColorEntry m_table[TABLE_COLORS]; 1417 ColorEntry m_table[TABLE_COLORS];
794 const ColorEntry * defaultCt=te->getdefaultColorTable(); 1418 const ColorEntry * defaultCt=te->getdefaultColorTable();
795 /////////// fore back 1419
796 int i; 1420 int i;
797 if(iD==-9) { // default default 1421
798 for (i = 0; i < TABLE_COLORS; i++) { 1422 // te->color_menu_item = iD;
1423
1424 colorMenu->setItemChecked(cm_ab,FALSE);
1425 colorMenu->setItemChecked(cm_bb,FALSE);
1426 colorMenu->setItemChecked(cm_wc,FALSE);
1427 colorMenu->setItemChecked(cm_cw,FALSE);
1428 colorMenu->setItemChecked(cm_mb,FALSE);
1429 colorMenu->setItemChecked(cm_bm,FALSE);
1430 colorMenu->setItemChecked(cm_gy,FALSE);
1431 colorMenu->setItemChecked(cm_rb,FALSE);
1432 colorMenu->setItemChecked(cm_br,FALSE);
1433 colorMenu->setItemChecked(cm_wb,FALSE);
1434 colorMenu->setItemChecked(cm_bw,FALSE);
1435 colorMenu->setItemChecked(cm_gb,FALSE);
1436
1437 if(iD==cm_default)
1438 { // default default
1439 printf("default colors\n");
1440 for (i = 0; i < TABLE_COLORS; i++)
1441 {
799 m_table[i].color = defaultCt[i].color; 1442 m_table[i].color = defaultCt[i].color;
@@ -801,85 +1444,87 @@ void Konsole::colorMenuSelected(int iD)
801 m_table[i].transparent=1; 1444 m_table[i].transparent=1;
802 cfg.writeEntry("Schema","9"); 1445 colorMenu->setItemChecked(cm_default,TRUE);
803 colorMenu->setItemChecked(-9,TRUE); 1446 }
1447 te->setColorTable(m_table);
804 } 1448 }
805 } else { 1449 if(iD==cm_gb)
806 if(iD==-6) { // green black 1450 { // green black
807 foreground.setRgb(0x18,255,0x18); 1451 foreground.setRgb(100,255,100); // (0x18,255,0x18);
808 background.setRgb(0x00,0x00,0x00); 1452 background.setRgb(0x00,0x00,0x00);
809 cfg.writeEntry("Schema","6"); 1453 colorMenu->setItemChecked(cm_gb,TRUE);
810 colorMenu->setItemChecked(-6,TRUE);
811 } 1454 }
812 if(iD==-7) { // black white 1455 if(iD==cm_bw)
1456 { // black white
813 foreground.setRgb(0x00,0x00,0x00); 1457 foreground.setRgb(0x00,0x00,0x00);
814 background.setRgb(0xFF,0xFF,0xFF); 1458 background.setRgb(0xFF,0xFF,0xFF);
815 cfg.writeEntry("Schema","7"); 1459 colorMenu->setItemChecked(cm_bw,TRUE);
816 colorMenu->setItemChecked(-7,TRUE);
817 } 1460 }
818 if(iD==-8) { // white black 1461 if(iD==cm_wb)
1462 { // white black
819 foreground.setRgb(0xFF,0xFF,0xFF); 1463 foreground.setRgb(0xFF,0xFF,0xFF);
820 background.setRgb(0x00,0x00,0x00); 1464 background.setRgb(0x00,0x00,0x00);
821 cfg.writeEntry("Schema","8"); 1465 colorMenu->setItemChecked(cm_wb,TRUE);
822 colorMenu->setItemChecked(-8,TRUE);
823 } 1466 }
824 if(iD==-10) {// Black, Red 1467 if(iD==cm_br)
1468 {// Black, Red
825 foreground.setRgb(0x00,0x00,0x00); 1469 foreground.setRgb(0x00,0x00,0x00);
826 background.setRgb(0xB2,0x18,0x18); 1470 background.setRgb(255,85,85); //(0xB2,0x18,0x18);
827 cfg.writeEntry("Schema","10"); 1471 colorMenu->setItemChecked(cm_br,TRUE);
828 colorMenu->setItemChecked(-10,TRUE);
829 } 1472 }
830 if(iD==-11) {// Red, Black 1473 if(iD==cm_rb)
831 foreground.setRgb(230,31,31); //0xB2,0x18,0x18 1474 {// Red, Black
1475 foreground.setRgb(255,85,85);
832 background.setRgb(0x00,0x00,0x00); 1476 background.setRgb(0x00,0x00,0x00);
833 cfg.writeEntry("Schema","11"); 1477 colorMenu->setItemChecked(cm_rb,TRUE);
834 colorMenu->setItemChecked(-11,TRUE);
835 } 1478 }
836 if(iD==-12) {// Green, Yellow - is ugly 1479 if(iD==cm_gy)
1480 {// Green, Yellow - is ugly
837// foreground.setRgb(0x18,0xB2,0x18); 1481// foreground.setRgb(0x18,0xB2,0x18);
838 foreground.setRgb(36,139,10); 1482 foreground.setRgb(15,115,0);
839// background.setRgb(0xB2,0x68,0x18); 1483// background.setRgb(0xB2,0x68,0x18);
840 background.setRgb(255,255,0); 1484 background.setRgb(255,255,0);
841 cfg.writeEntry("Schema","12"); 1485 colorMenu->setItemChecked(cm_gy,TRUE);
842 colorMenu->setItemChecked(-12,TRUE); 1486 }
843 } 1487 if(iD==cm_bm)
844 if(iD==-13) {// Blue, Magenta 1488 {// Blue, Magenta
845 foreground.setRgb(0x18,0xB2,0xB2); 1489 foreground.setRgb(3,24,132);
846 background.setRgb(0x18,0x18,0xB2); 1490 background.setRgb(225,2,255);
847 cfg.writeEntry("Schema","13"); 1491 colorMenu->setItemChecked(cm_bm,TRUE);
848 colorMenu->setItemChecked(-13,TRUE); 1492 }
849 } 1493 if(iD==cm_mb)
850 if(iD==-14) {// Magenta, Blue 1494 {// Magenta, Blue
851 foreground.setRgb(0x18,0x18,0xB2); 1495 foreground.setRgb(225,2,255);
852 background.setRgb(0x18,0xB2,0xB2); 1496 background.setRgb(3,24,132);
853 cfg.writeEntry("Schema","14"); 1497 colorMenu->setItemChecked(cm_mb,TRUE);
854 colorMenu->setItemChecked(-14,TRUE); 1498 }
855 } 1499 if(iD==cm_cw)
856 if(iD==-15) {// Cyan, White 1500 {// Cyan, White
857 foreground.setRgb(0x18,0xB2,0xB2); 1501 foreground.setRgb(8,91,129);
858 background.setRgb(0xFF,0xFF,0xFF); 1502 background.setRgb(0xFF,0xFF,0xFF);
859 cfg.writeEntry("Schema","15"); 1503 colorMenu->setItemChecked(cm_cw,TRUE);
860 colorMenu->setItemChecked(-15,TRUE);
861 } 1504 }
862 if(iD==-16) {// White, Cyan 1505 if(iD==cm_wc)
863 background.setRgb(0x18,0xB2,0xB2); 1506 {// White, Cyan
1507 background.setRgb(8,91,129);
864 foreground.setRgb(0xFF,0xFF,0xFF); 1508 foreground.setRgb(0xFF,0xFF,0xFF);
865 cfg.writeEntry("Schema","16"); 1509 colorMenu->setItemChecked(cm_wc,TRUE);
866 colorMenu->setItemChecked(-16,TRUE);
867 } 1510 }
868 if(iD==-17) {// Black, Blue 1511 if(iD==cm_bb)
1512 {// Black, Blue
869 background.setRgb(0x00,0x00,0x00); 1513 background.setRgb(0x00,0x00,0x00);
870 foreground.setRgb(0x18,0xB2,0xB2); 1514 foreground.setRgb(127,147,225);
871 cfg.writeEntry("Schema","17"); 1515 colorMenu->setItemChecked(cm_bb,TRUE);
872 colorMenu->setItemChecked(-17,TRUE);
873 } 1516 }
874 if(iD==-18) {// Black, Gold 1517 if(iD==cm_ab)
1518 {// Black, Gold
875 background.setRgb(0x00,0x00,0x00); 1519 background.setRgb(0x00,0x00,0x00);
876 foreground.setRgb(255,215,0); 1520 foreground.setRgb(255,215,105);
877 cfg.writeEntry("Schema","18"); 1521 colorMenu->setItemChecked(cm_ab,TRUE);
878 colorMenu->setItemChecked(-18,TRUE);
879 } 1522 }
880#ifdef QT_QWS_OPIE 1523#ifdef QT_QWS_OPIE
881 if(iD==-19) { 1524 if(iD==-19)
1525 {
882// Custom 1526// Custom
883 qDebug("do custom"); 1527 qDebug("do custom");
884 if(fromMenu) { 1528 if(fromMenu)
1529 {
885 OColorPopupMenu* penColorPopupMenu = new OColorPopupMenu(Qt::black, this, "foreground color"); 1530 OColorPopupMenu* penColorPopupMenu = new OColorPopupMenu(Qt::black, this, "foreground color");
@@ -889,4 +1534,4 @@ void Konsole::colorMenuSelected(int iD)
889 } 1534 }
890 cfg.writeEntry("Schema","19"); 1535 if(!fromMenu)
891 if(!fromMenu) { 1536 {
892 foreground.setNamedColor(cfg.readEntry("foreground","")); 1537 foreground.setNamedColor(cfg.readEntry("foreground",""));
@@ -898,8 +1543,47 @@ void Konsole::colorMenuSelected(int iD)
898#endif 1543#endif
899 for (i = 0; i < TABLE_COLORS; i++) { 1544
900 if(i==0 || i == 10) { 1545 lastSelectedMenu = iD;
1546
1547 setColors(foreground, background);
1548
1549 QTabBar *tabBar = tab->getTabBar();
1550 QString ss = QString("Session%1").arg(tabBar->currentTab());
1551 // printf("current tab = %d\n", tabBar->currentTab());
1552
1553 if (tabBar->currentTab() == 0)
1554 {
1555 cfg.writeEntry("foregroundRed",QString::number(foreground.red()));
1556 cfg.writeEntry("foregroundGreen",QString::number(foreground.green()));
1557 cfg.writeEntry("foregroundBlue",QString::number(foreground.blue()));
1558 cfg.writeEntry("backgroundRed",QString::number(background.red()));
1559 cfg.writeEntry("backgroundGreen",QString::number(background.green()));
1560 cfg.writeEntry("backgroundBlue",QString::number(background.blue()));
1561 }
1562 cfg.writeEntry("foregroundRed"+ss,QString::number(foreground.red()));
1563 cfg.writeEntry("foregroundGreen"+ss,QString::number(foreground.green()));
1564 cfg.writeEntry("foregroundBlue"+ss,QString::number(foreground.blue()));
1565 cfg.writeEntry("backgroundRed"+ss,QString::number(background.red()));
1566 cfg.writeEntry("backgroundGreen"+ss,QString::number(background.green()));
1567 cfg.writeEntry("backgroundBlue"+ss,QString::number(background.blue()));
1568
1569 update();
1570}
1571
1572void Konsole::setColors(QColor foreground, QColor background)
1573{
1574 int i;
1575 ColorEntry m_table[TABLE_COLORS];
1576 TEWidget* te = getTe();
1577 const ColorEntry * defaultCt=te->getdefaultColorTable();
1578
1579 for (i = 0; i < TABLE_COLORS; i++)
1580 {
1581 if(i==0 || i == 10)
1582 {
901 m_table[i].color = foreground; 1583 m_table[i].color = foreground;
902 } 1584 }
903 else if(i==1 || i == 11) { 1585 else if(i==1 || i == 11)
904 m_table[i].color = background; m_table[i].transparent=0; 1586 {
1587 m_table[i].color = background;
1588 m_table[i].transparent=0;
905 } 1589 }
@@ -908,39 +1592,48 @@ void Konsole::colorMenuSelected(int iD)
908 } 1592 }
909 }
910 lastSelectedMenu = iD;
911 te->setColorTable(m_table); 1593 te->setColorTable(m_table);
912 update();
913
914} 1594}
915 1595
916void Konsole::configMenuSelected(int iD) 1596void Konsole::tabMenuSelected(int id)
917{ 1597{
918// QString temp; 1598 Config cfg("Qkonsole");
919// qDebug( temp.sprintf("configmenu %d",iD));
920
921 TEWidget* te = getTe();
922 Config cfg("Konsole");
923 cfg.setGroup("Menubar");
924 int i,j;
925#ifdef QT_QWS_OPIE
926 i=-29;j=-30;
927#else
928 i=-28;j=-29;
929#endif
930
931 if(iD == -4) {
932 cfg.setGroup("Tabs"); 1599 cfg.setGroup("Tabs");
933 QString tmp=cfg.readEntry("Position","Bottom"); 1600 tabMenu->setItemChecked(tabPos, false);
934 1601 if (id == tm_bottom)
935 if(tmp=="Top") { 1602 {
1603 printf("set bottom tab\n");
1604 tab->getTabBar()->show();
936 tab->setTabPosition(QTabWidget::Bottom); 1605 tab->setTabPosition(QTabWidget::Bottom);
937 configMenu->changeItem( iD, tr("Tabs on Top")); 1606 tab->getTabBar()->show();
938 cfg.writeEntry("Position","Bottom"); 1607 cfg.writeEntry("Position","Bottom");
939 } else { 1608 }
1609 else if (id == tm_top)
1610 {
1611 printf("set top tab\n");
1612 tab->getTabBar()->show();
1613 tab->setTabPosition(QTabWidget::Bottom);
940 tab->setTabPosition(QTabWidget::Top); 1614 tab->setTabPosition(QTabWidget::Top);
941 configMenu->changeItem( iD, tr("Tabs on Bottom")); 1615 tab->getTabBar()->show();
942 cfg.writeEntry("Position","Top"); 1616 cfg.writeEntry("Position","Top");
943 } 1617 }
1618 else if (id == tm_hidden)
1619 {
1620 tab->getTabBar()->hide();
1621 tab->setMargin(tab->margin());
1622 cfg.writeEntry("Position","Hidden");
1623 }
1624 tabMenu->setItemChecked(id, true);
1625 tabPos = id;
944 } 1626 }
945 if(iD == i) { 1627
1628
1629void Konsole::configMenuSelected(int iD)
1630{
1631 // QString temp;
1632 // qDebug( temp.sprintf("configmenu %d",iD));
1633
1634 TEWidget* te = getTe();
1635 Config cfg("Qkonsole");
1636 cfg.setGroup("Menubar");
1637 if(iD == cm_wrap)
1638 {
946 cfg.setGroup("ScrollBar"); 1639 cfg.setGroup("ScrollBar");
@@ -951,5 +1644,8 @@ void Konsole::configMenuSelected(int iD)
951 doWrap(); 1644 doWrap();
952 if(cfg.readNumEntry("Position",2) == 0) { 1645 if(cfg.readNumEntry("Position",2) == 0)
1646 {
953 te->setScrollbarLocation(1); 1647 te->setScrollbarLocation(1);
954 } else { 1648 }
1649 else
1650 {
955 te->setScrollbarLocation(0); 1651 te->setScrollbarLocation(0);
@@ -958,3 +1654,4 @@ void Konsole::configMenuSelected(int iD)
958 } 1654 }
959 if(iD == j) { 1655 if(iD == cm_beep)
1656 {
960 cfg.setGroup("Menubar"); 1657 cfg.setGroup("Menubar");
@@ -964,3 +1661,3 @@ void Konsole::configMenuSelected(int iD)
964 cfg.write(); 1661 cfg.write();
965 configMenu->setItemChecked(j,b); 1662 configMenu->setItemChecked(cm_beep,b);
966 te->useBeep=b; 1663 te->useBeep=b;
@@ -971,5 +1668,6 @@ void Konsole::changeCommand(const QString &text, int c)
971{ 1668{
972 Config cfg("Konsole"); 1669 Config cfg("Qkonsole");
973 cfg.setGroup("Commands"); 1670 cfg.setGroup("Commands");
974 if(commonCmds[c] != text) { 1671 if(commonCmds[c] != text)
1672 {
975 cfg.writeEntry(QString::number(c),text); 1673 cfg.writeEntry(QString::number(c),text);
@@ -980,8 +1678,21 @@ void Konsole::changeCommand(const QString &text, int c)
980 1678
981void Konsole::setColor() 1679void Konsole::setColor(int sess)
982{ 1680{
983 Config cfg("Konsole"); 1681 Config cfg("Qkonsole");
984 cfg.setGroup("Colors"); 1682 cfg.setGroup("Colors");
985 int scheme = cfg.readNumEntry("Schema",1); 1683 QColor foreground, background;
986 if(scheme != 1) colorMenuSelected( -scheme); 1684 QString ss = QString("Session") + QString::number(sess);
1685 foreground.setRgb(cfg.readNumEntry("foregroundRed"+ss,
1686 cfg.readNumEntry("foregroundRed",0xff)),
1687 cfg.readNumEntry("foregroundGreen"+ss,
1688 cfg.readNumEntry("foregroundGreen",0xff)),
1689 cfg.readNumEntry("foregroundBlue"+ss,
1690 cfg.readNumEntry("foregroundBlue",0xff)));
1691 background.setRgb(cfg.readNumEntry("backgroundRed"+ss,
1692 cfg.readNumEntry("backgroundRed",0)),
1693 cfg.readNumEntry("backgroundGreen"+ss,
1694 cfg.readNumEntry("backgroundGreen",0)),
1695 cfg.readNumEntry("backgroundBlue"+ss,
1696 cfg.readNumEntry("backgroundBlue",0)));
1697 setColors(foreground, background);
987} 1698}
@@ -993,20 +1704,17 @@ void Konsole::scrollMenuSelected(int index)
993 TEWidget* te = getTe(); 1704 TEWidget* te = getTe();
994 Config cfg("Konsole"); 1705 Config cfg("Qkonsole");
995 cfg.setGroup("ScrollBar"); 1706 cfg.setGroup("ScrollBar");
996 int i,j,k;
997#ifdef QT_QWS_OPIE
998i=-25;j=-26;k=-27;
999#else
1000i=-24;j=-25;k=-26;
1001#endif
1002 if(index == i) {
1003 1707
1708 if(index == sm_none)
1709 {
1004 te->setScrollbarLocation(0); 1710 te->setScrollbarLocation(0);
1005 cfg.writeEntry("Position",0); 1711 cfg.writeEntry("Position",0);
1006 } else if(index == j) { 1712 }
1007 1713 else if(index == sm_left)
1714 {
1008 te->setScrollbarLocation(1); 1715 te->setScrollbarLocation(1);
1009 cfg.writeEntry("Position",1); 1716 cfg.writeEntry("Position",1);
1010 } else if(index == k) { 1717 }
1011 1718 else if(index == sm_right)
1719 {
1012 te->setScrollbarLocation(2); 1720 te->setScrollbarLocation(2);
@@ -1014,2 +1722,6 @@ i=-24;j=-25;k=-26;
1014 } 1722 }
1723 scrollMenu->setItemChecked(sm_none, index == sm_none);
1724 scrollMenu->setItemChecked(sm_left, index == sm_left);
1725 scrollMenu->setItemChecked(sm_right, index == sm_right);
1726}
1015 1727
@@ -1029,3 +1741,2 @@ i=-24;j=-25;k=-26;
1029// break; 1741// break;
1030}
1031 1742
@@ -1035,7 +1746,13 @@ void Konsole::editCommandListMenuSelected(int iD)
1035// qDebug( temp.sprintf("edit command list %d",iD)); 1746// qDebug( temp.sprintf("edit command list %d",iD));
1747
1748 // FIXME: more cleanup needed here
1749
1750
1036 TEWidget* te = getTe(); 1751 TEWidget* te = getTe();
1037 Config cfg("Konsole"); 1752 Config cfg("Qkonsole");
1038 cfg.setGroup("Menubar"); 1753 cfg.setGroup("Menubar");
1039 if( iD == -3) { 1754 if( iD == ec_cmdlist)
1040 if(!secondToolBar->isHidden()) { 1755 {
1756 if(!secondToolBar->isHidden())
1757 {
1041 secondToolBar->hide(); 1758 secondToolBar->hide();
@@ -1043,4 +1760,7 @@ void Konsole::editCommandListMenuSelected(int iD)
1043 cfg.writeEntry("Hidden","TRUE"); 1760 cfg.writeEntry("Hidden","TRUE");
1044 configMenu->setItemEnabled(-23 ,FALSE); 1761 configMenu->setItemEnabled(ec_edit ,FALSE);
1045 } else { 1762 configMenu->setItemEnabled(ec_quick ,FALSE);
1763 }
1764 else
1765 {
1046 secondToolBar->show(); 1766 secondToolBar->show();
@@ -1048,9 +1768,13 @@ void Konsole::editCommandListMenuSelected(int iD)
1048 cfg.writeEntry("Hidden","FALSE"); 1768 cfg.writeEntry("Hidden","FALSE");
1049 configMenu->setItemEnabled(-23 ,TRUE); 1769 configMenu->setItemEnabled(ec_edit ,TRUE);
1770 configMenu->setItemEnabled(ec_quick ,TRUE);
1050 1771
1051 if(cfg.readEntry("EditEnabled","FALSE")=="TRUE") { 1772 if(cfg.readEntry("EditEnabled","FALSE")=="TRUE")
1052 configMenu->setItemChecked(-23,TRUE); 1773 {
1774 configMenu->setItemChecked(ec_edit,TRUE);
1053 commonCombo->setEditable( TRUE ); 1775 commonCombo->setEditable( TRUE );
1054 } else { 1776 }
1055 configMenu->setItemChecked(-23,FALSE); 1777 else
1778 {
1779 configMenu->setItemChecked(ec_edit,FALSE);
1056 commonCombo->setEditable( FALSE ); 1780 commonCombo->setEditable( FALSE );
@@ -1059,6 +1783,8 @@ void Konsole::editCommandListMenuSelected(int iD)
1059 } 1783 }
1060 if( iD == -23) { 1784 if( iD == ec_quick)
1785 {
1061 cfg.setGroup("Commands"); 1786 cfg.setGroup("Commands");
1062// qDebug("enableCommandEdit"); 1787// qDebug("enableCommandEdit");
1063 if( !configMenu->isItemChecked(iD) ) { 1788 if( !configMenu->isItemChecked(iD) )
1789 {
1064 commonCombo->setEditable( TRUE ); 1790 commonCombo->setEditable( TRUE );
@@ -1067,3 +1793,5 @@ void Konsole::editCommandListMenuSelected(int iD)
1067 cfg.writeEntry("EditEnabled","TRUE"); 1793 cfg.writeEntry("EditEnabled","TRUE");
1068 } else { 1794 }
1795 else
1796 {
1069 commonCombo->setEditable( FALSE ); 1797 commonCombo->setEditable( FALSE );
@@ -1075,3 +1803,4 @@ void Konsole::editCommandListMenuSelected(int iD)
1075 } 1803 }
1076 if(iD == -24) { 1804 if(iD == ec_edit)
1805 {
1077 // "edit commands" 1806 // "edit commands"
@@ -1079,3 +1808,3 @@ void Konsole::editCommandListMenuSelected(int iD)
1079 connect(m,SIGNAL(commandsEdited()),this,SLOT(initCommandList())); 1808 connect(m,SIGNAL(commandsEdited()),this,SLOT(initCommandList()));
1080 QPEApplication::showDialog( m ); 1809 m->showMaximized();
1081 } 1810 }
@@ -1085,6 +1814,8 @@ void Konsole::editCommandListMenuSelected(int iD)
1085// $QPEDIR/bin/qcop QPE/Application/embeddedkonsole 'setDocument(QString)' 'ssh -V' 1814// $QPEDIR/bin/qcop QPE/Application/embeddedkonsole 'setDocument(QString)' 'ssh -V'
1086void Konsole::setDocument( const QString &cmd) { 1815void Konsole::setDocument( const QString &cmd)
1816{
1087 newSession(); 1817 newSession();
1088 TEWidget* te = getTe(); 1818 TEWidget* te = getTe();
1089 if(cmd.find("-e", 0, TRUE) != -1) { 1819 if(cmd.find("-e", 0, TRUE) != -1)
1820 {
1090 QString cmd2; 1821 QString cmd2;
@@ -1092,9 +1823,14 @@ void Konsole::setDocument( const QString &cmd) {
1092 system(cmd2.latin1()); 1823 system(cmd2.latin1());
1093 if(startUp <= 1 && nsessions < 2) { 1824 if(startUp <= 1 && nsessions < 2)
1094 doneSession(getTe()->currentSession, 0); 1825 {
1826 doneSession(getTe(), 0);
1095 exit(0); 1827 exit(0);
1096 } else 1828 }
1097 doneSession(getTe()->currentSession, 0); 1829 else
1098 } else { 1830 doneSession(getTe(), 0);
1099 if (te != 0) { 1831 }
1832 else
1833 {
1834 if (te != 0)
1835 {
1100 te->emitText(cmd+"\r"); 1836 te->emitText(cmd+"\r");
@@ -1105,9 +1841,16 @@ void Konsole::setDocument( const QString &cmd) {
1105 1841
1106void Konsole::parseCommandLine() { 1842
1843// what is the point of this when you can just
1844// run commands by using the shell directly??
1845void Konsole::parseCommandLine()
1846{
1107 QString cmd; 1847 QString cmd;
1108 // newSession(); 1848 // newSession();
1109 for (int i=1;i< qApp->argc();i++) { 1849 for (int i=1;i< qApp->argc();i++)
1110 if( QString(qApp->argv()[i]) == "-e") { 1850 {
1851 if( QString(qApp->argv()[i]) == "-e")
1852 {
1111 i++; 1853 i++;
1112 for ( int j=i;j< qApp->argc();j++) { 1854 for ( int j=i;j< qApp->argc();j++)
1855 {
1113 cmd+=QString(qApp->argv()[j])+" "; 1856 cmd+=QString(qApp->argv()[j])+" ";
@@ -1122,4 +1865,5 @@ void Konsole::parseCommandLine() {
1122 1865
1123void Konsole::changeForegroundColor(const QColor &color) { 1866void Konsole::changeForegroundColor(const QColor &color)
1124 Config cfg("Konsole"); 1867{
1868 Config cfg("Qkonsole");
1125 cfg.setGroup("Colors"); 1869 cfg.setGroup("Colors");
@@ -1143,6 +1887,7 @@ qDebug("do other dialog");
1143 1887
1144void Konsole::changeBackgroundColor(const QColor &color) { 1888void Konsole::changeBackgroundColor(const QColor &color)
1889{
1145 1890
1146 qDebug("Change background"); 1891 qDebug("Change background");
1147 Config cfg("Konsole"); 1892 Config cfg("Qkonsole");
1148 cfg.setGroup("Colors"); 1893 cfg.setGroup("Colors");
@@ -1156,20 +1901,17 @@ void Konsole::changeBackgroundColor(const QColor &color) {
1156 1901
1157void Konsole::doWrap() { 1902void Konsole::doWrap()
1158int i; 1903{
1159#ifdef QT_QWS_OPIE 1904 Config cfg("Qkonsole");
1160i=-29;
1161#else
1162i=-28;
1163#endif
1164
1165 Config cfg("Konsole");
1166 cfg.setGroup("ScrollBar"); 1905 cfg.setGroup("ScrollBar");
1167 TEWidget* te = getTe(); 1906 TEWidget* te = getTe();
1168 if( !cfg.readBoolEntry("HorzScroll",0)) { 1907 if( !cfg.readBoolEntry("HorzScroll",0))
1908 {
1169 te->setWrapAt(0); 1909 te->setWrapAt(0);
1170 configMenu->setItemChecked( i,TRUE); 1910 configMenu->setItemChecked( cm_wrap,TRUE);
1171 } else { 1911 }
1912 else
1913 {
1172// te->setWrapAt(90); 1914// te->setWrapAt(90);
1173 te->setWrapAt(120); 1915 te->setWrapAt(120);
1174 configMenu->setItemChecked( i,FALSE); 1916 configMenu->setItemChecked( cm_wrap,FALSE);
1175 } 1917 }
diff --git a/core/apps/embeddedkonsole/konsole.h b/core/apps/embeddedkonsole/konsole.h
index 7d5a908..37babbb 100644
--- a/core/apps/embeddedkonsole/konsole.h
+++ b/core/apps/embeddedkonsole/konsole.h
@@ -48,5 +48,10 @@ class Konsole : public QMainWindow
48public: 48public:
49 static QString appName() { return QString::fromLatin1("embeddedkonsole"); } 49
50 static QString appName()
51 {
52 return QString::fromLatin1("embeddedkonsole");
53 }
50 54
51 Konsole(QWidget* parent = 0, const char* name = 0, WFlags fl = 0); 55 Konsole(QWidget* parent = 0, const char* name = 0, WFlags fl = 0);
56 Konsole(const char * name, const char* pgm, QStrList & _args, int histon);
52 ~Konsole(); 57 ~Konsole();
@@ -55,10 +60,21 @@ public:
55 void show(); 60 void show();
56 void setColor(); 61 void setColor(int);
57 int lastSelectedMenu; 62 int lastSelectedMenu;
58 int startUp; 63 int startUp;
64
65public slots:
66 void changeFontSize(int);
67 void toggleFullScreen();
68 void setFullScreen(bool);
69 void changeSession(int);
70 void cycleZoom();
71 void newSession();
72
59private slots: 73private slots:
60 void setDocument(const QString &); 74 void setDocument(const QString &);
61 void doneSession(TESession*,int); 75 void doneSession(TEWidget*,int);
76 void changeTitle(TEWidget*,QString);
62 void changeColumns(int); 77 void changeColumns(int);
63 void fontChanged(int); 78 void setFont(int);
79 // void fontChanged(int);
64 void configMenuSelected(int ); 80 void configMenuSelected(int );
@@ -66,2 +82,5 @@ private slots:
66 void colorMenuIsSelected(int); 82 void colorMenuIsSelected(int);
83 void tabMenuSelected(int);
84 void sessionListSelected(int);
85
67 void enterCommand(int); 86 void enterCommand(int);
@@ -74,3 +93,2 @@ private slots:
74 void switchSession(QWidget *); 93 void switchSession(QWidget *);
75 void newSession();
76 void changeCommand(const QString &, int); 94 void changeCommand(const QString &, int);
@@ -82,2 +100,6 @@ private slots:
82 void changeBackgroundColor(const QColor &); 100 void changeBackgroundColor(const QColor &);
101
102 void historyDialog();
103 void fullscreenTimeout();
104
83private: 105private:
@@ -89,2 +111,4 @@ private:
89 void setHistory(bool); 111 void setHistory(bool);
112 void setColors(QColor foreground, QColor background);
113 int findFont(QString name, int size, bool exact = false);
90 QSize calcSize(int columns, int lines); 114 QSize calcSize(int columns, int lines);
@@ -95,2 +119,5 @@ private:
95bool fromMenu; 119bool fromMenu;
120
121 bool fullscreen;
122
96private: 123private:
@@ -99,3 +126,3 @@ private:
99 public: 126 public:
100 VTFont(QString name, QFont& font) 127 VTFont(QString name, QFont& font, QString family, int familyNum, int size)
101 { 128 {
@@ -103,2 +130,5 @@ private:
103 this->font = font; 130 this->font = font;
131 this->family = family;
132 this->size = size;
133 this->familyNum = familyNum;
104 } 134 }
@@ -109,3 +139,2 @@ private:
109 } 139 }
110
111 QString getName() 140 QString getName()
@@ -114,6 +143,21 @@ private:
114 } 143 }
144 int getSize()
145 {
146 return(size);
147 }
148 QString getFamily()
149 {
150 return(family);
151 }
152 int getFamilyNum()
153 {
154 return(familyNum);
155 }
115 156
116 private: 157 private:
117 QString name;
118 QFont font; 158 QFont font;
159 QString name;
160 QString family;
161 int familyNum;
162 int size;
119 }; 163 };
@@ -121,2 +165,3 @@ private:
121 EKNumTabWidget* tab; 165 EKNumTabWidget* tab;
166 int tabPos;
122 int nsessions; 167 int nsessions;
@@ -127,4 +172,21 @@ private:
127 172
128 QPopupMenu *fontList,*configMenu,*colorMenu,*scrollMenu,*editCommandListMenu; 173 QToolBar *menuToolBar;
174 QToolBar *toolBar;
129 QComboBox *commonCombo; 175 QComboBox *commonCombo;
176
177 QPopupMenu *fontList,*configMenu,*colorMenu,*scrollMenu,*editCommandListMenu;
178 QPopupMenu *sessionList, *tabMenu;
179
180 int sm_none, sm_left, sm_right;
181 int cm_beep, cm_wrap;
182 int cm_default;
183 int cm_bw, cm_wb, cm_gb, cm_bt, cm_br, cm_rb, cm_gy, cm_bm, cm_mb, cm_cw, cm_wc, cm_bb, cm_ab;
184 int tm_top, tm_bottom, tm_hidden;
185 int ec_edit, ec_cmdlist, ec_quick;
186
187 bool show_fullscreen_msg;
188 QTimer *fullscreen_timer;
189 QLabel *fullscreen_msg;
190
191
130 // history scrolling I think 192 // history scrolling I think
diff --git a/core/apps/embeddedkonsole/main.cpp b/core/apps/embeddedkonsole/main.cpp
index f77fe24..a6a079c 100644
--- a/core/apps/embeddedkonsole/main.cpp
+++ b/core/apps/embeddedkonsole/main.cpp
@@ -38 +38,2 @@
38OPIE_EXPORT_APP( OApplicationFactory<Konsole> ) 38OPIE_EXPORT_APP( OApplicationFactory<Konsole> )
39
diff --git a/core/apps/embeddedkonsole/session.cpp b/core/apps/embeddedkonsole/session.cpp
index 520af86..17acb8c 100644
--- a/core/apps/embeddedkonsole/session.cpp
+++ b/core/apps/embeddedkonsole/session.cpp
@@ -25,4 +25,7 @@
25 25
26TESession::TESession(QMainWindow* main, TEWidget* te, const char* _pgm, QStrList & _args, const char *_term) : schema_no(0), font_no(3), pgm(_pgm), args(_args) 26TESession::TESession(QMainWindow* main, TEWidget* _te, const char* _pgm, QStrList & _args, const char *_term) : schema_no(0), font_no(3), pgm(_pgm), args(_args)
27{ 27{
28 te = _te;
29 term = _term;
30
28 // sh = new TEPty(); 31 // sh = new TEPty();
@@ -31,4 +34,2 @@ TESession::TESession(QMainWindow* main, TEWidget* te, const char* _pgm, QStrList
31 34
32 term = _term;
33
34 sh->setSize(te->Lines(),te->Columns()); // not absolutely nessesary 35 sh->setSize(te->Lines(),te->Columns()); // not absolutely nessesary
@@ -50,6 +51,8 @@ TESession::TESession(QMainWindow* main, TEWidget* te, const char* _pgm, QStrList
50 main,SLOT(changeColumns(int)) ); 51 main,SLOT(changeColumns(int)) );
51/* 52
53
54
52 QObject::connect( em,SIGNAL(changeTitle(int, const QString&)), 55 QObject::connect( em,SIGNAL(changeTitle(int, const QString&)),
53 main,SLOT(changeTitle(int, const QString&)) ); 56 this,SLOT(changeTitle(int, const QString&)) );
54*/ 57
55 QObject::connect( sh,SIGNAL(done(int)), this,SLOT(done(int)) ); 58 QObject::connect( sh,SIGNAL(done(int)), this,SLOT(done(int)) );
@@ -85,3 +88,3 @@ void TESession::done(int status)
85{ 88{
86 emit done(this,status); 89 emit done(te,status);
87} 90}
@@ -136,5 +139,6 @@ void TESession::setFontNo(int fn)
136 139
137void TESession::setTitle(const QString& title) 140void TESession::changeTitle(int, const QString& title)
138{ 141{
139 this->title = title; 142 this->title = title;
143 emit changeTitle(te, title);
140} 144}
diff --git a/core/apps/embeddedkonsole/session.h b/core/apps/embeddedkonsole/session.h
index 4a61569..f399e96 100644
--- a/core/apps/embeddedkonsole/session.h
+++ b/core/apps/embeddedkonsole/session.h
@@ -58,3 +58,2 @@ public:
58 void setFontNo(int fn); 58 void setFontNo(int fn);
59 void setTitle(const QString& title);
60 void kill(int signal); 59 void kill(int signal);
@@ -66,2 +65,3 @@ public slots:
66 void terminate(); 65 void terminate();
66 void changeTitle(int, const QString& title);
67 67
@@ -69,3 +69,4 @@ signals:
69 69
70 void done(TESession*, int); 70 void done(TEWidget*, int);
71 void changeTitle(TEWidget*, QString);
71 72