# Copyright 2015 by David A. Golden. All rights reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# ABOUT
|
|
#
|
|
# atcomplete.pl
|
|
#
|
|
# Adds nick completion when prefixed with '@' for use with IRC gateways
|
|
# for Slack, Flowdock, etc. as these require the '@' to highlight users
|
|
#
|
|
# CONFIG
|
|
#
|
|
# /set plugins.var.perl.atcomplete.enabled
|
|
#
|
|
# HISTORY
|
|
#
|
|
# 0.001 -- xdg, 2016-04-06
|
|
#
|
|
# - initial release
|
|
#
|
|
# REPOSITORY
|
|
#
|
|
# https://github.com/xdg/weechat-atcomplete
|
|
|
|
use strict;
|
|
use warnings;
|
|
my $SCRIPT_NAME = "atcomplete";
|
|
my $VERSION = "0.001";
|
|
|
|
my %options_default = (
|
|
'enabled' => ['on', 'enable completion of nicks starting with @'],
|
|
);
|
|
my %options = ();
|
|
|
|
weechat::register($SCRIPT_NAME, "David A. Golden", $VERSION,
|
|
"Apache2", "atcomplete - do nick completion following @", "", "");
|
|
init_config();
|
|
|
|
weechat::hook_config("plugins.var.perl.$SCRIPT_NAME.*", "toggle_config_by_set", "");
|
|
weechat::hook_completion("nicks", "Add @ prefix to nick completion", "complete_at_nicks", "");
|
|
|
|
sub complete_at_nicks {
|
|
my ($data, $completion_item, $buffer, $completion ) = @_;
|
|
return weechat::WEECHAT_RC_OK() unless $options{enabled} eq 'on';
|
|
|
|
my $nicklist = weechat::infolist_get("nicklist", weechat::current_buffer(), "");
|
|
|
|
if ($nicklist ne "") {
|
|
while (weechat::infolist_next($nicklist)) {
|
|
next unless weechat::infolist_string($nicklist, "type") eq "nick";
|
|
my $nick = weechat::infolist_string($nicklist, "name");
|
|
weechat::hook_completion_list_add($completion, "\@$nick", 1, weechat::WEECHAT_LIST_POS_SORT());
|
|
}
|
|
}
|
|
|
|
weechat::infolist_free($nicklist);
|
|
|
|
return weechat::WEECHAT_RC_OK();
|
|
}
|
|
|
|
sub toggle_config_by_set {
|
|
my ($pointer, $name, $value) = @_;
|
|
$name = substr($name, length("plugins.var.perl.".$SCRIPT_NAME."."), length($name));
|
|
$options{$name} = $value;
|
|
return weechat::WEECHAT_RC_OK();
|
|
}
|
|
|
|
sub init_config {
|
|
my $version = weechat::info_get("version_number", "") || 0;
|
|
foreach my $option (keys %options_default)
|
|
{
|
|
if (!weechat::config_is_set_plugin($option))
|
|
{
|
|
weechat::config_set_plugin($option, $options_default{$option}[0]);
|
|
$options{$option} = $options_default{$option}[0];
|
|
}
|
|
else
|
|
{
|
|
$options{$option} = weechat::config_get_plugin($option);
|
|
}
|
|
if ($version >= 0x00030500)
|
|
{
|
|
weechat::config_set_desc_plugin($option, $options_default{$option}[1]." (default: \"".$options_default{$option}[0]."\")");
|
|
}
|
|
}
|
|
}
|