--- kdebase-3.5.10.orig/konsole/konsole/konsole.h 2007-10-08 11:51:33.000000000 +0200 +++ kdebase-3.5.10/konsole/konsole/konsole.h 2011-05-10 01:25:27.000000000 +0200 @@ -389,6 +389,7 @@ QString s_schema; QString s_kconfigSchema; QString s_word_seps; // characters that are considered part of a word + QString s_printer_path; QString pmPath; // pixmap path QString dropText; QFont defaultFont; --- kdebase-3.5.10.orig/konsole/konsole/konsole_part.h 2006-10-01 19:32:08.000000000 +0200 +++ kdebase-3.5.10/konsole/konsole/konsole_part.h 2011-05-10 01:26:23.000000000 +0200 @@ -172,6 +172,7 @@ QString s_schema; QString s_kconfigSchema; QString s_word_seps; // characters that are considered part of a word + QString s_printer_path; // characters that are considered part of a word bool b_framevis:1; bool b_histEnabled:1; --- kdebase-3.5.10.orig/konsole/konsole/session.h 2006-10-01 19:32:08.000000000 +0200 +++ kdebase-3.5.10/konsole/konsole/session.h 2011-05-10 01:53:43.000000000 +0200 @@ -89,6 +89,7 @@ void setIconText(const QString& _iconText); void setAddToUtmp(bool); void setXonXoff(bool); + void setPrinterPath(const QString& _printer_path); bool testAndSetStateIconName (const QString& newname); bool sendSignal(int signal); --- kdebase-3.5.10.orig/konsole/konsole/TEmulation.h 2006-10-01 19:32:08.000000000 +0200 +++ kdebase-3.5.10/konsole/konsole/TEmulation.h 2011-05-10 01:55:37.000000000 +0200 @@ -108,6 +108,7 @@ virtual void clearEntireScreen() =0; virtual void reset() =0; + virtual void setPrinterPath(const QString &_printer_path) = 0; protected: --- kdebase-3.5.10.orig/konsole/konsole/TEmuVt102.h 2006-10-01 19:32:08.000000000 +0200 +++ kdebase-3.5.10/konsole/konsole/TEmuVt102.h 2011-05-10 14:28:16.000000000 +0200 @@ -24,6 +24,8 @@ #include "TEWidget.h" #include "TEScreen.h" #include "TEmulation.h" +#include +#include #include // @@ -73,10 +75,12 @@ void clearEntireScreen(); void reset(); + void setPrinterPath(const QString &_printer_path); void onRcvChar(int cc); public slots: void sendString(const char *); + void wroteStdin(KProcess *proc); public: @@ -135,12 +139,16 @@ void restoreCursor(); void resetCharset(int scrno); void setMargins(int t, int b); + void doPrint(); CharCodes charset[2]; DECpar currParm; DECpar saveParm; bool holdScreen; + bool capture; + QString captured; + QString printer_path; }; #endif // ifndef ANSIEMU_H --- kdebase-3.5.10.orig/kcontrol/konsole/kcmkonsoledialog.ui 2005-09-10 10:25:12.000000000 +0200 +++ kdebase-3.5.10/kcontrol/konsole/kcmkonsoledialog.ui 2011-05-10 01:17:29.000000000 +0200 @@ -62,6 +62,43 @@ + + + GroupBox4 + + + xterm Print + + + + unnamed + + + + TextLabel1_3 + + + Path to printer: + + + printer_path + + + + + printer_path + + + + 1 + 5 + 0 + 0 + + + + + GroupBox3 @@ -99,7 +136,7 @@ - + GroupBox2 --- kdebase-3.5.10.orig/kcontrol/konsole/kcmkonsole.cpp 2005-09-10 10:25:12.000000000 +0200 +++ kdebase-3.5.10/kcontrol/konsole/kcmkonsole.cpp 2011-05-10 01:22:21.000000000 +0200 @@ -73,6 +73,7 @@ connect(dialog->matchTabWinTitleCB,SIGNAL(toggled(bool)), SLOT( changed() )); connect(dialog->silence_secondsSB,SIGNAL(valueChanged(int)), SLOT( changed() )); connect(dialog->word_connectorLE,SIGNAL(textChanged(const QString &)), SLOT( changed() )); + connect(dialog->printer_path,SIGNAL(textChanged(const QString &)), SLOT( changed() )); connect(dialog->SchemaEditor1, SIGNAL(changed()), SLOT( changed() )); connect(dialog->SessionEditor1, SIGNAL(changed()), SLOT( changed() )); connect(dialog->SchemaEditor1, SIGNAL(schemaListChanged(const QStringList &,const QStringList &)), @@ -106,6 +107,7 @@ dialog->line_spacingSB->setValue(config.readUnsignedNumEntry( "LineSpacing", 0 )); dialog->silence_secondsSB->setValue(config.readUnsignedNumEntry( "SilenceSeconds", 10 )); dialog->word_connectorLE->setText(config.readEntry("wordseps",":@-./_~")); + dialog->printer_path->setText(config.readEntry("printer_path","")); dialog->SchemaEditor1->setSchema(config.readEntry("schema")); @@ -144,6 +146,7 @@ config.writeEntry("LineSpacing" , dialog->line_spacingSB->value()); config.writeEntry("SilenceSeconds" , dialog->silence_secondsSB->value()); config.writeEntry("wordseps", dialog->word_connectorLE->text()); + config.writeEntry("printer_path", dialog->printer_path->text()); config.writeEntry("schema", dialog->SchemaEditor1->schema()); --- kdebase-3.5.10.orig/kcontrol/konsole/kcmkonsole.cpp 2005-09-10 10:25:12.000000000 +0200 +++ kdebase-3.5.10/kcontrol/konsole/kcmkonsole.cpp 2011-05-10 01:22:21.000000000 +0200 @@ -73,6 +73,7 @@ connect(dialog->matchTabWinTitleCB,SIGNAL(toggled(bool)), SLOT( changed() )); connect(dialog->silence_secondsSB,SIGNAL(valueChanged(int)), SLOT( changed() )); connect(dialog->word_connectorLE,SIGNAL(textChanged(const QString &)), SLOT( changed() )); + connect(dialog->printer_path,SIGNAL(textChanged(const QString &)), SLOT( changed() )); connect(dialog->SchemaEditor1, SIGNAL(changed()), SLOT( changed() )); connect(dialog->SessionEditor1, SIGNAL(changed()), SLOT( changed() )); connect(dialog->SchemaEditor1, SIGNAL(schemaListChanged(const QStringList &,const QStringList &)), @@ -106,6 +107,7 @@ dialog->line_spacingSB->setValue(config.readUnsignedNumEntry( "LineSpacing", 0 )); dialog->silence_secondsSB->setValue(config.readUnsignedNumEntry( "SilenceSeconds", 10 )); dialog->word_connectorLE->setText(config.readEntry("wordseps",":@-./_~")); + dialog->printer_path->setText(config.readEntry("printer_path","")); dialog->SchemaEditor1->setSchema(config.readEntry("schema")); @@ -144,6 +146,7 @@ config.writeEntry("LineSpacing" , dialog->line_spacingSB->value()); config.writeEntry("SilenceSeconds" , dialog->silence_secondsSB->value()); config.writeEntry("wordseps", dialog->word_connectorLE->text()); + config.writeEntry("printer_path", dialog->printer_path->text()); config.writeEntry("schema", dialog->SchemaEditor1->schema()); --- kdebase-3.5.10.orig/konsole/konsole/konsole.cpp 2007-01-15 12:32:17.000000000 +0100 +++ kdebase-3.5.10/konsole/konsole/konsole.cpp 2011-05-10 01:37:34.000000000 +0200 @@ -1573,6 +1573,7 @@ for (TESession *ses = sessions.first(); ses; ses = sessions.next()) ses->setMonitorSilenceSeconds(monitorSilenceSeconds); + s_printer_path = config->readEntry("printer_path",""); b_xonXoff = config->readBoolEntry("XonXoff",false); b_matchTabWinTitle = config->readBoolEntry("MatchTabWinTitle",false); config->setGroup("UTMP"); @@ -2924,6 +2925,7 @@ s->setIconName(icon); s->setAddToUtmp(b_addToUtmp); s->setXonXoff(b_xonXoff); + s->setPrinterPath(s_printer_path); if (b_histEnabled && m_histSize) s->setHistory(HistoryTypeBuffer(m_histSize)); --- kdebase-3.5.10.orig/konsole/konsole/konsole_part.cpp 2007-05-14 09:55:49.000000000 +0200 +++ kdebase-3.5.10/konsole/konsole/konsole_part.cpp 2011-05-10 01:37:53.000000000 +0200 @@ -522,6 +522,7 @@ else se->setHistory( HistoryTypeNone() ); se->setKeymapNo( n_keytab ); + se->setPrinterPath( s_printer_path ); // FIXME: Move this somewhere else... KConfig* config = new KConfig("konsolerc",true); @@ -566,6 +567,7 @@ n_scroll = QMIN(config->readUnsignedNumEntry("scrollbar",TEWidget::SCRRIGHT),2); m_histSize = config->readNumEntry("history",DEFAULT_HISTORY_SIZE); s_word_seps= config->readEntry("wordseps",":@-./_~"); + s_printer_path = config->readEntry("s_printer_path",""); n_encoding = config->readNumEntry("encoding",0); @@ -635,6 +637,7 @@ config->writeEntry("schema",s_kconfigSchema); config->writeEntry("scrollbar",n_scroll); config->writeEntry("wordseps",s_word_seps); + config->writeEntry("printer_path",s_printer_path); config->writeEntry("encoding",n_encoding); config->writeEntry("use_konsole_settings",m_useKonsoleSettings->isChecked()); } --- kdebase-3.5.10.orig/konsole/konsole/session.cpp 2007-05-14 09:55:49.000000000 +0200 +++ kdebase-3.5.10/konsole/konsole/session.cpp 2011-05-10 01:54:04.000000000 +0200 @@ -595,6 +595,11 @@ xon_xoff = set; } +void TESession::setPrinterPath(const QString& _printer_path) +{ + em->setPrinterPath(_printer_path); +} + void TESession::slotZModemDetected() { if (!zmodemBusy) --- kdebase-3.5.10.orig/konsole/konsole/TEmuVt102.cpp 2006-10-01 19:32:08.000000000 +0200 +++ kdebase-3.5.10/konsole/konsole/TEmuVt102.cpp 2011-05-10 14:37:10.000000000 +0200 @@ -78,7 +78,8 @@ /*! */ -TEmuVt102::TEmuVt102(TEWidget* gui) : TEmulation(gui) +TEmuVt102::TEmuVt102(TEWidget* gui) : TEmulation(gui), + capture(false) { //kdDebug(1211)<<"TEmuVt102 ctor() connecting"< 0) + captured.truncate(captured.length() - 1); + break; + case TY_CTL('I'): + captured.append('\t'); + break; + case TY_CTL('J'): + captured.append('\n'); + break; + case TY_CTL('K'): + captured.append('\n'); + break; + case TY_CTL('L'): + captured.append('\n'); + break; + default: + break; + } + return; + } + switch (token) { @@ -544,6 +581,13 @@ case TY_CSI_PS('h', 4) : scr-> setMode (MODE_Insert ); break; case TY_CSI_PS('h', 20) : setMode (MODE_NewLine ); break; case TY_CSI_PS('i', 0) : /* IGNORE: attached printer */ break; //VT100 + case TY_CSI_PS('i', 5) : + captured.truncate(0); + capture = true; + break; //VT100 + case TY_CSI_PS('i', 4) : + doPrint(); + break; //VT100 case TY_CSI_PS('l', 4) : scr-> resetMode (MODE_Insert ); break; case TY_CSI_PS('l', 20) : resetMode (MODE_NewLine ); break; case TY_CSI_PS('s', 0) : saveCursor ( ); break; @@ -1085,6 +1129,30 @@ screen[1]->setMargins(t, b); } +void TEmuVt102::doPrint() +{ + if (printer_path.isEmpty()) + return; + + KProcess *proc = new KProcess; + *proc << printer_path; + if (proc->start(KProcess::NotifyOnExit, (KProcess::Communication) (KProcess::Stdin)) == false) + { + qWarning("Unable to execute printer: %s\n", printer_path.latin1()); + return; + } + connect(proc, SIGNAL(wroteStdin(KProcess *)), this, SLOT(wroteStdin(KProcess *))); + proc->writeStdin(captured.latin1(), captured.length()); +} + +void TEmuVt102::wroteStdin(KProcess *proc) +{ + proc->closeAll(); + proc->wait(); + delete proc; + captured.truncate(0); +} + /*! Save the cursor position and the rendition attribute settings. */ void TEmuVt102::saveCursor()