summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/source/plugins/autocorrect.rst6
-rw-r--r--doc/source/plugins/index.rst8
-rw-r--r--plugins/autocorrect.py67
3 files changed, 81 insertions, 0 deletions
diff --git a/doc/source/plugins/autocorrect.rst b/doc/source/plugins/autocorrect.rst
new file mode 100644
index 00000000..f637678e
--- /dev/null
+++ b/doc/source/plugins/autocorrect.rst
@@ -0,0 +1,6 @@
+.. _autocorrect-plugin:
+
+Autocorrect
+===========
+
+.. automodule:: autocorrect
diff --git a/doc/source/plugins/index.rst b/doc/source/plugins/index.rst
index ce758537..e8307e7e 100644
--- a/doc/source/plugins/index.rst
+++ b/doc/source/plugins/index.rst
@@ -212,6 +212,13 @@ Plugin index
Insert dots in your messages.
+ Autocorrect
+ :ref:`Documentation <autocorrect-plugin>`
+
+ Add new ways to correct messages.
+
+
+
.. toctree::
:hidden:
@@ -246,3 +253,4 @@ Plugin index
iq_show
regex_admin
pointpoint
+ autocorrect
diff --git a/plugins/autocorrect.py b/plugins/autocorrect.py
new file mode 100644
index 00000000..61795b79
--- /dev/null
+++ b/plugins/autocorrect.py
@@ -0,0 +1,67 @@
+"""
+This plugin lets you perform simple replacements on the last message.
+
+Installation
+------------
+
+Load the plugin::
+
+ /load autocorrect
+
+Usage
+-----
+
+.. note:: This plugin only performs *simple* replacements, not with
+ regular expressions, despite the syntax. Although it would be
+ possible, that would be even less useful.
+
+Once the plugin is loaded, any message matching the following regex::
+
+ ^s/(.+?)/(.*?)(/|/g)?$
+
+will be interpreted as a replacement, and the substitution will be
+applied to the last sent message.
+
+For example, if you sent the message::
+
+ This tab lists all public rooms on a MUC service. It is currently very limited but will be improved in the future. There currently is no way to search a room.
+
+And you now want to replace “MUC” with “multi-user chat”, you input::
+
+ s/MUC/multi-user chat
+
+And poezio will correct the message for you.
+"""
+
+from plugin import BasePlugin
+import re
+
+sed_re = re.compile('^s/(.+?)/(.*?)(/|/g)?$')
+
+class Plugin(BasePlugin):
+ def init(self):
+ self.api.add_event_handler('muc_say', self.sed_fix)
+ self.api.add_event_handler('conversation_say', self.sed_fix)
+ self.api.add_event_handler('private_say', self.sed_fix)
+
+ def sed_fix(self, msg, tab):
+ if not tab.last_sent_message:
+ return
+ body = tab.last_sent_message['body']
+ match = sed_re.match(msg['body'])
+ if not match:
+ return
+ remove, put, matchall = match.groups()
+
+ replace_all = False
+ if matchall == '/g':
+ replace_all = True
+
+ if replace_all:
+ new_body = body.replace(remove, put)
+ else:
+ new_body = body.replace(remove, put, 1)
+
+ if body != new_body:
+ msg['body'] = new_body
+ msg['replace']['id'] = tab.last_sent_message['id']