# 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]."\")"); } } }