summaryrefslogtreecommitdiff
path: root/core/apps/embeddedkonsole/konsole.cpp
authormickeyl <mickeyl>2003-11-06 10:26:22 (UTC)
committer mickeyl <mickeyl>2003-11-06 10:26:22 (UTC)
commit8c283be8e455571a03f11035b23f649e49de726c (patch) (unidiff)
tree8213d1c2cbf06881649af936362d4035ee63ceed /core/apps/embeddedkonsole/konsole.cpp
parent55ea6367fba8a82fbdca74599422717e4b3c3ec6 (diff)
downloadopie-8c283be8e455571a03f11035b23f649e49de726c.zip
opie-8c283be8e455571a03f11035b23f649e49de726c.tar.gz
opie-8c283be8e455571a03f11035b23f649e49de726c.tar.bz2
merge core/apps/*
Diffstat (limited to 'core/apps/embeddedkonsole/konsole.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/apps/embeddedkonsole/konsole.cpp74
1 files changed, 57 insertions, 17 deletions
diff --git a/core/apps/embeddedkonsole/konsole.cpp b/core/apps/embeddedkonsole/konsole.cpp
index c324c35..ec438c3 100644
--- a/core/apps/embeddedkonsole/konsole.cpp
+++ b/core/apps/embeddedkonsole/konsole.cpp
@@ -37,24 +37,27 @@
37#include <qmessagebox.h> 37#include <qmessagebox.h>
38#include <qaction.h> 38#include <qaction.h>
39#include <qapplication.h> 39#include <qapplication.h>
40#include <qfontmetrics.h> 40#include <qfontmetrics.h>
41#include <qcombobox.h> 41#include <qcombobox.h>
42#include <qevent.h> 42#include <qevent.h>
43#include <qtabwidget.h> 43#include <qtabwidget.h>
44#include <qtabbar.h> 44#include <qtabbar.h>
45#include <qpe/config.h> 45#include <qpe/config.h>
46#include <qstringlist.h> 46#include <qstringlist.h>
47#include <qpalette.h> 47#include <qpalette.h>
48 48
49#include <unistd.h>
50#include <pwd.h>
51#include <sys/types.h>
49#include <sys/wait.h> 52#include <sys/wait.h>
50#include <stdio.h> 53#include <stdio.h>
51#include <stdlib.h> 54#include <stdlib.h>
52#include <assert.h> 55#include <assert.h>
53 56
54#include "konsole.h" 57#include "konsole.h"
55#include "keytrans.h" 58#include "keytrans.h"
56#include "commandeditdialog.h" 59#include "commandeditdialog.h"
57 60
58#ifdef QT_QWS_OPIE 61#ifdef QT_QWS_OPIE
59#include <opie/colorpopupmenu.h> 62#include <opie/colorpopupmenu.h>
60#endif 63#endif
@@ -162,38 +165,75 @@ static const char *commonCmds[] =
162 "more", 165 "more",
163 "sort", 166 "sort",
164 "touch", 167 "touch",
165 "umount", 168 "umount",
166 "mknod", 169 "mknod",
167 "netstat", 170 "netstat",
168*/ 171*/
169 172
170 "exit", 173 "exit",
171 NULL 174 NULL
172}; 175};
173 176
177static void konsoleInit(const char** shell) {
178 if(setuid(getuid()) !=0) qDebug("setuid failed");
179 if(setgid(getgid()) != 0) qDebug("setgid failed"); // drop privileges
180
181
182// QPEApplication::grabKeyboard(); // for CTRL and ALT
183
184 qDebug("keyboard grabbed");
185#ifdef FAKE_CTRL_AND_ALT
186 qDebug("Fake Ctrl and Alt defined");
187 QPEApplication::grabKeyboard(); // for CTRL and ALT
188#endif
189
190 *shell = getenv("SHELL");
191 qWarning("SHell initially is %s", *shell );
192
193 if (shell == NULL || *shell == '\0') {
194 struct passwd *ent = 0;
195 uid_t me = getuid();
196 *shell = "/bin/sh";
197
198 while ( (ent = getpwent()) != 0 ) {
199 if (ent->pw_uid == me) {
200 if (ent->pw_shell != "")
201 *shell = ent->pw_shell;
202 break;
203 }
204 }
205 endpwent();
206 }
207
208 qWarning("SHELL now is %s", *shell );
209
210 if( putenv((char*)"COLORTERM=") !=0)
211 qDebug("putenv failed"); // to trigger mc's color detection
212}
174 213
175Konsole::Konsole(QWidget* parent, const char* name, WFlags fl) : 214Konsole::Konsole(QWidget* parent, const char* name, WFlags fl) :
176 QMainWindow(parent, name, fl) 215 QMainWindow(parent, name, fl)
177{ 216{
178 QStrList args; 217 QStrList tmp; const char* shell;
179 init("/bin/sh",args);
180}
181 218
182Konsole::Konsole(const char* name, const char* _pgm, QStrList & _args, int) 219 setCaption( tr("Terminal") );
183 : QMainWindow(0, name) 220
184{ 221 konsoleInit( &shell);
185 init(_pgm,_args); 222 qWarning("Using shell %s", shell);
223 init(shell,tmp);
186} 224}
187 225
226
227
188void Konsole::initCommandList() 228void Konsole::initCommandList()
189{ 229{
190// qDebug("Konsole::initCommandList"); 230// qDebug("Konsole::initCommandList");
191 Config cfg("Konsole"); 231 Config cfg("Konsole");
192 cfg.setGroup("Commands"); 232 cfg.setGroup("Commands");
193 commonCombo->setInsertionPolicy(QComboBox::AtCurrent); 233 commonCombo->setInsertionPolicy(QComboBox::AtCurrent);
194 commonCombo->clear(); 234 commonCombo->clear();
195 if (cfg.readEntry("Commands Set","FALSE") == "FALSE") { 235 if (cfg.readEntry("Commands Set","FALSE") == "FALSE") {
196 for (int i = 0; commonCmds[i] != NULL; i++) { 236 for (int i = 0; commonCmds[i] != NULL; i++) {
197 commonCombo->insertItem(commonCmds[i],i); 237 commonCombo->insertItem(commonCmds[i],i);
198 } 238 }
199 } else { 239 } else {
@@ -290,25 +330,25 @@ void Konsole::init(const char* _pgm, QStrList & _args)
290 colorMenu->insertItem(tr( "Red on Black")); 330 colorMenu->insertItem(tr( "Red on Black"));
291 colorMenu->insertItem(tr( "Green on Yellow")); 331 colorMenu->insertItem(tr( "Green on Yellow"));
292 colorMenu->insertItem(tr( "Blue on Magenta")); 332 colorMenu->insertItem(tr( "Blue on Magenta"));
293 colorMenu->insertItem(tr( "Magenta on Blue")); 333 colorMenu->insertItem(tr( "Magenta on Blue"));
294 colorMenu->insertItem(tr( "Cyan on White")); 334 colorMenu->insertItem(tr( "Cyan on White"));
295 colorMenu->insertItem(tr( "White on Cyan")); 335 colorMenu->insertItem(tr( "White on Cyan"));
296 colorMenu->insertItem(tr( "Blue on Black")); 336 colorMenu->insertItem(tr( "Blue on Black"));
297 colorMenu->insertItem(tr( "Amber on Black")); 337 colorMenu->insertItem(tr( "Amber on Black"));
298 338
299#ifdef QT_QWS_OPIE 339#ifdef QT_QWS_OPIE
300 colorMenu->insertItem(tr( "Custom")); 340 colorMenu->insertItem(tr( "Custom"));
301#endif 341#endif
302 342
303 configMenu->insertItem( tr("Font"), fontList ); 343 configMenu->insertItem( tr("Font"), fontList );
304 configMenu->insertItem(tr( "Colors") ,colorMenu); 344 configMenu->insertItem(tr( "Colors") ,colorMenu);
305 345
306 connect( fontList, SIGNAL( activated(int) ), this, SLOT( fontChanged(int) )); 346 connect( fontList, SIGNAL( activated(int) ), this, SLOT( fontChanged(int) ));
307 connect( configMenu, SIGNAL( activated(int) ), this, SLOT( configMenuSelected(int) )); 347 connect( configMenu, SIGNAL( activated(int) ), this, SLOT( configMenuSelected(int) ));
308 connect( colorMenu, SIGNAL( activated(int) ), this, SLOT( colorMenuIsSelected(int) )); 348 connect( colorMenu, SIGNAL( activated(int) ), this, SLOT( colorMenuIsSelected(int) ));
309 connect( scrollMenu, SIGNAL(activated(int)),this,SLOT(scrollMenuSelected(int))); 349 connect( scrollMenu, SIGNAL(activated(int)),this,SLOT(scrollMenuSelected(int)));
310 connect(editCommandListMenu,SIGNAL(activated(int)),this,SLOT(editCommandListMenuSelected(int))); 350 connect(editCommandListMenu,SIGNAL(activated(int)),this,SLOT(editCommandListMenuSelected(int)));
311 351
312 menuBar->insertItem( tr("Options"), configMenu ); 352 menuBar->insertItem( tr("Options"), configMenu );
313 353
314 QPEToolBar *toolbar = new QPEToolBar( this ); 354 QPEToolBar *toolbar = new QPEToolBar( this );
@@ -359,37 +399,37 @@ void Konsole::init(const char* _pgm, QStrList & _args)
359// tmp = cfg.readEntry( QString::number(i),""); 399// tmp = cfg.readEntry( QString::number(i),"");
360// if(tmp != "") 400// if(tmp != "")
361// commonCombo->changeItem( tmp,i ); 401// commonCombo->changeItem( tmp,i );
362// } 402// }
363 403
364 connect( commonCombo, SIGNAL( activated(int) ), this, SLOT( enterCommand(int) )); 404 connect( commonCombo, SIGNAL( activated(int) ), this, SLOT( enterCommand(int) ));
365 405
366 scrollMenu->insertItem(tr( "None" )); 406 scrollMenu->insertItem(tr( "None" ));
367 scrollMenu->insertItem(tr( "Left" )); 407 scrollMenu->insertItem(tr( "Left" ));
368 scrollMenu->insertItem(tr( "Right" )); 408 scrollMenu->insertItem(tr( "Right" ));
369// scrollMenu->insertSeparator(4); 409// scrollMenu->insertSeparator(4);
370// scrollMenu->insertItem(tr( "Horizontal" )); 410// scrollMenu->insertItem(tr( "Horizontal" ));
371 411
372 configMenu->insertItem(tr( "ScrollBar" ),scrollMenu); 412 configMenu->insertItem(tr( "ScrollBar" ),scrollMenu);
373 413
374 int jut = configMenu->insertItem(tr( "Wrap" )); 414 int jut = configMenu->insertItem(tr( "Wrap" ));
375 cfg.setGroup("ScrollBar"); 415 cfg.setGroup("ScrollBar");
376 configMenu->setItemChecked(jut, cfg.readBoolEntry("HorzScroll",0)); 416 configMenu->setItemChecked(jut, cfg.readBoolEntry("HorzScroll",0));
377 417
378 jut = configMenu->insertItem(tr( "Use Beep" )); 418 jut = configMenu->insertItem(tr( "Use Beep" ));
379 cfg.setGroup("Menubar"); 419 cfg.setGroup("Menubar");
380 420
381 configMenu->setItemChecked(jut, cfg.readBoolEntry("useBeep",0)); 421 configMenu->setItemChecked(jut, cfg.readBoolEntry("useBeep",0));
382 422
383 423
384//scrollMenuSelected(-29); 424//scrollMenuSelected(-29);
385// cfg.setGroup("ScrollBar"); 425// cfg.setGroup("ScrollBar");
386// if(cfg.readBoolEntry("HorzScroll",0)) { 426// if(cfg.readBoolEntry("HorzScroll",0)) {
387// if(cfg.readNumEntry("Position",2) == 0) 427// if(cfg.readNumEntry("Position",2) == 0)
388// te->setScrollbarLocation(1); 428// te->setScrollbarLocation(1);
389// else 429// else
390// te->setScrollbarLocation(0); 430// te->setScrollbarLocation(0);
391// te->setScrollbarLocation( cfg.readNumEntry("Position",2)); 431// te->setScrollbarLocation( cfg.readNumEntry("Position",2));
392// te->setWrapAt(120); 432// te->setWrapAt(120);
393// } 433// }
394 // create applications ///////////////////////////////////////////////////// 434 // create applications /////////////////////////////////////////////////////
395 setCentralWidget(tab); 435 setCentralWidget(tab);
@@ -409,25 +449,25 @@ parseCommandLine();
409 resize(321, 321); // Dummy. 449 resize(321, 321); // Dummy.
410 QSize currentSize = size(); 450 QSize currentSize = size();
411 if (currentSize != size()) 451 if (currentSize != size())
412 defaultSize = size(); 452 defaultSize = size();
413} 453}
414 454
415void Konsole::show() 455void Konsole::show()
416{ 456{
417 if ( !nsessions ) { 457 if ( !nsessions ) {
418 newSession(); 458 newSession();
419 } 459 }
420 QMainWindow::show(); 460 QMainWindow::show();
421 461
422} 462}
423 463
424void Konsole::initSession(const char*, QStrList &) 464void Konsole::initSession(const char*, QStrList &)
425{ 465{
426 QMainWindow::show(); 466 QMainWindow::show();
427} 467}
428 468
429Konsole::~Konsole() 469Konsole::~Konsole()
430{ 470{
431 while (nsessions > 0) { 471 while (nsessions > 0) {
432 doneSession(getTe()->currentSession, 0); 472 doneSession(getTe()->currentSession, 0);
433 } 473 }
@@ -532,25 +572,25 @@ QSize Konsole::calcSize(int columns, int lines) {
532 return size; 572 return size;
533 } 573 }
534} 574}
535 575
536/** 576/**
537 sets application window to a size based on columns X lines of the te 577 sets application window to a size based on columns X lines of the te
538 guest widget. Call with (0,0) for setting default size. 578 guest widget. Call with (0,0) for setting default size.
539*/ 579*/
540 580
541void Konsole::setColLin(int columns, int lines) 581void Konsole::setColLin(int columns, int lines)
542{ 582{
543 qDebug("konsole::setColLin:: Columns %d", columns); 583 qDebug("konsole::setColLin:: Columns %d", columns);
544 584
545 if ((columns==0) || (lines==0)) 585 if ((columns==0) || (lines==0))
546 { 586 {
547 if (defaultSize.isEmpty()) // not in config file : set default value 587 if (defaultSize.isEmpty()) // not in config file : set default value
548 { 588 {
549 defaultSize = calcSize(80,24); 589 defaultSize = calcSize(80,24);
550 // notifySize(24,80); // set menu items (strange arg order !) 590 // notifySize(24,80); // set menu items (strange arg order !)
551 } 591 }
552 resize(defaultSize); 592 resize(defaultSize);
553 } else { 593 } else {
554 resize(calcSize(columns, lines)); 594 resize(calcSize(columns, lines));
555 // notifySize(lines,columns); // set menu items (strange arg order !) 595 // notifySize(lines,columns); // set menu items (strange arg order !)
556 } 596 }
@@ -754,25 +794,25 @@ void Konsole::colorMenuSelected(int iD)
754 if(iD==-17) {// Black, Blue 794 if(iD==-17) {// Black, Blue
755 background.setRgb(0x00,0x00,0x00); 795 background.setRgb(0x00,0x00,0x00);
756 foreground.setRgb(0x18,0xB2,0xB2); 796 foreground.setRgb(0x18,0xB2,0xB2);
757 cfg.writeEntry("Schema","17"); 797 cfg.writeEntry("Schema","17");
758 colorMenu->setItemChecked(-17,TRUE); 798 colorMenu->setItemChecked(-17,TRUE);
759 } 799 }
760 if(iD==-18) {// Black, Gold 800 if(iD==-18) {// Black, Gold
761 background.setRgb(0x00,0x00,0x00); 801 background.setRgb(0x00,0x00,0x00);
762 foreground.setRgb(255,215,0); 802 foreground.setRgb(255,215,0);
763 cfg.writeEntry("Schema","18"); 803 cfg.writeEntry("Schema","18");
764 colorMenu->setItemChecked(-18,TRUE); 804 colorMenu->setItemChecked(-18,TRUE);
765 } 805 }
766#ifdef QT_QWS_OPIE 806#ifdef QT_QWS_OPIE
767 if(iD==-19) { 807 if(iD==-19) {
768// Custom 808// Custom
769 qDebug("do custom"); 809 qDebug("do custom");
770 if(fromMenu) { 810 if(fromMenu) {
771 OColorPopupMenu* penColorPopupMenu = new OColorPopupMenu(Qt::black, this, "foreground color"); 811 OColorPopupMenu* penColorPopupMenu = new OColorPopupMenu(Qt::black, this, "foreground color");
772 connect(penColorPopupMenu, SIGNAL(colorSelected(const QColor&)), this, 812 connect(penColorPopupMenu, SIGNAL(colorSelected(const QColor&)), this,
773 SLOT(changeForegroundColor(const QColor&))); 813 SLOT(changeForegroundColor(const QColor&)));
774 penColorPopupMenu->exec(); 814 penColorPopupMenu->exec();
775 } 815 }
776 cfg.writeEntry("Schema","19"); 816 cfg.writeEntry("Schema","19");
777 if(!fromMenu) { 817 if(!fromMenu) {
778 foreground.setNamedColor(cfg.readEntry("foreground","")); 818 foreground.setNamedColor(cfg.readEntry("foreground",""));
@@ -881,33 +921,33 @@ void Konsole::scrollMenuSelected(int index)
881 cfg.setGroup("ScrollBar"); 921 cfg.setGroup("ScrollBar");
882 int i,j,k; 922 int i,j,k;
883#ifdef QT_QWS_OPIE 923#ifdef QT_QWS_OPIE
884i=-25;j=-26;k=-27; 924i=-25;j=-26;k=-27;
885#else 925#else
886i=-24;j=-25;k=-26; 926i=-24;j=-25;k=-26;
887#endif 927#endif
888 if(index == i) { 928 if(index == i) {
889 929
890 te->setScrollbarLocation(0); 930 te->setScrollbarLocation(0);
891 cfg.writeEntry("Position",0); 931 cfg.writeEntry("Position",0);
892 } else if(index == j) { 932 } else if(index == j) {
893 933
894 te->setScrollbarLocation(1); 934 te->setScrollbarLocation(1);
895 cfg.writeEntry("Position",1); 935 cfg.writeEntry("Position",1);
896 } else if(index == k) { 936 } else if(index == k) {
897 937
898 te->setScrollbarLocation(2); 938 te->setScrollbarLocation(2);
899 cfg.writeEntry("Position",2); 939 cfg.writeEntry("Position",2);
900 } 940 }
901 941
902// case -29: { 942// case -29: {
903// bool b=cfg.readBoolEntry("HorzScroll",0); 943// bool b=cfg.readBoolEntry("HorzScroll",0);
904// cfg.writeEntry("HorzScroll", !b ); 944// cfg.writeEntry("HorzScroll", !b );
905// cfg.write(); 945// cfg.write();
906// if(cfg.readNumEntry("Position",2) == 0) { 946// if(cfg.readNumEntry("Position",2) == 0) {
907// te->setScrollbarLocation(1); 947// te->setScrollbarLocation(1);
908// te->setWrapAt(0); 948// te->setWrapAt(0);
909// } else { 949// } else {
910// te->setScrollbarLocation(0); 950// te->setScrollbarLocation(0);
911// te->setWrapAt(120); 951// te->setWrapAt(120);
912// } 952// }
913// te->setScrollbarLocation( cfg.readNumEntry("Position",2)); 953// te->setScrollbarLocation( cfg.readNumEntry("Position",2));
@@ -1038,25 +1078,25 @@ void Konsole::changeBackgroundColor(const QColor &color) {
1038 cfg.writeEntry("background",color.name()); 1078 cfg.writeEntry("background",color.name());
1039 qDebug("background "+color.name()); 1079 qDebug("background "+color.name());
1040 cfg.write(); 1080 cfg.write();
1041} 1081}
1042 1082
1043void Konsole::doWrap() { 1083void Konsole::doWrap() {
1044int i; 1084int i;
1045#ifdef QT_QWS_OPIE 1085#ifdef QT_QWS_OPIE
1046i=-29; 1086i=-29;
1047#else 1087#else
1048i=-28; 1088i=-28;
1049#endif 1089#endif
1050 1090
1051 Config cfg("Konsole"); 1091 Config cfg("Konsole");
1052 cfg.setGroup("ScrollBar"); 1092 cfg.setGroup("ScrollBar");
1053 TEWidget* te = getTe(); 1093 TEWidget* te = getTe();
1054 if( !cfg.readBoolEntry("HorzScroll",0)) { 1094 if( !cfg.readBoolEntry("HorzScroll",0)) {
1055 te->setWrapAt(0); 1095 te->setWrapAt(0);
1056 configMenu->setItemChecked( i,TRUE); 1096 configMenu->setItemChecked( i,TRUE);
1057 } else { 1097 } else {
1058// te->setWrapAt(90); 1098// te->setWrapAt(90);
1059 te->setWrapAt(120); 1099 te->setWrapAt(120);
1060 configMenu->setItemChecked( i,FALSE); 1100 configMenu->setItemChecked( i,FALSE);
1061 } 1101 }
1062} 1102}