diff --git a/README.md b/README.md
index e751f0c..fcc1540 100644
--- a/README.md
+++ b/README.md
@@ -24,7 +24,28 @@ make
sudo make install
-# AppImage
+# Nautilus script - terminal-here
+
+This script will open a elokab-Terminal in the current directory.
+
+Save this script under $HOME/.local/nautilus/scripts/terminal-here. Make sure that
+
+you give this file executable permission. { chmod +x terminal-here }
+
+ #!/bin/bash
+
+ if [ "$NAUTILUS_SCRIPT_CURRENT_URI" == "x-nautilus-desktop:///" ]; then
+ DIR=$HOME
+ else
+ DIR=`echo $NAUTILUS_SCRIPT_CURRENT_URI | sed 's/^file:\/\///' | sed 's/%20/ /g'`
+ fi
+
+ elokab-terminal --working-directory "$DIR"
+
+ exit 0
+
+
+# AppImage v:02
x86_64
diff --git a/elokab-terminal/buttonColor/buttoncolor.cpp b/elokab-terminal/buttonColor/buttoncolor.cpp
index 80a18a6..5b4afb0 100755
--- a/elokab-terminal/buttonColor/buttoncolor.cpp
+++ b/elokab-terminal/buttonColor/buttoncolor.cpp
@@ -30,8 +30,9 @@ ButtonColor::ButtonColor(const QString &text, bool showAlphaChannel, QColor colo
tButtonColor->setFocusPolicy(Qt::StrongFocus);
tButtonPicker->setAutoRaise(true);
tButtonPicker->setIcon(QIcon::fromTheme("color-picker",QIcon(":/icons/color-picker")));
- tButtonColor->setIconSize(QSize(32,16));
- tButtonColor->setMinimumWidth(48);
+ tButtonPicker->setIconSize(QSize(16,16));
+ tButtonColor->setIconSize(QSize(24,16));
+ tButtonColor->setMinimumWidth(36);
setLayout(layout);
layout->addWidget(mLabel);
@@ -50,7 +51,7 @@ void ButtonColor::setColor(QColor color)
{
m_color=color;
- QPixmap pix(32,16);
+ QPixmap pix(26,16);
pix.fill(Qt::transparent);
QPainter p;
@@ -60,7 +61,7 @@ void ButtonColor::setColor(QColor color)
p.setPen(this->palette().shadow().color());
p.drawRect(pix.rect());
p.setPen(this->palette().light().color());
- p.drawRect(-1,-1,32,16);
+ p.drawRect(-1,-1,26,16);
// pix.fill(m_color);
tButtonColor->setIcon(pix);
}
diff --git a/elokab-terminal/main.cpp b/elokab-terminal/main.cpp
index 48c6c29..49b0886 100755
--- a/elokab-terminal/main.cpp
+++ b/elokab-terminal/main.cpp
@@ -8,14 +8,19 @@
void helpMe()
{
+
printf("Usage: elokab-terminal [OPTION]\n");
+ puts("elokab-terminal v: 0.3 \n" );
puts("OPTION:\n");
- puts(" -h --help Print this help.\n");
- puts(" -w --working-directory
Start session with specified work directory.\n");
- puts(" -e, --execute Execute command instead of shel\n");
- puts(" -b, --hide-border FramelessWindow no border\n");
+ puts(" -h --help Print this help.\n");
+ puts(" -w --working-directory Start session with specified work directory.\n");
+ puts(" -e, --execute Execute command instead of shel\n");
+ puts(" -b, --hide-border FramelessWindow no border\n");
+ puts(" -t, --on-top On top hint\n");
+ puts(" -g, --geometry Run in specific dimensions ex: 0,0,800,600 \n");
}
+
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
@@ -23,9 +28,9 @@ int main(int argc, char *argv[])
setenv("TERM", "xterm", 1); // TODO/FIXME: why?
- a.setApplicationName("elokab-terminal");
+ a.setApplicationName("elokab-terminal");
a.setOrganizationName("elokab");
- a.setApplicationVersion("0.1");
+ a.setApplicationVersion("0.3");
/// جلب ترجمة البرنامج من مجلد البرنامج
@@ -62,35 +67,72 @@ int main(int argc, char *argv[])
QIcon icon=QIcon::fromTheme("terminal",QIcon(":/icons/terminal.png"));
a.setWindowIcon(icon);
//------------------------------------argument-------------------------------------------------
- QString workdir= QDir::currentPath(),command;
+ QString workdir,command,geometry;
bool framless=false;
+ bool ontop=false;
QStringList args = a.arguments();
if(args.count()>1)
{
+ for (int i = 0; i < args.count(); ++i) {
+
+ QString arg = args.at(i);
+ if (arg == "-h" || arg == "--help" ) {helpMe();return 0; }
+
+ else if (arg == "-w" || arg == "--working-directory" ) {
+
+ if(i+1>args.count()-1){helpMe();return 0;}
+ QDir dir(args.at(i+1));
+ if(dir.exists()) workdir=args.at(i+1);
+
+ }
+
+ else if (arg == "-e" ||arg == "-x" || arg == "--execute"|| arg == "--command" ) {
+ if(i+1>args.count()-1){helpMe();return 0;}
+ command=args.at(i+1);
+ }
+
+ else if (arg == "-b" || arg == "--hide-border" ) {framless=true;}
+
+ else if (arg == "-g" || arg == "--geometry" ) {
+ if(i+1>args.count()-1){helpMe();return 0;}
+ geometry=args.at(i+1);
+ }
+ else if (arg == "-t" || arg == "--on-top" ) {ontop=true;}
- QString arg = args.at(1);
- if (arg == "-h" || arg == "--help" ) {helpMe();return 0; }
- else if (arg == "-w" || arg == "--working-directory" ) {workdir=args.at(2);}
- else if (arg == "-e" ||arg == "-x" || arg == "--execute"|| arg == "--command" ) {command=args.at(2);}
- else if (arg == "-b" || arg == "--hide-border" ) {framless=true;}
- else {
- QDir dir(arg);
+
+ // qWarning() << "echo Unknown option: " << args; helpMe(); return 0;
+ // command= "echo \"Unknown option: " + arg+"\n"+ help+"\"";
+
+
+ }
+
+ if(workdir.isEmpty())
+ {
+
+ QDir dir(args.at(1));
if(dir.exists())
- workdir=arg;
- else
- qWarning() << "echo Unknown option: " << args; helpMe(); return 0;
- // command= "echo \"Unknown option: " + arg+"\n"+ help+"\"";
- }
+ workdir=args.at(1);
+ }
+
}
// qWarning() << "echo Unknown option: " << args; qDebug()<
MainWindow::MainWindow(const QString &wDir,
const QString &command,
- bool framless,
+ bool framless,
+ const QString &geometry,
+ bool ontop,
QWidget *parent) :
QMainWindow(parent),
- ui(new Ui::MainWindow),numTab(0)
+ ui(new Ui::MainWindow)
{
this->setAttribute(Qt::WA_TranslucentBackground,true);
-
-
- if(framless)
- setWindowFlags( Qt::FramelessWindowHint /*| Qt::WindowStaysOnTopHint*/);
-
+ setAutoFillBackground(true);
+ ui->setupUi(this);
+ setupActions();
+//Framless Border
+ if(framless && ontop)
+ setWindowFlags( Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
+ else if(framless && !ontop)
+ setWindowFlags( Qt::FramelessWindowHint /*| Qt::WindowStaysOnTopHint*/);
+ else if(!framless && ontop)
+ setWindowFlags( /*Qt::FramelessWindowHint |*/ Qt::WindowStaysOnTopHint);
+
+
+ //Geometry
+ QStringList list=geometry.split(",");
+ if(!geometry.isEmpty()&& list.count()==4){
+ int _x=QString(list.at(0)).toInt();
+ int _y=QString(list.at(1)).toInt();
+ int _w=QString(list.at(2)).toInt();
+ int _h=QString(list.at(3)).toInt();
+ qDebug()<<"MainWindow Geometry:"<<_x<<_y<<_w<<_h;
+ setGeometry(_x,_y,_w,_h);
+ }else{
+ QSettings setting;
+ restoreGeometry(setting.value("Geometry").toByteArray());
+ }
- setAutoFillBackground(true);
- ui->setupUi(this);
- setupActions();
- QSettings setting;
- restoreGeometry(setting.value("Geometry").toByteArray());
const QClipboard *clipboard = QApplication::clipboard();
connect(clipboard ,SIGNAL(dataChanged()),this,SLOT(clipboardChanged()));
@@ -133,26 +150,22 @@ void MainWindow::setupActions()
}
-void MainWindow::on_actionTest_triggered()
-{
- termWidget()->clear();
-termWidget()->zoomIn();
-}
+
void MainWindow::copySelectedText()
{
- termWidget()->CopySelection();
+ termWidget()->CopySelection();
}
void MainWindow::pastText()
{
const QClipboard *clipboard = QApplication::clipboard();
- const QMimeData *mimeData = clipboard->mimeData();
+ const QMimeData *mimeData = clipboard->mimeData();
- if (mimeData->hasText()) {
- QString text =mimeData->text();
- termWidget()->sendText(text);
- }
+ if (mimeData->hasText()) {
+ QString text =mimeData->text();
+ termWidget()->sendText(text);
+ }
}
void MainWindow::clipboardChanged()
@@ -161,25 +174,25 @@ void MainWindow::clipboardChanged()
const QMimeData *mimeData = clipboard->mimeData();
if(mimeData->hasText()){
if(!mimeData->text().isEmpty())
- emit clipboardAvailable(true);
+ emit clipboardAvailable(true);
else
emit clipboardAvailable(false);
}else{
- emit clipboardAvailable(false);
+ emit clipboardAvailable(false);
}
}
void MainWindow::customContextMenu(QPoint)
{
-// QMenu menu;
-// menu.addAction(actionCopy);
-// menu.addAction(actionPast);
+ // QMenu menu;
+ // menu.addAction(actionCopy);
+ // menu.addAction(actionPast);
mMenu->exec(QCursor::pos());
}
void MainWindow::addNewTab(const QString &wDir, const QString &command)
{
- numTab++;
+
QTermWidget *terminaleWidget=new QTermWidget(0,this);
@@ -190,36 +203,46 @@ void MainWindow::addNewTab(const QString &wDir, const QString &command)
QSettings setting;
QFont f= setting.value("Font",font).value();
- int color=setting.value("ColorSheme",0).toInt();
+ // int color=setting.value("ColorSheme",0).toInt();
int spos=setting.value("ScrollBar",0).toInt();
-// QColor fcolor=setting.value("FontColor",QColor(255,255,255)).value();
-// QColor bcolor=setting.value("BackColor",QColor(0,0,0)).value();
-int opacity=setting.value("Opacity",100).toInt();
+ // QColor fcolor=setting.value("FontColor",QColor(255,255,255)).value();
+ // QColor bcolor=setting.value("BackColor",QColor(0,0,0)).value();
+ int opacity=setting.value("Opacity",100).toInt();
QString shell=setting.value("Shell",QString()).toString();
terminaleWidget-> setShellProgram(shell);
terminaleWidget->setTerminalFont(f);
+ //TODO FIXME
terminaleWidget->setColorScheme(4);
terminaleWidget->setScrollBarPosition(spos);
terminaleWidget->setInitialWorkingDirectory(wDir);
terminaleWidget->startShellProgram();
-terminaleWidget->setTerminalOpacity(qreal(opacity)/100);
+ terminaleWidget->setTerminalOpacity(qreal(opacity)/100);
if(!command.isEmpty())
{
- // terminaleWidget-> setShellProgram(command);
- terminaleWidget->getOutputFromCommand(command);
+ // terminaleWidget-> setShellProgram(command);
+ terminaleWidget->getOutputFromCommand(command);
}
terminaleWidget->setContextMenuPolicy(Qt::CustomContextMenu);
QIcon icon=QIcon::fromTheme("terminal",QIcon(":/icons/terminal.png"));
- ui->tabWidget->addTab(terminaleWidget,icon,tr("Shell ")+QString::number(numTab));
+ ui->tabWidget->addTab(terminaleWidget,icon,terminaleWidget->title());
connect(terminaleWidget,SIGNAL(selectionAvailable(bool)),actionCopy,SLOT(setEnabled(bool)));
connect(terminaleWidget,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(customContextMenu(QPoint)));
+ connect(terminaleWidget,SIGNAL(titleChanged(QString)),this,SLOT(changeTitle(QString)));
ui->tabWidget->setCurrentWidget(terminaleWidget);
-terminaleWidget->setFocus();
+ terminaleWidget->setFocus();
+}
+
+void MainWindow::changeTitle(const QString &txt)
+{
+ qDebug()<<"titleChanged"<tabWidget->currentIndex();
+ ui->tabWidget->setTabText(index,termWidget()->title());
}
QTermWidget *MainWindow::termWidget()
@@ -234,37 +257,39 @@ QTermWidget *MainWindow::termWidget()
void MainWindow::closeTab(int index)
{
QTermWidget *w= qobject_cast( ui->tabWidget->widget(index));
-// if (w->sessionIsruning()){
-// QMessageBox msgBox;
-// msgBox.setText("The document has been modified.");
-// msgBox.setInformativeText("Do you want to save your changes?");
-// msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
-// msgBox.setDefaultButton(QMessageBox::No);
-// int ret = msgBox.exec();
-// if(ret==QMessageBox::No)
-// return;
-
-// }
- w->close();
- delete w;
+ // if (w->sessionIsruning()){
+ // QMessageBox msgBox;
+ // msgBox.setText("The document has been modified.");
+ // msgBox.setInformativeText("Do you want to save your changes?");
+ // msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
+ // msgBox.setDefaultButton(QMessageBox::No);
+ // int ret = msgBox.exec();
+ // if(ret==QMessageBox::No)
+ // return;
+
+ // }
+ w->close();
+ delete w;
}
-void MainWindow::tabChanged(int /*index*/)
+void MainWindow::tabChanged(int index)
{
- ui->tabWidget->setTabsClosable(ui->tabWidget->count()-1);
+ ui->tabWidget->setTabsClosable(ui->tabWidget->count()-1);
+ setWindowTitle(termWidget()->title());
+ ui->tabWidget->setTabText(index,termWidget()->title());
}
void MainWindow::zoomIn()
{
for (int i = 0; i < ui->tabWidget->count(); ++i)
- {
+ {
QTermWidget *termWidget= qobject_cast(ui->tabWidget->widget(i));
- if(termWidget)
- {
- termWidget->zoomIn();
- }
+ if(termWidget)
+ {
+ termWidget->zoomIn();
+ }
}
}
@@ -272,14 +297,14 @@ void MainWindow::zoomIn()
void MainWindow::zoomOut()
{
for (int i = 0; i < ui->tabWidget->count(); ++i)
- {
+ {
QTermWidget *termWidget= qobject_cast(ui->tabWidget->widget(i));
- if(termWidget)
- {
- termWidget->zoomOut();
- }
+ if(termWidget)
+ {
+ termWidget->zoomOut();
+ }
}
}
@@ -292,25 +317,25 @@ void MainWindow::settingShow()
QFont font=dlg->getFont();
int colorIndex=dlg->getColorSheme();
int spos=dlg->getScrollBar();
-// QColor bColor=dlg->getBcolor();
-// QColor fColor=dlg->getFcolor();
+ // QColor bColor=dlg->getBcolor();
+ // QColor fColor=dlg->getFcolor();
int opacity=dlg->getOpacity();
for (int i = 0; i < ui->tabWidget->count(); ++i)
- {
+ {
QTermWidget *termWidget= qobject_cast(ui->tabWidget->widget(i));
- if(termWidget)
- {
- termWidget->setTerminalFont(font);
+ if(termWidget)
+ {
+ termWidget->setTerminalFont(font);
- termWidget->setScrollBarPosition(spos);
+ termWidget->setScrollBarPosition(spos);
- termWidget->setColorScheme(4);
+ termWidget->setColorScheme(4);
- termWidget->setTerminalOpacity(qreal(opacity)/100);
+ termWidget->setTerminalOpacity(qreal(opacity)/100);
- }
+ }
}
}
@@ -318,9 +343,9 @@ void MainWindow::settingShow()
void MainWindow::aboutShow()
{
-// QMessageBox::about(this, QString("Elokab-terminal ") + QApplication::applicationVersion(), tr("A lightweight terminal emulator"));
+ // QMessageBox::about(this, QString("Elokab-terminal ") + QApplication::applicationVersion(), tr("A lightweight terminal emulator"));
QMessageBox::about(this, tr("About Elokab-terminal"),
tr("Elokab-terminal %1
A lightweight terminal emulator"
- "
See elkirtasse.sourceforge.net for more information.
© About Zakaria
").arg(QApplication::applicationVersion()));
+ " See github for more information.
© Abouzakaria
").arg(QApplication::applicationVersion()));
}
diff --git a/elokab-terminal/mainwindow.h b/elokab-terminal/mainwindow.h
index 031327c..25c1e8f 100755
--- a/elokab-terminal/mainwindow.h
+++ b/elokab-terminal/mainwindow.h
@@ -16,12 +16,14 @@ class MainWindow : public QMainWindow
explicit MainWindow(const QString &wDir=QDir::homePath(),
const QString &command=QString(),
bool framless=false,
+ const QString &geometry=QString(),
+ bool ontop=false,
QWidget *parent = 0);
~MainWindow();
signals:
void clipboardAvailable(bool);
private slots:
- void on_actionTest_triggered();
+
void setupActions();
@@ -36,9 +38,12 @@ private slots:
void customContextMenu(QPoint);
void addNewTab(const QString &wDir=QDir::homePath(),
const QString &command=QString());
+
+ void changeTitle(const QString &txt);
+
QTermWidget *termWidget();
void closeTab(int index);
- void tabChanged(int);
+ void tabChanged(int index);
void zoomOut();
void zoomIn();
void settingShow();
@@ -56,14 +61,13 @@ private slots:
QAction *mZoomIn;
QAction *mActSetting;
-QAction *mActAbout;
-QAction *mActAboutQt;
-QAction *mActQuit;
+ QAction *mActAbout;
+ QAction *mActAboutQt;
+ QAction *mActQuit;
+
+ QMenu *mMenu;
-QMenu *mMenu;
- int numTab;
- bool mFramless;
};
#endif // MAINWINDOW_H
diff --git a/elokab-terminal/settingdialog.cpp b/elokab-terminal/settingdialog.cpp
index be217ed..e3aa38b 100755
--- a/elokab-terminal/settingdialog.cpp
+++ b/elokab-terminal/settingdialog.cpp
@@ -34,7 +34,7 @@ SettingDialog::SettingDialog(QWidget *parent) :
QFont f= setting.value("Font",font).value();
int colorSheme=setting.value("ColorSheme",0).toInt();
int sPos=setting.value("ScrollBar",0).toInt();
- QString txt=setting.value("Shell","/bin/bash").toString();
+ QString txt=setting.value("Shell").toString();
int opacity=setting.value("Opacity",100).toInt();
diff --git a/elokab-terminal/settingdialog.ui b/elokab-terminal/settingdialog.ui
index 1df08c8..d9f6b29 100755
--- a/elokab-terminal/settingdialog.ui
+++ b/elokab-terminal/settingdialog.ui
@@ -7,7 +7,7 @@
0
0
490
- 586
+ 500
@@ -271,7 +271,7 @@
-
- /bin/bash
+
diff --git a/library/eterminal/qtermwidget.cpp b/library/eterminal/qtermwidget.cpp
index 488f2a4..879bbc2 100755
--- a/library/eterminal/qtermwidget.cpp
+++ b/library/eterminal/qtermwidget.cpp
@@ -23,6 +23,7 @@
#include
#include
#include
+#include
// Konsole
#include "Session.h"
#include "TerminalDisplay.h"
@@ -137,7 +138,7 @@ void QTermWidget::init()
connect(m_impl->m_session, SIGNAL(finished()), this, SLOT(sessionFinished()));
connect(m_impl->m_terminalDisplay, SIGNAL(selectionAvailable(bool)), this, SIGNAL(selectionAvailable(bool)));
-
+ connect(m_impl->m_session, SIGNAL(titleChanged()), this, SLOT(changeTitle()));
}
@@ -146,7 +147,17 @@ QTermWidget::~QTermWidget()
m_impl->m_session->close();
emit destroyed();
}
+void QTermWidget::changeTitle()
+{
+
+ if ( m_impl->m_session ){
+ QString tit=m_impl->m_session->userTitle();
+ m_title=tit;
+ emit titleChanged(tit);
+ }
+
+}
void QTermWidget::setTerminalFont(QFont &font)
{
diff --git a/library/eterminal/qtermwidget.h b/library/eterminal/qtermwidget.h
index a8ed3b9..23c0c2c 100755
--- a/library/eterminal/qtermwidget.h
+++ b/library/eterminal/qtermwidget.h
@@ -108,7 +108,8 @@ class QTermWidget : public QWidget
void setTerminalOpacity(qreal level);
QColor bColor;
-
+QString m_title;
+QString title(){return m_title;}
public slots:
@@ -121,14 +122,14 @@ public slots:
void receivedData( const QString& text );
void selectionAvailable(bool);
-
+void titleChanged( const QString& text);
protected:
virtual void resizeEvent(QResizeEvent *);
protected slots:
void sessionFinished();
void onDataReceived(const QString&);
-
+void changeTitle();
private:
void setZoom(int step);
void init();