: { # $EPIC: activity,v 1.2 2007/05/09 00:20:35 jnelson Exp $ # activity -- this script introduces two new statusbar items. # the first one is a different activity bar, beside window's refnum it also # includes abbreviation of window's query or channel. it assigns different # types of activity levels to different channel events, i.e. JOIN or MODE # events will make channel's name look dim, PUBLIC or ACTION will make it # look normal and query ACTIONs and MSGS will make it look bold. if you # need to increase the activity level after some custom events, use # function named _proc_act_increase. it takes window's refnum as the first # argument and level as the second. to use that statusbar item, place %2 in # one of your STATUS_FORMAT* lines. # the second one is almost the same as the first one, except that it's # an indicator of the current window, not hidden ones with activity. it, # too, displays differently whether window has a channel or a query or not. # to use it, place %E on statusbar. # there are some new variables: # /set chanact_length , length of abbreviated name on %2 indicator # /set winname_length , length of abbreviated name on %E indicator }; package activity; if (word(2 $loadinfo()) != [pf]) { load -pf $word(1 $loadinfo()); return; }; addset chanact_length int; addset winname_length int; set chanact_length 4; set winname_length 6; alias _proc_act_default_formats { @ windowctl(SET $0 ACTIVITY_FORMAT 1 $$_proc_act_check($winnum() $getset(winname_length))); @ windowctl(SET $0 CURRENT_ACTIVITY 1); }; alias _proc_act_check { if ((:chan = winchan($0)) != []) { return $0:$stripcrap(ALL,ESCAPE $left($1 $chan)); } elsif ((:qry = winquery($0)) != []) { return $0:$stripcrap(ALL,ESCAPE $left($1 $qry)); } else { return $0; }; }; alias _proc_act_increase { if (((windowctl(GET $0 CURRENT_ACTIVITY) < [$1]) && ([$0] != inputwin())) || ([$1] == 1)) { @ windowctl(SET $0 CURRENT_ACTIVITY $1); _proc_act_get; }; }; alias _proc_act_get { @ :line = []; fe ($numsort($winrefs())) win { if ((:act = windowctl(GET $win CURRENT_ACTIVITY)) > 1) { switch ($act) { (4) { push line $_proc_act_check($win $getset(chanact_length)); }; (3) { push line $_proc_act_check($win $getset(chanact_length)); }; (2) { push line 14$_proc_act_check($win $getset(chanact_length)); }; }; }; }; if (strlen($line)) { ^set status_user2 [act.$line]; } else { ^set -status_user2; }; }; ^on #-window 28 "*" { @ :num = 2; @ :info = outputinfo(); switch ($word(0 $info)) { (MSGS) { @ :num = 4; }; (ACTIONS) { if (ischannel($word(1 $info))) { @ :num = 3; } else { @ :num = 4; }; }; (PUBLICS) { @ :num = 3; }; }; _proc_act_increase $0 $num; }; ^on #-switch_windows 28 "*" { unless (switching || inputwin() != [$3]) { _proc_act_increase $3 1; }; }; ^on -window_create * { _proc_act_default_formats $0; }; fe ($winrefs()) win { _proc_act_default_formats $win; }; alias inputwin { ^local bigwin,bigcount,c; for i in ($windowctl(REFNUMS)) { if ((c = windowctl(GET $i PRIORITY)) > bigcount) { @bigwin = i; @bigcount = c; }; }; return $bigwin; }; #weirdo'2k5