diff options
author | Mathieu Pasquet <mathieui@mathieui.net> | 2013-11-28 21:22:17 +0100 |
---|---|---|
committer | Mathieu Pasquet <mathieui@mathieui.net> | 2013-11-28 21:22:17 +0100 |
commit | c2b673308f5d8ef7a295d03d1a1fa72b8b947c12 (patch) | |
tree | c13a53d73e4d68f326e775b69f60f80c723595e9 /plugins/autocorrect.py | |
parent | 0ad9712d0c7421c4d9b2d9ebb4b7d328c90e2253 (diff) | |
download | poezio-c2b673308f5d8ef7a295d03d1a1fa72b8b947c12.tar.gz poezio-c2b673308f5d8ef7a295d03d1a1fa72b8b947c12.tar.bz2 poezio-c2b673308f5d8ef7a295d03d1a1fa72b8b947c12.tar.xz poezio-c2b673308f5d8ef7a295d03d1a1fa72b8b947c12.zip |
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
Diffstat (limited to 'plugins/autocorrect.py')
-rw-r--r-- | plugins/autocorrect.py | 67 |
1 files changed, 67 insertions, 0 deletions
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'] |