summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/source/commands.rst6
-rw-r--r--src/tabs/xmltab.py17
2 files changed, 23 insertions, 0 deletions
diff --git a/doc/source/commands.rst b/doc/source/commands.rst
index fc3aefa4..449d4095 100644
--- a/doc/source/commands.rst
+++ b/doc/source/commands.rst
@@ -541,10 +541,16 @@ XML tab commands
~~~~~~~~~~~~~~~~
.. glossary::
+ :sorted:
/clear [XML tab version]
Clear the current buffer.
+ /dump
+ **Usage:** ``/dump <filename>``
+
+ Write the content of the XML buffer into a file.
+
/reset
Reset the stanza filter.
diff --git a/src/tabs/xmltab.py b/src/tabs/xmltab.py
index 57b55103..d33f4d48 100644
--- a/src/tabs/xmltab.py
+++ b/src/tabs/xmltab.py
@@ -11,12 +11,14 @@ import logging
log = logging.getLogger(__name__)
import curses
+import os
from sleekxmpp.xmlstream import matcher
from sleekxmpp.xmlstream.handler import Callback
from . import Tab
import windows
+from xhtml import clean_text
class XMLTab(Tab):
def __init__(self):
@@ -45,6 +47,10 @@ class XMLTab(Tab):
usage=_('<xml mask>'),
desc=_('Show only the stanzas matching the given xml mask.'),
shortdesc=_('Filter by xml mask.'))
+ self.register_command('dump', self.command_dump,
+ usage=_('<filename>'),
+ desc=_('Writes the content of the XML buffer into a file.'),
+ shortdesc=_('Write in a file.'))
self.input = self.default_help_message
self.key_func['^T'] = self.close
self.key_func['^I'] = self.completion
@@ -111,6 +117,17 @@ class XMLTab(Tab):
self.filter = ''
self.refresh()
+ def command_dump(self, arg):
+ """/dump <filename>"""
+ xml = self.core.xml_buffer.messages[:]
+ text = '\n'.join(('%s %s' % (msg.str_time, clean_text(msg.txt)) for msg in xml))
+ filename = os.path.expandvars(os.path.expanduser(arg))
+ try:
+ with open(filename, 'w') as fd:
+ fd.write(text)
+ except Exception as e:
+ self.core.information('Could not write the XML dump: %s' % e, 'Error')
+
def on_slash(self):
"""
'/' is pressed, activate the input