summaryrefslogtreecommitdiff
path: root/core/apps/embeddedkonsole/konsole.cpp
Unidiff
Diffstat (limited to 'core/apps/embeddedkonsole/konsole.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/apps/embeddedkonsole/konsole.cpp430
1 files changed, 340 insertions, 90 deletions
diff --git a/core/apps/embeddedkonsole/konsole.cpp b/core/apps/embeddedkonsole/konsole.cpp
index 7253baf..1102ef3 100644
--- a/core/apps/embeddedkonsole/konsole.cpp
+++ b/core/apps/embeddedkonsole/konsole.cpp
@@ -12,11 +12,11 @@
12/* kvt, which is copyright (c) 1996 by Matthias Ettrich <ettrich@kde.org> */ 12/* kvt, which is copyright (c) 1996 by Matthias Ettrich <ettrich@kde.org> */
13/* */ 13/* */
14/* ---------------------------------------------------------------------- */ 14/* ---------------------------------------------------------------------- */
15 /* */ 15/* */
16/* Ported Konsole to Qt/Embedded */ 16/* Ported Konsole to Qt/Embedded */
17 /* */ 17/* */
18/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */ 18/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
19 /* */ 19/* */
20/* -------------------------------------------------------------------------- */ 20/* -------------------------------------------------------------------------- */
21 21
22#include <qpe/resource.h> 22#include <qpe/resource.h>
@@ -41,6 +41,8 @@
41#include <qtabwidget.h> 41#include <qtabwidget.h>
42#include <qtabbar.h> 42#include <qtabbar.h>
43#include <qpe/config.h> 43#include <qpe/config.h>
44#include <qstringlist.h>
45#include <qpalette.h>
44 46
45#include <sys/wait.h> 47#include <sys/wait.h>
46#include <stdio.h> 48#include <stdio.h>
@@ -54,25 +56,25 @@ class EKNumTabBar : public QTabBar {
54public: 56public:
55 void numberTabs() 57 void numberTabs()
56 { 58 {
57 // Yes, it really is this messy. QTabWidget needs functions 59 // Yes, it really is this messy. QTabWidget needs functions
58 // that provide acces to tabs in a sequential way. 60 // that provide acces to tabs in a sequential way.
59 int m=INT_MIN; 61 int m=INT_MIN;
60 for (int i=0; i<count(); i++) { 62 for (int i=0; i<count(); i++) {
61 QTab* left=0; 63 QTab* left=0;
62 QListIterator<QTab> it(*tabList()); 64 QListIterator<QTab> it(*tabList());
63 int x=INT_MAX; 65 int x=INT_MAX;
64 for( QTab* t; (t=it.current()); ++it ) { 66 for( QTab* t; (t=it.current()); ++it ) {
65 int tx = t->rect().x(); 67 int tx = t->rect().x();
66 if ( tx<x && tx>m ) { 68 if ( tx<x && tx>m ) {
67 x = tx; 69 x = tx;
68 left = t; 70 left = t;
69 } 71 }
70 } 72 }
71 if ( left ) { 73 if ( left ) {
72 left->setText(QString::number(i+1)); 74 left->setText(QString::number(i+1));
73 m = left->rect().x(); 75 m = left->rect().x();
74 } 76 }
75 } 77 }
76 } 78 }
77}; 79};
78 80
@@ -84,14 +86,14 @@ public:
84 86
85 void addTab(QWidget* w) 87 void addTab(QWidget* w)
86 { 88 {
87 QTab* t = new QTab(QString::number(tabBar()->count()+1)); 89 QTab* t = new QTab(QString::number(tabBar()->count()+1));
88 QTabWidget::addTab(w,t); 90 QTabWidget::addTab(w,t);
89 } 91 }
90 92
91 void removeTab(QWidget* w) 93 void removeTab(QWidget* w)
92 { 94 {
93 removePage(w); 95 removePage(w);
94 ((EKNumTabBar*)tabBar())->numberTabs(); 96 ((EKNumTabBar*)tabBar())->numberTabs();
95 } 97 }
96}; 98};
97 99
@@ -99,39 +101,34 @@ public:
99// file of the user 101// file of the user
100static const char *commonCmds[] = 102static const char *commonCmds[] =
101{ 103{
102 "ls ", 104 "ls ", // I left this here, cause it looks better than the first alpha
103 //"ls -la ", 105 "cardctl eject",
106 "cat ",
104 "cd ", 107 "cd ",
105 "pwd", 108 "chmod ",
106 //"cat", 109 "cp ",
107 //"less ", 110 "dc ",
108 //"vi ", 111 "df ",
109 //"man ", 112 "dmesg",
110 "echo ", 113 "echo ",
111 "set ", 114 "find ",
112 //"ps", 115 "free",
113 "ps aux",
114 //"tar",
115 //"tar -zxf",
116 "grep ", 116 "grep ",
117 //"grep -i", 117 "ifconfig ",
118 //"mkdir", 118 "ipkg ",
119 "cp ", 119 "mkdir ",
120 "mv ", 120 "mv ",
121 "nc localhost 7776",
122 "nc localhost 7777",
123 "nslookup ",
124 "ping ",
125 "ps aux",
126 "pwd ",
121 "rm ", 127 "rm ",
122 "rmdir ", 128 "rmdir ",
123 //"chmod", 129 "route ",
124 //"su", 130 "set ",
125// "top", 131 "traceroute",
126 //"find",
127 //"make",
128 //"tail",
129 "cardctl eject",
130 "ifconfig ",
131// "iwconfig eth0 ",
132 "nc localhost 7777",
133 "nc localhost 7776",
134 //"mount /dev/hda1",
135 132
136/* 133/*
137 "gzip", 134 "gzip",
@@ -186,7 +183,7 @@ void Konsole::init(const char* _pgm, QStrList & _args)
186 183
187 Config cfg("Konsole"); 184 Config cfg("Konsole");
188 cfg.setGroup("Konsole"); 185 cfg.setGroup("Konsole");
189 186 QString tmp;
190 // initialize the list of allowed fonts /////////////////////////////////// 187 // initialize the list of allowed fonts ///////////////////////////////////
191 cfont = cfg.readNumEntry("FontID", 1); 188 cfont = cfg.readNumEntry("FontID", 1);
192 QFont f = QFont("Micro", 4, QFont::Normal); 189 QFont f = QFont("Micro", 4, QFont::Normal);
@@ -203,11 +200,12 @@ void Konsole::init(const char* _pgm, QStrList & _args)
203 200
204 // create terminal emulation framework //////////////////////////////////// 201 // create terminal emulation framework ////////////////////////////////////
205 nsessions = 0; 202 nsessions = 0;
203
206 tab = new EKNumTabWidget(this); 204 tab = new EKNumTabWidget(this);
207 tab->setTabPosition(QTabWidget::Bottom); 205
208 connect(tab, SIGNAL(currentChanged(QWidget*)), this, SLOT(switchSession(QWidget*))); 206 connect(tab, SIGNAL(currentChanged(QWidget*)), this, SLOT(switchSession(QWidget*)));
209 207
210 // create terminal toolbar //////////////////////////////////////////////// 208 // create terminal toolbar ////////////////////////////////////////////////
211 setToolBarsMovable( FALSE ); 209 setToolBarsMovable( FALSE );
212 QPEToolBar *menuToolBar = new QPEToolBar( this ); 210 QPEToolBar *menuToolBar = new QPEToolBar( this );
213 menuToolBar->setHorizontalStretchable( TRUE ); 211 menuToolBar->setHorizontalStretchable( TRUE );
@@ -221,9 +219,50 @@ void Konsole::init(const char* _pgm, QStrList & _args)
221 } 219 }
222 fontChanged(cfont); 220 fontChanged(cfont);
223 221
222 configMenu = new QPopupMenu( this);
223 colorMenu = new QPopupMenu( this);
224
225 bool listHidden;
226 cfg.setGroup("Menubar");
227 if( cfg.readEntry("Hidden","FALSE") == "TRUE") {
228 configMenu->insertItem("Show command list");
229 listHidden=TRUE;
230 } else {
231 configMenu->insertItem("Hide command list");
232 listHidden=FALSE;
233 }
234
235 cfg.setGroup("Tabs");
236 tmp=cfg.readEntry("Position","Bottom");
237 if(tmp=="Top") {
238 tab->setTabPosition(QTabWidget::Top);
239 configMenu->insertItem("Tabs on Bottom");
240 } else {
241 tab->setTabPosition(QTabWidget::Bottom);
242 configMenu->insertItem("Tabs on Top");
243 }
244 configMenu->insertSeparator(2);
245
246 colorMenu->insertItem("Green on Black");
247 colorMenu->insertItem("Black on White");
248 colorMenu->insertItem("White on Black");
249 colorMenu->insertItem("Black on Transparent");
250 colorMenu->insertItem("Black on Red");
251 colorMenu->insertItem("Red on Black");
252 colorMenu->insertItem("Green on Yellow");
253 colorMenu->insertItem("Blue on Magenta");
254 colorMenu->insertItem("Magenta on Blue");
255 colorMenu->insertItem("Cyan on White");
256 colorMenu->insertItem("White on Cyan");
257 colorMenu->insertItem("Blue on Black");
258 configMenu->insertItem("Colors",colorMenu);
259
224 connect( fontList, SIGNAL( activated(int) ), this, SLOT( fontChanged(int) )); 260 connect( fontList, SIGNAL( activated(int) ), this, SLOT( fontChanged(int) ));
261 connect( configMenu, SIGNAL( activated(int) ), this, SLOT( configMenuSelected(int) ));
262 connect( colorMenu, SIGNAL( activated(int) ), this, SLOT( colorMenuSelected(int) ));
225 263
226 menuBar->insertItem( tr("Font"), fontList ); 264 menuBar->insertItem( tr("Font"), fontList );
265 menuBar->insertItem( tr("Options"), configMenu );
227 266
228 QPEToolBar *toolbar = new QPEToolBar( this ); 267 QPEToolBar *toolbar = new QPEToolBar( this );
229 268
@@ -250,17 +289,29 @@ void Konsole::init(const char* _pgm, QStrList & _args)
250 a = new QAction( tr("Down"), Resource::loadPixmap( "down" ), QString::null, 0, this, 0 ); 289 a = new QAction( tr("Down"), Resource::loadPixmap( "down" ), QString::null, 0, this, 0 );
251 connect( a, SIGNAL( activated() ), this, SLOT( hitDown() ) ); a->addTo( toolbar ); 290 connect( a, SIGNAL( activated() ), this, SLOT( hitDown() ) ); a->addTo( toolbar );
252*/ 291*/
253 292
254 QPEToolBar *secondToolBar = new QPEToolBar( this ); 293 secondToolBar = new QPEToolBar( this );
255 secondToolBar->setHorizontalStretchable( TRUE ); 294 secondToolBar->setHorizontalStretchable( TRUE );
256 295
257 QComboBox *commonCombo = new QComboBox( secondToolBar ); 296 commonCombo = new QComboBox( secondToolBar );
258// commonCombo->setEditable( TRUE ); 297
259 for (int i = 0; commonCmds[i] != NULL; i++) 298 if( listHidden)
260 commonCombo->insertItem( commonCmds[i], i ); 299 secondToolBar->hide();
300 configMenu->insertItem( "Edit Command List");
301
302 cfg.setGroup("Commands");
303 commonCombo->setInsertionPolicy(QComboBox::AtCurrent);
304
305 for (int i = 0; commonCmds[i] != NULL; i++) {
306 commonCombo->insertItem( commonCmds[i], i );
307 tmp = cfg.readEntry( QString::number(i),"");
308 if(tmp != "")
309 commonCombo->changeItem( tmp,i );
310 }
311
261 connect( commonCombo, SIGNAL( activated(int) ), this, SLOT( enterCommand(int) )); 312 connect( commonCombo, SIGNAL( activated(int) ), this, SLOT( enterCommand(int) ));
262 313
263 // create applications ///////////////////////////////////////////////////// 314 // create applications /////////////////////////////////////////////////////
264 setCentralWidget(tab); 315 setCentralWidget(tab);
265 316
266 // load keymaps //////////////////////////////////////////////////////////// 317 // load keymaps ////////////////////////////////////////////////////////////
@@ -278,6 +329,7 @@ void Konsole::init(const char* _pgm, QStrList & _args)
278 QSize currentSize = size(); 329 QSize currentSize = size();
279 if (currentSize != size()) 330 if (currentSize != size())
280 defaultSize = size(); 331 defaultSize = size();
332
281} 333}
282 334
283void Konsole::show() 335void Konsole::show()
@@ -296,7 +348,7 @@ void Konsole::initSession(const char*, QStrList &)
296Konsole::~Konsole() 348Konsole::~Konsole()
297{ 349{
298 while (nsessions > 0) { 350 while (nsessions > 0) {
299 doneSession(getTe()->currentSession, 0); 351 doneSession(getTe()->currentSession, 0);
300 } 352 }
301 353
302 Config cfg("Konsole"); 354 Config cfg("Konsole");
@@ -309,24 +361,29 @@ void Konsole::fontChanged(int f)
309 VTFont* font = fonts.at(f); 361 VTFont* font = fonts.at(f);
310 if (font != 0) { 362 if (font != 0) {
311 for(uint i = 0; i < fonts.count(); i++) { 363 for(uint i = 0; i < fonts.count(); i++) {
312 fontList->setItemChecked(i, (i == (uint) f) ? TRUE : FALSE); 364 fontList->setItemChecked(i, (i == (uint) f) ? TRUE : FALSE);
313 } 365 }
314 366
315 cfont = f; 367 cfont = f;
316 368
317 TEWidget* te = getTe(); 369 TEWidget* te = getTe();
318 if (te != 0) { 370 if (te != 0) {
319 te->setVTFont(font->getFont()); 371 te->setVTFont(font->getFont());
320 } 372 }
321 } 373 }
322} 374}
323 375
376
324void Konsole::enterCommand(int c) 377void Konsole::enterCommand(int c)
325{ 378{
326 TEWidget* te = getTe(); 379 TEWidget* te = getTe();
327 if (te != 0) { 380 if (te != 0) {
328 QString text = commonCmds[c]; 381 if(!commonCombo->editable()) {
329 te->emitText(text); 382 QString text = commonCombo->text(c); //commonCmds[c];
383 te->emitText(text);
384 } else {
385 changeCommand( commonCombo->text(c), c);
386 }
330 } 387 }
331} 388}
332 389
@@ -390,8 +447,8 @@ QSize Konsole::calcSize(int columns, int lines) {
390 QSize size = te->calcSize(columns, lines); 447 QSize size = te->calcSize(columns, lines);
391 return size; 448 return size;
392 } else { 449 } else {
393 QSize size; 450 QSize size;
394 return size; 451 return size;
395 } 452 }
396} 453}
397 454
@@ -467,26 +524,28 @@ void Konsole::doneSession(TESession*, int )
467 delete te; 524 delete te;
468 nsessions--; 525 nsessions--;
469 } 526 }
470 527
471 if (nsessions == 0) { 528 if (nsessions == 0) {
472 close(); 529 close();
473 } 530 }
474} 531}
475 532
476
477void Konsole::newSession() { 533void Konsole::newSession() {
478 TEWidget* te = new TEWidget(tab); 534 if(nsessions < 15) { // seems to be something weird about 16 tabs on the Zaurus.... memory?
479 te->setBackgroundMode(PaletteBase); 535 TEWidget* te = new TEWidget(tab);
480 te->setVTFont(fonts.at(cfont)->getFont()); 536// te->setBackgroundMode(PaletteBase); //we want transparent!!
481 tab->addTab(te); 537 te->setVTFont(fonts.at(cfont)->getFont());
482 TESession* se = new TESession(this, te, se_pgm, se_args, "xterm"); 538 tab->addTab(te);
483 te->currentSession = se; 539 TESession* se = new TESession(this, te, se_pgm, se_args, "xterm");
484 connect( se, SIGNAL(done(TESession*,int)), this, SLOT(doneSession(TESession*,int)) ); 540 te->currentSession = se;
485 se->run(); 541 connect( se, SIGNAL(done(TESession*,int)), this, SLOT(doneSession(TESession*,int)) );
486 se->setConnect(TRUE); 542 se->run();
487 se->setHistory(b_scroll); 543 se->setConnect(TRUE);
488 tab->setCurrentPage(nsessions); 544 se->setHistory(b_scroll);
489 nsessions++; 545 tab->setCurrentPage(nsessions);
546 nsessions++;
547 setColor();
548 }
490} 549}
491 550
492TEWidget* Konsole::getTe() { 551TEWidget* Konsole::getTe() {
@@ -495,8 +554,8 @@ TEWidget* Konsole::getTe() {
495 } else { 554 } else {
496 return 0; 555 return 0;
497 } 556 }
498 } 557}
499 558
500void Konsole::switchSession(QWidget* w) { 559void Konsole::switchSession(QWidget* w) {
501 TEWidget* te = (TEWidget *) w; 560 TEWidget* te = (TEWidget *) w;
502 561
@@ -510,3 +569,194 @@ void Konsole::switchSession(QWidget* w) {
510 } 569 }
511 } 570 }
512} 571}
572
573/// ------------------------------- some new stuff by L.J. Potter
574void Konsole::colorMenuSelected(int iD)
575{ // this is NOT pretty, elegant or anything else besides functional
576// QString temp;
577// temp.sprintf("%d", iD);
578// qDebug(temp);
579 TEWidget* te = getTe();
580 Config cfg("Konsole");
581 cfg.setGroup("Colors");
582 QColor foreground;
583 QColor background;
584 colorMenu->setItemChecked(lastSelectedMenu,FALSE);
585 ColorEntry m_table[TABLE_COLORS];
586 const ColorEntry * defaultCt=te->getdefaultColorTable();
587 /////////// fore back
588 int i;
589 if(iD==-8) { // default default
590 for (i = 0; i < TABLE_COLORS; i++) {
591 m_table[i].color = defaultCt[i].color;
592 if(i==1 || i == 11)
593 m_table[i].transparent=1;
594 cfg.writeEntry("Schema","8");
595 colorMenu->setItemChecked(-8,TRUE);
596 }
597 } else {
598 if(iD==-5) { // green black
599 foreground.setRgb(0x18,255,0x18);
600 background.setRgb(0x00,0x00,0x00);
601 cfg.writeEntry("Schema","5");
602 colorMenu->setItemChecked(-5,TRUE);
603 }
604 if(iD==-6) { // black white
605 foreground.setRgb(0x00,0x00,0x00);
606 background.setRgb(0xFF,0xFF,0xFF);
607 cfg.writeEntry("Schema","6");
608 colorMenu->setItemChecked(-6,TRUE);
609 }
610 if(iD==-7) { // white black
611 foreground.setRgb(0xFF,0xFF,0xFF);
612 background.setRgb(0x00,0x00,0x00);
613 cfg.writeEntry("Schema","7");
614 colorMenu->setItemChecked(-7,TRUE);
615 }
616 if(iD==-9) {// Black, Red
617 foreground.setRgb(0x00,0x00,0x00);
618 background.setRgb(0xB2,0x18,0x18);
619 cfg.writeEntry("Schema","9");
620 colorMenu->setItemChecked(-9,TRUE);
621 }
622 if(iD==-10) {// Red, Black
623 foreground.setRgb(230,31,31); //0xB2,0x18,0x18
624 background.setRgb(0x00,0x00,0x00);
625 cfg.writeEntry("Schema","10");
626 colorMenu->setItemChecked(-10,TRUE);
627 }
628 if(iD==-11) {// Green, Yellow - is ugly
629// foreground.setRgb(0x18,0xB2,0x18);
630 foreground.setRgb(36,139,10);
631// background.setRgb(0xB2,0x68,0x18);
632 background.setRgb(255,255,0);
633 cfg.writeEntry("Schema","11");
634 colorMenu->setItemChecked(-11,TRUE);
635 }
636 if(iD==-12) {// Blue, Magenta
637 foreground.setRgb(0x18,0xB2,0xB2);
638 background.setRgb(0x18,0x18,0xB2);
639 cfg.writeEntry("Schema","12");
640 colorMenu->setItemChecked(-12,TRUE);
641 }
642 if(iD==-13) {// Magenta, Blue
643 foreground.setRgb(0x18,0x18,0xB2);
644 background.setRgb(0x18,0xB2,0xB2);
645 cfg.writeEntry("Schema","13");
646 colorMenu->setItemChecked(-13,TRUE);
647 }
648 if(iD==-14) {// Cyan, White
649 foreground.setRgb(0x18,0xB2,0xB2);
650 background.setRgb(0xFF,0xFF,0xFF);
651 cfg.writeEntry("Schema","14");
652 colorMenu->setItemChecked(-14,TRUE);
653 }
654 if(iD==-15) {// White, Cyan
655 background.setRgb(0x18,0xB2,0xB2);
656 foreground.setRgb(0xFF,0xFF,0xFF);
657 cfg.writeEntry("Schema","15");
658 colorMenu->setItemChecked(-15,TRUE);
659 }
660 if(iD==-16) {// Black, Blue
661 background.setRgb(0x00,0x00,0x00);
662 foreground.setRgb(0x18,0xB2,0xB2);
663 cfg.writeEntry("Schema","16");
664 colorMenu->setItemChecked(-16,TRUE);
665 }
666
667 for (i = 0; i < TABLE_COLORS; i++) {
668 if(i==0 || i == 10) {
669 m_table[i].color = foreground;
670 }
671 else if(i==1 || i == 11) {
672 m_table[i].color = background; m_table[i].transparent=0;
673 }
674 else
675 m_table[i].color = defaultCt[i].color;
676 }
677 }
678 lastSelectedMenu = iD;
679 te->setColorTable(m_table);
680// update();
681}
682
683void Konsole::configMenuSelected(int iD)
684{
685// QString temp;
686// temp.sprintf("%d",iD);
687// qDebug(temp);
688 TEWidget* te = getTe();
689 Config cfg("Konsole");
690 cfg.setGroup("Menubar");
691 if( iD == -2) {
692 if(!secondToolBar->isHidden()) {
693 secondToolBar->hide();
694 configMenu->changeItem( iD,"Show Command List");
695 cfg.writeEntry("Hidden","TRUE");
696 configMenu->setItemEnabled(-20 ,FALSE);
697 } else {
698 secondToolBar->show();
699 configMenu->changeItem( iD,"Hide Command List");
700 cfg.writeEntry("Hidden","FALSE");
701 configMenu->setItemEnabled(-20 ,TRUE);
702
703 if(cfg.readEntry("EditEnabled","FALSE")=="TRUE") {
704 configMenu->setItemChecked(-16,TRUE);
705 commonCombo->setEditable( TRUE );
706 } else {
707 configMenu->setItemChecked(-20,FALSE);
708 commonCombo->setEditable( FALSE );
709 }
710 }
711 }
712 if( iD == -3) {
713 cfg.setGroup("Tabs");
714 QString tmp=cfg.readEntry("Position","Top");
715
716 if(tmp=="Top") {
717 tab->setTabPosition(QTabWidget::Bottom);
718 configMenu->changeItem( iD,"Tabs on Top");
719 cfg.writeEntry("Position","Bottom");
720 } else {
721 tab->setTabPosition(QTabWidget::Top);
722 configMenu->changeItem( iD,"Tabs on Bottom");
723 cfg.writeEntry("Position","Top");
724 }
725 }
726 if( iD == -20) {
727 cfg.setGroup("Commands");
728// qDebug("enableCommandEdit");
729 if( !configMenu->isItemChecked(iD) ) {
730 commonCombo->setEditable( TRUE );
731 configMenu->setItemChecked(iD,TRUE);
732 commonCombo->setCurrentItem(0);
733 cfg.writeEntry("EditEnabled","TRUE");
734 } else {
735 commonCombo->setEditable( FALSE );
736 configMenu->setItemChecked(iD,FALSE);
737 cfg.writeEntry("EditEnabled","FALSE");
738 commonCombo->setFocusPolicy(QWidget::NoFocus);
739 te->setFocus();
740 }
741 }
742}
743
744void Konsole::changeCommand(const QString &text, int c)
745{
746 Config cfg("Konsole");
747 cfg.setGroup("Commands");
748 if(commonCmds[c] != text) {
749 cfg.writeEntry(QString::number(c),text);
750 commonCombo->clearEdit();
751 commonCombo->setCurrentItem(c);
752 }
753}
754
755void Konsole::setColor()
756{
757 Config cfg("Konsole");
758 cfg.setGroup("Colors");
759 int scheme = cfg.readNumEntry("Schema",1);
760 if(scheme != 1) colorMenuSelected( -scheme);
761
762}