[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-core-devel
Subject:    [patch] reading from stdin in KWrite
From:       Scott Wheeler <wheeler () kde ! org>
Date:       2003-06-01 22:42:44
[Download RAW message or body]

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

This is a first shot at making KWrite read from stdin.

With this patch and the "-stdin" flag, you can pipe things into KWrite.

There are a few outstanding issues:

*) It doesn't do highlighting.  I don't know this code much at all, but I can 
figure it out if there's interest in getting this in.

*) It places the cursor at the end.

*) It only works if you're using the Kate part as your editor.  I got lost in 
the number of interfaces provided for this, but I didn't see an appropriate 
interface with a "setText()" method.

The biggest part of this patch is a s/katePart/m_katePart/ since I needed to 
add a method called katePart() and since the m_ is used on other member 
variables this seemed like the way to go.

Anyway -- let me know if others would find this useful and I'll clean it up 
and commit.

Cheers,

- -Scott
- -- 
For a successful technology, reality must take precedence over public 
relations, for nature cannot be fooled. 
- --Richard Feynman
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (GNU/Linux)

iD8DBQE+2oFkQu0ByfY5QTkRAn6+AJ94TxFqrkX7kTmmaQAPKrA/wMeWdwCgiVYB
6kQYrTcdKJ8qNsLZAxQBgbg=
=gxex
-----END PGP SIGNATURE-----

["kwrite-stdin.patch" (text/x-diff)]

Index: kwritemain.cpp
===================================================================
RCS file: /home/kde/kdebase/kate/app/kwritemain.cpp,v
retrieving revision 1.65
diff -u -3 -p -r1.65 kwritemain.cpp
--- kwritemain.cpp	1 Jun 2003 16:30:04 -0000	1.65
+++ kwritemain.cpp	1 Jun 2003 17:48:19 -0000
@@ -30,6 +30,7 @@
 #include <ktexteditor/printinterface.h>
 #include <ktexteditor/encodinginterface.h>
 #include <ktexteditor/editorchooser.h>
+#include <kate/document.h>

 #include <dcopclient.h>
 #include <kurldrag.h>
@@ -69,7 +70,7 @@
 QPtrList<KTextEditor::Document> KWrite::docList;

 KWrite::KWrite (KTextEditor::Document *doc)
-    : kateView(0),
+    : m_kateView(0),
       m_recentFiles(0),
       m_paShowPath(0),
 //      m_paShowToolBar(0),
@@ -81,7 +82,7 @@ KWrite::KWrite (KTextEditor::Document *d
      resize(640,400);

   if (!doc) {
-	doc=KTextEditor::EditorChooser::createDocument(this,"KTextEditor::Document");
+    doc=KTextEditor::EditorChooser::createDocument(this,"KTextEditor::Document");
 //    doc = KTextEditor::createDocument ("katepart", this, \
"KTextEditor::Document");//libqeditorpart"); //katepart");  docList.append(doc);
   }
@@ -93,9 +94,9 @@ KWrite::KWrite (KTextEditor::Document *d

   setXMLFile( "kwriteui.rc" );
   createShellGUI( true );
-  guiFactory()->addClient( kateView );
+  guiFactory()->addClient( m_kateView );
   KParts::GUIActivateEvent ev( true );
-  QApplication::sendEvent( kateView, &ev );
+  QApplication::sendEvent( m_kateView, &ev );

   // Read basic main-view settings, and set to autosave
   setAutoSaveSettings( "General Options" );
@@ -104,7 +105,7 @@ KWrite::KWrite (KTextEditor::Document *d

 KWrite::~KWrite()
 {
-  if (kateView->document()->views().count() == 1) \
docList.remove(kateView->document()); +  if (m_kateView->document()->views().count() \
== 1) docList.remove(m_kateView->document());  }


@@ -124,14 +125,14 @@ void KWrite::init()
 void KWrite::loadURL(const KURL &url)
 {
   m_recentFiles->addURL( url );
-  kateView->document()->openURL(url);
+  m_kateView->document()->openURL(url);
 }


 bool KWrite::queryClose()
 {
-  return kateView->document()->views().count() != 1
-      || kateView->document()->queryClose();
+  return m_kateView->document()->views().count() != 1
+      || m_kateView->document()->queryClose();
 }


@@ -153,14 +154,14 @@ void KWrite::setupEditWidget(KTextEditor
     exit(1);
   }

-  kateView = doc->createView (this, 0L);
+  m_kateView = doc->createView (this, 0L);

-  connect(kateView,SIGNAL(newStatus()),this,SLOT(newCaption()));
-  connect(kateView,SIGNAL(viewStatusMsg(const QString &)),this,SLOT(newStatus(const \
                QString &)));
-  connect(kateView->document(),SIGNAL(fileNameChanged()),this,SLOT(newCaption()));
-  connect(kateView,SIGNAL(dropEventPass(QDropEvent \
*)),this,SLOT(slotDropEvent(QDropEvent *))); +  \
connect(m_kateView,SIGNAL(newStatus()),this,SLOT(newCaption())); +  \
connect(m_kateView,SIGNAL(viewStatusMsg(const QString &)),this,SLOT(newStatus(const \
QString &))); +  connect(m_kateView->document(),SIGNAL(fileNameChanged()),this,SLOT(newCaption()));
 +  connect(m_kateView,SIGNAL(dropEventPass(QDropEvent \
*)),this,SLOT(slotDropEvent(QDropEvent *)));

-  setCentralWidget(kateView);
+  setCentralWidget(m_kateView);

   KStdAction::close( this, SLOT(slotFlush()), actionCollection(), "file_close" \
)->setWhatsThis(i18n("Use this to close the current document"));  }
@@ -173,7 +174,7 @@ void KWrite::changeEditor()

 void KWrite::slotFlush ()
 {
-   kateView->document()->closeURL();
+   m_kateView->document()->closeURL();
 }

 void KWrite::setupActions()
@@ -228,21 +229,21 @@ void KWrite::setupStatusBar()

 void KWrite::slotNew()
 {
-  if (kateView->document()->isModified() || !kateView->document()->url().isEmpty())
+  if (m_kateView->document()->isModified() || \
!m_kateView->document()->url().isEmpty())  {
    KWrite*t = new KWrite();
     t->readConfig();
     t->init();
   }
   else
-    kateView->document()->openURL("");
+    m_kateView->document()->openURL("");
 }

 void KWrite::slotOpen()
 {
-  if (KTextEditor::encodingInterface(kateView->document()))
+  if (KTextEditor::encodingInterface(m_kateView->document()))
   {
-    Kate::FileDialog *dialog = new Kate::FileDialog \
(QString::null,KTextEditor::encodingInterface(kateView->document())->encoding(), \
this, i18n ("Open File")); +    Kate::FileDialog *dialog = new Kate::FileDialog \
(QString::null,KTextEditor::encodingInterface(m_kateView->document())->encoding(), \
this, i18n ("Open File"));  Kate::FileDialogData data = dialog->exec ();
     delete dialog;

@@ -272,24 +273,24 @@ void KWrite::slotOpen( const KURL& url )
     return;
   }

-  if (kateView->document()->isModified() || !kateView->document()->url().isEmpty())
+  if (m_kateView->document()->isModified() || \
!m_kateView->document()->url().isEmpty())  {
     KWrite *t = new KWrite();
-    if (KTextEditor::encodingInterface(kateView->document())) \
KTextEditor::encodingInterface(kateView->document())->setEncoding(encoding); +    if \
(KTextEditor::encodingInterface(m_kateView->document())) \
KTextEditor::encodingInterface(m_kateView->document())->setEncoding(encoding);  \
t->readConfig();  t->init();
     t->loadURL(url);
   }
   else
   {
-    if (KTextEditor::encodingInterface(kateView->document())) \
KTextEditor::encodingInterface(kateView->document())->setEncoding(encoding); +    if \
(KTextEditor::encodingInterface(m_kateView->document())) \
KTextEditor::encodingInterface(m_kateView->document())->setEncoding(encoding);  \
loadURL(url);  }
 }

 void KWrite::newView()
 {
-  KWrite *t = new KWrite(kateView->document());
+  KWrite *t = new KWrite(m_kateView->document());
   t->readConfig();
   t->init();
 }
@@ -314,8 +315,8 @@ void KWrite::editKeys()
 {
   KKeyDialog dlg;
   dlg.insert(actionCollection());
-  if( kateView )
-    dlg.insert(kateView->actionCollection());
+  if( m_kateView )
+    dlg.insert(m_kateView->actionCollection());
   dlg.configure();
 }

@@ -326,25 +327,25 @@ void KWrite::editToolbars()
   if (dlg->exec())
   {
       KParts::GUIActivateEvent ev1( false );
-      QApplication::sendEvent( kateView, &ev1 );
-      guiFactory()->removeClient( kateView );
+      QApplication::sendEvent( m_kateView, &ev1 );
+      guiFactory()->removeClient( m_kateView );
       createShellGUI( false );
       createShellGUI( true );
-      guiFactory()->addClient( kateView );
+      guiFactory()->addClient( m_kateView );
       KParts::GUIActivateEvent ev2( true );
-      QApplication::sendEvent( kateView, &ev2 );
+      QApplication::sendEvent( m_kateView, &ev2 );
   }
   delete dlg;
 }

 void KWrite::printNow()
 {
-  KTextEditor::printInterface(kateView->document())->print ();
+  KTextEditor::printInterface(m_kateView->document())->print ();
 }

 void KWrite::printDlg()
 {
-  KTextEditor::printInterface(kateView->document())->printDialog ();
+  KTextEditor::printInterface(m_kateView->document())->printDialog ();
 }

 void KWrite::newStatus(const QString &msg)
@@ -356,25 +357,25 @@ void KWrite::newStatus(const QString &ms

 void KWrite::newCaption()
 {
-  if (kateView->document()->url().isEmpty()) {
-    setCaption(i18n("Untitled"),kateView->document()->isModified());
+  if (m_kateView->document()->url().isEmpty()) {
+    setCaption(i18n("Untitled"),m_kateView->document()->isModified());
   } else {
     //set caption
     if ( m_paShowPath->isChecked() )
     {
        //File name shouldn't be too long - Maciek
-       if (kateView->document()->url().filename().length() > 200)
-         setCaption(kateView->document()->url().prettyURL().left(197) + \
"...",kateView->document()->isModified()); +       if \
(m_kateView->document()->url().filename().length() > 200) +         \
setCaption(m_kateView->document()->url().prettyURL().left(197) + \
"...",m_kateView->document()->isModified());  else
-         setCaption(kateView->document()->url().prettyURL(),kateView->document()->isModified());
 +         setCaption(m_kateView->document()->url().prettyURL(),m_kateView->document()->isModified());
  }
       else
      {
        //File name shouldn't be too long - Maciek
-       if (kateView->document()->url().filename().length() > 200)
-         setCaption("..." + \
kateView->document()->url().fileName().right(197),kateView->document()->isModified());
 +       if (m_kateView->document()->url().filename().length() > 200)
+         setCaption("..." + \
m_kateView->document()->url().fileName().right(197),m_kateView->document()->isModified());
  else
-         setCaption(kateView->document()->url().fileName(),kateView->document()->isModified());
 +         setCaption(m_kateView->document()->url().fileName(),m_kateView->document()->isModified());


     }

@@ -412,7 +413,7 @@ void KWrite::slotEnableActions( bool ena
     for (; it != end; ++it )
         (*it)->setEnabled( enable );

-    actions = kateView->actionCollection()->actions();
+    actions = m_kateView->actionCollection()->actions();
     it = actions.begin();
     end = actions.end();
     for (; it != end; ++it )
@@ -446,7 +447,7 @@ void KWrite::readConfig() {
   config->setGroup("General Options");
   readConfig(config);

-  KTextEditor::ConfigInterface \
*cfgIf=KTextEditor::configInterface(kateView->document()); +  \
KTextEditor::ConfigInterface \
*cfgIf=KTextEditor::configInterface(m_kateView->document());  if (cfgIf) \
cfgIf->readConfig();  }

@@ -460,15 +461,15 @@ void KWrite::writeConfig()
   config->setGroup("General Options");
   writeConfig(config);

-  if (kateView && KTextEditor::configInterface(kateView->document()))
-    KTextEditor::configInterface(kateView->document())->writeConfig();
+  if (m_kateView && KTextEditor::configInterface(m_kateView->document()))
+    KTextEditor::configInterface(m_kateView->document())->writeConfig();
 }

 // session management
 void KWrite::restore(KConfig *config, int n)
 {
-  if ((kateView->document()->views().count() == 1) && \
                !kateView->document()->url().isEmpty()) { //in this case first view
-    loadURL(kateView->document()->url());
+  if ((m_kateView->document()->views().count() == 1) && \
!m_kateView->document()->url().isEmpty()) { //in this case first view +    \
loadURL(m_kateView->document()->url());  }
  readPropertiesInternal(config, n);
   init();
@@ -478,17 +479,17 @@ void KWrite::readProperties(KConfig *con
 {
   readConfig(config);

-  if (KTextEditor::sessionConfigInterface(kateView))
-    KTextEditor::sessionConfigInterface(kateView)->readSessionConfig(config);
+  if (KTextEditor::sessionConfigInterface(m_kateView))
+    KTextEditor::sessionConfigInterface(m_kateView)->readSessionConfig(config);
 }

 void KWrite::saveProperties(KConfig *config)
 {
   writeConfig(config);
-  config->writeEntry("DocumentNumber",docList.find(kateView->document()) + 1);
+  config->writeEntry("DocumentNumber",docList.find(m_kateView->document()) + 1);

-  if (KTextEditor::sessionConfigInterface(kateView))
-    KTextEditor::sessionConfigInterface(kateView)->writeSessionConfig(config);
+  if (KTextEditor::sessionConfigInterface(m_kateView))
+    KTextEditor::sessionConfigInterface(m_kateView)->writeSessionConfig(config);
 }

 void KWrite::saveGlobalProperties(KConfig *config) //save documents
@@ -546,6 +547,7 @@ void KWrite::restore()

 static KCmdLineOptions options[] =
 {
+  { "stdin",    I18N_NOOP("Read the contents of stdin."), 0},
   { "+[URL]",   I18N_NOOP("Document to open."), 0 },
   KCmdLineLastOption
 };
@@ -612,11 +614,26 @@ int main(int argc, char **argv)
     KWrite::restore();
   } else {
     KWrite *t;
-
     if ( args->count() == 0 )
     {
         t = new KWrite;
         t->readConfig();
+
+        if( args->isSet( "stdin" ) ) {
+            QTextIStream input(stdin);
+            QString line;
+            QString text;
+            do {
+                line = input.readLine();
+                text.append( line + "\n" );
+            } while( !line.isNull() );
+
+            Kate::Document *doc = static_cast<Kate::Document \
*>(t->kateView()->document()->qt_cast( "Kate::Document" )); +            if( doc ) {
+                doc->setText( text );
+            }
+        }
+
         t->init();
     }
     else
Index: kwritemain.h
===================================================================
RCS file: /home/kde/kdebase/kate/app/kwritemain.h,v
retrieving revision 1.17
diff -u -3 -p -r1.17 kwritemain.h
--- kwritemain.h	1 Jun 2003 16:30:04 -0000	1.17
+++ kwritemain.h	1 Jun 2003 17:48:19 -0000
@@ -41,6 +41,8 @@ class KWrite : public KParts::MainWindow
     void init(); //initialize caption, status and show

     void loadURL(const KURL &url);
+
+    KTextEditor::View *kateView() const { return m_kateView; }

   private:
     virtual bool queryClose();
@@ -53,8 +55,7 @@ class KWrite : public KParts::MainWindow
     virtual void dragEnterEvent( QDragEnterEvent * );
     virtual void dropEvent( QDropEvent * );

-    KTextEditor::View *kateView;
-
+    KTextEditor::View * m_kateView;
     KRecentFilesAction * m_recentFiles;
     KToggleAction * m_paShowPath;
 //    KToggleAction * m_paShowToolBar;



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic