diff options
Diffstat (limited to 'src-qt5/experimental/lumina-terminal')
73 files changed, 4680 insertions, 0 deletions
diff --git a/src-qt5/experimental/lumina-terminal/TermWindow.cpp b/src-qt5/experimental/lumina-terminal/TermWindow.cpp new file mode 100644 index 00000000..812d3679 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/TermWindow.cpp @@ -0,0 +1,316 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "TermWindow.h" +//#include "ui_TermWindow.h" + +#include <QDesktopWidget> +#include <QDebug> +#include <QTimer> +#include <QApplication> +#include <QVBoxLayout> +#include "TerminalWidget.h" + +// =============== +// PUBLIC +// =============== +TermWindow::TermWindow(QSettings *set) : QWidget(0, Qt::Window | Qt::BypassWindowManagerHint){//, ui(new Ui::TermWindow){ + this->setWindowOpacity(0.85); + CLOSING = false; //internal flag + settings = set; + //Create the Window + this->setLayout(new QVBoxLayout()); + this->setCursor(Qt::SplitVCursor); + tabWidget = new QTabWidget(this); + tabWidget->clear(); //just in case + tabWidget->setCursor(Qt::ArrowCursor); + tabWidget->setTabBarAutoHide(true); + tabWidget->setTabsClosable(true); + tabWidget->setMovable(true); + tabWidget->setUsesScrollButtons(true); + tabWidget->setFocusPolicy(Qt::ClickFocus); + this->layout()->addWidget(tabWidget); + //Setup the animation + ANIM = new QPropertyAnimation(this, "geometry", this); + ANIM->setDuration(300); //1/3 second animation + connect(ANIM, SIGNAL(finished()), this, SLOT(AnimFinished()) ); + activeTimer = new QTimer(this); + activeTimer->setInterval(50); + activeTimer->setSingleShot(true); + connect(activeTimer, SIGNAL(timeout()), this, SLOT(activeStatusChanged()) ); + connect(QApplication::instance(), SIGNAL(applicationStateChanged(Qt::ApplicationState)), activeTimer, SLOT(start()) ); + //Create the keyboard shortcuts + //hideS = new QShortcut(QKeySequence(Qt::Key_Escape),this); + closeS = new QShortcut(QKeySequence(Qt::CTRL | Qt::Key_Q),this); + newTabS = new QShortcut(QKeySequence::AddTab,this); + closeTabS = new QShortcut(QKeySequence::Close,this); + prevTabS = new QShortcut(QKeySequence::PreviousChild,this); + nextTabS = new QShortcut(QKeySequence::NextChild,this); + //Print out all the keyboard shortcuts onto the screen + qDebug() << "New Tab Shortcut:" << QKeySequence::keyBindings(QKeySequence::AddTab); + qDebug() << "Close Tab Shortcut:" << QKeySequence::keyBindings(QKeySequence::Close); + qDebug() << "Next Tab Shortcut:" << QKeySequence::keyBindings(QKeySequence::NextChild); + qDebug() << "Previous Tab Shortcut:" << QKeySequence::keyBindings(QKeySequence::PreviousChild); + //Connect the signals/slots + connect(tabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(Close_Tab(int)) ); + connect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(focusOnWidget()) ); + connect(closeTabS, SIGNAL(activated()), this, SLOT(Close_Tab()) ); + connect(newTabS, SIGNAL(activated()), this, SLOT(New_Tab()) ); + //connect(hideS, SIGNAL(activated()), this, SLOT(HideWindow()) ); + connect(closeS, SIGNAL(activated()), this, SLOT(CloseWindow()) ); + connect(prevTabS, SIGNAL(activated()), this, SLOT(Prev_Tab()) ); + connect(nextTabS, SIGNAL(activated()), this, SLOT(Next_Tab()) ); + //Now set the defaults + screennum = 0; //default value + setTopOfScreen(true); //default value + if(settings->contains("lastSize")){ + //qDebug() << "Re-use last size:" << settings->value("lastSize").toSize(); + this->resize( settings->value("lastSize").toSize() ); + CalculateGeom(); + //qDebug() << "After size:" << this->size(); + } + + //this->resize(this->width(),300); + //this->setMinimumSize(20, 300); + +} + + +TermWindow::~TermWindow(){ + +} + +void TermWindow::cleanup(){ + //called right before the window is closed + //Make sure to close any open tabs/processes + CLOSING = true; + for(int i=0; i<tabWidget->count(); i++){ + static_cast<TerminalWidget*>(tabWidget->widget(i))->aboutToClose(); + } +} + +void TermWindow::OpenDirs(QStringList dirs){ + for(int i=0; i<dirs.length(); i++){ + //Open a new tab for each directory + TerminalWidget *page = new TerminalWidget(tabWidget, dirs[i]); + QString ID = GenerateTabID(); + page->setWhatsThis(ID); + tabWidget->addTab(page, ID); + tabWidget->setCurrentWidget(page); + QTimer::singleShot(500, this, SLOT(focusOnWidget()));//page->setFocus(); + qDebug() << "New Tab:" << ID << dirs[i]; + connect(page, SIGNAL(ProcessClosed(QString)), this, SLOT(Close_Tab(QString)) ); + } +} + +void TermWindow::setCurrentScreen(int num){ + screennum = num; + QTimer::singleShot(0,this, SLOT(ReShowWindow())); +} + +void TermWindow::setTopOfScreen(bool ontop){ + onTop = ontop; + this->layout()->setContentsMargins(0, (onTop ? 0 : 3), 0, (onTop ? 3 : 0)); + tabWidget->setTabPosition(onTop ? QTabWidget::South : QTabWidget::North); + QTimer::singleShot(0,this, SLOT(ReShowWindow())); +} + +// ======================= +// PUBLIC SLOTS +// ======================= +void TermWindow::ShowWindow(){ + if(animRunning>=0){ return; } //something running + animRunning = 1; + this->hide(); + QApplication::processEvents(); + CalculateGeom(); + //Now setup the animation + ANIM->setEndValue(this->geometry()); + if(onTop){ //use top edge + ANIM->setStartValue( QRect(this->x(), this->y(), this->width(), 0) ); //same location - no height + }else{ + ANIM->setStartValue( QRect(this->x(), this->geometry().bottom(), this->width(), 0) ); //same location - no height + } + this->show(); + //qDebug() << "Start Animation" << ANIM->startValue() << ANIM->endValue(); + ANIM->start(); +} + +void TermWindow::HideWindow(){ + if(animRunning>=0){ return; } //something running + //Now setup the animation + //Note: Do *not* use the private settings/variables because it may be changing right now - use the current geometry *ONLY* + animRunning = 0; + ANIM->setStartValue(this->geometry()); + QDesktopWidget *desk = QApplication::desktop(); + int screen = desk->screenNumber(this); //which screen it is currently on + if(desk->availableGeometry(screen).top() == this->geometry().top()){ //use top edge + ANIM->setEndValue( QRect(this->x(), this->y(), this->width(), 0) ); //same location - no height + }else{ + ANIM->setEndValue( QRect(this->x(), this->y()+this->height(), this->width(), 0) ); //same location - no height + } + this->show(); + ANIM->start(); +} + +void TermWindow::CloseWindow(){ + if(animRunning>=0){ return; } //something running + //Now setup the animation + animRunning = 2; + ANIM->setStartValue(this->geometry()); + if(onTop){ //use top edge + ANIM->setEndValue( QRect(this->x(), this->y(), this->width(), 0) ); //same location - no height + }else{ + ANIM->setEndValue( QRect(this->x(), this->geometry().bottom(), this->width(), 0) ); //same location - no height + } + this->show(); + ANIM->start(); +} + +void TermWindow::ReShowWindow(){ + if(this->isVisible()){ + HideWindow(); //start with same animation as hide + animRunning = 3; //flag as a re-show (hide, then show); + }else{ + //Already hidden, just show it + ShowWindow(); + } +} +// ======================= +// PRIVATE +// ======================= +void TermWindow::CalculateGeom(){ + //qDebug() << "Calculating Geom:" << this->size(); + QDesktopWidget *desk = QApplication::desktop(); + if(desk->screenCount() <= screennum){ screennum = desk->primaryScreen(); } //invalid screen detected + //Now align the window with the proper screen edge + QRect workarea = desk->availableGeometry(screennum); //this respects the WORKAREA property + if(onTop){ + this->setGeometry( workarea.x(), workarea.y(), workarea.width(), this->height()); //maintain current hight of window + + }else{ + this->setGeometry( workarea.x(), workarea.y() + workarea.height() - this->height(), workarea.width(), this->height()); //maintain current hight of window + } + this->setFixedWidth(this->width()); //Make sure the window is not re-sizeable in the width dimension + this->setMinimumHeight(0); +} + +QString TermWindow::GenerateTabID(){ + //generate a unique ID for this new tab + int num = 1; + for(int i=0; i<tabWidget->count(); i++){ + if(tabWidget->widget(i)->whatsThis().toInt() >= num){ num = tabWidget->widget(i)->whatsThis().toInt()+1; } + } + return QString::number(num); +} + +// ======================= +// PRIVATE SLOTS +// ======================= + +//Tab Interactions +void TermWindow::New_Tab(){ + OpenDirs(QStringList() << QDir::homePath()); +} + +void TermWindow::Close_Tab(int tab){ + qDebug() << "Close Tab:" << tab; + if(tab<0){ tab = tabWidget->currentIndex(); } + static_cast<TerminalWidget*>(tabWidget->widget(tab))->aboutToClose(); + tabWidget->widget(tab)->deleteLater(); //delete the page within the tag + tabWidget->removeTab(tab); // remove the tab itself + //Let the tray know when the last terminal is closed + if(tabWidget->count() < 1){ + emit TerminalFinished(); + } +} + +void TermWindow::Close_Tab(QString ID){ + //Close a tab based on it's ID instead of it's tab number + qDebug() << "Close Tab by ID:" << ID; + for(int i=0; i<tabWidget->count(); i++){ + if(tabWidget->widget(i)->whatsThis()==ID){ + qDebug() << " - Start close by number:" << i; + Close_Tab(i); + return; //all done + } + } +} + +void TermWindow::Next_Tab(){ + qDebug() << "Next Tab"; + int next = tabWidget->currentIndex()+1; + if(next>=tabWidget->count()){ next = 0; } + tabWidget->setCurrentIndex(next); +} + +void TermWindow::Prev_Tab(){ + qDebug() << "Previous Tab"; + int next = tabWidget->currentIndex()-1; + if(next<0){ next = tabWidget->count()-1; } + tabWidget->setCurrentIndex(next); +} + +void TermWindow::focusOnWidget(){ + if(tabWidget->currentWidget()!=0){ + //qDebug() << "Focus on Widget"; + tabWidget->currentWidget()->setFocus(); + } +} + +//Animation finishing +void TermWindow::AnimFinished(){ + if(animRunning <0){ return; } //nothing running + if(animRunning==0){ + //Hide Event + this->hide(); //need to hide the whole thing now + this->setGeometry( ANIM->startValue().toRect() ); //reset back to initial size after hidden + emit TerminalHidden(); + }else if(animRunning==1){ + //Show Event + this->activateWindow(); + tabWidget->currentWidget()->setFocus(); + emit TerminalVisible(); + }else if(animRunning==2){ + //Close Event + this->hide(); //need to hide the whole thing now + emit TerminalClosed(); + }else if(animRunning>2){ + //Re-Show event + this->hide(); + this->setGeometry( ANIM->startValue().toRect() ); //reset back to initial size after hidden + //Now re-show it + QTimer::singleShot(0,this, SLOT(ShowWindow())); + } + animRunning = -1; //done +} + +void TermWindow::activeStatusChanged(){ + if(animRunning>=0){ return; } //ignore this event - already changing + QWidget *active = QApplication::activeWindow(); + if(active==0 && this->isVisible()){ HideWindow(); } +} + +// =================== +// PROTECTED +// =================== +void TermWindow::mouseMoveEvent(QMouseEvent *ev){ + //Note: With mouse tracking turned off, this event only happens when the user is holding down the mouse button + if(onTop){ + //Move the bottom edge to the current point + if( (ev->globalPos().y() - this->y()) < 50){ return; } //quick check that the window is not smaller than 20 pixels + QRect geom = this->geometry(); + geom.setBottom(ev->globalPos().y()); + this->setGeometry(geom); + }else{ + //Move the top edge to the current point + if( (this->y() + this->height() -ev->globalPos().y()) < 50){ return; } //quick check that the window is not smaller than 20 pixels + QRect geom = this->geometry(); + geom.setTop(ev->globalPos().y()); + this->setGeometry(geom); + } + settings->setValue("lastSize",this->geometry().size()); +} diff --git a/src-qt5/experimental/lumina-terminal/TermWindow.h b/src-qt5/experimental/lumina-terminal/TermWindow.h new file mode 100644 index 00000000..5f583126 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/TermWindow.h @@ -0,0 +1,73 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef _LUMINA_DESKTOP_UTILITIES_TERMINAL_MAIN_WINDOW_H +#define _LUMINA_DESKTOP_UTILITIES_TERMINAL_MAIN_WINDOW_H + +#include <QWidget> +#include <QPropertyAnimation> +#include <QTabWidget> +#include <QDir> +#include <QShortcut> +#include <QMouseEvent> +#include <QSettings> + +class TermWindow : public QWidget{ + Q_OBJECT +public: + TermWindow(QSettings *set); + ~TermWindow(); + + void cleanup(); //called right before the window is closed + void OpenDirs(QStringList); + + void setCurrentScreen(int num = 0); + void setTopOfScreen(bool ontop); + +public slots: + void ShowWindow(); + void HideWindow(); + void CloseWindow(); + void ReShowWindow(); + +private: + QTabWidget *tabWidget; + QSettings *settings; + QShortcut *hideS, *closeS, *newTabS, *closeTabS, *prevTabS, *nextTabS; + int screennum; + bool onTop, CLOSING; + QPropertyAnimation *ANIM; + int animRunning; //internal flag for what animation is currently running + QTimer *activeTimer; + + //Calculate the window geometry necessary based on screen/location + void CalculateGeom(); + QString GenerateTabID(); + +private slots: + //Tab Interactions + void New_Tab(); + void Close_Tab(int tab = -1); + void Close_Tab(QString ID); //alternate form of the close routine - based on tab ID + void Next_Tab(); + void Prev_Tab(); + void focusOnWidget(); + //Animation finishing + void AnimFinished(); + //Window focus/active status changed + void activeStatusChanged(); + +protected: + void mouseMoveEvent(QMouseEvent*); + +signals: + void TerminalHidden(); + void TerminalVisible(); + void TerminalClosed(); + void TerminalFinished(); +}; + +#endif diff --git a/src-qt5/experimental/lumina-terminal/TerminalWidget.cpp b/src-qt5/experimental/lumina-terminal/TerminalWidget.cpp new file mode 100644 index 00000000..7601ae9f --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/TerminalWidget.cpp @@ -0,0 +1,570 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "TerminalWidget.h" + +#include <QProcessEnvironment> +#include <QDebug> +#include <QApplication> +#include <QScrollBar> +#include <QTextBlock> + +#include <LuminaXDG.h> + +#define DEBUG 0 + +//Special control code ending symbols (aside from letters) + +TerminalWidget::TerminalWidget(QWidget *parent, QString dir) : QTextEdit(parent){ + //Setup the text widget + closing = false; + QPalette P = this->palette(); + P.setColor(QPalette::Base, Qt::black); + P.setColor(QPalette::Text, Qt::white); + this->setPalette(P); + this->setLineWrapMode(QTextEdit::WidgetWidth); + this->setAcceptRichText(false); + this->setOverwriteMode(true); + this->setFocusPolicy(Qt::StrongFocus); + this->setTabStopWidth( 8 * this->fontMetrics().width(" ") ); //8 character spaces per tab (UNIX standard) + this->setTabChangesFocus(false); + //this->setWordWrapMode(QTextOption::NoWrap); + this->setContextMenuPolicy(Qt::CustomContextMenu); + resizeTimer = new QTimer(this); + resizeTimer->setInterval(20); + resizeTimer->setSingleShot(true); + connect(resizeTimer, SIGNAL(timeout()), this, SLOT(updateTermSize()) ); + DEFFMT = this->textCursor().charFormat(); //save the default structure for later + DEFFMT.setForeground(Qt::white); + CFMT = DEFFMT; //current format + selCursor = this->textCursor(); //used for keeping track of selections + lastCursor = this->textCursor(); + startrow = endrow = -1; + altkeypad = false; + QFontDatabase FDB; + QStringList fonts = FDB.families(QFontDatabase::Latin); + for(int i=0; i<fonts.length(); i++){ + if(FDB.isFixedPitch(fonts[i]) && FDB.isSmoothlyScalable(fonts[i]) ){ this->setFont(QFont(fonts[i])); qDebug() << "Using Font:" << fonts[i]; break; } + //if(FDB.isSmoothlyScalable(fonts[i]) ){ this->setFont(QFont(fonts[i])); qDebug() << "Using Font:" << fonts[i]; break; } + } + //Create/open the TTY port + PROC = new TTYProcess(this); + //qDebug() << "Open new TTY"; + //int fd; + bool ok = PROC->startTTY( QProcessEnvironment::systemEnvironment().value("SHELL","/bin/sh"), QStringList(), dir); + //qDebug() << " - opened:" << ok; + this->setEnabled(false); + contextMenu = new QMenu(this); + copyA = contextMenu->addAction(LXDG::findIcon("edit-copy"), tr("Copy Selection"), this, SLOT(copySelection()) ); + pasteA = contextMenu->addAction(LXDG::findIcon("edit-paste"), tr("Paste"), this, SLOT(pasteSelection()) ); + //Connect the signals/slots + connect(PROC, SIGNAL(readyRead()), this, SLOT(UpdateText()) ); + connect(PROC, SIGNAL(processClosed()), this, SLOT(ShellClosed()) ); + +} + +TerminalWidget::~TerminalWidget(){ + aboutToClose(); +} + +void TerminalWidget::setTerminalFont(QFont font){ + + this->setFont(font); +} + +void TerminalWidget::aboutToClose(){ + closing = true; + if(PROC->isOpen()){ PROC->closeTTY(); } //TTY PORT + +} + +// ================== +// PRIVATE +// ================== +void TerminalWidget::InsertText(QString txt){ + if(txt.isEmpty()){ return; } + //qDebug() << "Insert Text:" << txt << "Cursor Pos:" << this->textCursor().position() << "Column:" << this->textCursor().columnNumber(); + QTextCursor cur = this->textCursor(); + cur.setCharFormat(CFMT); + this->setTextCursor(cur); //ensure the current cursor has the proper format + this->insertPlainText(txt); + /*cur.setPosition( this->textCursor().position(), QTextCursor::KeepAnchor); + //cur.setCharFormat(CFMT); + //Now make sure the new characters are the right color + QList<QTextEdit::ExtraSelection> sels = this->extraSelections(); + QTextEdit::ExtraSelection sel; + sel.format = CFMT; + sel.cursor = cur; + sels << sel; + this->setExtraSelections(sels);*/ + if(DEBUG){ + qDebug() << "Insert Text:"<< txt << "Font Color:" << CFMT.foreground() << "Background Color:" << CFMT.background() << "Font Weight:" << CFMT.fontWeight(); + } +} + +void TerminalWidget::applyData(QByteArray data){ + this->setEnabled(true); + if(DEBUG){ qDebug() << "Got Data: " << data; } + //Make sure the current cursor is the right cursor + if(this->textCursor()==selCursor){ this->setTextCursor(lastCursor); } + //Iterate through the data and apply it when possible + QByteArray chars; + //qDebug() << "Data:" << data; + for(int i=0; i<data.size(); i++){ + if( data.at(i)=='\b' ){ + //Backspace + if(!chars.isEmpty()){ chars.chop(1); } + else{ + QTextCursor cur = this->textCursor(); + cur.movePosition(QTextCursor::Left, QTextCursor::KeepAnchor, 1); + cur.removeSelectedText(); + this->setTextCursor(cur); + } + + //}else if( data.at(i)=='\t' ){ + //chars.append(" "); + }else if( data.at(i)=='\x1B' ){ + //Flush current text buffer to widget + if(!chars.isEmpty()){ InsertText(chars); chars.clear(); } + //ANSI Control Code start + //Look for the end of the code + int end = -1; + for(int j=1; j<(data.size()-i) && end<0; j++){ + if(QChar(data.at(i+j)).isLetter() || (QChar(data.at(i+j)).isSymbol() && data.at(i+j)!=';') ){ end = j; } + else if(data.at(i+j)=='\x1B'){ end = j-1; } //start of the next control code + } + if(end<0){ return; } //skip everything else - no end to code found + applyANSI(data.mid(i+1, end)); + //qDebug() << "Code:" << data.mid(i+1, end) << "Next Char:" << data[i+end+2]; + i+=end; //move the final loop along - already handled these bytes + + }else if( data.at(i) == '\r' ){ + //Move cursor to end of line + //qDebug() << "Got a return char"; + QTextCursor cur = this->textCursor(); + cur.movePosition(QTextCursor::EndOfLine, QTextCursor::MoveAnchor, 1); + cur.removeSelectedText(); + this->setTextCursor(cur); + }else{ + chars.append(data.at(i)); //Add the character to the buffer + } + } //end loop over data + if(!chars.isEmpty()){ InsertText(chars); } +} + +void TerminalWidget::applyANSI(QByteArray code){ + //Note: the first byte is often the "[" character + //qDebug() << "Handle ANSI:" << code; + if(code.length()==1){ + //KEYPAD MODES + if(code.at(0)=='='){ altkeypad = true; } + else if(code.at(0)=='>'){ altkeypad = false; } + else{ + qDebug() << "Unhandled ANSI Code:" << code; + } + + }else if(code.startsWith("[") && code.contains("@")){ + code = code.remove(0, code.indexOf("@")+1); + InsertText(code); //insert character (cursor position already accounted for with other systems) + }else if(code.startsWith("[")){ + // VT100 ESCAPE CODES + //CURSOR MOVEMENT + if( code.endsWith("A") ){ //Move Up + int num = 1; + if(code.size()>2){ num = code.mid(1, code.size()-2).toInt(); } //everything in the middle + QTextCursor cur = this->textCursor(); + cur.movePosition(QTextCursor::Up, QTextCursor::MoveAnchor, num); + this->setTextCursor(cur); + }else if(code.endsWith("B")){ //Move Down + int num = 1; + if(code.size()>2){ num = code.mid(1, code.size()-2).toInt(); } //everything in the middle + QTextCursor cur = this->textCursor(); + cur.movePosition(QTextCursor::Down, QTextCursor::MoveAnchor, num); + this->setTextCursor(cur); + }else if(code.endsWith("C")){ //Move Forward + int num = 1; + if(code.size()>2){ num = code.mid(1, code.size()-2).toInt(); } //everything in the middle + QTextCursor cur = this->textCursor(); + cur.movePosition(QTextCursor::Right, QTextCursor::MoveAnchor, num); + this->setTextCursor(cur); + }else if(code.endsWith("D")){ //Move Back + int num = 1; + if(code.size()>2){ num = code.mid(1, code.size()-2).toInt(); } //everything in the middle + QTextCursor cur = this->textCursor(); + cur.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, num); + this->setTextCursor(cur); + }else if(code.endsWith("E")){ //Move Next/down Lines (go toward end) + int num = 1; + if(code.size()>2){ num = code.mid(1, code.size()-2).toInt(); } //everything in the middle + QTextCursor cur = this->textCursor(); + cur.movePosition(QTextCursor::NextRow, QTextCursor::MoveAnchor, num); + this->setTextCursor(cur); + }else if(code.endsWith("F")){ //Move Previous/up Lines (go to beginning) + int num = 1; + if(code.size()>2){ num = code.mid(1, code.size()-2).toInt(); } //everything in the middle + QTextCursor cur = this->textCursor(); + cur.movePosition(QTextCursor::PreviousRow, QTextCursor::MoveAnchor, num); + this->setTextCursor(cur); + }else if(code.endsWith("G")){ //Move to specific column + int num = 1; + if(code.size()>2){ num = code.mid(1, code.size()-2).toInt(); } //everything in the middle + QTextCursor cur = this->textCursor(); + cur.setPosition(num); + this->setTextCursor(cur); + }else if(code.endsWith("H") || code.endsWith("f") ){ //Move to specific position (row/column) + int mid = code.indexOf(";"); + if(mid>1){ + int numR, numC; numR = numC = 1; + if(mid >=2){ numR = code.mid(1,mid-1).toInt(); } + if(mid < code.size()-1){ numC = code.mid(mid+1,code.size()-mid-2).toInt(); } + + if(startrow>=0 && endrow>=0){ + if(numR == startrow){ numR = 0;} + else if(numR==endrow){ numR = this->document()->lineCount()-1; } + } + qDebug() << "Set Text Position (absolute):" << "Code:" << code << "Row:" << numR << "Col:" << numC; + //qDebug() << " - Current Pos:" << this->textCursor().position() << "Line Count:" << this->document()->lineCount(); + //if(!this->textCursor().movePosition(QTextCursor::Start, QTextCursor::MoveAnchor,1) ){ qDebug() << "Could not go to start"; } + QTextCursor cur(this->textCursor()); + cur.setPosition(QTextCursor::Start, QTextCursor::MoveAnchor); //go to start of document + //qDebug() << " - Pos After Start Move:" << cur.position(); + if( !cur.movePosition(QTextCursor::Down, QTextCursor::MoveAnchor, numR) ){ qDebug() << "Could not go to row:" << numR; } + //qDebug() << " - Pos After Down Move:" << cur.position(); + if( !cur.movePosition(QTextCursor::Right, QTextCursor::MoveAnchor, numC) ){ qDebug() << "Could not go to col:" << numC; } + /*this->textCursor().setPosition( this->document()->findBlockByLineNumber(numR).position() ); + qDebug() << " - Pos After Row Move:" << this->textCursor().position(); + if( !this->textCursor().movePosition(QTextCursor::Right, QTextCursor::MoveAnchor, numC) ){ qDebug() << "Could not go to col:" << numC; }*/ + //qDebug() << " - Ending Pos:" << cur.position(); + this->setTextCursor(cur); + }else{ + //Go to home position + this->moveCursor(QTextCursor::Start); + } + + // CURSOR MANAGEMENT + }else if(code.endsWith("r")){ //Tag top/bottom lines as perticular numbers + int mid = code.indexOf(";"); + qDebug() << "New Row Codes:" << code << "midpoint:" << mid; + if(mid>1){ + if(mid >=2){ startrow = code.mid(1,mid-1).toInt(); } + if(mid < code.size()-1){ endrow = code.mid(mid+1,code.size()-mid-2).toInt(); } + } + qDebug() << "New Row Codes:" << startrow << endrow; + // DISPLAY CLEAR CODES + }else if(code.endsWith("J")){ //ED - Erase Display + int num = 0; + if(code.size()>2){ num = code.mid(1, code.size()-2).toInt(); } //everything in the middle + //qDebug() << "Erase Display:" << num; + if(num==1){ + //Clear from cursor to beginning of screen + QTextCursor cur = this->textCursor(); + cur.movePosition(QTextCursor::Start, QTextCursor::KeepAnchor, 1); + cur.removeSelectedText(); + this->setTextCursor(cur); + }else if(num==2){ + //Clear the whole screen + qDebug() << "Clear Screen:" << this->document()->lineCount(); + this->clear(); + }else{ + //Clear from cursor to end of screen + QTextCursor cur = this->textCursor(); + cur.movePosition(QTextCursor::End, QTextCursor::KeepAnchor, 1); + cur.removeSelectedText(); + this->setTextCursor(cur); + } + }else if(code.endsWith("K")){ //EL - Erase in Line + int num = 0; + if(code.size()>2){ num = code.mid(1, code.size()-2).toInt(); } //everything in the middle + //qDebug() << "Erase Number" << num; + //Now determine what should be cleared based on code + if(num==1){ + //Clear from current cursor to beginning of line + QTextCursor cur = this->textCursor(); + cur.movePosition(QTextCursor::StartOfLine, QTextCursor::KeepAnchor, 1); + cur.removeSelectedText(); + this->setTextCursor(cur); + }else if(num==2){ + //Clear the entire line + QTextCursor cur = this->textCursor(); + cur.movePosition(QTextCursor::StartOfLine, QTextCursor::MoveAnchor, 1); + cur.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor, 1); + cur.removeSelectedText(); + this->setTextCursor(cur); + }else{ + //Clear from current cursor to end of line + QTextCursor cur = this->textCursor(); + cur.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor, 1); + cur.removeSelectedText(); + this->setTextCursor(cur); + } + }else if(code.endsWith("g")){ + //Tab Clear codes (0 or 3 only) + int num = 0; + if(code.size()>2){ num = code.mid(1, code.size()-2).toInt(); } //everything in the middle + if(num==0){ //clear current column (delete key analogue) + QTextCursor cur = this->textCursor(); + cur.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, 1); + cur.removeSelectedText(); + this->setTextCursor(cur); + }else if(num==3){ //clear all + this->clear(); + } + //SCROLL MOVEMENT CODES + //}else if(code.endsWith("S")){ // SU - Scroll Up + //qDebug() << "Scroll Up:" << code; + //}else if(code.endsWith("T")){ // SD - Scroll Down + //qDebug() << "Scroll Down:" << code; + + // GRAPHICS RENDERING + }else if(code.endsWith("m")){ + //Format: "[<number>;<number>m" (no limit to sections separated by ";") + //qDebug() << "Got Graphics Code:" << code; + code.chop(1); //chop the "m" off the end + int start = 1; + int end = code.indexOf(";"); + while(end>start){ + //qDebug() << "Color Code:" << code << start << end << code.mid(start, end-start); + applyANSIColor(code.mid(start, end-start).toInt()); + //Now update the iterators and try again + start = end; + end = code.indexOf(";",start); //go to the next one + //qDebug() << "Next end:" << end; + } + //Need the last section as well + end = code.size(); + if(start>1){ start ++; } + //qDebug() << "Color Code:" << code << start << end << code.mid(start, end-start); + if(end>start){ applyANSIColor(code.mid(start, end-start).toInt());} + else{ applyANSIColor(0); } + + + // GRAPHICS MODES + //}else if(code.endsWith("h")){ + + //}else if(code.endsWith("l")){ + + }else{ + qDebug() << "Unhandled Control Code:" << code; + } + + } //End VT100 control codes + else{ + qDebug() << "Unhandled Control Code:" << code; + } +} + +void TerminalWidget::applyANSIColor(int code){ + //qDebug() << "Apply Color code:" << code; + if(code <=0){ CFMT = DEFFMT; } //Reset back to default + else if(code==1){ CFMT.setFontWeight(75); } //BOLD font + else if(code==2){ CFMT.setFontWeight(25); } //Faint font (smaller than normal by a bit) + else if(code==3){ CFMT.setFontWeight(75); } //Italic font + else if(code==4){ CFMT.setFontUnderline(true); } //Underline + //5-6: Blink text (unsupported) + //7: Reverse foreground/background (unsupported) + //8: Conceal (unsupported) + else if(code==9){ CFMT.setFontStrikeOut(true); } //Crossed out + //10-19: Change font family (unsupported) + //20: Fraktur Font (unsupported) + //21: Bold:off or Underline:Double (unsupported) + else if(code==22){ CFMT.setFontWeight(50); } //Normal weight + //23: Reset font (unsupported) + else if(code==24){ CFMT.setFontUnderline(false); } //disable underline + //25: Disable blinking (unsupported) + //26: Reserved + //27: Reset reversal (7) (unsupported) + //28: Reveal (cancel 8) (unsupported) + else if(code==29){ CFMT.setFontStrikeOut(false); } //Not Crossed out + else if(code>=30 && code<=39){ + //Set the font color + 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){ color= DEFFMT.foreground().color(); } //reset to default color + QBrush brush = CFMT.foreground(); + color.setAlpha(255); //fully opaque + brush.setColor(color); + CFMT.setForeground( brush ); + //this->setTextColor(color); //just in case the format is not used + } + else if(code>=40 && code<=49){ + //Set the font color + 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){ 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) + else{ qDebug() << "Unknown Color Code:" << code; } +} + +//Outgoing Data parsing +void TerminalWidget::sendKeyPress(int key){ + QByteArray ba; + //if(this->textCursor()==selCursor){ this->setTextCursor(lastCursor); } + //int fromEnd = this->document()->characterCount() - this->textCursor().position(); + //Check for special keys + switch(key){ + case Qt::Key_Delete: + ba.append("\e[3~"); + break; + case Qt::Key_Backspace: + ba.append("\x08"); + break; + case Qt::Key_Left: + if(altkeypad){ ba.append("^[D"); } + else{ ba.append("\x1b[D"); } + break; + case Qt::Key_Right: + if(altkeypad){ ba.append("^[C"); } + else{ ba.append("\x1b[C"); } + break; + case Qt::Key_Up: + if(altkeypad){ ba.append("^[A"); } + else{ ba.append("\x1b[A"); } + break; + case Qt::Key_Down: + if(altkeypad){ ba.append("^[B"); } + else{ ba.append("\x1b[B"); } + break; + case Qt::Key_Home: + ba.append("\x1b[H"); + break; + case Qt::Key_End: + ba.append("\x1b[F"); + break; + } + //qDebug() << "Forward Input:" << ba; + if(!ba.isEmpty()){ PROC->writeTTY(ba); } +} + +// ================== +// PRIVATE SLOTS +// ================== +void TerminalWidget::UpdateText(){ + //read the data from the process + //qDebug() << "UpdateText"; + if(!PROC->isOpen()){ return; } + applyData(PROC->readTTY()); + //adjust the scrollbar as needed + this->ensureCursorVisible(); +} + +void TerminalWidget::ShellClosed(){ + if(!closing){ + emit ProcessClosed(this->whatsThis()); + } +} + +void TerminalWidget::copySelection(){ + QApplication::clipboard()->setText( selCursor.selectedText() ); +} + +void TerminalWidget::pasteSelection(){ + QString text = QApplication::clipboard()->text(); + if(!text.isEmpty()){ + QByteArray ba; ba.append(text); //avoid any byte conversions + PROC->writeTTY(ba); + } +} + +void TerminalWidget::updateTermSize(){ + if(!PROC->isOpen()){ return; } + QSize pix = this->size(); //pixels + QSize chars; + chars.setWidth( pix.width()/this->fontMetrics().width("W") ); + chars.setHeight( pix.height()/this->fontMetrics().lineSpacing() ); + + PROC->setTerminalSize(chars,pix); +} + +// ================== +// PROTECTED +// ================== +void TerminalWidget::keyPressEvent(QKeyEvent *ev){ + + if(ev->text().isEmpty() || ev->text()=="\b" ){ + sendKeyPress(ev->key()); + }else{ + QByteArray ba; ba.append(ev->text()); //avoid any byte conversions + //qDebug() << "Forward Input:" << ba; + PROC->writeTTY(ba); + } + + ev->ignore(); +} + +void TerminalWidget::mousePressEvent(QMouseEvent *ev){ + this->setFocus(); + this->activateWindow(); + if(ev->button()==Qt::RightButton){ + QTextEdit::mousePressEvent(ev); + }else if(ev->button()==Qt::MiddleButton){ + pasteSelection(); + }else if(ev->button()==Qt::LeftButton){ + if(this->textCursor()!=selCursor){ lastCursor = this->textCursor(); } + selCursor = this->cursorForPosition(ev->pos()); + } + Q_UNUSED(ev); +} + +void TerminalWidget::mouseMoveEvent(QMouseEvent *ev){ + //qDebug() << "MouseMove Event" << ev->button() << ev->buttons() << Qt::LeftButton; + if(ev->buttons().testFlag(Qt::LeftButton) ){ + selCursor.setPosition(this->cursorForPosition(ev->pos()).position(), QTextCursor::KeepAnchor); + if(selCursor.hasSelection()){ this->setTextCursor(selCursor); } + //qDebug() << "Mouse Movement:" << selCursor.hasSelection(); + }else{ + QTextEdit::mouseMoveEvent(ev); + } +} + +void TerminalWidget::mouseReleaseEvent(QMouseEvent *ev){ + if(ev->button()==Qt::LeftButton){ + selCursor.setPosition(this->cursorForPosition(ev->pos()).position(), QTextCursor::KeepAnchor); + if(selCursor.hasSelection()){ this->setTextCursor(selCursor); } + else{ this->setTextCursor(lastCursor); } + }else if(ev->button()==Qt::RightButton){ + copyA->setEnabled( selCursor.hasSelection() ); + pasteA->setEnabled( !QApplication::clipboard()->text().isEmpty() ); + contextMenu->popup( this->mapToGlobal(ev->pos()) ); + } + Q_UNUSED(ev); +} + +void TerminalWidget::mouseDoubleClickEvent(QMouseEvent *ev){ + Q_UNUSED(ev); +} + +void TerminalWidget::resizeEvent(QResizeEvent *ev){ + resizeTimer->start(); + QTextEdit::resizeEvent(ev); +} diff --git a/src-qt5/experimental/lumina-terminal/TerminalWidget.h b/src-qt5/experimental/lumina-terminal/TerminalWidget.h new file mode 100644 index 00000000..616919c3 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/TerminalWidget.h @@ -0,0 +1,73 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef _LUMINA_DESKTOP_UTILITIES_TERMINAL_PROCESS_WIDGET_H +#define _LUMINA_DESKTOP_UTILITIES_TERMINAL_PROCESS_WIDGET_H + +#include <QTextEdit> +#include <QKeyEvent> +#include <QResizeEvent> +#include <QSocketNotifier> +#include <QTimer> +#include <QMenu> +#include <QClipboard> + +#include "TtyProcess.h" + +class TerminalWidget : public QTextEdit{ + Q_OBJECT +public: + TerminalWidget(QWidget *parent =0, QString dir=""); + ~TerminalWidget(); + + void setTerminalFont(QFont); + void aboutToClose(); + +private: + TTYProcess *PROC; + QTimer *resizeTimer; + QTextCharFormat DEFFMT, CFMT; //default/current text format + QTextCursor selCursor, lastCursor; + QMenu *contextMenu; + QAction *copyA, *pasteA; + int selectionStart; + bool closing; + + //Incoming Data parsing + void InsertText(QString); + void applyData(QByteArray data); //overall data parsing + void applyANSI(QByteArray code); //individual code application + void applyANSIColor(int code); //Add the designated color code to the CFMT structure + + //Outgoing Data parsing + void sendKeyPress(int key); + + //Special incoming data flags + int startrow, endrow; //indexes for the first/last row ("\x1b[A;Br" CC) + bool altkeypad; +private slots: + void UpdateText(); + void ShellClosed(); + + void copySelection(); + void pasteSelection(); + + void updateTermSize(); + +signals: + void ProcessClosed(QString); + +protected: + void keyPressEvent(QKeyEvent *ev); + void mousePressEvent(QMouseEvent *ev); + void mouseMoveEvent(QMouseEvent *ev); + void mouseReleaseEvent(QMouseEvent *ev); + void mouseDoubleClickEvent(QMouseEvent *ev); + //void contextMenuEvent(QContextMenuEvent *ev); + void resizeEvent(QResizeEvent *ev); +}; + +#endif diff --git a/src-qt5/experimental/lumina-terminal/TrayIcon.cpp b/src-qt5/experimental/lumina-terminal/TrayIcon.cpp new file mode 100644 index 00000000..5198146e --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/TrayIcon.cpp @@ -0,0 +1,173 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "TrayIcon.h" + +#include <QDir> +#include <QDesktopWidget> + +#include <LUtils.h> + +TrayIcon::TrayIcon() : QSystemTrayIcon(){ + //Create the child widgets here + settings = new QSettings("lumina-desktop","lumina-terminal"); + this->setContextMenu(new QMenu()); + ScreenMenu = new QMenu(); + connect(ScreenMenu, SIGNAL(triggered(QAction*)), this, SLOT(ChangeScreen(QAction*)) ); + TERM = new TermWindow(settings); + //Load the current settings + TERM->setTopOfScreen(settings->value("TopOfScreen",true).toBool()); + TERM->setCurrentScreen(settings->value("OnScreen",0).toInt()); + connect(TERM, SIGNAL(TerminalHidden()), this, SLOT(TermHidden())); + connect(TERM, SIGNAL(TerminalVisible()), this, SLOT(TermVisible())); + connect(TERM, SIGNAL(TerminalClosed()), this, SLOT(startCleanup())); + connect(TERM, SIGNAL(TerminalFinished()), this, SLOT(stopApplication())); + connect(this, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(TrayActivated(QSystemTrayIcon::ActivationReason)) ); +} + +TrayIcon::~TrayIcon(){ + delete TERM; + delete ScreenMenu; +} + +// ============= +// PUBLIC +// ============= +void TrayIcon::parseInputs(QStringList inputs){ + //Note that this is only run on the primary process - otherwise inputs are sent to the slotSingleInstance() below + termVisible = !inputs.contains("-toggle"); //will automatically show the terminal on first run, even if "-toggle" is set + + setupContextMenu(); + updateIcons(); + inputs = adjustInputs(inputs); //will adjust termVisible as necessary + if(inputs.isEmpty()){ inputs << QDir::homePath(); } //always start up with one terminal minimum + TERM->OpenDirs(inputs); + if(termVisible){ QTimer::singleShot(0, TERM, SLOT(ShowWindow())); } +} + +// ================= +// PUBLIC SLOTS +// ================= +void TrayIcon::slotSingleInstance(QStringList inputs){ + //Note that this is only run for a secondary process forwarding its inputs + //qDebug() << "Single Instance Event:" << inputs << termVisible; + bool visible = termVisible; + inputs = adjustInputs(inputs); //will adjust termVisible as necessary + if(!inputs.isEmpty()){ TERM->OpenDirs(inputs); } + //Only adjust the window if there was a change in the visibility status + //qDebug() << "Set Visible:" << termVisible; + if(!visible && termVisible){ QTimer::singleShot(0, TERM, SLOT(ShowWindow())); } + else if(visible && !termVisible){ QTimer::singleShot(0, TERM, SLOT(HideWindow())); } +} + +void TrayIcon::updateIcons(){ + this->setIcon(LXDG::findIcon("utilities-terminal","")); +} + +// ================ +// PRIVATE +// ================ +QStringList TrayIcon::adjustInputs(QStringList inputs){ + bool hasHide = false; + //Look for the special CLI flags just for the tray icon and trim them out + for(int i=0; i<inputs.length(); i++){ + if(inputs[i]=="-toggle"){ hasHide = termVisible; inputs.removeAt(i); i--; } //toggle the visibility + else if(inputs[i]=="-show"){ hasHide = false; inputs.removeAt(i); i--; } //change the visibility + else if(inputs[i]=="-hide"){ hasHide = true; inputs.removeAt(i); i--; } //change the visibility + else{ + //Must be a directory - convert to an absolute path and check for existance + inputs[i] = LUtils::PathToAbsolute(inputs[i]); + QFileInfo info(inputs[i]); + if(!info.exists()){ + qDebug() << "Directory does not exist: " << inputs[i]; + inputs.removeAt(i); + i--; + }else if(!info.isDir()){ + //Must be some kind of file, open the parent directory + inputs[i] = inputs[i].section("/",0,-2); + } + } + } + termVisible = !hasHide; + return inputs; +} + +// ================ +// PRIVATE SLOTS +// ================ +void TrayIcon::startCleanup(){ + TERM->cleanup(); +} + +void TrayIcon::stopApplication(){ + QApplication::exit(0); +} + +void TrayIcon::ChangeTopBottom(bool ontop){ + TERM->setTopOfScreen(ontop); + settings->setValue("TopOfScreen",ontop); //save for later +} + +void TrayIcon::ChangeScreen(QAction *act){ + int screen = act->whatsThis().toInt(); + TERM->setCurrentScreen(screen); + settings->setValue("OnScreen",screen); + updateScreenMenu(); +} + +void TrayIcon::setupContextMenu(){ + this->contextMenu()->clear(); + this->contextMenu()->addAction(LXDG::findIcon("edit-select",""), tr("Trigger Terminal"), this, SLOT(ToggleVisibility()) ); + this->contextMenu()->addSeparator(); + QAction * act = this->contextMenu()->addAction(tr("Top of Screen"), this, SLOT(ChangeTopBottom(bool)) ); + act->setCheckable(true); + act->setChecked(settings->value("TopOfScreen",true).toBool() ); + this->contextMenu()->addMenu(ScreenMenu); + this->contextMenu()->addSeparator(); + this->contextMenu()->addAction(LXDG::findIcon("application-exit",""), tr("Close Terminal"), this, SLOT(stopApplication()) ); + updateScreenMenu(); +} + +void TrayIcon::updateScreenMenu(){ + ScreenMenu->clear(); + QDesktopWidget *desk = QApplication::desktop(); + int cscreen = settings->value("OnScreen",0).toInt(); + if(cscreen>=desk->screenCount()){ cscreen = desk->primaryScreen(); } + ScreenMenu->setTitle(tr("Move To Monitor")); + for(int i=0; i<desk->screenCount(); i++){ + if(i!=cscreen){ + QAction *act = new QAction( QString(tr("Monitor %1")).arg(QString::number(i+1)),ScreenMenu); + act->setWhatsThis(QString::number(i)); + ScreenMenu->addAction(act); + } + } + ScreenMenu->setVisible(!ScreenMenu->isEmpty()); + ScreenMenu->setEnabled(!ScreenMenu->isEmpty()); +} + +void TrayIcon::TrayActivated(QSystemTrayIcon::ActivationReason reason){ + switch(reason){ + case QSystemTrayIcon::Context: + this->contextMenu()->popup(this->geometry().center()); + break; + default: + ToggleVisibility(); + } +} + +//Slots for the window visibility +void TrayIcon::ToggleVisibility(){ + if(termVisible){ QTimer::singleShot(0, TERM, SLOT(HideWindow())); } + else{ QTimer::singleShot(0, TERM, SLOT(ShowWindow())); } +} + +void TrayIcon::TermHidden(){ + termVisible = false; +} + +void TrayIcon::TermVisible(){ + termVisible = true; +} diff --git a/src-qt5/experimental/lumina-terminal/TrayIcon.h b/src-qt5/experimental/lumina-terminal/TrayIcon.h new file mode 100644 index 00000000..961aaa90 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/TrayIcon.h @@ -0,0 +1,59 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef _LUMINA_DESKTOP_UTILITIES_TERMINAL_TRAY_ICON_H +#define _LUMINA_DESKTOP_UTILITIES_TERMINAL_TRAY_ICON_H +// QT Includes +#include <QApplication> +#include <QSystemTrayIcon> +#include <QMenu> +#include <QTimer> +#include <QSettings> + +#include <LuminaXDG.h> + +#include "TermWindow.h" + +class TrayIcon : public QSystemTrayIcon { + Q_OBJECT + +public: + TrayIcon(); + ~TrayIcon(); + + //First run + void parseInputs(QStringList); //Note that this is only run on the primary process - otherwise it gets sent to the singleInstance slot below + +public slots: + void slotSingleInstance(QStringList inputs = QStringList()); + void updateIcons(); + +private: + bool termVisible; + TermWindow *TERM; + QMenu *ScreenMenu; + QStringList adjustInputs(QStringList); + QSettings *settings; +private slots: + //Action Buttons + void startCleanup(); + void stopApplication(); + void ChangeTopBottom(bool ontop); + void ChangeScreen(QAction*); + + //Tray Updates + void setupContextMenu(); + void updateScreenMenu(); + void TrayActivated(QSystemTrayIcon::ActivationReason); + + //Slots for the window visibility + void ToggleVisibility(); + void TermHidden(); + void TermVisible(); + +}; + +#endif diff --git a/src-qt5/experimental/lumina-terminal/TtyProcess.cpp b/src-qt5/experimental/lumina-terminal/TtyProcess.cpp new file mode 100644 index 00000000..b6ef8f6d --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/TtyProcess.cpp @@ -0,0 +1,381 @@ +#include "TtyProcess.h" + +#include <QDir> +#include <QProcessEnvironment> +#include <QTimer> + +#define DEBUG 1 + +TTYProcess::TTYProcess(QObject *parent) : QObject(parent){ + childProc = 0; + sn = 0; + ttyfd = 0; + starting = true; + fixReply = -1; +} + +TTYProcess::~TTYProcess(){ + closeTTY(); //make sure everything is closed properly +} + +// === PUBLIC === +bool TTYProcess::startTTY(QString prog, QStringList args, QString workdir){ + if(workdir=="~"){ workdir = QDir::homePath(); } + QDir::setCurrent(workdir); + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); + setenv("TERM","vt220-color",1);//"vt102-color",1); //vt100: VT100 emulation support (QTerminal sets "xterm" here) + + //setenv("TERMINFO","/etc/termcap",0); + unsetenv("WINDOWID"); + //unsetenv("TERMCAP"); + //setenv("TERMCAP","/etc/termcap",1); + //setenv("TERMCAP","vt220-color",1); + //setenv("TERMCAP","vt102|vt220-color|dec vt102:' :do=^J:co#80:li#24:cl=50\E[;H\E[2J: :le=^H:bs:cm=5\E[%i%d;%dH:nd=2\E[C:up=2\E[A: :ce=3\E[K:cd=50\E[J:so=2\E[7m:se=2\E[m:us=2\E[4m:ue=2\E[m: :md=2\E[1m:mr=2\E[7m:mb=2\E[5m:me=2\E[m:is=\E[1;24r\E[24;1H: :rs=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:ks=\E[?1h\E=:ke=\E[?1l\E>: :ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:kb=^H: :ho=\E[H:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:pt:sr=5\EM:vt#3: :sc=\E7:rc=\E8:cs=\E[%i%d;%dr:vs=\E[?7l:ve=\E[?7h: :mi:al=\E[L:dc=\E[P:dl=\E[M:ei=\E[4l:im=\E[4h:' vi $*",1); + /*setenv("TERMCAP","'vt220-color' :do=2\E[B:co#80:li#24:cl=50\E[H\E[J:sf=2*\ED:\ + :le=^H:bs:am:cm=5\E[%i%d;%dH:nd=2\E[C:up=2\E[A:\ + :ce=3\E[K:cd=50\E[J:so=2\E[7m:se=2\E[m:us=2\E[4m:ue=2\E[m:\ + :md=2\E[1m:mr=2\E[7m:mb=2\E[5m:me=2\E[m:\ + :is=\E>\E[?1;3;4;5l\E[?7;8h\E[1;24r\E[24;1H:\ + :if=/usr/share/tabset/vt100:nw=2\EE:ho=\E[H:\ + :as=2\E(0:ae=2\E(B:\ + :ac=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||:\ + :rs=\E>\E[?1;3;4;5l\E[?7;8h:ks=\E[?1h\E=:ke=\E[?1l\E>:\ + :ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:kb=\177:\ + :k0=\EOy:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\EOt:\ + :k6=\EOu:k7=\EOv:k8=\EOl:k9=\EOw:k;=\EOx:@8=\EOM:\ + :K1=\EOq:K2=\EOr:K3=\EOs:K4=\EOp:K5=\EOn:pt:sr=2*\EM:xn:\ + :sc=2\E7:rc=2\E8:cs=5\E[%i%d;%dr:UP=2\E[%dA:DO=2\E[%dB:RI=2\E[%dC:\ + :LE=2\E[%dD:ct=2\E[3g:st=2\EH:ta=^I:ms:bl=^G:cr=^M:eo:it#8:\ + :RA=\E[?7l:SA=\E[?7h:po=\E[5i:pf=\E[4i:",1); //see /etc/termcap as well */ + QStringList filter = env.keys().filter("XTERM"); + for(int i=0; i<filter.length(); i++){ unsetenv(filter[i].toLocal8Bit().data()); } + //if(env.contains("TERM")){ unsetenv("TERM"); } + //else if(env.contains + //Turn the program/arguments into C-compatible arrays + char cprog[prog.length()]; strcpy(cprog, prog.toLocal8Bit().data()); + char *cargs[args.length()+2]; + QByteArray nullarray; + for(int i=0; i<args.length()+2; i++){ + // First arg needs to be the program + if ( i == 0 ) { + cargs[i] = new char[ prog.toLocal8Bit().size()+1]; + strcpy( cargs[i], prog.toLocal8Bit().data() ); + } else if(i<args.length()){ + cargs[i] = new char[ args[i].toLocal8Bit().size()+1]; + strcpy( cargs[i], args[i].toLocal8Bit().data() ); + }else{ + cargs[i] = NULL; + } + } + if(DEBUG){ qDebug() << "PTY Start:" << prog; } + //Launch the process attached to a new PTY + int FD = 0; + pid_t tmp = LaunchProcess(FD, cprog, cargs); + if(DEBUG){ + qDebug() << " - PID:" << tmp; + qDebug() << " - FD:" << FD; + } + if(tmp<0){ return false; } //error + else{ + childProc = tmp; + //Load the file for close notifications + //TO-DO + //Watch the socket for activity + sn= new QSocketNotifier(FD, QSocketNotifier::Read); + sn->setEnabled(true); + connect(sn, SIGNAL(activated(int)), this, SLOT(checkStatus(int)) ); + ttyfd = FD; + if(DEBUG){ qDebug() << " - PTY:" << ptsname(FD); } + starting = true; + return true; + } +} + +void TTYProcess::closeTTY(){ + int junk; + if(0==waitpid(childProc, &junk, WNOHANG)){ + kill(childProc, SIGKILL); + } + if(ttyfd!=0 && sn!=0){ + sn->setEnabled(false); + ::close(ttyfd); + ttyfd = 0; + emit processClosed(); + } +} + +void TTYProcess::writeTTY(QByteArray output){ + //qDebug() << "Write:" << output; + static QList<QByteArray> knownFixes; + if(knownFixes.isEmpty()){ knownFixes << "\x1b[C" << "\x1b[D" << "\b" << "\x7F" << "\x08"; }//<<"\x1b[H"<<"\x1b[F"; } + fixReply = knownFixes.indexOf(output); + ::write(ttyfd, output.data(), output.size()); +} + +QByteArray TTYProcess::readTTY(){ + QByteArray BA; + //qDebug() << "Read TTY"; + if(sn==0){ return BA; } //not setup yet + char buffer[64]; + ssize_t rtot = read(sn->socket(),&buffer,64); + //buffer[rtot]='\0'; + BA = QByteArray(buffer, rtot); + //qDebug() << " - Got Data:" << BA; + if(!fragBA.isEmpty()){ + //Have a leftover fragment, include this too + BA = BA.prepend(fragBA); + fragBA.clear(); + } + bool bad = true; + BA = CleanANSI(BA, bad); + if(bad){ + //incomplete fragent - read some more first + fragBA = BA; + return readTTY(); + }else{ + if(DEBUG){ qDebug() << "Read Data:" << BA; } + //BUG BYPASS - 12/7/16 + //If the PTY gets input fairly soon after starting, the PTY will re-print the initial line(s) + if(starting && !BA.contains("\n") ){ + //qDebug() << "Starting phase 1:" << BA; + writeTTY("tset\n"); //Terminal Setup utility (uses the TERM env variable) + BA.clear(); + }else if(starting){ + //qDebug() << "Starting phase 2:" << BA; + BA.remove(0, BA.indexOf("\n")+1); + starting = false; + } + //Apply known fixes for replies to particular inputs (mostly related to cursor position *within* the current line) + // This appears to be primarily from the concept that the cursor position is always at the end of the line (old VT limitation?) + // so almost all these fixes are for cursor positioning within the current line + if(fixReply >= 0){ + if(DEBUG){ qDebug() << "Fix Reply:" <<fixReply << BA; } + switch(fixReply){ + case 0: //Right arrow ("\x1b[C") - PTY reply re-prints the next character rather than moving the cursor + if(BA.length()>0){ + BA.remove(0,1); + BA.prepend("\x1b[C"); //just move the cursor - don't re-print that 1 character + } + break; + case 1: //Left arrow ("\x1b[D") - PTY erases the previous character instead of moving the cursor + if(BA.startsWith("\b")){ + BA.remove(0,1); + BA.prepend("\x1b[D"); //just move the cursor - don't send the "back" character (\b) + } + break; + case 2: //Backspace or delete - PTY works fine if on the end of the line, but when in the middle of a line it will backpace a number of times after clearing (same as left arrow issue) + case 3: + case 4: + if(BA.contains("\x1b[K")){ + while(BA.indexOf("\x1b[K") < BA.lastIndexOf("\b") ){ + BA.replace( BA.lastIndexOf("\b"), 1, "\x1b[D"); //just move the cursor left - don't send the "back" character (\b) + } + } + break; + case 5: //Home Key + BA = "\x1b[H"; + break; + case 6: //End Key + BA = "\x1b[F"; + break; + } + fixReply = -1; //done with the fix - resume normal operations + if(DEBUG){ qDebug() << " - Fixed:" << BA; } + } + return BA; + } +} + +void TTYProcess::setTerminalSize(QSize chars, QSize pixels){ + if(ttyfd==0){ return; } + struct winsize c_sz; + c_sz.ws_row = chars.height(); + c_sz.ws_col = chars.width(); + c_sz.ws_xpixel = pixels.width(); + c_sz.ws_ypixel = pixels.height(); + if( ioctl(ttyfd, TIOCSWINSZ, &ws) ){ + qDebug() << "Error settings terminal size"; + }else{ + //qDebug() <<"Set Terminal Size:" << pixels << chars; + } +} + +bool TTYProcess::isOpen(){ + return (ttyfd!=0); +} + +QByteArray TTYProcess::CleanANSI(QByteArray raw, bool &incomplete){ + incomplete = true; + //qDebug() << "Clean ANSI Data:" << raw; + //IN_LINE TERMINAL COLOR CODES (ANSI Escape Codes) "\x1B[<colorcode>m" + // - Just remove them for now + + //Special XTERM encoding (legacy support) + int index = raw.indexOf("\x1B]"); + while(index>=0){ + //The end character of this sequence is the Bell command ("\x07") + int end = raw.indexOf("\x07"); + if(end<0){ return raw; } //incomplete raw array + raw = raw.remove(index, end-index+1); + index = raw.indexOf("\x1B]"); + } + + // GENERIC ANSI CODES ((Make sure the output is not cut off in the middle of a code) + index = raw.indexOf("\x1B"); + while(index>=0){ + //CURSOR MOVEMENT + int end = 0; + for(int i=1; i<raw.size() && end==0; i++){ + if(raw.size() < index+i){ return raw; }//cut off - go back for more data + //qDebug() << "Check Char:" << raw.at(index+i); + if( QChar(raw.at(index+i)).isLetter() ){ + end = i; //found the end of the control code + } + } + index = raw.indexOf("\x1B",index+1); //now find the next one + } + + // SYSTEM BELL + index = raw.indexOf("\x07"); + while(index>=0){ + //qDebug() << "Remove Bell:" << index; + raw = raw.remove(index,1); + index = raw.indexOf("\x07"); + } + //VT220(?) print character code (cut out the code, leave the character) + index=raw.indexOf("\x1b[@"); + while(index>=0){ + raw = raw.remove(index,3); + index = raw.indexOf("\x1b[@"); + } + + //VT102 Identify request + index = raw.indexOf("\x1b[Z"); + while(index>=0){ + raw = raw.remove(index,3); + index = raw.indexOf("\x1b[Z"); + //Also send the proper reply to this identify request right away + writeTTY("\x1b[/Z"); + } + //Terminal Status request + index = raw.indexOf("\x1b[5n"); + while(index>=0){ + raw = raw.remove(index,4); + index = raw.indexOf("\x1b[5n"); + //Also send the proper reply to this identify request right away + writeTTY("\x1b[c"); //everything ok + } + //Terminal Identify request + index = raw.indexOf("\x1b[c"); + while(index>=0){ + raw = raw.remove(index,3); + index = raw.indexOf("\x1b[c"); + //Also send the proper reply to this identify request right away + writeTTY("\x1b[1c"); //VT220 reply code + } + //Terminal Identify request (xterm/termcap?) + /*index = raw.indexOf("\x1b[P"); + while(index>=0){ + raw = raw.remove(index,3); + index = raw.indexOf("\x1b[P"); + //Also send the proper reply to this identify request right away + qDebug() << " - Got XTERM/TERMCAP identify request ([P)"; + writeTTY("\x1b[/Z"); + }*/ + + incomplete = false; + return raw; +} + +// === PRIVATE === +pid_t TTYProcess::LaunchProcess(int& fd, char *prog, char **child_args){ + //Returns: -1 for errors, positive value (file descriptor) for the master side of the TTY to watch + //First open/setup a new pseudo-terminal file/device on the system (master side) + //fd = posix_openpt(O_RDWR | O_NOCTTY); //open read/write + pid_t PID = forkpty( &fd, 0, 0, 0); + if(PID==0){ + //Child process + int rc = execvp(prog, child_args); + //::close(fds); //no need to keep original file descriptor open any more + exit(rc); + }else{ + //Master process + return PID; + } + /*if(fd<0){ return -1; } //could not create pseudo-terminal + int rc = grantpt(fd); //set permissions + if(rc!=0){ return -1; } + rc = unlockpt(fd); //unlock file (ready for use) + //rc = fchown(fd, getuid(), getgid()); + setupTtyFd(fd); + if(rc!=0){ return -1; } + //Now fork, return the Master device and setup the child + pid_t PID = fork(); + if(PID==0){ + //SLAVE/child + int fds = ::open(ptsname(fd), O_RDWR | O_NOCTTY); //open slave side read/write + rc = fchown(fds, getuid(), getgid()); + ::close(fd); //close the master side from the slave thread + + //Adjust the slave side mode to SANE + setupTtyFd(fds); + //Change the controlling terminal in child thread to the slave PTY + ::close(0); //close current terminal standard input + ::close(1); //close current terminal standard output + ::close(2); //close current terminal standard error + dup(fds); // Set slave PTY as standard input (0); + dup(fds); // Set slave PTY as standard output (1); + dup(fds); // Set slave PTY as standard error (2); + + setsid(); //Make current process new session leader (so we can set controlling terminal) + ioctl(0,TIOCSCTTY, 1); //Set the controlling terminal to the slave PTY + + //Execute the designated program + //rc = execvp("tset", NULL); + rc = execvp(prog, child_args); + ::close(fds); //no need to keep original file descriptor open any more + exit(rc); + }*/ + //MASTER thread (or error) + return PID; +} + +void TTYProcess::setupTtyFd(int fd){ + struct termios TSET; + tcgetattr(fd, &TSET); //read the current settings + cfmakesane(&TSET); //set the SANE mode on the settings ( RAW: cfmakeraw(&TSET); ) + //Set Input Modes + //TSET.c_iflag |= IGNPAR; //ignore parity errors + //TSET.c_iflag &= ~(IGNBRK | PARMRK | ISTRIP | ICRNL | IXON | IXANY | IXOFF); //ignore special characters + //TSET.c_iflag &= IUTF8; //enable UTF-8 support + //Set Local Modes + //TSET.c_lflag &= (ECHO | ECHONL | ECHOKE); //Echo inputs (normal, newline, and KILL character line break) + //TSET.c_lflag &= ~ICANON ; //non-canonical mode (individual inputs - not a line-at-a-time) + //Set Control Modes + //TSET.c_cflag |= CLOCAL; //Local Terminal Connection (non-modem) + //TSET.c_lflag &= ~IEXTEN; + //TSET.c_cflag &= ~(CSIZE | PARENB); + //TSET.c_cflag |= CS8; + //tt.c_oflag &= ~OPOST; // disable special output processing + //Set Output Modes + //TSET.c_oflag |= OPOST; + //TSET.c_oflag |= OXTABS; + TSET.c_cc[VTIME] = 0; // timeout + //Now apply the settings + tcsetattr(fd, TCSANOW, &TSET); //apply the changed settings +} + +// === PRIVATE SLOTS === +void TTYProcess::checkStatus(int sock){ + //This is run when the socket gets activated + if(sock!=ttyfd){ + + } + //Make sure the child PID is still active + int junk; + if(0!=waitpid(childProc, &junk, WNOHANG)){ + this->closeTTY(); //clean up everything else + }else{ + emit readyRead(); + } +} diff --git a/src-qt5/experimental/lumina-terminal/TtyProcess.h b/src-qt5/experimental/lumina-terminal/TtyProcess.h new file mode 100644 index 00000000..42684112 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/TtyProcess.h @@ -0,0 +1,87 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This is basically a replacement for QProcess, where all process/terminal outputs +// are redirected and not just the standard input/output channels. This allows it +// to be used for terminal-like apps (shells) which directly modify the terminal output +// rather than stick to input/output channels for communication. +//=========================================== +// IMPLEMENTATION NOTE +//====================== +// The process requires/uses ANSI control codes (\x1B[<something>) for special operations +// such as moving the cursor, erasing characters, etc.. +// It is recommended that you pair this class with the graphical "TerminalWidget.h" class +// or some other ANSI-compatible display widget. +//=========================================== +#ifndef _LUMINA_DESKTOP_UTILITIES_TERMINAL_TTY_PROCESS_WIDGET_H +#define _LUMINA_DESKTOP_UTILITIES_TERMINAL_TTY_PROCESS_WIDGET_H + +#include <QDebug> +#include <QSocketNotifier> +#include <QKeyEvent> + +//Standard C library functions for PTY access/setup +#include <stdlib.h> +#include <fcntl.h> +#include <termios.h> +#include <unistd.h> +#include <sys/ioctl.h> +#include <sys/types.h> +#include <sys/wait.h> +#include <signal.h> +#include <libutil.h> + +class TTYProcess : public QObject{ + Q_OBJECT +public: + TTYProcess(QObject *parent = 0); + ~TTYProcess(); + + bool startTTY(QString prog, QStringList args = QStringList(), QString workdir = "~"); + void closeTTY(); + + //Primary read/write functions + void writeTTY(QByteArray output); + QByteArray readTTY(); + + //Setup the terminal size (characters and pixels) + void setTerminalSize(QSize chars, QSize pixels); + + //Status update checks + bool isOpen(); + + //Functions for handling ANSI escape codes (typically not used by hand) + QByteArray CleanANSI(QByteArray, bool &incomplete); + +private: + pid_t childProc; + int ttyfd; + QSocketNotifier *sn; + QByteArray fragBA; //fragment ByteArray + bool starting; + int fixReply; //flag for detecting particular inputs and "fixing" the reply to it as needed + + //==================================== + // C Library function for setting up the PTY + // Inputs: + // int &fd: (output) file descriptor for the master PTY (positive integer if valid) + // char *prog: program to run + // char **args: program arguments + // Returns: + // -1 for errors, child process PID (positive integer) if successful + //==================================== + pid_t LaunchProcess(int& fd, char *prog, char **child_args); + void setupTtyFd(pid_t fd); + +private slots: + void checkStatus(int); + +signals: + void readyRead(); + void processClosed(); +}; + +#endif diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_af.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_af.ts new file mode 100644 index 00000000..3b15b029 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_af.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="af_ZA"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ar.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ar.ts new file mode 100644 index 00000000..1ecc3145 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ar.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="ar_EG"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_az.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_az.ts new file mode 100644 index 00000000..ab5b56bc --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_az.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="az_AZ"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_bg.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_bg.ts new file mode 100644 index 00000000..cde31900 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_bg.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="bg_BG"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_bn.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_bn.ts new file mode 100644 index 00000000..9097c03d --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_bn.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="bn_BD"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_bs.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_bs.ts new file mode 100644 index 00000000..af47e3ba --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_bs.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="bs_BA"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ca.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ca.ts new file mode 100644 index 00000000..c99bbf27 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ca.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="ca_ES"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation>Copia la selecció</translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation>Enganxa</translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation>Activa el terminal</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation>A dalt de tot de la pantalla</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation>Tanca el terminal</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation>Desplaça al monitor</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation>Monitor %1</translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_cs.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_cs.ts new file mode 100644 index 00000000..2ad36a83 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_cs.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="cs_CZ"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation>Kopírovat výběr</translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation>Vložit</translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation>Spustit terminál</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation>Nahoře na obrazovce</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation>Zavřít terminál</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation>Přesunout na obrazovku</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation>Obrazovka %1</translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_cy.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_cy.ts new file mode 100644 index 00000000..a06a1461 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_cy.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="cy_GB"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_da.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_da.ts new file mode 100644 index 00000000..18990a04 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_da.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="da"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation>Kopiér valgte</translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation>Indsæt</translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation>Udløs terminal</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation>Øverst på skærmen</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation>Luk terminal</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation>Flyt til skærm</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation>Skærm %1</translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_de.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_de.ts new file mode 100644 index 00000000..041be5a7 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_de.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="de_DE"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation>Auswahl kopieren</translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation>Einfügen</translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation>Oben am Bildschirm</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation>Terminal schließen</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation>Monitor %1</translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_el.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_el.ts new file mode 100644 index 00000000..2efd8fe8 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_el.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="el_GR"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation>Αντιγραφή Επιλογής</translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation>Επικόλληση</translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation>Εμφάνιση/Απόκρυψη Γραμμής Εντολών</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation>Επάνω Μέρος της Οθόνης</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation>Κλείσιμο Γραμμής Εντολών</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation>Μετακίνηση στην Οθόνη</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation>Οθόνη %1</translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_en_GB.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_en_GB.ts new file mode 100644 index 00000000..99b84253 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_en_GB.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="en_GB"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_en_ZA.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_en_ZA.ts new file mode 100644 index 00000000..4b623bf9 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_en_ZA.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="en_ZA"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_es.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_es.ts new file mode 100644 index 00000000..aa46327c --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_es.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="es_ES"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_et.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_et.ts new file mode 100644 index 00000000..b728da20 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_et.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="et_EE"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_eu.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_eu.ts new file mode 100644 index 00000000..8ce0109f --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_eu.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="eu_ES"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_fa.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_fa.ts new file mode 100644 index 00000000..9699380f --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_fa.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="fa_IR"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_fi.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_fi.ts new file mode 100644 index 00000000..e2267e94 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_fi.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="fi_FI"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_fr.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_fr.ts new file mode 100644 index 00000000..5e2fab13 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_fr.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="fr_FR"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_fr_CA.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_fr_CA.ts new file mode 100644 index 00000000..5854840a --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_fr_CA.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="fr_CA"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_gl.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_gl.ts new file mode 100644 index 00000000..559b5579 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_gl.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="gl_ES"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_he.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_he.ts new file mode 100644 index 00000000..0ffdc091 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_he.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="he_IL"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_hi.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_hi.ts new file mode 100644 index 00000000..2a702315 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_hi.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="hi_IN"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_hr.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_hr.ts new file mode 100644 index 00000000..4ce13144 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_hr.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="hr_HR"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_hu.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_hu.ts new file mode 100644 index 00000000..5fba3d17 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_hu.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="hu_HU"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation>Kijelöltés másolása</translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation>Beillesztés</translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation>Terminál Kiszögezése</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation>Képernyő tetejére</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation>Terminál bezárása</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation>Monitorra mozgatás</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation>%1. montior</translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_id.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_id.ts new file mode 100644 index 00000000..4eb7642d --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_id.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="id_ID"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_is.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_is.ts new file mode 100644 index 00000000..6fe84485 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_is.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="is_IS"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_it.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_it.ts new file mode 100644 index 00000000..2c88a58c --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_it.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="it_IT"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation>Copia selezione</translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation>Incolla</translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation>Azione eseguita da terminale</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation>Alto dello schermo</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation>Chiudi terminale</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation>Spostarsi sullo schermo</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation>Schermo %1</translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ja.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ja.ts new file mode 100644 index 00000000..81b6ca9e --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ja.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="ja_JP"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation>選択された範囲をコピー</translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation>貼り付け</translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation>画面の最上部に表示</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation>端末を閉じる</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation>選択したモニターへ移動</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation>モニター %1</translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ka.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ka.ts new file mode 100644 index 00000000..55fb9b6c --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ka.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="ka_GE"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ko.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ko.ts new file mode 100644 index 00000000..0c6e3f07 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ko.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="ko_KR"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_lt.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_lt.ts new file mode 100644 index 00000000..c0acd806 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_lt.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="lt_LT"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation>Kopijuoti žymėjimą</translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation>Įdėti</translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation>Perjungti terminalą</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation>Ekrano viršuje</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation>Užverti terminalą</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation>Perkelti į monitorių</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation>Monitorius %1</translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_lv.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_lv.ts new file mode 100644 index 00000000..539cc1ad --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_lv.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="lv_LV"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_mk.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_mk.ts new file mode 100644 index 00000000..47e0efd6 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_mk.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="mk_MK"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_mn.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_mn.ts new file mode 100644 index 00000000..d31a4617 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_mn.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="mn_MN"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ms.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ms.ts new file mode 100644 index 00000000..06408c44 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ms.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="ms_MY"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_mt.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_mt.ts new file mode 100644 index 00000000..b18f7eb5 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_mt.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="mt_MT"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_nb.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_nb.ts new file mode 100644 index 00000000..300214c3 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_nb.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="nb_NO"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_nl.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_nl.ts new file mode 100644 index 00000000..5e9c63dd --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_nl.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="nl_NL"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_pa.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_pa.ts new file mode 100644 index 00000000..2f478abb --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_pa.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="pa_IN"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_pl.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_pl.ts new file mode 100644 index 00000000..52453174 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_pl.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="pl_PL"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation>Kopiuj</translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation>Wklej</translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation>Uruchom terminal</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation>Górna krawędź ekranu</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation>Zamknij terminal</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation>Przenieś na monitor</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation>Monitor %1</translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_pt.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_pt.ts new file mode 100644 index 00000000..26e200d4 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_pt.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="pt_BR"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_pt_BR.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_pt_BR.ts new file mode 100644 index 00000000..1f3f6996 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_pt_BR.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="pt_BR"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation>Copiar seleção</translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation>Colar</translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation>Gatilhar Terminal</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation>Topo da tela</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation>Fechar Terminal</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation>Mover para o Monitor</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation>Monitor %1</translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ro.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ro.ts new file mode 100644 index 00000000..9f6811a6 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ro.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="ro_RO"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ru.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ru.ts new file mode 100644 index 00000000..8e298489 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ru.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="ru_RU"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation>Копировать выбранное</translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation>Вставить</translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation>Запуск терминала</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation>Всегда наверху</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation>Закрыть терминал</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation>Переместить на экран</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation>Экран: %1</translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_sk.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_sk.ts new file mode 100644 index 00000000..bd12e022 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_sk.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="sk_SK"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_sl.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_sl.ts new file mode 100644 index 00000000..c7b29746 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_sl.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="sl_SI"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_sr.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_sr.ts new file mode 100644 index 00000000..db230f12 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_sr.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="sr_RS"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_sv.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_sv.ts new file mode 100644 index 00000000..5f6ea3bd --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_sv.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="sv_SE"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation>Kopiera markering</translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation>Klistra in</translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation>Stäng terminal</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation>Flytta till skärm</translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation>Skärm %1</translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_sw.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_sw.ts new file mode 100644 index 00000000..7aa406a3 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_sw.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="sw_TZ"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ta.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ta.ts new file mode 100644 index 00000000..e6da4e4a --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_ta.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="ta_IN"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_tg.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_tg.ts new file mode 100644 index 00000000..16976b60 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_tg.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="tg_TJ"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_th.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_th.ts new file mode 100644 index 00000000..35b1b00b --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_th.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="th_TH"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_tr.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_tr.ts new file mode 100644 index 00000000..8311f8a0 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_tr.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="tr_TR"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_uk.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_uk.ts new file mode 100644 index 00000000..e4bf575d --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_uk.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="uk_UA"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_uz.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_uz.ts new file mode 100644 index 00000000..ed0d17de --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_uz.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="uz_UZ"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_vi.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_vi.ts new file mode 100644 index 00000000..2f5d2d9c --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_vi.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="vi_VN"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_zh_CN.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_zh_CN.ts new file mode 100644 index 00000000..c899062c --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_zh_CN.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="zh_CN"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_zh_HK.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_zh_HK.ts new file mode 100644 index 00000000..a809bad6 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_zh_HK.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="zh_HK"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_zh_TW.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_zh_TW.ts new file mode 100644 index 00000000..7d136d08 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_zh_TW.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="zh_TW"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/i18n/l-terminal_zu.ts b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_zu.ts new file mode 100644 index 00000000..1e330c7d --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/i18n/l-terminal_zu.ts @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="zu_ZA"> +<context> + <name>TerminalWidget</name> + <message> + <location filename="../TerminalWidget.cpp" line="61"/> + <source>Copy Selection</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TerminalWidget.cpp" line="62"/> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../TrayIcon.cpp" line="123"/> + <source>Trigger Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="125"/> + <source>Top of Screen</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="130"/> + <source>Close Terminal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="139"/> + <source>Move To Monitor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../TrayIcon.cpp" line="142"/> + <source>Monitor %1</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/src-qt5/experimental/lumina-terminal/lumina-terminal.desktop b/src-qt5/experimental/lumina-terminal/lumina-terminal.desktop new file mode 100644 index 00000000..7d11a19d --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/lumina-terminal.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Exec=lumina-terminal %F +Icon=utilities-terminal +Terminal=false +Type=Application +StartupNotify=true +Categories=Utility; +Name=Lumina Terminal +Comment=Dropdown diff --git a/src-qt5/experimental/lumina-terminal/lumina-terminal.pro b/src-qt5/experimental/lumina-terminal/lumina-terminal.pro new file mode 100644 index 00000000..5216372c --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/lumina-terminal.pro @@ -0,0 +1,102 @@ +include("$${PWD}/../../OS-detect.pri") + +QT += core gui widgets network + +TARGET = lumina-terminal +target.path = $${L_BINDIR} + +#include all the special classes from the Lumina tree +include(../../core/libLumina/LUtils.pri) #includes LUtils +include(../../core/libLumina/LuminaXDG.pri) +include(../../core/libLumina/LuminaSingleApplication.pri) +include(../../core/libLumina/LuminaThemes.pri) + +HEADERS += TrayIcon.h \ + TermWindow.h \ + TerminalWidget.h \ + TtyProcess.h + +SOURCES += main.cpp \ + TrayIcon.cpp \ + TermWindow.cpp \ + TerminalWidget.cpp \ + TtyProcess.cpp + + +LIBS += -lutil + + +TRANSLATIONS = i18n/l-terminal_af.ts \ + i18n/l-terminal_ar.ts \ + i18n/l-terminal_az.ts \ + i18n/l-terminal_bg.ts \ + i18n/l-terminal_bn.ts \ + i18n/l-terminal_bs.ts \ + i18n/l-terminal_ca.ts \ + i18n/l-terminal_cs.ts \ + i18n/l-terminal_cy.ts \ + i18n/l-terminal_da.ts \ + i18n/l-terminal_de.ts \ + i18n/l-terminal_el.ts \ + i18n/l-terminal_en_GB.ts \ + i18n/l-terminal_en_ZA.ts \ + i18n/l-terminal_es.ts \ + i18n/l-terminal_et.ts \ + i18n/l-terminal_eu.ts \ + i18n/l-terminal_fa.ts \ + i18n/l-terminal_fi.ts \ + i18n/l-terminal_fr.ts \ + i18n/l-terminal_fr_CA.ts \ + i18n/l-terminal_gl.ts \ + i18n/l-terminal_he.ts \ + i18n/l-terminal_hi.ts \ + i18n/l-terminal_hr.ts \ + i18n/l-terminal_hu.ts \ + i18n/l-terminal_id.ts \ + i18n/l-terminal_is.ts \ + i18n/l-terminal_it.ts \ + i18n/l-terminal_ja.ts \ + i18n/l-terminal_ka.ts \ + i18n/l-terminal_ko.ts \ + i18n/l-terminal_lt.ts \ + i18n/l-terminal_lv.ts \ + i18n/l-terminal_mk.ts \ + i18n/l-terminal_mn.ts \ + i18n/l-terminal_ms.ts \ + i18n/l-terminal_mt.ts \ + i18n/l-terminal_nb.ts \ + i18n/l-terminal_nl.ts \ + i18n/l-terminal_pa.ts \ + i18n/l-terminal_pl.ts \ + i18n/l-terminal_pt.ts \ + i18n/l-terminal_pt_BR.ts \ + i18n/l-terminal_ro.ts \ + i18n/l-terminal_ru.ts \ + i18n/l-terminal_sk.ts \ + i18n/l-terminal_sl.ts \ + i18n/l-terminal_sr.ts \ + i18n/l-terminal_sv.ts \ + i18n/l-terminal_sw.ts \ + i18n/l-terminal_ta.ts \ + i18n/l-terminal_tg.ts \ + i18n/l-terminal_th.ts \ + i18n/l-terminal_tr.ts \ + i18n/l-terminal_uk.ts \ + i18n/l-terminal_uz.ts \ + i18n/l-terminal_vi.ts \ + i18n/l-terminal_zh_CN.ts \ + i18n/l-terminal_zh_HK.ts \ + i18n/l-terminal_zh_TW.ts \ + i18n/l-terminal_zu.ts + +dotrans.path=$${L_SHAREDIR}/lumina-desktop/i18n/ +dotrans.extra=cd i18n && $${LRELEASE} -nounfinished *.ts && cp *.qm $(INSTALL_ROOT)$${L_SHAREDIR}/lumina-desktop/i18n/ + +desktop.files=lumina-terminal.desktop +desktop.path=$${L_SHAREDIR}/applications/ + +INSTALLS += target desktop + +WITH_I18N{ + INSTALLS += dotrans +} diff --git a/src-qt5/experimental/lumina-terminal/main.cpp b/src-qt5/experimental/lumina-terminal/main.cpp new file mode 100644 index 00000000..a316ff35 --- /dev/null +++ b/src-qt5/experimental/lumina-terminal/main.cpp @@ -0,0 +1,47 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include <QSystemTrayIcon> +#include <QDebug> + +#include <LuminaSingleApplication.h> +#include <LuminaThemes.h> + +#include <unistd.h> + +#include "TrayIcon.h" +int main(int argc, char *argv[]) { + LTHEME::LoadCustomEnvSettings(); + LSingleApplication a(argc, argv, "lumina-terminal"); + if( !a.isPrimaryProcess() ){ return 0; } //poked the current process instead + + //First make sure a system tray is available + qDebug() << "Checking for system tray"; + bool ready = false; + for(int i=0; i<60 && !ready; i++){ + ready = QSystemTrayIcon::isSystemTrayAvailable(); + if(!ready){ + //Pause for 5 seconds + sleep(5); //don't worry about stopping event handling - nothing really running yet + } + } + if(!ready){ + qDebug() << "Could not find any available system tray after 5 minutes: exiting...."; + return 1; + } + + //Now go ahead and setup the app + //LuminaThemeEngine theme(&a); + QApplication::setQuitOnLastWindowClosed(false); + + //Now start the tray icon + TrayIcon tray; + QObject::connect(&a, SIGNAL(InputsAvailable(QStringList)), &tray, SLOT(slotSingleInstance(QStringList)) ); + //QObject::connect(&theme, SIGNAL(updateIcons()), &tray, SLOT(updateIcons()) ); + tray.parseInputs(a.inputlist); + tray.show(); + return a.exec(); +} |