mirror of
				https://tildegit.org/ben/dotfiles.git
				synced 2025-08-10 05:02:03 +00:00 
			
		
		
		
	new aliases and upgraded scripts
This commit is contained in:
		
							parent
							
								
									fa2beb7676
								
							
						
					
					
						commit
						08a6fa8739
					
				
							
								
								
									
										3
									
								
								fish/.config/fish/functions/sys.fish
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								fish/.config/fish/functions/sys.fish
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
function sys
 | 
			
		||||
	systemctl $argv
 | 
			
		||||
end
 | 
			
		||||
@ -28,3 +28,5 @@
 | 
			
		||||
	smtpuser = ben
 | 
			
		||||
[alias]
 | 
			
		||||
	lol = log --oneline --graph --decorate --all
 | 
			
		||||
[rerere]
 | 
			
		||||
	enabled = true
 | 
			
		||||
 | 
			
		||||
@ -23,6 +23,7 @@ CL = "buffer clear"
 | 
			
		||||
CLOSE = "buffer close"
 | 
			
		||||
CS = "quote chanserv"
 | 
			
		||||
EXIT = "quit"
 | 
			
		||||
factor = "/exec -sh -o factor $1 | cut -d" " -f 2,3 | tr " " ",""
 | 
			
		||||
flip = "/exec -o flip table $*"
 | 
			
		||||
HS = "quote hostserv"
 | 
			
		||||
IG = "ignore"
 | 
			
		||||
@ -51,6 +52,7 @@ T = "topic"
 | 
			
		||||
tf = "/msg $channel (ノಥ益ಥ)ノ彡┻━┻"
 | 
			
		||||
UB = "unban"
 | 
			
		||||
UMODE = "mode $nick"
 | 
			
		||||
unscramble = "/exec -sh -o curl -s "http://anagramica.com/best/$*" | jq -r '.best[0]'"
 | 
			
		||||
V = "command core version"
 | 
			
		||||
W = "who"
 | 
			
		||||
WC = "window merge"
 | 
			
		||||
 | 
			
		||||
@ -11,10 +11,12 @@
 | 
			
		||||
 | 
			
		||||
[sorting]
 | 
			
		||||
case_sensitive = off
 | 
			
		||||
debug_log = off
 | 
			
		||||
replacements = ""
 | 
			
		||||
rules = ""
 | 
			
		||||
signal_delay = 5
 | 
			
		||||
signals = "buffer_opened buffer_merged buffer_unmerged buffer_renamed"
 | 
			
		||||
sort_limit = 100
 | 
			
		||||
sort_on_config_change = on
 | 
			
		||||
 | 
			
		||||
[v3]
 | 
			
		||||
 | 
			
		||||
@ -121,7 +121,7 @@ autorejoin = off
 | 
			
		||||
autorejoin_delay = 30
 | 
			
		||||
away_check = 0
 | 
			
		||||
away_check_max_nicks = 25
 | 
			
		||||
capabilities = "account-notify,away-notify,cap-notify,chghost,extended-join,invite-notify,multi-prefix,server-time,userhost-in-names"
 | 
			
		||||
capabilities = "account-notify,away-notify,cap-notify,chghost,extended-join,invite-notify,multi-prefix,server-time,userhost-in-names,sasl"
 | 
			
		||||
command = ""
 | 
			
		||||
command_delay = 0
 | 
			
		||||
connection_timeout = 60
 | 
			
		||||
@ -181,7 +181,7 @@ tilde.local_hostname
 | 
			
		||||
tilde.usermode
 | 
			
		||||
tilde.command = "/oper root ${sec.data.tildenetoper}; /msg operserv login ${sec.data.pass}"
 | 
			
		||||
tilde.command_delay
 | 
			
		||||
tilde.autojoin = "#meta,#chaos,#secret-sudoers,#opers,#team,#sudoers,#YourTilde,#bots,#music,#politics,#gopher,#tildeverse,#idlerpg,#tilderadio,#minecraft,#tildelinux,#slbr,#cosmic,#institute,#.tilde,#tildetel,#dcss,#center,#thunix,#theasylum,#minetest,#aussie,#uucp,#projects,#hamradio,#vim,#black,#pink,#modded,#red,#admin,#vh7,#cervezafria,#~ :10:20,:57:60"
 | 
			
		||||
tilde.autojoin = "#meta,#chaos,#opers,#secret-sudoers,#team,#sudoers,#yourtilde,#bots,#music,#politics,#gopher,#tildeverse,#idlerpg,#tilderadio,#minecraft,#tildelinux,#slbr,#cosmic,#institute,#.tilde,#tildetel,#dcss,#center,#thunix,#theasylum,#minetest,#aussie,#uucp,#projects,#hamradio,#vim,#black,#pink,#modded,#admin,#vh7,#cervezafria,#~ :10:20,:57:60"
 | 
			
		||||
tilde.autorejoin
 | 
			
		||||
tilde.autorejoin_delay
 | 
			
		||||
tilde.connection_timeout
 | 
			
		||||
@ -222,7 +222,7 @@ hashbang.local_hostname
 | 
			
		||||
hashbang.usermode
 | 
			
		||||
hashbang.command = "/oper benharri x"
 | 
			
		||||
hashbang.command_delay
 | 
			
		||||
hashbang.autojoin = "#!,#!social,#!os,#!politics,#!support,#!git,#!opers"
 | 
			
		||||
hashbang.autojoin = "#!opers,#!git,#!support,#!politics,#!os,#!social,#!"
 | 
			
		||||
hashbang.autorejoin
 | 
			
		||||
hashbang.autorejoin_delay
 | 
			
		||||
hashbang.connection_timeout
 | 
			
		||||
@ -263,7 +263,7 @@ town.local_hostname
 | 
			
		||||
town.usermode
 | 
			
		||||
town.command
 | 
			
		||||
town.command_delay
 | 
			
		||||
town.autojoin = "#tildetown,#bots,#dumpsterfire,#tildemush,#counting,#movienight,#counting-meta,#heavy,#quiet,#counting-anarchy,#soup,#alc"
 | 
			
		||||
town.autojoin = "#tildetown,#bots,#dumpsterfire,#tildemush,#counting,#movienight,#counting-meta,#heavy,#quiet,#counting-anarchy,#soup,#alc,#queer"
 | 
			
		||||
town.autorejoin
 | 
			
		||||
town.autorejoin_delay
 | 
			
		||||
town.connection_timeout
 | 
			
		||||
@ -345,7 +345,7 @@ sdf.local_hostname
 | 
			
		||||
sdf.usermode
 | 
			
		||||
sdf.command
 | 
			
		||||
sdf.command_delay
 | 
			
		||||
sdf.autojoin = "#sdf,#gopher,#anonradio,#helpdesk"
 | 
			
		||||
sdf.autojoin = "#sdf,#gopher,#anonradio,#helpdesk :kick:20:75"
 | 
			
		||||
sdf.autorejoin
 | 
			
		||||
sdf.autorejoin_delay
 | 
			
		||||
sdf.connection_timeout
 | 
			
		||||
@ -468,7 +468,7 @@ freenode.local_hostname
 | 
			
		||||
freenode.usermode
 | 
			
		||||
freenode.command
 | 
			
		||||
freenode.command_delay
 | 
			
		||||
freenode.autojoin = "#weechat,##oodnet,#lobsters,#lobsters-boil,#gitea,#mastodon,#pleroma,#pleroma-offtopic,#oragono,#weechat-android,#git,#tilde.team,#sr.ht,#cmpwn,#gopherproject,#bitreich-en,#bitbot,#bitreich-de 6:10"
 | 
			
		||||
freenode.autojoin = "#weechat,##oodnet,#lobsters,#lobsters-boil,#gitea,#mastodon,#pleroma,#pleroma-offtopic,#oragono,#weechat-android,#git,#tilde.team,#sr.ht,#cmpwn,#gopherproject,#bitreich-en,#bitbot,#bitreich-de,#ircv3,#gophernicus,##jan6 6:10"
 | 
			
		||||
freenode.autorejoin
 | 
			
		||||
freenode.autorejoin_delay
 | 
			
		||||
freenode.connection_timeout
 | 
			
		||||
@ -563,7 +563,7 @@ inspircd.msg_part
 | 
			
		||||
inspircd.msg_quit
 | 
			
		||||
inspircd.notify
 | 
			
		||||
inspircd.split_msg_max_length
 | 
			
		||||
slashnet.addresses = "concrete.slashnet.org"
 | 
			
		||||
slashnet.addresses = "irc.slashnet.org"
 | 
			
		||||
slashnet.proxy
 | 
			
		||||
slashnet.ipv6
 | 
			
		||||
slashnet.ssl = off
 | 
			
		||||
@ -673,7 +673,7 @@ red.local_hostname
 | 
			
		||||
red.usermode
 | 
			
		||||
red.command
 | 
			
		||||
red.command_delay
 | 
			
		||||
red.autojoin
 | 
			
		||||
red.autojoin = "#red"
 | 
			
		||||
red.autorejoin
 | 
			
		||||
red.autorejoin_delay
 | 
			
		||||
red.connection_timeout
 | 
			
		||||
@ -686,3 +686,44 @@ red.msg_part
 | 
			
		||||
red.msg_quit
 | 
			
		||||
red.notify
 | 
			
		||||
red.split_msg_max_length
 | 
			
		||||
ctrl-c.addresses = "ctrl-c.club"
 | 
			
		||||
ctrl-c.proxy
 | 
			
		||||
ctrl-c.ipv6
 | 
			
		||||
ctrl-c.ssl
 | 
			
		||||
ctrl-c.ssl_cert
 | 
			
		||||
ctrl-c.ssl_priorities
 | 
			
		||||
ctrl-c.ssl_dhkey_size
 | 
			
		||||
ctrl-c.ssl_fingerprint
 | 
			
		||||
ctrl-c.ssl_verify
 | 
			
		||||
ctrl-c.password
 | 
			
		||||
ctrl-c.capabilities
 | 
			
		||||
ctrl-c.sasl_mechanism
 | 
			
		||||
ctrl-c.sasl_username
 | 
			
		||||
ctrl-c.sasl_password
 | 
			
		||||
ctrl-c.sasl_key
 | 
			
		||||
ctrl-c.sasl_timeout
 | 
			
		||||
ctrl-c.sasl_fail
 | 
			
		||||
ctrl-c.autoconnect
 | 
			
		||||
ctrl-c.autoreconnect
 | 
			
		||||
ctrl-c.autoreconnect_delay
 | 
			
		||||
ctrl-c.nicks
 | 
			
		||||
ctrl-c.nicks_alternate
 | 
			
		||||
ctrl-c.username
 | 
			
		||||
ctrl-c.realname
 | 
			
		||||
ctrl-c.local_hostname
 | 
			
		||||
ctrl-c.usermode
 | 
			
		||||
ctrl-c.command
 | 
			
		||||
ctrl-c.command_delay
 | 
			
		||||
ctrl-c.autojoin = "#chat"
 | 
			
		||||
ctrl-c.autorejoin
 | 
			
		||||
ctrl-c.autorejoin_delay
 | 
			
		||||
ctrl-c.connection_timeout
 | 
			
		||||
ctrl-c.anti_flood_prio_high
 | 
			
		||||
ctrl-c.anti_flood_prio_low
 | 
			
		||||
ctrl-c.away_check
 | 
			
		||||
ctrl-c.away_check_max_nicks
 | 
			
		||||
ctrl-c.msg_kick
 | 
			
		||||
ctrl-c.msg_part
 | 
			
		||||
ctrl-c.msg_quit
 | 
			
		||||
ctrl-c.notify
 | 
			
		||||
ctrl-c.split_msg_max_length
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2010-2018 by Nils Görs <weechatter@arcor.de>
 | 
			
		||||
# Copyright (c) 2010-2019 by Nils Görs <weechatter@arcor.de>
 | 
			
		||||
# Copyleft (ɔ) 2013 by oakkitten
 | 
			
		||||
#
 | 
			
		||||
# colors the channel text with nick color and also highlight the whole line
 | 
			
		||||
@ -19,6 +19,7 @@
 | 
			
		||||
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
# history:
 | 
			
		||||
# 3.7: new option "alternate_color" (https://github.com/weechat/scripts/issues/333) (idea by snuffkins)
 | 
			
		||||
# 3.6: new option "own_lines_color" (idea by Linkandzelda)
 | 
			
		||||
#    : add help about "localvar" to option
 | 
			
		||||
# 3.5: new options "highlight_words" and "highlight_words_color" (idea by jokrebel)
 | 
			
		||||
@ -84,7 +85,7 @@
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
my $PRGNAME     = "colorize_lines";
 | 
			
		||||
my $VERSION     = "3.6";
 | 
			
		||||
my $VERSION     = "3.7";
 | 
			
		||||
my $AUTHOR      = "Nils Görs <weechatter\@arcor.de>";
 | 
			
		||||
my $LICENCE     = "GPL3";
 | 
			
		||||
my $DESCR       = "Colorize users' text in chat area with their nick color, including highlights";
 | 
			
		||||
@ -100,19 +101,21 @@ my %config = ("buffers"                 => "all",       # all, channel, query
 | 
			
		||||
              "ignore_tags"             => "irc_ctcp",
 | 
			
		||||
              "highlight_words"         => "off",       # on, off
 | 
			
		||||
              "highlight_words_color"   => "black,darkgray",
 | 
			
		||||
              "alternate_color"         => "",
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
my %help_desc = ("buffers"                  => "Buffer type affected by the script (all/channel/query, default: all)",
 | 
			
		||||
                 "blacklist_buffers"        => "Comma-separated list of channels to be ignored (e.g. freenode.#weechat,*.#python)",
 | 
			
		||||
                 "lines"                    => "Apply nickname color to the lines (off/on/nicks). The latter will limit highlighting to nicknames in option 'nicks'. You can use a localvar to color all lines with a given color (eg: /buffer set localvar_set_colorize_lines *yellow)",
 | 
			
		||||
                 "highlight"                => "Apply highlight color to the highlighted lines (off/on/nicks). The latter will limit highlighting to nicknames in option 'nicks'",
 | 
			
		||||
                 "lines"                    => "Apply nickname color to the lines (off/on/nicks). The latter will limit highlighting to nicknames in option 'nicks'. You can use a localvar to color all lines with a given color (eg: /buffer set localvar_set_colorize_lines *yellow). You'll have enable this option to use alternate_color.",
 | 
			
		||||
                 "highlight"                => "Apply highlight color to the highlighted lines (off/on/nicks). The latter will limit highlighting to nicknames in option 'nicks'. Options 'weechat.color.chat_highlight' and 'weechat.color.chat_highlight_bg' will be used as colors.",
 | 
			
		||||
                 "nicks"                    => "Comma-separater list of nicks (e.g. freenode.cat,*.dog) OR file name starting with '/' (e.g. /file.txt). In the latter case, nicknames will get loaded from that file inside weechat folder (e.g. from ~/.weechat/file.txt). Nicknames in file are newline-separated (e.g. freenode.dog\\n*.cat)",
 | 
			
		||||
                 "own_lines"                => "Apply nickname color to own lines (off/on/only). The latter turns off all other kinds of coloring altogether",
 | 
			
		||||
                 "own_lines_color"          => "this color will be used for own messages. Set an empty value to use weechat.color.chat_nick_self",
 | 
			
		||||
                 "own_lines"                => "Apply nickname color to own lines (off/on/only). The latter turns off all other kinds of coloring altogether. This option has an higher priority than alternate_color option.",
 | 
			
		||||
                 "own_lines_color"          => "this color will be used for own messages. Set an empty value to use weechat.color.chat_nick_self option",
 | 
			
		||||
                 "tags"                     => "Comma-separated list of tags to accept (see /debug tags)",
 | 
			
		||||
                 "ignore_tags"              => "Comma-separated list of tags to ignore (see /debug tags)",
 | 
			
		||||
                 "highlight_words"          => "highlight word(s) in text, matching word(s) in weechat.look.highlight",
 | 
			
		||||
                 "highlight_words_color"    => "color for highlight word in text (fg:bg)",
 | 
			
		||||
                 "highlight_words_color"    => "color for highlight word in text (format: fg,bg)",
 | 
			
		||||
                 "alternate_color"          => "alternate between two colors for messages (format: fg,bg:fg,bg)",
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
my @ignore_tags_array;
 | 
			
		||||
@ -165,19 +168,26 @@ sub colorize_cb
 | 
			
		||||
 | 
			
		||||
    my $color = "";
 | 
			
		||||
    my $my_nick = weechat::buffer_get_string($buf_ptr, "localvar_nick");
 | 
			
		||||
    my $channel_color = weechat::color( get_localvar_colorize_lines($buf_ptr) );
 | 
			
		||||
    my $channel_color = weechat::color( get_localvar($buf_ptr,"localvar_colorize_lines") );
 | 
			
		||||
    my $alternate_last = get_localvar($buf_ptr,"localvar_colorize_lines_alternate");
 | 
			
		||||
    my ($alternate_color1,$alternate_color2) = split(/:/,$config{alternate_color},2) if ( $config{alternate_color} ne "");
 | 
			
		||||
 | 
			
		||||
#    weechat::print("","a: $alternate_color1");
 | 
			
		||||
#    weechat::print("","b: $alternate_color2");
 | 
			
		||||
 | 
			
		||||
    if ($my_nick eq $nick)
 | 
			
		||||
    {
 | 
			
		||||
        # it's our own line
 | 
			
		||||
        # process only if own_lines is "on" or "only" (i.e. not "off")
 | 
			
		||||
        return $string if ($config{own_lines} eq "off") && not ($channel_color);
 | 
			
		||||
        return $string if ($config{own_lines} eq "off") && not ($channel_color) && ( $config{alternate_color} eq "" );
 | 
			
		||||
 | 
			
		||||
        $color = weechat::color($config{own_lines_color});
 | 
			
		||||
        $color = weechat::color("chat_nick_self") if ($config{own_lines_color} eq "");
 | 
			
		||||
 | 
			
		||||
        $color = $channel_color if ($channel_color) && ($config{own_lines} eq "off");
 | 
			
		||||
 | 
			
		||||
        $color = get_alternate_color($buf_ptr,$alternate_last,$alternate_color1,$alternate_color2) if ( $config{alternate_color} ne "" ) &&
 | 
			
		||||
        ( $config{own_lines} eq "off" );
 | 
			
		||||
 | 
			
		||||
    } else {
 | 
			
		||||
        # it's someone else's line
 | 
			
		||||
        # don't process is own_lines are "only"
 | 
			
		||||
@ -195,7 +205,7 @@ sub colorize_cb
 | 
			
		||||
            weechat::string_has_highlight_regex($right_nocolor, weechat::config_string(weechat::config_get("weechat.look.highlight_regex"))) ||
 | 
			
		||||
            weechat::string_has_highlight_regex($right_nocolor, weechat::buffer_get_string($buf_ptr, "highlight_regex"))
 | 
			
		||||
           )) {
 | 
			
		||||
            # that's definitely a highlight! get a hilight color
 | 
			
		||||
            # that's definitely a highlight! get a highlight color
 | 
			
		||||
            # and replace the first occurance of coloring, that'd be nick color
 | 
			
		||||
            $color = weechat::color('chat_highlight');
 | 
			
		||||
            $right =~ s/\31[^\31 ]+?\Q$nick/$color$nick/ if ($action);
 | 
			
		||||
@ -207,6 +217,8 @@ sub colorize_cb
 | 
			
		||||
           ) {
 | 
			
		||||
            $color = weechat::info_get('irc_nick_color', $nick);
 | 
			
		||||
            $color = $channel_color if ($channel_color); 
 | 
			
		||||
 | 
			
		||||
            $color = get_alternate_color($buf_ptr,$alternate_last,$alternate_color1,$alternate_color2) if ( $config{alternate_color} ne "");
 | 
			
		||||
        } else {
 | 
			
		||||
            # oh well
 | 
			
		||||
            return $string if ($config{highlight_words} ne "on");
 | 
			
		||||
@ -244,6 +256,7 @@ sub colorize_cb
 | 
			
		||||
            }
 | 
			
		||||
            }
 | 
			
		||||
    ######################################## inject colors and go!
 | 
			
		||||
 | 
			
		||||
    my $out = "";
 | 
			
		||||
    if ($action) {
 | 
			
		||||
        # remove the first color reset - after * nick
 | 
			
		||||
@ -260,11 +273,31 @@ sub colorize_cb
 | 
			
		||||
    return $out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub get_localvar_colorize_lines
 | 
			
		||||
sub get_localvar
 | 
			
		||||
{
 | 
			
		||||
    my ( $buf_ptr ) = @_;
 | 
			
		||||
    my ( $buf_ptr,$localvar ) = @_;
 | 
			
		||||
    return weechat::buffer_get_string($buf_ptr, "$localvar");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
    return weechat::buffer_get_string($buf_ptr, "localvar_colorize_lines");
 | 
			
		||||
sub set_localvar
 | 
			
		||||
{
 | 
			
		||||
    my ( $buf_ptr,$value ) = @_;
 | 
			
		||||
    weechat::buffer_set($buf_ptr, "localvar_set_colorize_lines_alternate", "$value");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub get_alternate_color
 | 
			
		||||
{
 | 
			
		||||
    my ( $buf_ptr, $alternate_last,$alternate_color1,$alternate_color2 ) = @_;
 | 
			
		||||
    my $color;
 | 
			
		||||
    if (($alternate_last eq "") or ($alternate_last eq "0"))
 | 
			
		||||
    {
 | 
			
		||||
        $color = weechat::color($alternate_color1);
 | 
			
		||||
        set_localvar($buf_ptr,"1");
 | 
			
		||||
    } else {
 | 
			
		||||
        $color = weechat::color($alternate_color2);
 | 
			
		||||
        set_localvar($buf_ptr,"0");
 | 
			
		||||
    }
 | 
			
		||||
    return $color;
 | 
			
		||||
}
 | 
			
		||||
#################################################################################################### config
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -27,6 +27,7 @@ lua.matrix.timeout = "5"
 | 
			
		||||
lua.matrix.typing_notices = "on"
 | 
			
		||||
lua.matrix.user = "ben"
 | 
			
		||||
perl.check_license = "off"
 | 
			
		||||
perl.colorize_lines.alternate_color = ""
 | 
			
		||||
perl.colorize_lines.blacklist_buffers = ""
 | 
			
		||||
perl.colorize_lines.buffers = "all"
 | 
			
		||||
perl.colorize_lines.highlight = "on"
 | 
			
		||||
@ -68,7 +69,7 @@ python.buffer_autoclose.age_limit = "30"
 | 
			
		||||
python.buffer_autoclose.ignore = ""
 | 
			
		||||
python.buffer_autoclose.interval = "1"
 | 
			
		||||
python.check_license = "off"
 | 
			
		||||
python.completion.replace_values = "shrug=>¯\_(ツ)_/¯;;wiki=>https://tilde.team/wiki/;;lenny=>( ͡° ͜ʖ ͡°);;byobu=>https://superuser.com/a/423397/866501;;huh=>(-_-)ゞ゛;;tablefix=>┬─┬ノ( º _ ºノ);;weedoc=>https://weechat.org/files/doc/stable/weechat_user.en.html;;weekeys=>https://weechat.org/files/doc/stable/weechat_user.en.html#key_bindings;;denko=>(´・ω・`);;yuno=>ლ(́ಠ◞益◟ಠ‵ლ);;tf=>(ノಥ益ಥ)ノ彡┻━┻;;tb=>┬─┬ノ( º _ ºノ)"
 | 
			
		||||
python.completion.replace_values = "shrug=>¯\_(ツ)_/¯;;wiki=>https://tilde.team/wiki/;;sword=>o()xxxx[{::::::::::::::::::::::::::::::::::>;;lenny=>( ͡° ͜ʖ ͡°);;byobu=>https://superuser.com/a/423397/866501;;huh=>(-_-)ゞ゛;;tablefix=>┬─┬ノ( º _ ºノ);;weedoc=>https://weechat.org/files/doc/stable/weechat_user.en.html;;weekeys=>https://weechat.org/files/doc/stable/weechat_user.en.html#key_bindings;;denko=>(´・ω・`);;yuno=>ლ(́ಠ◞益◟ಠ‵ლ);;tf=>(ノಥ益ಥ)ノ彡┻━┻;;tb=>┬─┬ノ( º _ ºノ);;ducc=>・゜゜・。。・゜゜\_o< QUACK!"
 | 
			
		||||
python.go.auto_jump = "off"
 | 
			
		||||
python.go.buffer_number = "on"
 | 
			
		||||
python.go.color_name = "black,cyan"
 | 
			
		||||
@ -120,6 +121,7 @@ lua.matrix.read_receipts = "Send read receipts. Note that not sending them will
 | 
			
		||||
lua.matrix.timeout = "Time in seconds until a connection is assumed to be timed out (default: "5")"
 | 
			
		||||
lua.matrix.typing_notices = "Send typing notices when you type (default: "on")"
 | 
			
		||||
lua.matrix.user = "Your homeserver username (default: "")"
 | 
			
		||||
perl.colorize_lines.alternate_color = "alternate between two colors for messages (format: fg,bg:fg,bg)"
 | 
			
		||||
perl.colorize_lines.blacklist_buffers = "Comma-separated list of channels to be ignored (e.g. freenode.#weechat,*.#python)"
 | 
			
		||||
perl.colorize_lines.buffers = "Buffer type affected by the script (all/channel/query, default: all)"
 | 
			
		||||
perl.colorize_lines.highlight = "Apply highlight color to the highlighted lines (off/on/nicks). The latter will limit highlighting to nicknames in option 'nicks'"
 | 
			
		||||
 | 
			
		||||
@ -1 +0,0 @@
 | 
			
		||||
../topicdiff_alt.py
 | 
			
		||||
@ -25,6 +25,11 @@
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Changelog:
 | 
			
		||||
# 3.4:
 | 
			
		||||
#   * Fix rate-limit of sorting to prevent high CPU load and lock-ups.
 | 
			
		||||
#   * Fix bug in parsing empty arguments for info hooks.
 | 
			
		||||
#   * Add debug_log option to aid with debugging.
 | 
			
		||||
#   * Correct a few typos.
 | 
			
		||||
# 3.3:
 | 
			
		||||
#   * Fix the /autosort debug command for unicode.
 | 
			
		||||
#   * Update the default rules to work better with Slack.
 | 
			
		||||
@ -71,14 +76,17 @@ import weechat
 | 
			
		||||
 | 
			
		||||
SCRIPT_NAME     = 'autosort'
 | 
			
		||||
SCRIPT_AUTHOR   = 'Maarten de Vries <maarten@de-vri.es>'
 | 
			
		||||
SCRIPT_VERSION  = '3.3'
 | 
			
		||||
SCRIPT_VERSION  = '3.4'
 | 
			
		||||
SCRIPT_LICENSE  = 'GPL3'
 | 
			
		||||
SCRIPT_DESC     = 'Flexible automatic (or manual) buffer sorting based on eval expressions.'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
config = None
 | 
			
		||||
hooks  = []
 | 
			
		||||
timer  = None
 | 
			
		||||
config             = None
 | 
			
		||||
hooks              = []
 | 
			
		||||
signal_delay_timer = None
 | 
			
		||||
sort_limit_timer   = None
 | 
			
		||||
sort_queued        = False
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Make sure that unicode, bytes and str are always available in python2 and 3.
 | 
			
		||||
# For python 2, str == bytes
 | 
			
		||||
@ -147,12 +155,12 @@ def decode_rules(blob):
 | 
			
		||||
def decode_helpers(blob):
 | 
			
		||||
	parsed = json.loads(blob)
 | 
			
		||||
	if not isinstance(parsed, dict):
 | 
			
		||||
		log('Malformed helpers, expected a JSON encoded dictonary but got a {0}. No helpers have been loaded. Please fix the setting manually.'.format(type(parsed)))
 | 
			
		||||
		log('Malformed helpers, expected a JSON encoded dictionary but got a {0}. No helpers have been loaded. Please fix the setting manually.'.format(type(parsed)))
 | 
			
		||||
		return {}
 | 
			
		||||
 | 
			
		||||
	for key, value in parsed.items():
 | 
			
		||||
		if not isinstance(value, (str, unicode)):
 | 
			
		||||
			log('Helper "{0}" is not a string but a {1}. No helpers have been loaded. Please fix seting manually.'.format(key, type(value)))
 | 
			
		||||
			log('Helper "{0}" is not a string but a {1}. No helpers have been loaded. Please fix setting manually.'.format(key, type(value)))
 | 
			
		||||
			return {}
 | 
			
		||||
	return parsed
 | 
			
		||||
 | 
			
		||||
@ -180,6 +188,7 @@ class Config:
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	default_signal_delay = 5
 | 
			
		||||
	default_sort_limit   = 100
 | 
			
		||||
 | 
			
		||||
	default_signals = 'buffer_opened buffer_merged buffer_unmerged buffer_renamed'
 | 
			
		||||
 | 
			
		||||
@ -196,14 +205,18 @@ class Config:
 | 
			
		||||
		self.helpers          = {}
 | 
			
		||||
		self.signals          = []
 | 
			
		||||
		self.signal_delay     = Config.default_signal_delay,
 | 
			
		||||
		self.sort_limit       = Config.default_sort_limit,
 | 
			
		||||
		self.sort_on_config   = True
 | 
			
		||||
		self.debug_log        = False
 | 
			
		||||
 | 
			
		||||
		self.__case_sensitive = None
 | 
			
		||||
		self.__rules          = None
 | 
			
		||||
		self.__helpers        = None
 | 
			
		||||
		self.__signals        = None
 | 
			
		||||
		self.__signal_delay   = None
 | 
			
		||||
		self.__sort_limit     = None
 | 
			
		||||
		self.__sort_on_config = None
 | 
			
		||||
		self.__debug_log      = None
 | 
			
		||||
 | 
			
		||||
		if not self.config_file:
 | 
			
		||||
			log('Failed to initialize configuration file "{0}".'.format(self.filename))
 | 
			
		||||
@ -273,6 +286,14 @@ class Config:
 | 
			
		||||
			'', '', '', '', '', ''
 | 
			
		||||
		)
 | 
			
		||||
 | 
			
		||||
		self.__sort_limit = weechat.config_new_option(
 | 
			
		||||
			self.config_file, self.sorting_section,
 | 
			
		||||
			'sort_limit', 'integer',
 | 
			
		||||
			'Minimum delay in milliseconds to wait after sorting before signals can trigger a sort again. This is effectively a rate limit on sorting. Keeping signal_delay low while setting this higher can reduce excessive sorting without a long initial delay.',
 | 
			
		||||
			'', 0, 1000, str(Config.default_sort_limit), str(Config.default_sort_limit), 0,
 | 
			
		||||
			'', '', '', '', '', ''
 | 
			
		||||
		)
 | 
			
		||||
 | 
			
		||||
		self.__sort_on_config = weechat.config_new_option(
 | 
			
		||||
			self.config_file, self.sorting_section,
 | 
			
		||||
			'sort_on_config_change', 'boolean',
 | 
			
		||||
@ -281,6 +302,14 @@ class Config:
 | 
			
		||||
			'', '', '', '', '', ''
 | 
			
		||||
		)
 | 
			
		||||
 | 
			
		||||
		self.__debug_log = weechat.config_new_option(
 | 
			
		||||
			self.config_file, self.sorting_section,
 | 
			
		||||
			'debug_log', 'boolean',
 | 
			
		||||
			'If enabled, print more debug messages. Not recommended for normal usage.',
 | 
			
		||||
			'', 0, 0, 'off', 'off', 0,
 | 
			
		||||
			'', '', '', '', '', ''
 | 
			
		||||
		)
 | 
			
		||||
 | 
			
		||||
		if weechat.config_read(self.config_file) != weechat.WEECHAT_RC_OK:
 | 
			
		||||
			log('Failed to load configuration file.')
 | 
			
		||||
 | 
			
		||||
@ -302,7 +331,9 @@ class Config:
 | 
			
		||||
		self.helpers        = decode_helpers(helpers_blob)
 | 
			
		||||
		self.signals        = signals_blob.split()
 | 
			
		||||
		self.signal_delay   = weechat.config_integer(self.__signal_delay)
 | 
			
		||||
		self.sort_limit     = weechat.config_integer(self.__sort_limit)
 | 
			
		||||
		self.sort_on_config = weechat.config_boolean(self.__sort_on_config)
 | 
			
		||||
		self.debug_log      = weechat.config_boolean(self.__debug_log)
 | 
			
		||||
 | 
			
		||||
	def save_rules(self, run_callback = True):
 | 
			
		||||
		''' Save the current rules to the configuration. '''
 | 
			
		||||
@ -317,10 +348,12 @@ def pad(sequence, length, padding = None):
 | 
			
		||||
	''' Pad a list until is has a certain length. '''
 | 
			
		||||
	return sequence + [padding] * max(0, (length - len(sequence)))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def log(message, buffer = 'NULL'):
 | 
			
		||||
	weechat.prnt(buffer, 'autosort: {0}'.format(message))
 | 
			
		||||
 | 
			
		||||
def debug(message, buffer = 'NULL'):
 | 
			
		||||
	if config.debug_log:
 | 
			
		||||
		weechat.prnt(buffer, 'autosort: debug: {0}'.format(message))
 | 
			
		||||
 | 
			
		||||
def get_buffers():
 | 
			
		||||
	''' Get a list of all the buffers in weechat. '''
 | 
			
		||||
@ -396,18 +429,23 @@ def split_args(args, expected, optional = 0):
 | 
			
		||||
		raise HumanReadableError('Expected at least {0} arguments, got {1}.'.format(expected, len(split)))
 | 
			
		||||
	return split[:-1] + pad(split[-1].split(' ', optional), optional + 1, '')
 | 
			
		||||
 | 
			
		||||
def do_sort():
 | 
			
		||||
def do_sort(verbose = False):
 | 
			
		||||
	start = perf_counter()
 | 
			
		||||
 | 
			
		||||
	hdata, buffers = get_buffers()
 | 
			
		||||
	buffers = merge_buffer_list(buffers)
 | 
			
		||||
	buffers = sort_buffers(hdata, buffers, config.rules, config.helpers, config.case_sensitive)
 | 
			
		||||
	apply_buffer_order(buffers)
 | 
			
		||||
 | 
			
		||||
	elapsed = perf_counter() - start
 | 
			
		||||
	if verbose:
 | 
			
		||||
		log("Finished sorting buffers in {0:.4f} seconds.".format(elapsed))
 | 
			
		||||
	else:
 | 
			
		||||
		debug("Finished sorting buffers in {0:.4f} seconds.".format(elapsed))
 | 
			
		||||
 | 
			
		||||
def command_sort(buffer, command, args):
 | 
			
		||||
	''' Sort the buffers and print a confirmation. '''
 | 
			
		||||
	start = perf_counter()
 | 
			
		||||
	do_sort()
 | 
			
		||||
	elapsed = perf_counter() - start
 | 
			
		||||
	log("Finished sorting buffers in {0:.4f} seconds.".format(elapsed))
 | 
			
		||||
	do_sort(True)
 | 
			
		||||
	return weechat.WEECHAT_RC_OK
 | 
			
		||||
 | 
			
		||||
def command_debug(buffer, command, args):
 | 
			
		||||
@ -429,7 +467,7 @@ def command_debug(buffer, command, args):
 | 
			
		||||
		fullname = ensure_str(fullname)
 | 
			
		||||
		result = [ensure_str(x) for x in result]
 | 
			
		||||
		log('{0}: {1}'.format(fullname, result))
 | 
			
		||||
	log('Computing evalutaion results took {0:.4f} seconds.'.format(elapsed))
 | 
			
		||||
	log('Computing evaluation results took {0:.4f} seconds.'.format(elapsed))
 | 
			
		||||
 | 
			
		||||
	return weechat.WEECHAT_RC_OK
 | 
			
		||||
 | 
			
		||||
@ -574,7 +612,7 @@ def command_helper_swap(buffer, command, args):
 | 
			
		||||
	return weechat.WEECHAT_RC_OK
 | 
			
		||||
 | 
			
		||||
def call_command(buffer, command, args, subcommands):
 | 
			
		||||
	''' Call a subccommand from a dictionary. '''
 | 
			
		||||
	''' Call a subcommand from a dictionary. '''
 | 
			
		||||
	subcommand, tail = pad(args.split(' ', 1), 2, '')
 | 
			
		||||
	subcommand = subcommand.strip()
 | 
			
		||||
	if (subcommand == ''):
 | 
			
		||||
@ -591,21 +629,78 @@ def call_command(buffer, command, args, subcommands):
 | 
			
		||||
	log('{0}: command not found'.format(' '.join(command)))
 | 
			
		||||
	return weechat.WEECHAT_RC_ERROR
 | 
			
		||||
 | 
			
		||||
def on_signal(*args, **kwargs):
 | 
			
		||||
	global timer
 | 
			
		||||
	''' Called whenever the buffer list changes. '''
 | 
			
		||||
	if timer is not None:
 | 
			
		||||
		weechat.unhook(timer)
 | 
			
		||||
		timer = None
 | 
			
		||||
	weechat.hook_timer(config.signal_delay, 0, 1, "on_timeout", "")
 | 
			
		||||
def on_signal(data, signal, signal_data):
 | 
			
		||||
	global signal_delay_timer
 | 
			
		||||
	global sort_queued
 | 
			
		||||
 | 
			
		||||
	# If the sort limit timeout is started, we're in the hold-off time after sorting, just queue a sort.
 | 
			
		||||
	if sort_limit_timer is not None:
 | 
			
		||||
		if sort_queued:
 | 
			
		||||
			debug('Signal {0} ignored, sort limit timeout is active and sort is already queued.'.format(signal))
 | 
			
		||||
		else:
 | 
			
		||||
			debug('Signal {0} received but sort limit timeout is active, sort is now queued.'.format(signal))
 | 
			
		||||
		sort_queued = True
 | 
			
		||||
		return weechat.WEECHAT_RC_OK
 | 
			
		||||
 | 
			
		||||
	# If the signal delay timeout is started, a signal was recently received, so ignore this signal.
 | 
			
		||||
	if signal_delay_timer is not None:
 | 
			
		||||
		debug('Signal {0} ignored, signal delay timeout active.'.format(signal))
 | 
			
		||||
		return weechat.WEECHAT_RC_OK
 | 
			
		||||
 | 
			
		||||
	# Otherwise, start the signal delay timeout.
 | 
			
		||||
	debug('Signal {0} received, starting signal delay timeout of {1} ms.'.format(signal, config.signal_delay))
 | 
			
		||||
	weechat.hook_timer(config.signal_delay, 0, 1, "on_signal_delay_timeout", "")
 | 
			
		||||
	return weechat.WEECHAT_RC_OK
 | 
			
		||||
 | 
			
		||||
def on_timeout(pointer, remaining_calls):
 | 
			
		||||
	global timer
 | 
			
		||||
	timer = None
 | 
			
		||||
def on_signal_delay_timeout(pointer, remaining_calls):
 | 
			
		||||
	""" Called when the signal_delay_timer triggers. """
 | 
			
		||||
	global signal_delay_timer
 | 
			
		||||
	global sort_limit_timer
 | 
			
		||||
	global sort_queued
 | 
			
		||||
 | 
			
		||||
	signal_delay_timer = None
 | 
			
		||||
 | 
			
		||||
	# If the sort limit timeout was started, we're still in the no-sort period, so just queue a sort.
 | 
			
		||||
	if sort_limit_timer is not None:
 | 
			
		||||
		debug('Signal delay timeout expired, but sort limit timeout is active, sort is now queued.')
 | 
			
		||||
		sort_queued = True
 | 
			
		||||
		return weechat.WEECHAT_RC_OK
 | 
			
		||||
 | 
			
		||||
	# Time to sort!
 | 
			
		||||
	debug('Signal delay timeout expired, starting sort.')
 | 
			
		||||
	do_sort()
 | 
			
		||||
 | 
			
		||||
	# Start the sort limit timeout if not disabled.
 | 
			
		||||
	if config.sort_limit > 0:
 | 
			
		||||
		debug('Starting sort limit timeout of {0} ms.'.format(config.sort_limit))
 | 
			
		||||
		sort_limit_timer = weechat.hook_timer(config.sort_limit, 0, 1, "on_sort_limit_timeout", "")
 | 
			
		||||
 | 
			
		||||
	return weechat.WEECHAT_RC_OK
 | 
			
		||||
 | 
			
		||||
def on_sort_limit_timeout(pointer, remainin_calls):
 | 
			
		||||
	""" Called when de sort_limit_timer triggers. """
 | 
			
		||||
	global sort_limit_timer
 | 
			
		||||
	global sort_queued
 | 
			
		||||
 | 
			
		||||
	# If no signal was received during the timeout, we're done.
 | 
			
		||||
	if not sort_queued:
 | 
			
		||||
		debug('Sort limit timeout expired without receiving a signal.')
 | 
			
		||||
		sort_limit_timer = None
 | 
			
		||||
		return weechat.WEECHAT_RC_OK
 | 
			
		||||
 | 
			
		||||
	# Otherwise it's time to sort.
 | 
			
		||||
	debug('Signal received during sort limit timeout, starting queued sort.')
 | 
			
		||||
	do_sort()
 | 
			
		||||
	sort_queued = False
 | 
			
		||||
 | 
			
		||||
	# Start the sort limit timeout again if not disabled.
 | 
			
		||||
	if config.sort_limit > 0:
 | 
			
		||||
		debug('Starting sort limit timeout of {0} ms.'.format(config.sort_limit))
 | 
			
		||||
		sort_limit_timer = weechat.hook_timer(config.sort_limit, 0, 1, "on_sort_limit_timeout", "")
 | 
			
		||||
 | 
			
		||||
	return weechat.WEECHAT_RC_OK
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def apply_config():
 | 
			
		||||
	# Unhook all signals and hook the new ones.
 | 
			
		||||
	for hook in hooks:
 | 
			
		||||
@ -614,6 +709,7 @@ def apply_config():
 | 
			
		||||
		hooks.append(weechat.hook_signal(signal, 'on_signal', ''))
 | 
			
		||||
 | 
			
		||||
	if config.sort_on_config:
 | 
			
		||||
		debug('Sorting because configuration changed.')
 | 
			
		||||
		do_sort()
 | 
			
		||||
 | 
			
		||||
def on_config_changed(*args, **kwargs):
 | 
			
		||||
@ -624,7 +720,7 @@ def on_config_changed(*args, **kwargs):
 | 
			
		||||
	return weechat.WEECHAT_RC_OK
 | 
			
		||||
 | 
			
		||||
def parse_arg(args):
 | 
			
		||||
	if not args: return None, None
 | 
			
		||||
	if not args: return '', None
 | 
			
		||||
 | 
			
		||||
	result  = ''
 | 
			
		||||
	escaped = False
 | 
			
		||||
@ -643,10 +739,11 @@ def parse_args(args, max = None):
 | 
			
		||||
	result = []
 | 
			
		||||
	i = 0
 | 
			
		||||
	while max is None or i < max:
 | 
			
		||||
		i += 1
 | 
			
		||||
		arg, args = parse_arg(args)
 | 
			
		||||
		if arg is None: break
 | 
			
		||||
		result.append(arg)
 | 
			
		||||
		i += 1
 | 
			
		||||
		if args is None: break
 | 
			
		||||
	return result, args
 | 
			
		||||
 | 
			
		||||
def on_info_replace(pointer, name, arguments):
 | 
			
		||||
 | 
			
		||||
@ -1,70 +0,0 @@
 | 
			
		||||
import weechat
 | 
			
		||||
import diff_match_patch
 | 
			
		||||
import re
 | 
			
		||||
 | 
			
		||||
weechat.register('topicdiff_alt', 'Juerd <#####@juerd.nl>', '1.01', 'PD', "Announce topic with changes highlighted", '', '')
 | 
			
		||||
 | 
			
		||||
def topic(data, tags, msg):
 | 
			
		||||
    server = tags.split(",")[0]
 | 
			
		||||
 | 
			
		||||
    match = re.search(r':(\S+)\s+TOPIC\s+(\S+)\s+:(.*)', msg)
 | 
			
		||||
 | 
			
		||||
    if not match:
 | 
			
		||||
        return weechat.WEECHAT_RC_ERROR
 | 
			
		||||
 | 
			
		||||
    usermask, channel, newtopic = match.groups()
 | 
			
		||||
    nick, host = usermask.split("!", 1)
 | 
			
		||||
 | 
			
		||||
    buffer = weechat.buffer_search("irc", server + "." + channel)
 | 
			
		||||
    weechat.prnt("", server + "." + channel)
 | 
			
		||||
 | 
			
		||||
    if not buffer:
 | 
			
		||||
        return weechat.WEECHAT_RC_ERROR
 | 
			
		||||
 | 
			
		||||
    oldtopic = weechat.buffer_get_string(buffer, "title")
 | 
			
		||||
    if oldtopic == None:
 | 
			
		||||
        oldtopic = ""
 | 
			
		||||
 | 
			
		||||
    dmp = diff_match_patch.diff_match_patch()
 | 
			
		||||
    diff = dmp.diff_main(oldtopic, newtopic)
 | 
			
		||||
    dmp.diff_cleanupEfficiency(diff)
 | 
			
		||||
 | 
			
		||||
    topic = ""
 | 
			
		||||
 | 
			
		||||
    color_reset = weechat.color("reset")
 | 
			
		||||
    color_ins = weechat.color(weechat.config_get_plugin("color_ins"))
 | 
			
		||||
    color_del = weechat.color(weechat.config_get_plugin("color_del"))
 | 
			
		||||
 | 
			
		||||
    for chunk in diff:
 | 
			
		||||
        changed, text = chunk
 | 
			
		||||
 | 
			
		||||
        topic += "%s%s%s" % (
 | 
			
		||||
            # 0 (unchanged), 1 (added), -1 (removed)
 | 
			
		||||
            ["", color_ins, color_del][changed],
 | 
			
		||||
            text,
 | 
			
		||||
            ["", color_reset, color_reset][changed]
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    weechat.prnt_date_tags(buffer, 0, "irc_topicdiff",
 | 
			
		||||
        "%s%s%s%s has changed topic for %s%s%s: %s" % (
 | 
			
		||||
        weechat.prefix("network"),
 | 
			
		||||
        weechat.color(weechat.info_get("irc_nick_color", nick)) \
 | 
			
		||||
            if weechat.config_boolean("irc.look.color_nicks_in_server_messages") \
 | 
			
		||||
            else weechat.color("chat_nick"),
 | 
			
		||||
        nick,
 | 
			
		||||
        color_reset,
 | 
			
		||||
        weechat.color("chat_channel"),
 | 
			
		||||
        channel,
 | 
			
		||||
        color_reset,
 | 
			
		||||
        topic
 | 
			
		||||
    ))
 | 
			
		||||
 | 
			
		||||
    return weechat.WEECHAT_RC_OK
 | 
			
		||||
 | 
			
		||||
weechat.hook_signal("*,irc_in_topic", "topic", "")
 | 
			
		||||
 | 
			
		||||
if not weechat.config_is_set_plugin("color_ins"):
 | 
			
		||||
    weechat.config_set_plugin("color_ins", "lightcyan")
 | 
			
		||||
 | 
			
		||||
if not weechat.config_is_set_plugin("color_del"):
 | 
			
		||||
    weechat.config_set_plugin("color_del", "darkgray")
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user