aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Moore <moorekou@gmail.com>2016-03-14 14:13:10 -0400
committerKen Moore <moorekou@gmail.com>2016-03-14 14:13:10 -0400
commita8241b3b2cbd1dd80e4e44ce386c81c9a8455d68 (patch)
treef6788ce6e9804a90b8f0787a0d161f0b42ef4bd0
parentAdd the ANSI graphics support (most common ones) so that the text is bold/ita... (diff)
downloadlumina-a8241b3b2cbd1dd80e4e44ce386c81c9a8455d68.tar.gz
lumina-a8241b3b2cbd1dd80e4e44ce386c81c9a8455d68.tar.bz2
lumina-a8241b3b2cbd1dd80e4e44ce386c81c9a8455d68.zip
Get some more of the terminal cleaned up. Now the initial work directory can be specified ahead of time.
-rw-r--r--desktop-utilities/lumina-terminal/TerminalWidget.cpp70
-rw-r--r--desktop-utilities/lumina-terminal/TtyProcess.cpp9
-rw-r--r--desktop-utilities/lumina-terminal/TtyProcess.h2
3 files changed, 52 insertions, 29 deletions
diff --git a/desktop-utilities/lumina-terminal/TerminalWidget.cpp b/desktop-utilities/lumina-terminal/TerminalWidget.cpp
index 5f2e581d..b16dd6ba 100644
--- a/desktop-utilities/lumina-terminal/TerminalWidget.cpp
+++ b/desktop-utilities/lumina-terminal/TerminalWidget.cpp
@@ -14,7 +14,7 @@
TerminalWidget::TerminalWidget(QWidget *parent, QString dir) : QTextEdit(parent){
//Setup the text widget
this->setLineWrapMode(QTextEdit::WidgetWidth);
- this->setStyleSheet("");
+ //this->setStyleSheet("");
DEFFMT = this->textCursor().charFormat(); //save the default structure for later
CFMT = this->textCursor().charFormat(); //current format
@@ -22,7 +22,7 @@ TerminalWidget::TerminalWidget(QWidget *parent, QString dir) : QTextEdit(parent)
PROC = new TTYProcess(this);
qDebug() << "Open new TTY";
//int fd;
- bool ok = PROC->startTTY( QProcessEnvironment::systemEnvironment().value("SHELL","/bin/sh") );
+ bool ok = PROC->startTTY( QProcessEnvironment::systemEnvironment().value("SHELL","/bin/sh"), QStringList(), dir);
qDebug() << " - opened:" << ok;
this->setEnabled(PROC->isOpen());
@@ -48,7 +48,6 @@ void TerminalWidget::applyData(QByteArray data){
for(int i=0; i<data.size(); i++){
if( data.at(i)=='\b' ){
//Simple cursor backward 1 (NOT backspace in this context!!)
- //this->textCursor().deletePreviousChar();
this->moveCursor(QTextCursor::Left, QTextCursor::MoveAnchor);
}else if( data.at(i)=='\x1B' ){
//ANSI Control Code start
@@ -67,7 +66,7 @@ void TerminalWidget::applyData(QByteArray data){
applyANSI("[K");
}
//Plaintext character - just add it here
- //qDebug() << "Insert Text:" << data.at(i) << CFMT.fontWeight();
+ //qDebug() << "Insert Text:" << data.at(i) << CFMT.foreground().color() << CFMT.background().color();
this->textCursor().insertText( QChar(data.at(i)), CFMT );
}
@@ -215,35 +214,48 @@ void TerminalWidget::applyANSIColor(int code){
else if(code==29){ CFMT.setFontStrikeOut(false); } //Not Crossed out
else if(code>=30 && code<=39){
//Set the font color
- QBrush brush = CFMT.foreground();
- if(code==30){ brush.setColor(Qt::black); }
- else if(code==31){ brush.setColor(Qt::red); }
- else if(code==32){ brush.setColor(Qt::green); }
- else if(code==33){ brush.setColor(Qt::yellow); }
- else if(code==34){ brush.setColor(Qt::blue); }
- else if(code==35){ brush.setColor(Qt::magenta); }
- else if(code==36){ brush.setColor(Qt::cyan); }
- else if(code==37){ brush.setColor(Qt::white); }
+ QColor color;
+ if(code==30){color=QColor(Qt::black); }
+ else if(code==31){ color=QColor(Qt::red); }
+ else if(code==32){ color=QColor(Qt::green); }
+ else if(code==33){ color=QColor(Qt::yellow); }
+ else if(code==34){ color=QColor(Qt::blue); }
+ else if(code==35){ color=QColor(Qt::magenta); }
+ else if(code==36){ color=QColor(Qt::cyan); }
+ else if(code==37){ color=QColor(Qt::white); }
//48: Special extended color setting (unsupported)
- else if(code==39){ brush.setColor( DEFFMT.foreground().color() ); } //reset to default color
+ else if(code==39){ color= DEFFMT.foreground().color(); } //reset to default color
+QBrush brush = CFMT.background();
+ color.setAlpha(255); //fully opaque
+ brush.setColor(color);
CFMT.setForeground( brush );
}
else if(code>=40 && code<=49){
//Set the font color
- QBrush brush = CFMT.background();
- if(code==40){ brush.setColor(Qt::black); }
- else if(code==41){ brush.setColor(Qt::red); }
- else if(code==42){ brush.setColor(Qt::green); }
- else if(code==43){ brush.setColor(Qt::yellow); }
- else if(code==44){ brush.setColor(Qt::blue); }
- else if(code==45){ brush.setColor(Qt::magenta); }
- else if(code==46){ brush.setColor(Qt::cyan); }
- else if(code==47){ brush.setColor(Qt::white); }
+ QColor color;
+ if(code==40){color=QColor(Qt::black); }
+ else if(code==41){ color=QColor(Qt::red); }
+ else if(code==42){ color=QColor(Qt::green); }
+ else if(code==43){ color=QColor(Qt::yellow); }
+ else if(code==44){ color=QColor(Qt::blue); }
+ else if(code==45){ color=QColor(Qt::magenta); }
+ else if(code==46){ color=QColor(Qt::cyan); }
+ else if(code==47){ color=QColor(Qt::white); }
//48: Special extended color setting (unsupported)
- else if(code==49){ brush.setColor( DEFFMT.background().color() ); } //reset to default color
+ else if(code==49){ color= DEFFMT.background().color(); } //reset to default color
+ QBrush brush = CFMT.background();
+ color.setAlpha(255); //fully opaque
+ brush.setColor(color);
CFMT.setBackground( brush );
}
-
+ //50: Reserved
+ //51: Framed
+ //52: Encircled
+ else if(code==53){ CFMT.setFontOverline(true); } //enable overline
+ //54: Not framed/circled (51/52)
+ else if(code==55){ CFMT.setFontOverline(false); } //disable overline
+ //56-59: Reserved
+ //60+: Not generally supported (special code for particular terminals such as aixterm)
}
//Outgoing Data parsing
@@ -308,7 +320,11 @@ void TerminalWidget::keyPressEvent(QKeyEvent *ev){
void TerminalWidget::mousePressEvent(QMouseEvent *ev){
this->setFocus();
- Q_UNUSED(ev);
+ if(ev->button()==Qt::RightButton){
+ QTextEdit::mousePressEvent(ev);
+ }else{
+ Q_UNUSED(ev);
+ }
}
void TerminalWidget::mouseDoubleClickEvent(QMouseEvent *ev){
@@ -317,6 +333,8 @@ void TerminalWidget::mouseDoubleClickEvent(QMouseEvent *ev){
void TerminalWidget::contextMenuEvent(QContextMenuEvent *ev){
Q_UNUSED(ev);
+ //QTextEdit::contextMenuEvent(ev);
+ //Need to implement a custom context menu
}
void TerminalWidget::resizeEvent(QResizeEvent *ev){
diff --git a/desktop-utilities/lumina-terminal/TtyProcess.cpp b/desktop-utilities/lumina-terminal/TtyProcess.cpp
index 0291a712..ec0a6309 100644
--- a/desktop-utilities/lumina-terminal/TtyProcess.cpp
+++ b/desktop-utilities/lumina-terminal/TtyProcess.cpp
@@ -1,5 +1,7 @@
#include "TtyProcess.h"
+#include <QDir>
+
TTYProcess::TTYProcess(QObject *parent) : QObject(parent){
childProc = 0;
sn = 0;
@@ -11,7 +13,9 @@ TTYProcess::~TTYProcess(){
}
// === PUBLIC ===
-bool TTYProcess::startTTY(QString prog, QStringList args){
+bool TTYProcess::startTTY(QString prog, QStringList args, QString workdir){
+ if(workdir=="~"){ workdir = QDir::homePath(); }
+ QDir::setCurrent(workdir);
//Turn the program/arguments into C-compatible arrays
char cprog[prog.length()]; strcpy(cprog, prog.toLocal8Bit().data());
char *cargs[args.length()+2];
@@ -88,7 +92,8 @@ QByteArray TTYProcess::readTTY(){
fragBA = BA;
return readTTY();
}else{
- qDebug() << "Read Data:" << BA;
+ //qDebug() << "Read Data:" << BA;
+ qDebug() << ".."; //Crashes when the debug line is removed - not sure why....
return BA;
}
}
diff --git a/desktop-utilities/lumina-terminal/TtyProcess.h b/desktop-utilities/lumina-terminal/TtyProcess.h
index 897d4b31..9b3873b0 100644
--- a/desktop-utilities/lumina-terminal/TtyProcess.h
+++ b/desktop-utilities/lumina-terminal/TtyProcess.h
@@ -39,7 +39,7 @@ public:
TTYProcess(QObject *parent = 0);
~TTYProcess();
- bool startTTY(QString prog, QStringList args = QStringList());
+ bool startTTY(QString prog, QStringList args = QStringList(), QString workdir = "~");
void closeTTY();
//Primary read/write functions
bgstack15