--- /dev/null
+"""
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+ Author: Jason Whaley
+ Website: http://www.jasonwhaley.com
+ Email: "".join["jasonwhaley", "@", "gmail", ".", "com"]
+"""
+
+import weechat
+
+_function = "cmd_dispatcher"
+_description = "Highlight Aggregator"
+_arguments = "all | recent | previous N | clear "
+_arguments_description = "Lines in any channels that were triggered by a " + \
+ "nick highlight are internally stored.\n\n" + \
+ " all: displays all currently stored messages \n" + \
+ " recent: displays all messages collected since the last display \n"+\
+ " previous: displays the last N messages, where N is an integer \n" +\
+ " clear: empties the message storage \n\n" + \
+ "If no arguments are provided, then recent is called."
+
+
+_last_index = 0
+_messages = []
+
+def set_last_index():
+ '''
+ Sets the _last_index global to the current tail index of the messages.
+ Establishes the point in which recent messages are displayed.
+ '''
+ global _last_index, messages
+ _last_index = len(_messages)
+
+def unload():
+ '''
+ Called when the plugin is unloaded by weechat.
+ '''
+ global _last_index, _messages
+ weechat.prnt("Unloading highlights")
+ return weechat.PLUGIN_RC_OK
+
+def clear():
+ '''
+ Clears all messages stored.
+ '''
+ global _last_index, _messages
+
+ _messages = []
+ _last_index = 0
+
+ return weechat.PLUGIN_RC_OK
+
+def print_all():
+ '''
+ Print all messages that have been collected since
+ the plugin was loaded or since clear was called.
+ '''
+ global _last_index, _messages
+
+ for message in _messages:
+ weechat.prnt(message)
+ set_last_index()
+
+ return weechat.PLUGIN_RC_OK
+
+def print_since_last():
+ '''
+ Prints to the server buffer all messages collected
+ since the last time any messages were printed out.
+ '''
+ global _last_index, _messages
+
+ for message in _messages[_last_index:]:
+ weechat.prnt(message)
+ set_last_index()
+
+ return weechat.PLUGIN_RC_OK
+
+def print_previous(args):
+ '''
+ Prints to the server buffer the latest N number of
+ highlighted messages collected.
+ '''
+ global _last_index, _messages
+
+ try:
+ number = int(args)
+ except ValueError:
+ weechat.prnt("Error: Argument to previous must be a single integer")
+ return weechat.PLUGIN_RC_OK
+
+ if number >= len(_messages):
+ print_all()
+ else:
+ for message in _messages[-number:]:
+ weechat.prnt(message)
+ set_last_index()
+
+ return weechat.PLUGIN_RC_OK
+
+def add_message(server, args):
+ '''
+ Captures a message that resulted from a nick highlight.
+ If the message occured in a channel and not a private
+ message window, it is added to the cached list of
+ highlighted messages.
+ '''
+ global _last_index, _messages
+
+ null, context, message = args.split(":",2)
+ sender, msgtype, channel = context.strip().split(" ")
+ nick = sender.split("!")[0]
+
+ if channel.startswith("#"):
+ message = format_message(server, channel, nick, message)
+ _messages.append(message)
+
+ return weechat.PLUGIN_RC_OK
+
+def format_message(server, channel, nick, message):
+ '''
+ Formats messages as (server: #channel) nick | message"
+ '''
+ return "("+ server + ": " + channel + ")" + " " + nick + " | " + message
+
+def cmd_dispatcher(server, args):
+ '''
+ Captures a message that resulted from a nick highlight.
+ If the message occured in a channel and not a private
+ message window, it is added to the cached list of
+ highlighted messages.
+ '''
+ global _arguments
+
+ cmd = args.strip().split(" ")[0]
+ cmd_args = args.replace(cmd,"",1)
+
+ if cmd == "all":
+ return print_all()
+ if cmd == "recent" or cmd == "":
+ return print_since_last()
+ if cmd == "previous":
+ return print_previous(cmd_args)
+ if cmd == "clear":
+ return clear()
+
+ weechat.prnt("Error: Invalid arguments. Use /help to see valid arguments")
+
+ return weechat.PLUGIN_RC_KO
+
+
+weechat.register("highlights", "0.1", "unload", "WeeChat python script")
+weechat.add_message_handler("weechat_highlight","add_message")
+weechat.add_command_handler(
+ "highlights",
+ _function,
+ _description,
+ _arguments,
+ _arguments_description)
+weechat.add_command_handler(
+ "hls",
+ _function,
+ _description,
+ _arguments,
+ _arguments_description)