Commit c2b67330 authored by mathieui's avatar mathieui

Add an “autocorrect” plugin with a sed-like syntax

TODO (eventually):
    - correct words when using “word*” or “*word” using levenshtein distance
    - allow regular expressions for replacement
parent 0ad9712d
.. _autocorrect-plugin:
Autocorrect
===========
.. automodule:: autocorrect
......@@ -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
"""
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']
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment