From 2e3411ed7741c8d4cfac721de7689dd7996858a0 Mon Sep 17 00:00:00 2001 From: Pablo Báez Date: Thu, 6 Oct 2016 17:47:36 -0300 Subject: Makes the script to count logical characters. Otherwise the cursor isn't moved to the end when special characters are used in the input field. --- scripts/aspell.pl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/aspell.pl b/scripts/aspell.pl index b6a254e..426dbd9 100644 --- a/scripts/aspell.pl +++ b/scripts/aspell.pl @@ -85,6 +85,7 @@ See README file. use warnings; use strict; use Data::Dumper; +use Encode 'decode'; use Irssi; use Irssi::Irc; use Irssi::TextUI; @@ -391,7 +392,8 @@ sub spellcheck_finish { # stick the cursor at the end of the input line? my $input = _input(); - my $end = length($input); + my $charset = lc Irssi::settings_get_str('term_charset'); + my $end = length(decode $charset=>$input); Irssi::gui_input_set_pos($end); } -- cgit v1.2.3 From f54128f189c0896175336846fe8ee3b1eb48b26e Mon Sep 17 00:00:00 2001 From: Pablo Báez Date: Thu, 6 Oct 2016 17:55:58 -0300 Subject: Jump to next misspelled word when pressing SPC --- scripts/aspell.pl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/aspell.pl b/scripts/aspell.pl index 426dbd9..71369f3 100644 --- a/scripts/aspell.pl +++ b/scripts/aspell.pl @@ -108,7 +108,7 @@ if ($@ && $@ =~ m/Can't locate/) { } -our $VERSION = '1.6.1'; +our $VERSION = '1.6.2'; our %IRSSI = ( authors => 'Isaac Good (yitz_), Tom Feist (shabble)', contact => 'irssi@isaacgood.com, shabble+irssi@metavore.org', @@ -307,6 +307,7 @@ sub process_word { } else { print_suggestions(); + highlight_incorrect_word($word_obj); } } else { -- cgit v1.2.3 From 05a76b2e0f8baf489f667583f8f3972e7927d67c Mon Sep 17 00:00:00 2001 From: Alex Checca Date: Wed, 26 Oct 2016 17:44:45 -0400 Subject: various bugfixes from many months of usage --- scripts/8-ball.pl | 0 scripts/Cirssi.pl | 0 scripts/UNIBG-autoident.pl | 0 scripts/accent.pl | 0 scripts/accountname.pl | 0 scripts/act.pl | 0 scripts/act_fifo.pl | 0 scripts/active_notice.pl | 0 scripts/active_notify.pl | 0 scripts/activity_file.pl | 0 scripts/ai.pl | 0 scripts/aidle.pl | 0 scripts/akftp.pl | 0 scripts/alame.pl | 0 scripts/amarok_ssh.pl | 0 scripts/amaroknp.pl | 0 scripts/anotherway.pl | 0 scripts/antiplenk.pl | 0 scripts/apm.pl | 0 scripts/armeija.pl | 0 scripts/ascii.pl | 0 scripts/aspell_complete.pl | 0 scripts/auth_quakenet.pl | 0 scripts/auto_whois.pl | 0 scripts/autoaway.pl | 0 scripts/autochannel.pl | 0 scripts/autoclearinput.pl | 0 scripts/autocycle.pl | 0 scripts/autolimit.pl | 0 scripts/autoop.pl | 0 scripts/autoopper.pl | 0 scripts/autorealname.pl | 0 scripts/autorejoin.pl | 0 scripts/autorejoinpunish.pl | 0 scripts/autoreminder.pl | 0 scripts/autostuff.pl | 0 scripts/autoversion.pl | 0 scripts/autovoice.pl | 0 scripts/autowhois.pl | 0 scripts/autowhois_simple.pl | 0 scripts/autowrap.pl | 0 scripts/away.pl | 0 scripts/away2web.pl | 0 scripts/away_hilight_notice.pl | 0 scripts/away_verbose.pl | 0 scripts/awaybar.pl | 0 scripts/awaylogcnt.pl | 0 scripts/awayproxy.pl | 0 scripts/babelirc.pl | 0 scripts/badword.pl | 0 scripts/ban.pl | 0 scripts/bandwidth.pl | 0 scripts/bansearch.pl | 0 scripts/bantime.pl | 0 scripts/beep.pl | 0 scripts/beep_beep.pl | 0 scripts/beepaway.pl | 0 scripts/bestoiber.pl | 0 scripts/bgta.pl | 0 scripts/binary.pl | 0 scripts/binary_time.pl | 0 scripts/bitlbee_blist.pl | 0 scripts/bitlbee_join_notice.pl | 0 scripts/bitlbee_nick_change.pl | 0 scripts/bitlbee_tab_completion.pl | 0 scripts/bitlbee_timestamp.pl | 0 scripts/bitlbee_typing_notice.pl | 0 scripts/blowjob.pl | 0 scripts/bmi.pl | 0 scripts/buf.pl | 0 scripts/calc.pl | 0 scripts/callerid.pl | 0 scripts/cap_sasl.pl | 0 scripts/cddb.pl | 0 scripts/centericq.pl | 0 scripts/cgrep.pl | 0 scripts/chanact.pl | 0 scripts/chanfull.pl | 0 scripts/chanfull_duden.pl | 0 scripts/chanpeak.pl | 0 scripts/chansearch.pl | 0 scripts/chanshare.pl | 0 scripts/chansort.pl | 0 scripts/chansync.pl | 0 scripts/chops.pl | 0 scripts/cleanpublic.pl | 0 scripts/clipboard.pl | 0 scripts/cloneprot.pl | 0 scripts/clones.pl | 0 scripts/clones_scanner.pl | 0 scripts/colorkick.pl | 0 scripts/colorswap.pl | 0 scripts/complete_lastspoke.pl | 0 scripts/connectcmd.pl | 0 scripts/countdown.pl | 0 scripts/country.pl | 0 scripts/cp1250_kick.pl | 0 scripts/crapbuster.pl | 0 scripts/credstore.pl | 0 scripts/cron.pl | 0 scripts/cwho.pl | 0 scripts/dancer_forwardfix.pl | 0 scripts/dancer_hide_477.pl | 0 scripts/dau.pl | 0 scripts/dcc_ip.pl | 0 scripts/dccmove.pl | 0 scripts/dccself.pl | 0 scripts/dccstat.pl | 0 scripts/defaultchanmode.pl | 0 scripts/dejunk.pl | 0 scripts/deliciousurl.pl | 0 scripts/df.pl | 0 scripts/dice.pl | 0 scripts/dice_concise.pl | 0 scripts/dictcomplete.pl | 0 scripts/dispatch.pl | 0 scripts/dns.pl | 0 scripts/dnsspam.pl | 0 scripts/doc.pl | 0 scripts/doublefilter.pl | 0 scripts/dr_who.pl | 0 scripts/efnetorg.pl | 0 scripts/elist.pl | 0 scripts/eliza.pl | 0 scripts/email_msgs.pl | 0 scripts/email_privmsgs.pl | 0 scripts/emaildb1.0.pl | 0 scripts/emo.pl | 0 scripts/events.pl | 0 scripts/exec_clean.pl | 0 scripts/extaway.pl | 0 scripts/fakectcp.pl | 0 scripts/fcountry.pl | 0 scripts/figlet.pl | 0 scripts/file.pl | 0 scripts/find.pl | 0 scripts/findbot.pl | 0 scripts/fleech.pl | 0 scripts/fnotify.pl | 0 scripts/follow.pl | 0 scripts/foo.pl | 0 scripts/foreach_user.pl | 0 scripts/fortune.pl | 0 scripts/forward.pl | 0 scripts/freenode_filter.pl | 0 scripts/friends_peder.pl | 0 scripts/friends_shasta.pl | 0 scripts/frm_outgmsgs.pl | 0 scripts/fserve.pl | 0 scripts/fuckem.pl | 0 scripts/getop.pl | 0 scripts/gimmie.pl | 0 scripts/go.pl | 0 scripts/go2.pl | 0 scripts/google.pl | 0 scripts/gpgvalidator.pl | 0 scripts/greetignore.pl | 0 scripts/grep.pl | 0 scripts/grepbans.pl | 0 scripts/gsi.pl | 0 scripts/gtrans.pl | 0 scripts/guts.pl | 0 scripts/hddtemp.pl | 0 scripts/hello.pl | 0 scripts/hide.pl | 0 scripts/hideauth.pl | 0 scripts/highlite.pl | 0 scripts/hignore.pl | 0 scripts/hilightwin.pl | 0 scripts/hipchat_complete.pl | 0 scripts/history_search.pl | 0 scripts/hitcount.pl | 0 scripts/hl.pl | 0 scripts/hlbot.pl | 0 scripts/hostname.pl | 0 scripts/iMPD.pl | 0 scripts/identify-md5.pl | 0 scripts/idletime.pl | 0 scripts/idonkey.pl | 0 scripts/ignore_log.pl | 0 scripts/ignoreoc.pl | 0 scripts/ignorsula.pl | 0 scripts/il.pl | 0 scripts/imdb.pl | 0 scripts/intjoin.pl | 0 scripts/invitejoin.pl | 0 scripts/ipupdate.pl | 0 scripts/iraident.pl | 0 scripts/irc_chess.pl | 0 scripts/irccomplete.pl | 0 scripts/ircgallery.pl | 0 scripts/ircgmessagenotify.pl | 0 scripts/ircops.pl | 0 scripts/ircsec.pl | 0 scripts/irssi-feed.pl | 0 scripts/irssiBlaster.pl | 0 scripts/irssi_logger.pl | 0 scripts/irssiq.pl | 0 scripts/isbanned.pl | 0 scripts/isdn.pl | 0 scripts/itime.pl | 0 scripts/ixmmsa.pl | 0 scripts/joininfo.pl | 0 scripts/kban-referrals.pl | 0 scripts/kblamehost.pl | 0 scripts/keepnick.pl | 0 scripts/kenny.pl | 0 scripts/kernel.pl | 0 scripts/keybinds.pl | 0 scripts/kicks.pl | 0 scripts/kill_fake_gets.pl | 0 scripts/kills.pl | 0 scripts/kline_warning.pl | 0 scripts/l33tmusic.pl | 0 scripts/lastfm.pl | 0 scripts/lastspoke.pl | 0 scripts/len.pl | 0 scripts/leodict.pl | 0 scripts/levelclear.pl | 0 scripts/licq.pl | 0 scripts/linkchan.pl | 0 scripts/listen.pl | 0 scripts/loadavg.pl | 0 scripts/localize.pl | 0 scripts/log2ansi.pl | 0 scripts/logcompress.pl | 0 scripts/ls.pl | 0 scripts/lwho.pl | 0 scripts/mail.pl | 0 scripts/mailcheck_imap.pl | 0 scripts/mailcheck_mbox_flux.pl | 0 scripts/mailcheck_pop3_kimmo.pl | 0 scripts/mailcount.pl | 0 scripts/mangle.pl | 0 scripts/map.pl | 0 scripts/mass_hilight_blocker.pl | 0 scripts/mg.pl | 0 scripts/miodek.pl | 0 scripts/mirc_colour_popup.pl | 0 scripts/mkick.pl | 0 scripts/mkshorterlink.pl | 0 scripts/mldonkey_bandwidth.pl | 0 scripts/mlock.pl | 0 scripts/modelist-r.pl | 0 scripts/modelist.pl | 0 scripts/monitor.pl | 0 scripts/mood.pl | 0 scripts/morse.pl | 0 scripts/mouse.pl | 0 scripts/mpd.pl | 0 scripts/mpg123.pl | 0 scripts/mqtt-notify.pl | 0 scripts/msg2notice.pl | 0 scripts/multipaste.pl | 0 scripts/my_beep.pl | 0 scripts/mygoogle.pl | 0 scripts/myimdb.pl | 0 scripts/mysqlurllogger.pl | 0 scripts/nact.pl | 0 scripts/netswitch.pl | 0 scripts/news.pl | 0 scripts/newsline.pl | 0 scripts/nickban.pl | 0 scripts/nickcolor.pl | 0 scripts/nickignore.pl | 0 scripts/nickmix-c0ffee.pl | 0 scripts/nickmix_pasky.pl | 0 scripts/nickserv.pl | 0 scripts/niq.pl | 0 scripts/nm.pl | 0 scripts/nocaps.pl | 0 scripts/nocollide.pl | 0 scripts/noisyquery.pl | 0 scripts/nopl.pl | 0 scripts/norepeat.pl | 0 scripts/notes.pl | 0 scripts/noteserve.pl | 0 scripts/noticelogic.pl | 0 scripts/noticemove.pl | 0 scripts/notonline.pl | 0 scripts/null.pl | 0 scripts/ogg123.pl | 0 scripts/oidenty.pl | 0 scripts/on.pl | 0 scripts/ontv.pl | 0 scripts/oops.pl | 0 scripts/oopsie.pl | 0 scripts/openurl.pl | 0 scripts/operit.pl | 0 scripts/operview.pl | 0 scripts/opnotice.pl | 0 scripts/opnotify.pl | 0 scripts/orphamp.pl | 0 scripts/osd.pl | 0 scripts/ownage.pl | 0 scripts/page-c0ffee.pl | 0 scripts/page_reeler.pl | 0 scripts/pager.pl | 0 scripts/pangotext.pl | 0 scripts/paste-derwan.pl | 0 scripts/paste_derwan.pl | 0 scripts/paste_huggie.pl | 0 scripts/paste_kimmoke.pl | 0 scripts/pelix.pl | 0 scripts/people.pl | 0 scripts/per_window_prompt.pl | 0 scripts/pggb_sound.pl | 0 scripts/poison.pl | 0 scripts/postpone.pl | 0 scripts/ppl.pl | 0 scripts/procmaillog.pl | 0 scripts/query.pl | 0 scripts/queryresume.pl | 0 scripts/quitmsg.pl | 0 scripts/quitrand.pl | 0 scripts/quiz.pl | 0 scripts/quizgr.pl | 0 scripts/quizmaster-fr.pl | 0 scripts/quizmaster.pl | 0 scripts/rainbow.pl | 0 scripts/randaway.pl | 0 scripts/randname.pl | 0 scripts/redirect.pl | 0 scripts/relm.pl | 0 scripts/remote.pl | 0 scripts/reorder.pl | 0 scripts/repeat.pl | 0 scripts/resize_split.pl | 0 scripts/rhythmbox.pl | 0 scripts/rk.pl | 0 scripts/romaji.pl | 0 scripts/romajibind.pl | 0 scripts/rot13.pl | 0 scripts/rotator.pl | 0 scripts/sana_cmd.pl | 0 scripts/sb_search.pl | 0 scripts/schwaebisch.pl | 0 scripts/screen_away.pl | 0 scripts/scriptassist.pl | 0 scripts/scripthelp.pl | 0 scripts/scriptinfo.pl | 0 scripts/scriptsave.pl | 0 scripts/scrmable.pl | 0 scripts/scroller.pl | 0 scripts/securemsg.pl | 0 scripts/seen.pl | 0 scripts/send_scroll.pl | 0 scripts/servercomplete.pl | 0 scripts/seti.pl | 0 scripts/shortenurl.pl | 0 scripts/shorturl.pl | 0 scripts/showhilight.pl | 0 scripts/showhost.pl | 0 scripts/showmode.pl | 0 scripts/slack_complete.pl | 0 scripts/slack_emoji.pl | 0 scripts/smartfilter.pl | 0 scripts/smiley.pl | 0 scripts/sms.pl | 0 scripts/snmpup.pl | 0 scripts/spambot.pl | 0 scripts/special_complete.pl | 0 scripts/spell.pl | 0 scripts/spellcheck.pl | 0 scripts/sping.pl | 0 scripts/splitlong.pl | 0 scripts/spotify.pl | 0 scripts/stocks.pl | 0 scripts/studivz_bitlbee_rename.pl | 0 scripts/synccheck.pl | 0 scripts/sysinfo270-irssi.pl | 0 scripts/sysinfo277-irssi.pl | 0 scripts/sysinfo_dg.pl | 0 scripts/sysinfoplus.pl | 0 scripts/tab_stop.pl | 0 scripts/talk.pl | 0 scripts/target.pl | 0 scripts/thankop.pl | 0 scripts/thistory.pl | 0 scripts/timer.pl | 0 scripts/timezones.pl | 0 scripts/tinyurl.pl | 0 scripts/title.pl | 0 scripts/tlock.pl | 0 scripts/tmux_away.pl | 0 scripts/topics.pl | 0 scripts/topicsed.pl | 0 scripts/tordetect.pl | 0 scripts/track.pl | 0 scripts/trackbar.pl | 0 scripts/tracknick.pl | 0 scripts/translit.pl | 0 scripts/trigger.pl | 0 scripts/trustweb.pl | 0 scripts/tvmusor.pl | 0 scripts/twitter_theme.pl | 0 scripts/twprompt.pl | 0 scripts/twsocials.pl | 0 scripts/twtopic.pl | 0 scripts/u.pl | 0 scripts/unicode.pl | 0 scripts/upgradeinfo.pl | 0 scripts/upsidedown.pl | 0 scripts/uptime.pl | 0 scripts/url_log.pl | 0 scripts/urlfeed.pl | 0 scripts/urlgrab.pl | 0 scripts/urlinfo.pl | 0 scripts/urlplot.pl | 0 scripts/usercount.pl | 0 scripts/userhost.pl | 0 scripts/users.pl | 0 scripts/version-stat.pl | 0 scripts/verstats.pl | 0 scripts/vidinfo.pl | 0 scripts/vowels.pl | 0 scripts/wa.pl | 0 scripts/warnkick.pl | 0 scripts/washnicks.pl | 0 scripts/watch.pl | 0 scripts/whitelist.pl | 0 scripts/whocount.pl | 0 scripts/whois.pl | 0 scripts/whois_hexip.pl | 0 scripts/whos.pl | 0 scripts/wilm.pl | 0 scripts/window_switcher.pl | 0 scripts/winnum.pl | 0 scripts/wisestamp.pl | 0 scripts/wkb.pl | 0 scripts/wordcompletition.pl | 0 scripts/wordscramble.pl | 0 scripts/xauth.pl | 0 scripts/xcmd.pl | 0 scripts/xdcc.pl | 0 scripts/xdcc_autoget.pl | 19 +++++++------------ scripts/xdccget.pl | 0 scripts/xetra.pl | 0 scripts/xlist.pl | 0 scripts/xmms.pl | 0 scripts/xmms2.pl | 0 scripts/xmmsinfo.pl | 0 scripts/xmpp-notify.pl | 0 scripts/xqf.pl | 0 444 files changed, 7 insertions(+), 12 deletions(-) mode change 100644 => 100755 scripts/8-ball.pl mode change 100644 => 100755 scripts/Cirssi.pl mode change 100644 => 100755 scripts/UNIBG-autoident.pl mode change 100644 => 100755 scripts/accent.pl mode change 100644 => 100755 scripts/accountname.pl mode change 100644 => 100755 scripts/act.pl mode change 100644 => 100755 scripts/act_fifo.pl mode change 100644 => 100755 scripts/active_notice.pl mode change 100644 => 100755 scripts/active_notify.pl mode change 100644 => 100755 scripts/activity_file.pl mode change 100644 => 100755 scripts/ai.pl mode change 100644 => 100755 scripts/aidle.pl mode change 100644 => 100755 scripts/akftp.pl mode change 100644 => 100755 scripts/alame.pl mode change 100644 => 100755 scripts/amarok_ssh.pl mode change 100644 => 100755 scripts/amaroknp.pl mode change 100644 => 100755 scripts/anotherway.pl mode change 100644 => 100755 scripts/antiplenk.pl mode change 100644 => 100755 scripts/apm.pl mode change 100644 => 100755 scripts/armeija.pl mode change 100644 => 100755 scripts/ascii.pl mode change 100644 => 100755 scripts/aspell_complete.pl mode change 100644 => 100755 scripts/auth_quakenet.pl mode change 100644 => 100755 scripts/auto_whois.pl mode change 100644 => 100755 scripts/autoaway.pl mode change 100644 => 100755 scripts/autochannel.pl mode change 100644 => 100755 scripts/autoclearinput.pl mode change 100644 => 100755 scripts/autocycle.pl mode change 100644 => 100755 scripts/autolimit.pl mode change 100644 => 100755 scripts/autoop.pl mode change 100644 => 100755 scripts/autoopper.pl mode change 100644 => 100755 scripts/autorealname.pl mode change 100644 => 100755 scripts/autorejoin.pl mode change 100644 => 100755 scripts/autorejoinpunish.pl mode change 100644 => 100755 scripts/autoreminder.pl mode change 100644 => 100755 scripts/autostuff.pl mode change 100644 => 100755 scripts/autoversion.pl mode change 100644 => 100755 scripts/autovoice.pl mode change 100644 => 100755 scripts/autowhois.pl mode change 100644 => 100755 scripts/autowhois_simple.pl mode change 100644 => 100755 scripts/autowrap.pl mode change 100644 => 100755 scripts/away.pl mode change 100644 => 100755 scripts/away2web.pl mode change 100644 => 100755 scripts/away_hilight_notice.pl mode change 100644 => 100755 scripts/away_verbose.pl mode change 100644 => 100755 scripts/awaybar.pl mode change 100644 => 100755 scripts/awaylogcnt.pl mode change 100644 => 100755 scripts/awayproxy.pl mode change 100644 => 100755 scripts/babelirc.pl mode change 100644 => 100755 scripts/badword.pl mode change 100644 => 100755 scripts/ban.pl mode change 100644 => 100755 scripts/bandwidth.pl mode change 100644 => 100755 scripts/bansearch.pl mode change 100644 => 100755 scripts/bantime.pl mode change 100644 => 100755 scripts/beep.pl mode change 100644 => 100755 scripts/beep_beep.pl mode change 100644 => 100755 scripts/beepaway.pl mode change 100644 => 100755 scripts/bestoiber.pl mode change 100644 => 100755 scripts/bgta.pl mode change 100644 => 100755 scripts/binary.pl mode change 100644 => 100755 scripts/binary_time.pl mode change 100644 => 100755 scripts/bitlbee_blist.pl mode change 100644 => 100755 scripts/bitlbee_join_notice.pl mode change 100644 => 100755 scripts/bitlbee_nick_change.pl mode change 100644 => 100755 scripts/bitlbee_tab_completion.pl mode change 100644 => 100755 scripts/bitlbee_timestamp.pl mode change 100644 => 100755 scripts/bitlbee_typing_notice.pl mode change 100644 => 100755 scripts/blowjob.pl mode change 100644 => 100755 scripts/bmi.pl mode change 100644 => 100755 scripts/buf.pl mode change 100644 => 100755 scripts/calc.pl mode change 100644 => 100755 scripts/callerid.pl mode change 100644 => 100755 scripts/cap_sasl.pl mode change 100644 => 100755 scripts/cddb.pl mode change 100644 => 100755 scripts/centericq.pl mode change 100644 => 100755 scripts/cgrep.pl mode change 100644 => 100755 scripts/chanact.pl mode change 100644 => 100755 scripts/chanfull.pl mode change 100644 => 100755 scripts/chanfull_duden.pl mode change 100644 => 100755 scripts/chanpeak.pl mode change 100644 => 100755 scripts/chansearch.pl mode change 100644 => 100755 scripts/chanshare.pl mode change 100644 => 100755 scripts/chansort.pl mode change 100644 => 100755 scripts/chansync.pl mode change 100644 => 100755 scripts/chops.pl mode change 100644 => 100755 scripts/cleanpublic.pl mode change 100644 => 100755 scripts/clipboard.pl mode change 100644 => 100755 scripts/cloneprot.pl mode change 100644 => 100755 scripts/clones.pl mode change 100644 => 100755 scripts/clones_scanner.pl mode change 100644 => 100755 scripts/colorkick.pl mode change 100644 => 100755 scripts/colorswap.pl mode change 100644 => 100755 scripts/complete_lastspoke.pl mode change 100644 => 100755 scripts/connectcmd.pl mode change 100644 => 100755 scripts/countdown.pl mode change 100644 => 100755 scripts/country.pl mode change 100644 => 100755 scripts/cp1250_kick.pl mode change 100644 => 100755 scripts/crapbuster.pl mode change 100644 => 100755 scripts/credstore.pl mode change 100644 => 100755 scripts/cron.pl mode change 100644 => 100755 scripts/cwho.pl mode change 100644 => 100755 scripts/dancer_forwardfix.pl mode change 100644 => 100755 scripts/dancer_hide_477.pl mode change 100644 => 100755 scripts/dau.pl mode change 100644 => 100755 scripts/dcc_ip.pl mode change 100644 => 100755 scripts/dccmove.pl mode change 100644 => 100755 scripts/dccself.pl mode change 100644 => 100755 scripts/dccstat.pl mode change 100644 => 100755 scripts/defaultchanmode.pl mode change 100644 => 100755 scripts/dejunk.pl mode change 100644 => 100755 scripts/deliciousurl.pl mode change 100644 => 100755 scripts/df.pl mode change 100644 => 100755 scripts/dice.pl mode change 100644 => 100755 scripts/dice_concise.pl mode change 100644 => 100755 scripts/dictcomplete.pl mode change 100644 => 100755 scripts/dispatch.pl mode change 100644 => 100755 scripts/dns.pl mode change 100644 => 100755 scripts/dnsspam.pl mode change 100644 => 100755 scripts/doc.pl mode change 100644 => 100755 scripts/doublefilter.pl mode change 100644 => 100755 scripts/dr_who.pl mode change 100644 => 100755 scripts/efnetorg.pl mode change 100644 => 100755 scripts/elist.pl mode change 100644 => 100755 scripts/eliza.pl mode change 100644 => 100755 scripts/email_msgs.pl mode change 100644 => 100755 scripts/email_privmsgs.pl mode change 100644 => 100755 scripts/emaildb1.0.pl mode change 100644 => 100755 scripts/emo.pl mode change 100644 => 100755 scripts/events.pl mode change 100644 => 100755 scripts/exec_clean.pl mode change 100644 => 100755 scripts/extaway.pl mode change 100644 => 100755 scripts/fakectcp.pl mode change 100644 => 100755 scripts/fcountry.pl mode change 100644 => 100755 scripts/figlet.pl mode change 100644 => 100755 scripts/file.pl mode change 100644 => 100755 scripts/find.pl mode change 100644 => 100755 scripts/findbot.pl mode change 100644 => 100755 scripts/fleech.pl mode change 100644 => 100755 scripts/fnotify.pl mode change 100644 => 100755 scripts/follow.pl mode change 100644 => 100755 scripts/foo.pl mode change 100644 => 100755 scripts/foreach_user.pl mode change 100644 => 100755 scripts/fortune.pl mode change 100644 => 100755 scripts/forward.pl mode change 100644 => 100755 scripts/freenode_filter.pl mode change 100644 => 100755 scripts/friends_peder.pl mode change 100644 => 100755 scripts/friends_shasta.pl mode change 100644 => 100755 scripts/frm_outgmsgs.pl mode change 100644 => 100755 scripts/fserve.pl mode change 100644 => 100755 scripts/fuckem.pl mode change 100644 => 100755 scripts/getop.pl mode change 100644 => 100755 scripts/gimmie.pl mode change 100644 => 100755 scripts/go.pl mode change 100644 => 100755 scripts/go2.pl mode change 100644 => 100755 scripts/google.pl mode change 100644 => 100755 scripts/gpgvalidator.pl mode change 100644 => 100755 scripts/greetignore.pl mode change 100644 => 100755 scripts/grep.pl mode change 100644 => 100755 scripts/grepbans.pl mode change 100644 => 100755 scripts/gsi.pl mode change 100644 => 100755 scripts/gtrans.pl mode change 100644 => 100755 scripts/guts.pl mode change 100644 => 100755 scripts/hddtemp.pl mode change 100644 => 100755 scripts/hello.pl mode change 100644 => 100755 scripts/hide.pl mode change 100644 => 100755 scripts/hideauth.pl mode change 100644 => 100755 scripts/highlite.pl mode change 100644 => 100755 scripts/hignore.pl mode change 100644 => 100755 scripts/hilightwin.pl mode change 100644 => 100755 scripts/hipchat_complete.pl mode change 100644 => 100755 scripts/history_search.pl mode change 100644 => 100755 scripts/hitcount.pl mode change 100644 => 100755 scripts/hl.pl mode change 100644 => 100755 scripts/hlbot.pl mode change 100644 => 100755 scripts/hostname.pl mode change 100644 => 100755 scripts/iMPD.pl mode change 100644 => 100755 scripts/identify-md5.pl mode change 100644 => 100755 scripts/idletime.pl mode change 100644 => 100755 scripts/idonkey.pl mode change 100644 => 100755 scripts/ignore_log.pl mode change 100644 => 100755 scripts/ignoreoc.pl mode change 100644 => 100755 scripts/ignorsula.pl mode change 100644 => 100755 scripts/il.pl mode change 100644 => 100755 scripts/imdb.pl mode change 100644 => 100755 scripts/intjoin.pl mode change 100644 => 100755 scripts/invitejoin.pl mode change 100644 => 100755 scripts/ipupdate.pl mode change 100644 => 100755 scripts/iraident.pl mode change 100644 => 100755 scripts/irc_chess.pl mode change 100644 => 100755 scripts/irccomplete.pl mode change 100644 => 100755 scripts/ircgallery.pl mode change 100644 => 100755 scripts/ircgmessagenotify.pl mode change 100644 => 100755 scripts/ircops.pl mode change 100644 => 100755 scripts/ircsec.pl mode change 100644 => 100755 scripts/irssi-feed.pl mode change 100644 => 100755 scripts/irssiBlaster.pl mode change 100644 => 100755 scripts/irssi_logger.pl mode change 100644 => 100755 scripts/irssiq.pl mode change 100644 => 100755 scripts/isbanned.pl mode change 100644 => 100755 scripts/isdn.pl mode change 100644 => 100755 scripts/itime.pl mode change 100644 => 100755 scripts/ixmmsa.pl mode change 100644 => 100755 scripts/joininfo.pl mode change 100644 => 100755 scripts/kban-referrals.pl mode change 100644 => 100755 scripts/kblamehost.pl mode change 100644 => 100755 scripts/keepnick.pl mode change 100644 => 100755 scripts/kenny.pl mode change 100644 => 100755 scripts/kernel.pl mode change 100644 => 100755 scripts/keybinds.pl mode change 100644 => 100755 scripts/kicks.pl mode change 100644 => 100755 scripts/kill_fake_gets.pl mode change 100644 => 100755 scripts/kills.pl mode change 100644 => 100755 scripts/kline_warning.pl mode change 100644 => 100755 scripts/l33tmusic.pl mode change 100644 => 100755 scripts/lastfm.pl mode change 100644 => 100755 scripts/lastspoke.pl mode change 100644 => 100755 scripts/len.pl mode change 100644 => 100755 scripts/leodict.pl mode change 100644 => 100755 scripts/levelclear.pl mode change 100644 => 100755 scripts/licq.pl mode change 100644 => 100755 scripts/linkchan.pl mode change 100644 => 100755 scripts/listen.pl mode change 100644 => 100755 scripts/loadavg.pl mode change 100644 => 100755 scripts/localize.pl mode change 100644 => 100755 scripts/log2ansi.pl mode change 100644 => 100755 scripts/logcompress.pl mode change 100644 => 100755 scripts/ls.pl mode change 100644 => 100755 scripts/lwho.pl mode change 100644 => 100755 scripts/mail.pl mode change 100644 => 100755 scripts/mailcheck_imap.pl mode change 100644 => 100755 scripts/mailcheck_mbox_flux.pl mode change 100644 => 100755 scripts/mailcheck_pop3_kimmo.pl mode change 100644 => 100755 scripts/mailcount.pl mode change 100644 => 100755 scripts/mangle.pl mode change 100644 => 100755 scripts/map.pl mode change 100644 => 100755 scripts/mass_hilight_blocker.pl mode change 100644 => 100755 scripts/mg.pl mode change 100644 => 100755 scripts/miodek.pl mode change 100644 => 100755 scripts/mirc_colour_popup.pl mode change 100644 => 100755 scripts/mkick.pl mode change 100644 => 100755 scripts/mkshorterlink.pl mode change 100644 => 100755 scripts/mldonkey_bandwidth.pl mode change 100644 => 100755 scripts/mlock.pl mode change 100644 => 100755 scripts/modelist-r.pl mode change 100644 => 100755 scripts/modelist.pl mode change 100644 => 100755 scripts/monitor.pl mode change 100644 => 100755 scripts/mood.pl mode change 100644 => 100755 scripts/morse.pl mode change 100644 => 100755 scripts/mouse.pl mode change 100644 => 100755 scripts/mpd.pl mode change 100644 => 100755 scripts/mpg123.pl mode change 100644 => 100755 scripts/mqtt-notify.pl mode change 100644 => 100755 scripts/msg2notice.pl mode change 100644 => 100755 scripts/multipaste.pl mode change 100644 => 100755 scripts/my_beep.pl mode change 100644 => 100755 scripts/mygoogle.pl mode change 100644 => 100755 scripts/myimdb.pl mode change 100644 => 100755 scripts/mysqlurllogger.pl mode change 100644 => 100755 scripts/nact.pl mode change 100644 => 100755 scripts/netswitch.pl mode change 100644 => 100755 scripts/news.pl mode change 100644 => 100755 scripts/newsline.pl mode change 100644 => 100755 scripts/nickban.pl mode change 100644 => 100755 scripts/nickcolor.pl mode change 100644 => 100755 scripts/nickignore.pl mode change 100644 => 100755 scripts/nickmix-c0ffee.pl mode change 100644 => 100755 scripts/nickmix_pasky.pl mode change 100644 => 100755 scripts/nickserv.pl mode change 100644 => 100755 scripts/niq.pl mode change 100644 => 100755 scripts/nm.pl mode change 100644 => 100755 scripts/nocaps.pl mode change 100644 => 100755 scripts/nocollide.pl mode change 100644 => 100755 scripts/noisyquery.pl mode change 100644 => 100755 scripts/nopl.pl mode change 100644 => 100755 scripts/norepeat.pl mode change 100644 => 100755 scripts/notes.pl mode change 100644 => 100755 scripts/noteserve.pl mode change 100644 => 100755 scripts/noticelogic.pl mode change 100644 => 100755 scripts/noticemove.pl mode change 100644 => 100755 scripts/notonline.pl mode change 100644 => 100755 scripts/null.pl mode change 100644 => 100755 scripts/ogg123.pl mode change 100644 => 100755 scripts/oidenty.pl mode change 100644 => 100755 scripts/on.pl mode change 100644 => 100755 scripts/ontv.pl mode change 100644 => 100755 scripts/oops.pl mode change 100644 => 100755 scripts/oopsie.pl mode change 100644 => 100755 scripts/openurl.pl mode change 100644 => 100755 scripts/operit.pl mode change 100644 => 100755 scripts/operview.pl mode change 100644 => 100755 scripts/opnotice.pl mode change 100644 => 100755 scripts/opnotify.pl mode change 100644 => 100755 scripts/orphamp.pl mode change 100644 => 100755 scripts/osd.pl mode change 100644 => 100755 scripts/ownage.pl mode change 100644 => 100755 scripts/page-c0ffee.pl mode change 100644 => 100755 scripts/page_reeler.pl mode change 100644 => 100755 scripts/pager.pl mode change 100644 => 100755 scripts/pangotext.pl mode change 100644 => 100755 scripts/paste-derwan.pl mode change 100644 => 100755 scripts/paste_derwan.pl mode change 100644 => 100755 scripts/paste_huggie.pl mode change 100644 => 100755 scripts/paste_kimmoke.pl mode change 100644 => 100755 scripts/pelix.pl mode change 100644 => 100755 scripts/people.pl mode change 100644 => 100755 scripts/per_window_prompt.pl mode change 100644 => 100755 scripts/pggb_sound.pl mode change 100644 => 100755 scripts/poison.pl mode change 100644 => 100755 scripts/postpone.pl mode change 100644 => 100755 scripts/ppl.pl mode change 100644 => 100755 scripts/procmaillog.pl mode change 100644 => 100755 scripts/query.pl mode change 100644 => 100755 scripts/queryresume.pl mode change 100644 => 100755 scripts/quitmsg.pl mode change 100644 => 100755 scripts/quitrand.pl mode change 100644 => 100755 scripts/quiz.pl mode change 100644 => 100755 scripts/quizgr.pl mode change 100644 => 100755 scripts/quizmaster-fr.pl mode change 100644 => 100755 scripts/quizmaster.pl mode change 100644 => 100755 scripts/rainbow.pl mode change 100644 => 100755 scripts/randaway.pl mode change 100644 => 100755 scripts/randname.pl mode change 100644 => 100755 scripts/redirect.pl mode change 100644 => 100755 scripts/relm.pl mode change 100644 => 100755 scripts/remote.pl mode change 100644 => 100755 scripts/reorder.pl mode change 100644 => 100755 scripts/repeat.pl mode change 100644 => 100755 scripts/resize_split.pl mode change 100644 => 100755 scripts/rhythmbox.pl mode change 100644 => 100755 scripts/rk.pl mode change 100644 => 100755 scripts/romaji.pl mode change 100644 => 100755 scripts/romajibind.pl mode change 100644 => 100755 scripts/rot13.pl mode change 100644 => 100755 scripts/rotator.pl mode change 100644 => 100755 scripts/sana_cmd.pl mode change 100644 => 100755 scripts/sb_search.pl mode change 100644 => 100755 scripts/schwaebisch.pl mode change 100644 => 100755 scripts/screen_away.pl mode change 100644 => 100755 scripts/scriptassist.pl mode change 100644 => 100755 scripts/scripthelp.pl mode change 100644 => 100755 scripts/scriptinfo.pl mode change 100644 => 100755 scripts/scriptsave.pl mode change 100644 => 100755 scripts/scrmable.pl mode change 100644 => 100755 scripts/scroller.pl mode change 100644 => 100755 scripts/securemsg.pl mode change 100644 => 100755 scripts/seen.pl mode change 100644 => 100755 scripts/send_scroll.pl mode change 100644 => 100755 scripts/servercomplete.pl mode change 100644 => 100755 scripts/seti.pl mode change 100644 => 100755 scripts/shortenurl.pl mode change 100644 => 100755 scripts/shorturl.pl mode change 100644 => 100755 scripts/showhilight.pl mode change 100644 => 100755 scripts/showhost.pl mode change 100644 => 100755 scripts/showmode.pl mode change 100644 => 100755 scripts/slack_complete.pl mode change 100644 => 100755 scripts/slack_emoji.pl mode change 100644 => 100755 scripts/smartfilter.pl mode change 100644 => 100755 scripts/smiley.pl mode change 100644 => 100755 scripts/sms.pl mode change 100644 => 100755 scripts/snmpup.pl mode change 100644 => 100755 scripts/spambot.pl mode change 100644 => 100755 scripts/special_complete.pl mode change 100644 => 100755 scripts/spell.pl mode change 100644 => 100755 scripts/spellcheck.pl mode change 100644 => 100755 scripts/sping.pl mode change 100644 => 100755 scripts/splitlong.pl mode change 100644 => 100755 scripts/spotify.pl mode change 100644 => 100755 scripts/stocks.pl mode change 100644 => 100755 scripts/studivz_bitlbee_rename.pl mode change 100644 => 100755 scripts/synccheck.pl mode change 100644 => 100755 scripts/sysinfo270-irssi.pl mode change 100644 => 100755 scripts/sysinfo277-irssi.pl mode change 100644 => 100755 scripts/sysinfo_dg.pl mode change 100644 => 100755 scripts/sysinfoplus.pl mode change 100644 => 100755 scripts/tab_stop.pl mode change 100644 => 100755 scripts/talk.pl mode change 100644 => 100755 scripts/target.pl mode change 100644 => 100755 scripts/thankop.pl mode change 100644 => 100755 scripts/thistory.pl mode change 100644 => 100755 scripts/timer.pl mode change 100644 => 100755 scripts/timezones.pl mode change 100644 => 100755 scripts/tinyurl.pl mode change 100644 => 100755 scripts/title.pl mode change 100644 => 100755 scripts/tlock.pl mode change 100644 => 100755 scripts/tmux_away.pl mode change 100644 => 100755 scripts/topics.pl mode change 100644 => 100755 scripts/topicsed.pl mode change 100644 => 100755 scripts/tordetect.pl mode change 100644 => 100755 scripts/track.pl mode change 100644 => 100755 scripts/trackbar.pl mode change 100644 => 100755 scripts/tracknick.pl mode change 100644 => 100755 scripts/translit.pl mode change 100644 => 100755 scripts/trigger.pl mode change 100644 => 100755 scripts/trustweb.pl mode change 100644 => 100755 scripts/tvmusor.pl mode change 100644 => 100755 scripts/twitter_theme.pl mode change 100644 => 100755 scripts/twprompt.pl mode change 100644 => 100755 scripts/twsocials.pl mode change 100644 => 100755 scripts/twtopic.pl mode change 100644 => 100755 scripts/u.pl mode change 100644 => 100755 scripts/unicode.pl mode change 100644 => 100755 scripts/upgradeinfo.pl mode change 100644 => 100755 scripts/upsidedown.pl mode change 100644 => 100755 scripts/uptime.pl mode change 100644 => 100755 scripts/url_log.pl mode change 100644 => 100755 scripts/urlfeed.pl mode change 100644 => 100755 scripts/urlgrab.pl mode change 100644 => 100755 scripts/urlinfo.pl mode change 100644 => 100755 scripts/urlplot.pl mode change 100644 => 100755 scripts/usercount.pl mode change 100644 => 100755 scripts/userhost.pl mode change 100644 => 100755 scripts/users.pl mode change 100644 => 100755 scripts/version-stat.pl mode change 100644 => 100755 scripts/verstats.pl mode change 100644 => 100755 scripts/vidinfo.pl mode change 100644 => 100755 scripts/vowels.pl mode change 100644 => 100755 scripts/wa.pl mode change 100644 => 100755 scripts/warnkick.pl mode change 100644 => 100755 scripts/washnicks.pl mode change 100644 => 100755 scripts/watch.pl mode change 100644 => 100755 scripts/whitelist.pl mode change 100644 => 100755 scripts/whocount.pl mode change 100644 => 100755 scripts/whois.pl mode change 100644 => 100755 scripts/whois_hexip.pl mode change 100644 => 100755 scripts/whos.pl mode change 100644 => 100755 scripts/wilm.pl mode change 100644 => 100755 scripts/window_switcher.pl mode change 100644 => 100755 scripts/winnum.pl mode change 100644 => 100755 scripts/wisestamp.pl mode change 100644 => 100755 scripts/wkb.pl mode change 100644 => 100755 scripts/wordcompletition.pl mode change 100644 => 100755 scripts/wordscramble.pl mode change 100644 => 100755 scripts/xauth.pl mode change 100644 => 100755 scripts/xcmd.pl mode change 100644 => 100755 scripts/xdcc.pl mode change 100644 => 100755 scripts/xdcc_autoget.pl mode change 100644 => 100755 scripts/xdccget.pl mode change 100644 => 100755 scripts/xetra.pl mode change 100644 => 100755 scripts/xlist.pl mode change 100644 => 100755 scripts/xmms.pl mode change 100644 => 100755 scripts/xmms2.pl mode change 100644 => 100755 scripts/xmmsinfo.pl mode change 100644 => 100755 scripts/xmpp-notify.pl mode change 100644 => 100755 scripts/xqf.pl (limited to 'scripts') diff --git a/scripts/8-ball.pl b/scripts/8-ball.pl old mode 100644 new mode 100755 diff --git a/scripts/Cirssi.pl b/scripts/Cirssi.pl old mode 100644 new mode 100755 diff --git a/scripts/UNIBG-autoident.pl b/scripts/UNIBG-autoident.pl old mode 100644 new mode 100755 diff --git a/scripts/accent.pl b/scripts/accent.pl old mode 100644 new mode 100755 diff --git a/scripts/accountname.pl b/scripts/accountname.pl old mode 100644 new mode 100755 diff --git a/scripts/act.pl b/scripts/act.pl old mode 100644 new mode 100755 diff --git a/scripts/act_fifo.pl b/scripts/act_fifo.pl old mode 100644 new mode 100755 diff --git a/scripts/active_notice.pl b/scripts/active_notice.pl old mode 100644 new mode 100755 diff --git a/scripts/active_notify.pl b/scripts/active_notify.pl old mode 100644 new mode 100755 diff --git a/scripts/activity_file.pl b/scripts/activity_file.pl old mode 100644 new mode 100755 diff --git a/scripts/ai.pl b/scripts/ai.pl old mode 100644 new mode 100755 diff --git a/scripts/aidle.pl b/scripts/aidle.pl old mode 100644 new mode 100755 diff --git a/scripts/akftp.pl b/scripts/akftp.pl old mode 100644 new mode 100755 diff --git a/scripts/alame.pl b/scripts/alame.pl old mode 100644 new mode 100755 diff --git a/scripts/amarok_ssh.pl b/scripts/amarok_ssh.pl old mode 100644 new mode 100755 diff --git a/scripts/amaroknp.pl b/scripts/amaroknp.pl old mode 100644 new mode 100755 diff --git a/scripts/anotherway.pl b/scripts/anotherway.pl old mode 100644 new mode 100755 diff --git a/scripts/antiplenk.pl b/scripts/antiplenk.pl old mode 100644 new mode 100755 diff --git a/scripts/apm.pl b/scripts/apm.pl old mode 100644 new mode 100755 diff --git a/scripts/armeija.pl b/scripts/armeija.pl old mode 100644 new mode 100755 diff --git a/scripts/ascii.pl b/scripts/ascii.pl old mode 100644 new mode 100755 diff --git a/scripts/aspell_complete.pl b/scripts/aspell_complete.pl old mode 100644 new mode 100755 diff --git a/scripts/auth_quakenet.pl b/scripts/auth_quakenet.pl old mode 100644 new mode 100755 diff --git a/scripts/auto_whois.pl b/scripts/auto_whois.pl old mode 100644 new mode 100755 diff --git a/scripts/autoaway.pl b/scripts/autoaway.pl old mode 100644 new mode 100755 diff --git a/scripts/autochannel.pl b/scripts/autochannel.pl old mode 100644 new mode 100755 diff --git a/scripts/autoclearinput.pl b/scripts/autoclearinput.pl old mode 100644 new mode 100755 diff --git a/scripts/autocycle.pl b/scripts/autocycle.pl old mode 100644 new mode 100755 diff --git a/scripts/autolimit.pl b/scripts/autolimit.pl old mode 100644 new mode 100755 diff --git a/scripts/autoop.pl b/scripts/autoop.pl old mode 100644 new mode 100755 diff --git a/scripts/autoopper.pl b/scripts/autoopper.pl old mode 100644 new mode 100755 diff --git a/scripts/autorealname.pl b/scripts/autorealname.pl old mode 100644 new mode 100755 diff --git a/scripts/autorejoin.pl b/scripts/autorejoin.pl old mode 100644 new mode 100755 diff --git a/scripts/autorejoinpunish.pl b/scripts/autorejoinpunish.pl old mode 100644 new mode 100755 diff --git a/scripts/autoreminder.pl b/scripts/autoreminder.pl old mode 100644 new mode 100755 diff --git a/scripts/autostuff.pl b/scripts/autostuff.pl old mode 100644 new mode 100755 diff --git a/scripts/autoversion.pl b/scripts/autoversion.pl old mode 100644 new mode 100755 diff --git a/scripts/autovoice.pl b/scripts/autovoice.pl old mode 100644 new mode 100755 diff --git a/scripts/autowhois.pl b/scripts/autowhois.pl old mode 100644 new mode 100755 diff --git a/scripts/autowhois_simple.pl b/scripts/autowhois_simple.pl old mode 100644 new mode 100755 diff --git a/scripts/autowrap.pl b/scripts/autowrap.pl old mode 100644 new mode 100755 diff --git a/scripts/away.pl b/scripts/away.pl old mode 100644 new mode 100755 diff --git a/scripts/away2web.pl b/scripts/away2web.pl old mode 100644 new mode 100755 diff --git a/scripts/away_hilight_notice.pl b/scripts/away_hilight_notice.pl old mode 100644 new mode 100755 diff --git a/scripts/away_verbose.pl b/scripts/away_verbose.pl old mode 100644 new mode 100755 diff --git a/scripts/awaybar.pl b/scripts/awaybar.pl old mode 100644 new mode 100755 diff --git a/scripts/awaylogcnt.pl b/scripts/awaylogcnt.pl old mode 100644 new mode 100755 diff --git a/scripts/awayproxy.pl b/scripts/awayproxy.pl old mode 100644 new mode 100755 diff --git a/scripts/babelirc.pl b/scripts/babelirc.pl old mode 100644 new mode 100755 diff --git a/scripts/badword.pl b/scripts/badword.pl old mode 100644 new mode 100755 diff --git a/scripts/ban.pl b/scripts/ban.pl old mode 100644 new mode 100755 diff --git a/scripts/bandwidth.pl b/scripts/bandwidth.pl old mode 100644 new mode 100755 diff --git a/scripts/bansearch.pl b/scripts/bansearch.pl old mode 100644 new mode 100755 diff --git a/scripts/bantime.pl b/scripts/bantime.pl old mode 100644 new mode 100755 diff --git a/scripts/beep.pl b/scripts/beep.pl old mode 100644 new mode 100755 diff --git a/scripts/beep_beep.pl b/scripts/beep_beep.pl old mode 100644 new mode 100755 diff --git a/scripts/beepaway.pl b/scripts/beepaway.pl old mode 100644 new mode 100755 diff --git a/scripts/bestoiber.pl b/scripts/bestoiber.pl old mode 100644 new mode 100755 diff --git a/scripts/bgta.pl b/scripts/bgta.pl old mode 100644 new mode 100755 diff --git a/scripts/binary.pl b/scripts/binary.pl old mode 100644 new mode 100755 diff --git a/scripts/binary_time.pl b/scripts/binary_time.pl old mode 100644 new mode 100755 diff --git a/scripts/bitlbee_blist.pl b/scripts/bitlbee_blist.pl old mode 100644 new mode 100755 diff --git a/scripts/bitlbee_join_notice.pl b/scripts/bitlbee_join_notice.pl old mode 100644 new mode 100755 diff --git a/scripts/bitlbee_nick_change.pl b/scripts/bitlbee_nick_change.pl old mode 100644 new mode 100755 diff --git a/scripts/bitlbee_tab_completion.pl b/scripts/bitlbee_tab_completion.pl old mode 100644 new mode 100755 diff --git a/scripts/bitlbee_timestamp.pl b/scripts/bitlbee_timestamp.pl old mode 100644 new mode 100755 diff --git a/scripts/bitlbee_typing_notice.pl b/scripts/bitlbee_typing_notice.pl old mode 100644 new mode 100755 diff --git a/scripts/blowjob.pl b/scripts/blowjob.pl old mode 100644 new mode 100755 diff --git a/scripts/bmi.pl b/scripts/bmi.pl old mode 100644 new mode 100755 diff --git a/scripts/buf.pl b/scripts/buf.pl old mode 100644 new mode 100755 diff --git a/scripts/calc.pl b/scripts/calc.pl old mode 100644 new mode 100755 diff --git a/scripts/callerid.pl b/scripts/callerid.pl old mode 100644 new mode 100755 diff --git a/scripts/cap_sasl.pl b/scripts/cap_sasl.pl old mode 100644 new mode 100755 diff --git a/scripts/cddb.pl b/scripts/cddb.pl old mode 100644 new mode 100755 diff --git a/scripts/centericq.pl b/scripts/centericq.pl old mode 100644 new mode 100755 diff --git a/scripts/cgrep.pl b/scripts/cgrep.pl old mode 100644 new mode 100755 diff --git a/scripts/chanact.pl b/scripts/chanact.pl old mode 100644 new mode 100755 diff --git a/scripts/chanfull.pl b/scripts/chanfull.pl old mode 100644 new mode 100755 diff --git a/scripts/chanfull_duden.pl b/scripts/chanfull_duden.pl old mode 100644 new mode 100755 diff --git a/scripts/chanpeak.pl b/scripts/chanpeak.pl old mode 100644 new mode 100755 diff --git a/scripts/chansearch.pl b/scripts/chansearch.pl old mode 100644 new mode 100755 diff --git a/scripts/chanshare.pl b/scripts/chanshare.pl old mode 100644 new mode 100755 diff --git a/scripts/chansort.pl b/scripts/chansort.pl old mode 100644 new mode 100755 diff --git a/scripts/chansync.pl b/scripts/chansync.pl old mode 100644 new mode 100755 diff --git a/scripts/chops.pl b/scripts/chops.pl old mode 100644 new mode 100755 diff --git a/scripts/cleanpublic.pl b/scripts/cleanpublic.pl old mode 100644 new mode 100755 diff --git a/scripts/clipboard.pl b/scripts/clipboard.pl old mode 100644 new mode 100755 diff --git a/scripts/cloneprot.pl b/scripts/cloneprot.pl old mode 100644 new mode 100755 diff --git a/scripts/clones.pl b/scripts/clones.pl old mode 100644 new mode 100755 diff --git a/scripts/clones_scanner.pl b/scripts/clones_scanner.pl old mode 100644 new mode 100755 diff --git a/scripts/colorkick.pl b/scripts/colorkick.pl old mode 100644 new mode 100755 diff --git a/scripts/colorswap.pl b/scripts/colorswap.pl old mode 100644 new mode 100755 diff --git a/scripts/complete_lastspoke.pl b/scripts/complete_lastspoke.pl old mode 100644 new mode 100755 diff --git a/scripts/connectcmd.pl b/scripts/connectcmd.pl old mode 100644 new mode 100755 diff --git a/scripts/countdown.pl b/scripts/countdown.pl old mode 100644 new mode 100755 diff --git a/scripts/country.pl b/scripts/country.pl old mode 100644 new mode 100755 diff --git a/scripts/cp1250_kick.pl b/scripts/cp1250_kick.pl old mode 100644 new mode 100755 diff --git a/scripts/crapbuster.pl b/scripts/crapbuster.pl old mode 100644 new mode 100755 diff --git a/scripts/credstore.pl b/scripts/credstore.pl old mode 100644 new mode 100755 diff --git a/scripts/cron.pl b/scripts/cron.pl old mode 100644 new mode 100755 diff --git a/scripts/cwho.pl b/scripts/cwho.pl old mode 100644 new mode 100755 diff --git a/scripts/dancer_forwardfix.pl b/scripts/dancer_forwardfix.pl old mode 100644 new mode 100755 diff --git a/scripts/dancer_hide_477.pl b/scripts/dancer_hide_477.pl old mode 100644 new mode 100755 diff --git a/scripts/dau.pl b/scripts/dau.pl old mode 100644 new mode 100755 diff --git a/scripts/dcc_ip.pl b/scripts/dcc_ip.pl old mode 100644 new mode 100755 diff --git a/scripts/dccmove.pl b/scripts/dccmove.pl old mode 100644 new mode 100755 diff --git a/scripts/dccself.pl b/scripts/dccself.pl old mode 100644 new mode 100755 diff --git a/scripts/dccstat.pl b/scripts/dccstat.pl old mode 100644 new mode 100755 diff --git a/scripts/defaultchanmode.pl b/scripts/defaultchanmode.pl old mode 100644 new mode 100755 diff --git a/scripts/dejunk.pl b/scripts/dejunk.pl old mode 100644 new mode 100755 diff --git a/scripts/deliciousurl.pl b/scripts/deliciousurl.pl old mode 100644 new mode 100755 diff --git a/scripts/df.pl b/scripts/df.pl old mode 100644 new mode 100755 diff --git a/scripts/dice.pl b/scripts/dice.pl old mode 100644 new mode 100755 diff --git a/scripts/dice_concise.pl b/scripts/dice_concise.pl old mode 100644 new mode 100755 diff --git a/scripts/dictcomplete.pl b/scripts/dictcomplete.pl old mode 100644 new mode 100755 diff --git a/scripts/dispatch.pl b/scripts/dispatch.pl old mode 100644 new mode 100755 diff --git a/scripts/dns.pl b/scripts/dns.pl old mode 100644 new mode 100755 diff --git a/scripts/dnsspam.pl b/scripts/dnsspam.pl old mode 100644 new mode 100755 diff --git a/scripts/doc.pl b/scripts/doc.pl old mode 100644 new mode 100755 diff --git a/scripts/doublefilter.pl b/scripts/doublefilter.pl old mode 100644 new mode 100755 diff --git a/scripts/dr_who.pl b/scripts/dr_who.pl old mode 100644 new mode 100755 diff --git a/scripts/efnetorg.pl b/scripts/efnetorg.pl old mode 100644 new mode 100755 diff --git a/scripts/elist.pl b/scripts/elist.pl old mode 100644 new mode 100755 diff --git a/scripts/eliza.pl b/scripts/eliza.pl old mode 100644 new mode 100755 diff --git a/scripts/email_msgs.pl b/scripts/email_msgs.pl old mode 100644 new mode 100755 diff --git a/scripts/email_privmsgs.pl b/scripts/email_privmsgs.pl old mode 100644 new mode 100755 diff --git a/scripts/emaildb1.0.pl b/scripts/emaildb1.0.pl old mode 100644 new mode 100755 diff --git a/scripts/emo.pl b/scripts/emo.pl old mode 100644 new mode 100755 diff --git a/scripts/events.pl b/scripts/events.pl old mode 100644 new mode 100755 diff --git a/scripts/exec_clean.pl b/scripts/exec_clean.pl old mode 100644 new mode 100755 diff --git a/scripts/extaway.pl b/scripts/extaway.pl old mode 100644 new mode 100755 diff --git a/scripts/fakectcp.pl b/scripts/fakectcp.pl old mode 100644 new mode 100755 diff --git a/scripts/fcountry.pl b/scripts/fcountry.pl old mode 100644 new mode 100755 diff --git a/scripts/figlet.pl b/scripts/figlet.pl old mode 100644 new mode 100755 diff --git a/scripts/file.pl b/scripts/file.pl old mode 100644 new mode 100755 diff --git a/scripts/find.pl b/scripts/find.pl old mode 100644 new mode 100755 diff --git a/scripts/findbot.pl b/scripts/findbot.pl old mode 100644 new mode 100755 diff --git a/scripts/fleech.pl b/scripts/fleech.pl old mode 100644 new mode 100755 diff --git a/scripts/fnotify.pl b/scripts/fnotify.pl old mode 100644 new mode 100755 diff --git a/scripts/follow.pl b/scripts/follow.pl old mode 100644 new mode 100755 diff --git a/scripts/foo.pl b/scripts/foo.pl old mode 100644 new mode 100755 diff --git a/scripts/foreach_user.pl b/scripts/foreach_user.pl old mode 100644 new mode 100755 diff --git a/scripts/fortune.pl b/scripts/fortune.pl old mode 100644 new mode 100755 diff --git a/scripts/forward.pl b/scripts/forward.pl old mode 100644 new mode 100755 diff --git a/scripts/freenode_filter.pl b/scripts/freenode_filter.pl old mode 100644 new mode 100755 diff --git a/scripts/friends_peder.pl b/scripts/friends_peder.pl old mode 100644 new mode 100755 diff --git a/scripts/friends_shasta.pl b/scripts/friends_shasta.pl old mode 100644 new mode 100755 diff --git a/scripts/frm_outgmsgs.pl b/scripts/frm_outgmsgs.pl old mode 100644 new mode 100755 diff --git a/scripts/fserve.pl b/scripts/fserve.pl old mode 100644 new mode 100755 diff --git a/scripts/fuckem.pl b/scripts/fuckem.pl old mode 100644 new mode 100755 diff --git a/scripts/getop.pl b/scripts/getop.pl old mode 100644 new mode 100755 diff --git a/scripts/gimmie.pl b/scripts/gimmie.pl old mode 100644 new mode 100755 diff --git a/scripts/go.pl b/scripts/go.pl old mode 100644 new mode 100755 diff --git a/scripts/go2.pl b/scripts/go2.pl old mode 100644 new mode 100755 diff --git a/scripts/google.pl b/scripts/google.pl old mode 100644 new mode 100755 diff --git a/scripts/gpgvalidator.pl b/scripts/gpgvalidator.pl old mode 100644 new mode 100755 diff --git a/scripts/greetignore.pl b/scripts/greetignore.pl old mode 100644 new mode 100755 diff --git a/scripts/grep.pl b/scripts/grep.pl old mode 100644 new mode 100755 diff --git a/scripts/grepbans.pl b/scripts/grepbans.pl old mode 100644 new mode 100755 diff --git a/scripts/gsi.pl b/scripts/gsi.pl old mode 100644 new mode 100755 diff --git a/scripts/gtrans.pl b/scripts/gtrans.pl old mode 100644 new mode 100755 diff --git a/scripts/guts.pl b/scripts/guts.pl old mode 100644 new mode 100755 diff --git a/scripts/hddtemp.pl b/scripts/hddtemp.pl old mode 100644 new mode 100755 diff --git a/scripts/hello.pl b/scripts/hello.pl old mode 100644 new mode 100755 diff --git a/scripts/hide.pl b/scripts/hide.pl old mode 100644 new mode 100755 diff --git a/scripts/hideauth.pl b/scripts/hideauth.pl old mode 100644 new mode 100755 diff --git a/scripts/highlite.pl b/scripts/highlite.pl old mode 100644 new mode 100755 diff --git a/scripts/hignore.pl b/scripts/hignore.pl old mode 100644 new mode 100755 diff --git a/scripts/hilightwin.pl b/scripts/hilightwin.pl old mode 100644 new mode 100755 diff --git a/scripts/hipchat_complete.pl b/scripts/hipchat_complete.pl old mode 100644 new mode 100755 diff --git a/scripts/history_search.pl b/scripts/history_search.pl old mode 100644 new mode 100755 diff --git a/scripts/hitcount.pl b/scripts/hitcount.pl old mode 100644 new mode 100755 diff --git a/scripts/hl.pl b/scripts/hl.pl old mode 100644 new mode 100755 diff --git a/scripts/hlbot.pl b/scripts/hlbot.pl old mode 100644 new mode 100755 diff --git a/scripts/hostname.pl b/scripts/hostname.pl old mode 100644 new mode 100755 diff --git a/scripts/iMPD.pl b/scripts/iMPD.pl old mode 100644 new mode 100755 diff --git a/scripts/identify-md5.pl b/scripts/identify-md5.pl old mode 100644 new mode 100755 diff --git a/scripts/idletime.pl b/scripts/idletime.pl old mode 100644 new mode 100755 diff --git a/scripts/idonkey.pl b/scripts/idonkey.pl old mode 100644 new mode 100755 diff --git a/scripts/ignore_log.pl b/scripts/ignore_log.pl old mode 100644 new mode 100755 diff --git a/scripts/ignoreoc.pl b/scripts/ignoreoc.pl old mode 100644 new mode 100755 diff --git a/scripts/ignorsula.pl b/scripts/ignorsula.pl old mode 100644 new mode 100755 diff --git a/scripts/il.pl b/scripts/il.pl old mode 100644 new mode 100755 diff --git a/scripts/imdb.pl b/scripts/imdb.pl old mode 100644 new mode 100755 diff --git a/scripts/intjoin.pl b/scripts/intjoin.pl old mode 100644 new mode 100755 diff --git a/scripts/invitejoin.pl b/scripts/invitejoin.pl old mode 100644 new mode 100755 diff --git a/scripts/ipupdate.pl b/scripts/ipupdate.pl old mode 100644 new mode 100755 diff --git a/scripts/iraident.pl b/scripts/iraident.pl old mode 100644 new mode 100755 diff --git a/scripts/irc_chess.pl b/scripts/irc_chess.pl old mode 100644 new mode 100755 diff --git a/scripts/irccomplete.pl b/scripts/irccomplete.pl old mode 100644 new mode 100755 diff --git a/scripts/ircgallery.pl b/scripts/ircgallery.pl old mode 100644 new mode 100755 diff --git a/scripts/ircgmessagenotify.pl b/scripts/ircgmessagenotify.pl old mode 100644 new mode 100755 diff --git a/scripts/ircops.pl b/scripts/ircops.pl old mode 100644 new mode 100755 diff --git a/scripts/ircsec.pl b/scripts/ircsec.pl old mode 100644 new mode 100755 diff --git a/scripts/irssi-feed.pl b/scripts/irssi-feed.pl old mode 100644 new mode 100755 diff --git a/scripts/irssiBlaster.pl b/scripts/irssiBlaster.pl old mode 100644 new mode 100755 diff --git a/scripts/irssi_logger.pl b/scripts/irssi_logger.pl old mode 100644 new mode 100755 diff --git a/scripts/irssiq.pl b/scripts/irssiq.pl old mode 100644 new mode 100755 diff --git a/scripts/isbanned.pl b/scripts/isbanned.pl old mode 100644 new mode 100755 diff --git a/scripts/isdn.pl b/scripts/isdn.pl old mode 100644 new mode 100755 diff --git a/scripts/itime.pl b/scripts/itime.pl old mode 100644 new mode 100755 diff --git a/scripts/ixmmsa.pl b/scripts/ixmmsa.pl old mode 100644 new mode 100755 diff --git a/scripts/joininfo.pl b/scripts/joininfo.pl old mode 100644 new mode 100755 diff --git a/scripts/kban-referrals.pl b/scripts/kban-referrals.pl old mode 100644 new mode 100755 diff --git a/scripts/kblamehost.pl b/scripts/kblamehost.pl old mode 100644 new mode 100755 diff --git a/scripts/keepnick.pl b/scripts/keepnick.pl old mode 100644 new mode 100755 diff --git a/scripts/kenny.pl b/scripts/kenny.pl old mode 100644 new mode 100755 diff --git a/scripts/kernel.pl b/scripts/kernel.pl old mode 100644 new mode 100755 diff --git a/scripts/keybinds.pl b/scripts/keybinds.pl old mode 100644 new mode 100755 diff --git a/scripts/kicks.pl b/scripts/kicks.pl old mode 100644 new mode 100755 diff --git a/scripts/kill_fake_gets.pl b/scripts/kill_fake_gets.pl old mode 100644 new mode 100755 diff --git a/scripts/kills.pl b/scripts/kills.pl old mode 100644 new mode 100755 diff --git a/scripts/kline_warning.pl b/scripts/kline_warning.pl old mode 100644 new mode 100755 diff --git a/scripts/l33tmusic.pl b/scripts/l33tmusic.pl old mode 100644 new mode 100755 diff --git a/scripts/lastfm.pl b/scripts/lastfm.pl old mode 100644 new mode 100755 diff --git a/scripts/lastspoke.pl b/scripts/lastspoke.pl old mode 100644 new mode 100755 diff --git a/scripts/len.pl b/scripts/len.pl old mode 100644 new mode 100755 diff --git a/scripts/leodict.pl b/scripts/leodict.pl old mode 100644 new mode 100755 diff --git a/scripts/levelclear.pl b/scripts/levelclear.pl old mode 100644 new mode 100755 diff --git a/scripts/licq.pl b/scripts/licq.pl old mode 100644 new mode 100755 diff --git a/scripts/linkchan.pl b/scripts/linkchan.pl old mode 100644 new mode 100755 diff --git a/scripts/listen.pl b/scripts/listen.pl old mode 100644 new mode 100755 diff --git a/scripts/loadavg.pl b/scripts/loadavg.pl old mode 100644 new mode 100755 diff --git a/scripts/localize.pl b/scripts/localize.pl old mode 100644 new mode 100755 diff --git a/scripts/log2ansi.pl b/scripts/log2ansi.pl old mode 100644 new mode 100755 diff --git a/scripts/logcompress.pl b/scripts/logcompress.pl old mode 100644 new mode 100755 diff --git a/scripts/ls.pl b/scripts/ls.pl old mode 100644 new mode 100755 diff --git a/scripts/lwho.pl b/scripts/lwho.pl old mode 100644 new mode 100755 diff --git a/scripts/mail.pl b/scripts/mail.pl old mode 100644 new mode 100755 diff --git a/scripts/mailcheck_imap.pl b/scripts/mailcheck_imap.pl old mode 100644 new mode 100755 diff --git a/scripts/mailcheck_mbox_flux.pl b/scripts/mailcheck_mbox_flux.pl old mode 100644 new mode 100755 diff --git a/scripts/mailcheck_pop3_kimmo.pl b/scripts/mailcheck_pop3_kimmo.pl old mode 100644 new mode 100755 diff --git a/scripts/mailcount.pl b/scripts/mailcount.pl old mode 100644 new mode 100755 diff --git a/scripts/mangle.pl b/scripts/mangle.pl old mode 100644 new mode 100755 diff --git a/scripts/map.pl b/scripts/map.pl old mode 100644 new mode 100755 diff --git a/scripts/mass_hilight_blocker.pl b/scripts/mass_hilight_blocker.pl old mode 100644 new mode 100755 diff --git a/scripts/mg.pl b/scripts/mg.pl old mode 100644 new mode 100755 diff --git a/scripts/miodek.pl b/scripts/miodek.pl old mode 100644 new mode 100755 diff --git a/scripts/mirc_colour_popup.pl b/scripts/mirc_colour_popup.pl old mode 100644 new mode 100755 diff --git a/scripts/mkick.pl b/scripts/mkick.pl old mode 100644 new mode 100755 diff --git a/scripts/mkshorterlink.pl b/scripts/mkshorterlink.pl old mode 100644 new mode 100755 diff --git a/scripts/mldonkey_bandwidth.pl b/scripts/mldonkey_bandwidth.pl old mode 100644 new mode 100755 diff --git a/scripts/mlock.pl b/scripts/mlock.pl old mode 100644 new mode 100755 diff --git a/scripts/modelist-r.pl b/scripts/modelist-r.pl old mode 100644 new mode 100755 diff --git a/scripts/modelist.pl b/scripts/modelist.pl old mode 100644 new mode 100755 diff --git a/scripts/monitor.pl b/scripts/monitor.pl old mode 100644 new mode 100755 diff --git a/scripts/mood.pl b/scripts/mood.pl old mode 100644 new mode 100755 diff --git a/scripts/morse.pl b/scripts/morse.pl old mode 100644 new mode 100755 diff --git a/scripts/mouse.pl b/scripts/mouse.pl old mode 100644 new mode 100755 diff --git a/scripts/mpd.pl b/scripts/mpd.pl old mode 100644 new mode 100755 diff --git a/scripts/mpg123.pl b/scripts/mpg123.pl old mode 100644 new mode 100755 diff --git a/scripts/mqtt-notify.pl b/scripts/mqtt-notify.pl old mode 100644 new mode 100755 diff --git a/scripts/msg2notice.pl b/scripts/msg2notice.pl old mode 100644 new mode 100755 diff --git a/scripts/multipaste.pl b/scripts/multipaste.pl old mode 100644 new mode 100755 diff --git a/scripts/my_beep.pl b/scripts/my_beep.pl old mode 100644 new mode 100755 diff --git a/scripts/mygoogle.pl b/scripts/mygoogle.pl old mode 100644 new mode 100755 diff --git a/scripts/myimdb.pl b/scripts/myimdb.pl old mode 100644 new mode 100755 diff --git a/scripts/mysqlurllogger.pl b/scripts/mysqlurllogger.pl old mode 100644 new mode 100755 diff --git a/scripts/nact.pl b/scripts/nact.pl old mode 100644 new mode 100755 diff --git a/scripts/netswitch.pl b/scripts/netswitch.pl old mode 100644 new mode 100755 diff --git a/scripts/news.pl b/scripts/news.pl old mode 100644 new mode 100755 diff --git a/scripts/newsline.pl b/scripts/newsline.pl old mode 100644 new mode 100755 diff --git a/scripts/nickban.pl b/scripts/nickban.pl old mode 100644 new mode 100755 diff --git a/scripts/nickcolor.pl b/scripts/nickcolor.pl old mode 100644 new mode 100755 diff --git a/scripts/nickignore.pl b/scripts/nickignore.pl old mode 100644 new mode 100755 diff --git a/scripts/nickmix-c0ffee.pl b/scripts/nickmix-c0ffee.pl old mode 100644 new mode 100755 diff --git a/scripts/nickmix_pasky.pl b/scripts/nickmix_pasky.pl old mode 100644 new mode 100755 diff --git a/scripts/nickserv.pl b/scripts/nickserv.pl old mode 100644 new mode 100755 diff --git a/scripts/niq.pl b/scripts/niq.pl old mode 100644 new mode 100755 diff --git a/scripts/nm.pl b/scripts/nm.pl old mode 100644 new mode 100755 diff --git a/scripts/nocaps.pl b/scripts/nocaps.pl old mode 100644 new mode 100755 diff --git a/scripts/nocollide.pl b/scripts/nocollide.pl old mode 100644 new mode 100755 diff --git a/scripts/noisyquery.pl b/scripts/noisyquery.pl old mode 100644 new mode 100755 diff --git a/scripts/nopl.pl b/scripts/nopl.pl old mode 100644 new mode 100755 diff --git a/scripts/norepeat.pl b/scripts/norepeat.pl old mode 100644 new mode 100755 diff --git a/scripts/notes.pl b/scripts/notes.pl old mode 100644 new mode 100755 diff --git a/scripts/noteserve.pl b/scripts/noteserve.pl old mode 100644 new mode 100755 diff --git a/scripts/noticelogic.pl b/scripts/noticelogic.pl old mode 100644 new mode 100755 diff --git a/scripts/noticemove.pl b/scripts/noticemove.pl old mode 100644 new mode 100755 diff --git a/scripts/notonline.pl b/scripts/notonline.pl old mode 100644 new mode 100755 diff --git a/scripts/null.pl b/scripts/null.pl old mode 100644 new mode 100755 diff --git a/scripts/ogg123.pl b/scripts/ogg123.pl old mode 100644 new mode 100755 diff --git a/scripts/oidenty.pl b/scripts/oidenty.pl old mode 100644 new mode 100755 diff --git a/scripts/on.pl b/scripts/on.pl old mode 100644 new mode 100755 diff --git a/scripts/ontv.pl b/scripts/ontv.pl old mode 100644 new mode 100755 diff --git a/scripts/oops.pl b/scripts/oops.pl old mode 100644 new mode 100755 diff --git a/scripts/oopsie.pl b/scripts/oopsie.pl old mode 100644 new mode 100755 diff --git a/scripts/openurl.pl b/scripts/openurl.pl old mode 100644 new mode 100755 diff --git a/scripts/operit.pl b/scripts/operit.pl old mode 100644 new mode 100755 diff --git a/scripts/operview.pl b/scripts/operview.pl old mode 100644 new mode 100755 diff --git a/scripts/opnotice.pl b/scripts/opnotice.pl old mode 100644 new mode 100755 diff --git a/scripts/opnotify.pl b/scripts/opnotify.pl old mode 100644 new mode 100755 diff --git a/scripts/orphamp.pl b/scripts/orphamp.pl old mode 100644 new mode 100755 diff --git a/scripts/osd.pl b/scripts/osd.pl old mode 100644 new mode 100755 diff --git a/scripts/ownage.pl b/scripts/ownage.pl old mode 100644 new mode 100755 diff --git a/scripts/page-c0ffee.pl b/scripts/page-c0ffee.pl old mode 100644 new mode 100755 diff --git a/scripts/page_reeler.pl b/scripts/page_reeler.pl old mode 100644 new mode 100755 diff --git a/scripts/pager.pl b/scripts/pager.pl old mode 100644 new mode 100755 diff --git a/scripts/pangotext.pl b/scripts/pangotext.pl old mode 100644 new mode 100755 diff --git a/scripts/paste-derwan.pl b/scripts/paste-derwan.pl old mode 100644 new mode 100755 diff --git a/scripts/paste_derwan.pl b/scripts/paste_derwan.pl old mode 100644 new mode 100755 diff --git a/scripts/paste_huggie.pl b/scripts/paste_huggie.pl old mode 100644 new mode 100755 diff --git a/scripts/paste_kimmoke.pl b/scripts/paste_kimmoke.pl old mode 100644 new mode 100755 diff --git a/scripts/pelix.pl b/scripts/pelix.pl old mode 100644 new mode 100755 diff --git a/scripts/people.pl b/scripts/people.pl old mode 100644 new mode 100755 diff --git a/scripts/per_window_prompt.pl b/scripts/per_window_prompt.pl old mode 100644 new mode 100755 diff --git a/scripts/pggb_sound.pl b/scripts/pggb_sound.pl old mode 100644 new mode 100755 diff --git a/scripts/poison.pl b/scripts/poison.pl old mode 100644 new mode 100755 diff --git a/scripts/postpone.pl b/scripts/postpone.pl old mode 100644 new mode 100755 diff --git a/scripts/ppl.pl b/scripts/ppl.pl old mode 100644 new mode 100755 diff --git a/scripts/procmaillog.pl b/scripts/procmaillog.pl old mode 100644 new mode 100755 diff --git a/scripts/query.pl b/scripts/query.pl old mode 100644 new mode 100755 diff --git a/scripts/queryresume.pl b/scripts/queryresume.pl old mode 100644 new mode 100755 diff --git a/scripts/quitmsg.pl b/scripts/quitmsg.pl old mode 100644 new mode 100755 diff --git a/scripts/quitrand.pl b/scripts/quitrand.pl old mode 100644 new mode 100755 diff --git a/scripts/quiz.pl b/scripts/quiz.pl old mode 100644 new mode 100755 diff --git a/scripts/quizgr.pl b/scripts/quizgr.pl old mode 100644 new mode 100755 diff --git a/scripts/quizmaster-fr.pl b/scripts/quizmaster-fr.pl old mode 100644 new mode 100755 diff --git a/scripts/quizmaster.pl b/scripts/quizmaster.pl old mode 100644 new mode 100755 diff --git a/scripts/rainbow.pl b/scripts/rainbow.pl old mode 100644 new mode 100755 diff --git a/scripts/randaway.pl b/scripts/randaway.pl old mode 100644 new mode 100755 diff --git a/scripts/randname.pl b/scripts/randname.pl old mode 100644 new mode 100755 diff --git a/scripts/redirect.pl b/scripts/redirect.pl old mode 100644 new mode 100755 diff --git a/scripts/relm.pl b/scripts/relm.pl old mode 100644 new mode 100755 diff --git a/scripts/remote.pl b/scripts/remote.pl old mode 100644 new mode 100755 diff --git a/scripts/reorder.pl b/scripts/reorder.pl old mode 100644 new mode 100755 diff --git a/scripts/repeat.pl b/scripts/repeat.pl old mode 100644 new mode 100755 diff --git a/scripts/resize_split.pl b/scripts/resize_split.pl old mode 100644 new mode 100755 diff --git a/scripts/rhythmbox.pl b/scripts/rhythmbox.pl old mode 100644 new mode 100755 diff --git a/scripts/rk.pl b/scripts/rk.pl old mode 100644 new mode 100755 diff --git a/scripts/romaji.pl b/scripts/romaji.pl old mode 100644 new mode 100755 diff --git a/scripts/romajibind.pl b/scripts/romajibind.pl old mode 100644 new mode 100755 diff --git a/scripts/rot13.pl b/scripts/rot13.pl old mode 100644 new mode 100755 diff --git a/scripts/rotator.pl b/scripts/rotator.pl old mode 100644 new mode 100755 diff --git a/scripts/sana_cmd.pl b/scripts/sana_cmd.pl old mode 100644 new mode 100755 diff --git a/scripts/sb_search.pl b/scripts/sb_search.pl old mode 100644 new mode 100755 diff --git a/scripts/schwaebisch.pl b/scripts/schwaebisch.pl old mode 100644 new mode 100755 diff --git a/scripts/screen_away.pl b/scripts/screen_away.pl old mode 100644 new mode 100755 diff --git a/scripts/scriptassist.pl b/scripts/scriptassist.pl old mode 100644 new mode 100755 diff --git a/scripts/scripthelp.pl b/scripts/scripthelp.pl old mode 100644 new mode 100755 diff --git a/scripts/scriptinfo.pl b/scripts/scriptinfo.pl old mode 100644 new mode 100755 diff --git a/scripts/scriptsave.pl b/scripts/scriptsave.pl old mode 100644 new mode 100755 diff --git a/scripts/scrmable.pl b/scripts/scrmable.pl old mode 100644 new mode 100755 diff --git a/scripts/scroller.pl b/scripts/scroller.pl old mode 100644 new mode 100755 diff --git a/scripts/securemsg.pl b/scripts/securemsg.pl old mode 100644 new mode 100755 diff --git a/scripts/seen.pl b/scripts/seen.pl old mode 100644 new mode 100755 diff --git a/scripts/send_scroll.pl b/scripts/send_scroll.pl old mode 100644 new mode 100755 diff --git a/scripts/servercomplete.pl b/scripts/servercomplete.pl old mode 100644 new mode 100755 diff --git a/scripts/seti.pl b/scripts/seti.pl old mode 100644 new mode 100755 diff --git a/scripts/shortenurl.pl b/scripts/shortenurl.pl old mode 100644 new mode 100755 diff --git a/scripts/shorturl.pl b/scripts/shorturl.pl old mode 100644 new mode 100755 diff --git a/scripts/showhilight.pl b/scripts/showhilight.pl old mode 100644 new mode 100755 diff --git a/scripts/showhost.pl b/scripts/showhost.pl old mode 100644 new mode 100755 diff --git a/scripts/showmode.pl b/scripts/showmode.pl old mode 100644 new mode 100755 diff --git a/scripts/slack_complete.pl b/scripts/slack_complete.pl old mode 100644 new mode 100755 diff --git a/scripts/slack_emoji.pl b/scripts/slack_emoji.pl old mode 100644 new mode 100755 diff --git a/scripts/smartfilter.pl b/scripts/smartfilter.pl old mode 100644 new mode 100755 diff --git a/scripts/smiley.pl b/scripts/smiley.pl old mode 100644 new mode 100755 diff --git a/scripts/sms.pl b/scripts/sms.pl old mode 100644 new mode 100755 diff --git a/scripts/snmpup.pl b/scripts/snmpup.pl old mode 100644 new mode 100755 diff --git a/scripts/spambot.pl b/scripts/spambot.pl old mode 100644 new mode 100755 diff --git a/scripts/special_complete.pl b/scripts/special_complete.pl old mode 100644 new mode 100755 diff --git a/scripts/spell.pl b/scripts/spell.pl old mode 100644 new mode 100755 diff --git a/scripts/spellcheck.pl b/scripts/spellcheck.pl old mode 100644 new mode 100755 diff --git a/scripts/sping.pl b/scripts/sping.pl old mode 100644 new mode 100755 diff --git a/scripts/splitlong.pl b/scripts/splitlong.pl old mode 100644 new mode 100755 diff --git a/scripts/spotify.pl b/scripts/spotify.pl old mode 100644 new mode 100755 diff --git a/scripts/stocks.pl b/scripts/stocks.pl old mode 100644 new mode 100755 diff --git a/scripts/studivz_bitlbee_rename.pl b/scripts/studivz_bitlbee_rename.pl old mode 100644 new mode 100755 diff --git a/scripts/synccheck.pl b/scripts/synccheck.pl old mode 100644 new mode 100755 diff --git a/scripts/sysinfo270-irssi.pl b/scripts/sysinfo270-irssi.pl old mode 100644 new mode 100755 diff --git a/scripts/sysinfo277-irssi.pl b/scripts/sysinfo277-irssi.pl old mode 100644 new mode 100755 diff --git a/scripts/sysinfo_dg.pl b/scripts/sysinfo_dg.pl old mode 100644 new mode 100755 diff --git a/scripts/sysinfoplus.pl b/scripts/sysinfoplus.pl old mode 100644 new mode 100755 diff --git a/scripts/tab_stop.pl b/scripts/tab_stop.pl old mode 100644 new mode 100755 diff --git a/scripts/talk.pl b/scripts/talk.pl old mode 100644 new mode 100755 diff --git a/scripts/target.pl b/scripts/target.pl old mode 100644 new mode 100755 diff --git a/scripts/thankop.pl b/scripts/thankop.pl old mode 100644 new mode 100755 diff --git a/scripts/thistory.pl b/scripts/thistory.pl old mode 100644 new mode 100755 diff --git a/scripts/timer.pl b/scripts/timer.pl old mode 100644 new mode 100755 diff --git a/scripts/timezones.pl b/scripts/timezones.pl old mode 100644 new mode 100755 diff --git a/scripts/tinyurl.pl b/scripts/tinyurl.pl old mode 100644 new mode 100755 diff --git a/scripts/title.pl b/scripts/title.pl old mode 100644 new mode 100755 diff --git a/scripts/tlock.pl b/scripts/tlock.pl old mode 100644 new mode 100755 diff --git a/scripts/tmux_away.pl b/scripts/tmux_away.pl old mode 100644 new mode 100755 diff --git a/scripts/topics.pl b/scripts/topics.pl old mode 100644 new mode 100755 diff --git a/scripts/topicsed.pl b/scripts/topicsed.pl old mode 100644 new mode 100755 diff --git a/scripts/tordetect.pl b/scripts/tordetect.pl old mode 100644 new mode 100755 diff --git a/scripts/track.pl b/scripts/track.pl old mode 100644 new mode 100755 diff --git a/scripts/trackbar.pl b/scripts/trackbar.pl old mode 100644 new mode 100755 diff --git a/scripts/tracknick.pl b/scripts/tracknick.pl old mode 100644 new mode 100755 diff --git a/scripts/translit.pl b/scripts/translit.pl old mode 100644 new mode 100755 diff --git a/scripts/trigger.pl b/scripts/trigger.pl old mode 100644 new mode 100755 diff --git a/scripts/trustweb.pl b/scripts/trustweb.pl old mode 100644 new mode 100755 diff --git a/scripts/tvmusor.pl b/scripts/tvmusor.pl old mode 100644 new mode 100755 diff --git a/scripts/twitter_theme.pl b/scripts/twitter_theme.pl old mode 100644 new mode 100755 diff --git a/scripts/twprompt.pl b/scripts/twprompt.pl old mode 100644 new mode 100755 diff --git a/scripts/twsocials.pl b/scripts/twsocials.pl old mode 100644 new mode 100755 diff --git a/scripts/twtopic.pl b/scripts/twtopic.pl old mode 100644 new mode 100755 diff --git a/scripts/u.pl b/scripts/u.pl old mode 100644 new mode 100755 diff --git a/scripts/unicode.pl b/scripts/unicode.pl old mode 100644 new mode 100755 diff --git a/scripts/upgradeinfo.pl b/scripts/upgradeinfo.pl old mode 100644 new mode 100755 diff --git a/scripts/upsidedown.pl b/scripts/upsidedown.pl old mode 100644 new mode 100755 diff --git a/scripts/uptime.pl b/scripts/uptime.pl old mode 100644 new mode 100755 diff --git a/scripts/url_log.pl b/scripts/url_log.pl old mode 100644 new mode 100755 diff --git a/scripts/urlfeed.pl b/scripts/urlfeed.pl old mode 100644 new mode 100755 diff --git a/scripts/urlgrab.pl b/scripts/urlgrab.pl old mode 100644 new mode 100755 diff --git a/scripts/urlinfo.pl b/scripts/urlinfo.pl old mode 100644 new mode 100755 diff --git a/scripts/urlplot.pl b/scripts/urlplot.pl old mode 100644 new mode 100755 diff --git a/scripts/usercount.pl b/scripts/usercount.pl old mode 100644 new mode 100755 diff --git a/scripts/userhost.pl b/scripts/userhost.pl old mode 100644 new mode 100755 diff --git a/scripts/users.pl b/scripts/users.pl old mode 100644 new mode 100755 diff --git a/scripts/version-stat.pl b/scripts/version-stat.pl old mode 100644 new mode 100755 diff --git a/scripts/verstats.pl b/scripts/verstats.pl old mode 100644 new mode 100755 diff --git a/scripts/vidinfo.pl b/scripts/vidinfo.pl old mode 100644 new mode 100755 diff --git a/scripts/vowels.pl b/scripts/vowels.pl old mode 100644 new mode 100755 diff --git a/scripts/wa.pl b/scripts/wa.pl old mode 100644 new mode 100755 diff --git a/scripts/warnkick.pl b/scripts/warnkick.pl old mode 100644 new mode 100755 diff --git a/scripts/washnicks.pl b/scripts/washnicks.pl old mode 100644 new mode 100755 diff --git a/scripts/watch.pl b/scripts/watch.pl old mode 100644 new mode 100755 diff --git a/scripts/whitelist.pl b/scripts/whitelist.pl old mode 100644 new mode 100755 diff --git a/scripts/whocount.pl b/scripts/whocount.pl old mode 100644 new mode 100755 diff --git a/scripts/whois.pl b/scripts/whois.pl old mode 100644 new mode 100755 diff --git a/scripts/whois_hexip.pl b/scripts/whois_hexip.pl old mode 100644 new mode 100755 diff --git a/scripts/whos.pl b/scripts/whos.pl old mode 100644 new mode 100755 diff --git a/scripts/wilm.pl b/scripts/wilm.pl old mode 100644 new mode 100755 diff --git a/scripts/window_switcher.pl b/scripts/window_switcher.pl old mode 100644 new mode 100755 diff --git a/scripts/winnum.pl b/scripts/winnum.pl old mode 100644 new mode 100755 diff --git a/scripts/wisestamp.pl b/scripts/wisestamp.pl old mode 100644 new mode 100755 diff --git a/scripts/wkb.pl b/scripts/wkb.pl old mode 100644 new mode 100755 diff --git a/scripts/wordcompletition.pl b/scripts/wordcompletition.pl old mode 100644 new mode 100755 diff --git a/scripts/wordscramble.pl b/scripts/wordscramble.pl old mode 100644 new mode 100755 diff --git a/scripts/xauth.pl b/scripts/xauth.pl old mode 100644 new mode 100755 diff --git a/scripts/xcmd.pl b/scripts/xcmd.pl old mode 100644 new mode 100755 diff --git a/scripts/xdcc.pl b/scripts/xdcc.pl old mode 100644 new mode 100755 diff --git a/scripts/xdcc_autoget.pl b/scripts/xdcc_autoget.pl old mode 100644 new mode 100755 index 16f4639..5923a21 --- a/scripts/xdcc_autoget.pl +++ b/scripts/xdcc_autoget.pl @@ -50,7 +50,7 @@ use File::Copy; use Try::Tiny; use vars qw($VERSION %IRSSI); -$VERSION = "2.0"; +$VERSION = "2.1"; %IRSSI = ( name => "autoget", description => "XDCC Autoget, for automated searching and downloading of xdcc packs", @@ -143,7 +143,7 @@ sub ag_list sub ag_initserver #init server { - Irssi::signal_remove("server connected", "ag_server"); + Irssi::signal_remove("server connected", "ag_initserver"); $statusbarmessage = "Connected"; $server = $_[0]; if (!$runningflag) {Irssi::timeout_add_once(5000, sub { &ag_run; }, []);} @@ -270,11 +270,11 @@ sub ag_search #searches bots for packs $msgflag[$botcounter] = 0; #unset message flag so that ag_skip knows no important message has arrived if($episodicflag) { - my $searchterm; + my $searchterm = $terms[$termcounter[$botcounter]]; my @words = split(/#/, $terms[$termcounter[$botcounter]]); - my $ep = sprintf("%.2d", $episode[$botcounter]); + my $ep = sprintf("%d", $episode[$botcounter]); if ($#words > 0){$searchterm = "$words[0]$ep$words[1]";} - else {$searchterm = "$words[0] $ep";} + else {$searchterm = "$terms[$termcounter[$botcounter]] $ep";} ag_message("msg $bots[$botcounter] $findprefix $searchterm" ); push(@{$totags[$botcounter]}, Irssi::timeout_add_once($botdelay * 1000, sub { ag_skip($botcounter); } , [])); @@ -323,9 +323,9 @@ sub ag_getpacks #if ($m =~ m{#(\d+):}) my @temp = split(/[#,]/, $message); #split up the message into 'words' my $timeoutscleared = 0; - my $newpackflag = 1; foreach my $m (@temp) #find packs (#[NUMBER]: format) { + my $newpackflag = 1; if ($m =~ m/(\d+):(.+)/) { if (!$timeoutscleared) #reset timeouts if any packs are found @@ -339,7 +339,7 @@ sub ag_getpacks #if ($m =~ m{#(\d+):}) my $filename = $2; $filename =~ tr/[ ']/[__]/; if ($n eq "$bots[$botcounter] $1" or $n eq $filename) {$newpackflag = 0;} - last if ($n eq "$bots[$botcounter] $1"); + last if ($n eq "$bots[$botcounter] $1" or $n eq $filename); } if($newpackflag){push(@{$packs[$botcounter]}, $1);} #push all new pack numbers to list of packs } @@ -580,7 +580,6 @@ sub ag_addfinished #save finished downloads ag_getfinished; } - sub ag_parseadd #parses add arguments for storage { my ($file, @args) = @_; @@ -650,7 +649,6 @@ sub ag_parserem #parses remove arguments for deletion from file sub ag_add #add search terms { - ag_server; my @args = quotewords('\s+', 0, $_[0]); #split arguments (words in brackets not seperated) if ($#args < 0) { @@ -664,7 +662,6 @@ sub ag_add #add search terms sub ag_rem #remove ssearch terms { - ag_server; my @args = quotewords('\s+', 0, $_[0]); if ($#args < 0) { @@ -678,7 +675,6 @@ sub ag_rem #remove ssearch terms sub ag_botadd #add bots { - ag_server; my @args = quotewords('\s+', 0, $_[0]); if ($#args < 0) { @@ -692,7 +688,6 @@ sub ag_botadd #add bots sub ag_botrem #remove bots { - ag_server; my @args = quotewords('\s+', 0, $_[0]); if ($#args < 0) { diff --git a/scripts/xdccget.pl b/scripts/xdccget.pl old mode 100644 new mode 100755 diff --git a/scripts/xetra.pl b/scripts/xetra.pl old mode 100644 new mode 100755 diff --git a/scripts/xlist.pl b/scripts/xlist.pl old mode 100644 new mode 100755 diff --git a/scripts/xmms.pl b/scripts/xmms.pl old mode 100644 new mode 100755 diff --git a/scripts/xmms2.pl b/scripts/xmms2.pl old mode 100644 new mode 100755 diff --git a/scripts/xmmsinfo.pl b/scripts/xmmsinfo.pl old mode 100644 new mode 100755 diff --git a/scripts/xmpp-notify.pl b/scripts/xmpp-notify.pl old mode 100644 new mode 100755 diff --git a/scripts/xqf.pl b/scripts/xqf.pl old mode 100644 new mode 100755 -- cgit v1.2.3 From b36fdb260e47a7320de1aff24c7d34472e82ad18 Mon Sep 17 00:00:00 2001 From: Alex Checca Date: Wed, 26 Oct 2016 19:17:35 -0400 Subject: Revert "various bugfixes from many months of usage" This reverts commit 05a76b2e0f8baf489f667583f8f3972e7927d67c. --- scripts/8-ball.pl | 0 scripts/Cirssi.pl | 0 scripts/UNIBG-autoident.pl | 0 scripts/accent.pl | 0 scripts/accountname.pl | 0 scripts/act.pl | 0 scripts/act_fifo.pl | 0 scripts/active_notice.pl | 0 scripts/active_notify.pl | 0 scripts/activity_file.pl | 0 scripts/ai.pl | 0 scripts/aidle.pl | 0 scripts/akftp.pl | 0 scripts/alame.pl | 0 scripts/amarok_ssh.pl | 0 scripts/amaroknp.pl | 0 scripts/anotherway.pl | 0 scripts/antiplenk.pl | 0 scripts/apm.pl | 0 scripts/armeija.pl | 0 scripts/ascii.pl | 0 scripts/aspell_complete.pl | 0 scripts/auth_quakenet.pl | 0 scripts/auto_whois.pl | 0 scripts/autoaway.pl | 0 scripts/autochannel.pl | 0 scripts/autoclearinput.pl | 0 scripts/autocycle.pl | 0 scripts/autolimit.pl | 0 scripts/autoop.pl | 0 scripts/autoopper.pl | 0 scripts/autorealname.pl | 0 scripts/autorejoin.pl | 0 scripts/autorejoinpunish.pl | 0 scripts/autoreminder.pl | 0 scripts/autostuff.pl | 0 scripts/autoversion.pl | 0 scripts/autovoice.pl | 0 scripts/autowhois.pl | 0 scripts/autowhois_simple.pl | 0 scripts/autowrap.pl | 0 scripts/away.pl | 0 scripts/away2web.pl | 0 scripts/away_hilight_notice.pl | 0 scripts/away_verbose.pl | 0 scripts/awaybar.pl | 0 scripts/awaylogcnt.pl | 0 scripts/awayproxy.pl | 0 scripts/babelirc.pl | 0 scripts/badword.pl | 0 scripts/ban.pl | 0 scripts/bandwidth.pl | 0 scripts/bansearch.pl | 0 scripts/bantime.pl | 0 scripts/beep.pl | 0 scripts/beep_beep.pl | 0 scripts/beepaway.pl | 0 scripts/bestoiber.pl | 0 scripts/bgta.pl | 0 scripts/binary.pl | 0 scripts/binary_time.pl | 0 scripts/bitlbee_blist.pl | 0 scripts/bitlbee_join_notice.pl | 0 scripts/bitlbee_nick_change.pl | 0 scripts/bitlbee_tab_completion.pl | 0 scripts/bitlbee_timestamp.pl | 0 scripts/bitlbee_typing_notice.pl | 0 scripts/blowjob.pl | 0 scripts/bmi.pl | 0 scripts/buf.pl | 0 scripts/calc.pl | 0 scripts/callerid.pl | 0 scripts/cap_sasl.pl | 0 scripts/cddb.pl | 0 scripts/centericq.pl | 0 scripts/cgrep.pl | 0 scripts/chanact.pl | 0 scripts/chanfull.pl | 0 scripts/chanfull_duden.pl | 0 scripts/chanpeak.pl | 0 scripts/chansearch.pl | 0 scripts/chanshare.pl | 0 scripts/chansort.pl | 0 scripts/chansync.pl | 0 scripts/chops.pl | 0 scripts/cleanpublic.pl | 0 scripts/clipboard.pl | 0 scripts/cloneprot.pl | 0 scripts/clones.pl | 0 scripts/clones_scanner.pl | 0 scripts/colorkick.pl | 0 scripts/colorswap.pl | 0 scripts/complete_lastspoke.pl | 0 scripts/connectcmd.pl | 0 scripts/countdown.pl | 0 scripts/country.pl | 0 scripts/cp1250_kick.pl | 0 scripts/crapbuster.pl | 0 scripts/credstore.pl | 0 scripts/cron.pl | 0 scripts/cwho.pl | 0 scripts/dancer_forwardfix.pl | 0 scripts/dancer_hide_477.pl | 0 scripts/dau.pl | 0 scripts/dcc_ip.pl | 0 scripts/dccmove.pl | 0 scripts/dccself.pl | 0 scripts/dccstat.pl | 0 scripts/defaultchanmode.pl | 0 scripts/dejunk.pl | 0 scripts/deliciousurl.pl | 0 scripts/df.pl | 0 scripts/dice.pl | 0 scripts/dice_concise.pl | 0 scripts/dictcomplete.pl | 0 scripts/dispatch.pl | 0 scripts/dns.pl | 0 scripts/dnsspam.pl | 0 scripts/doc.pl | 0 scripts/doublefilter.pl | 0 scripts/dr_who.pl | 0 scripts/efnetorg.pl | 0 scripts/elist.pl | 0 scripts/eliza.pl | 0 scripts/email_msgs.pl | 0 scripts/email_privmsgs.pl | 0 scripts/emaildb1.0.pl | 0 scripts/emo.pl | 0 scripts/events.pl | 0 scripts/exec_clean.pl | 0 scripts/extaway.pl | 0 scripts/fakectcp.pl | 0 scripts/fcountry.pl | 0 scripts/figlet.pl | 0 scripts/file.pl | 0 scripts/find.pl | 0 scripts/findbot.pl | 0 scripts/fleech.pl | 0 scripts/fnotify.pl | 0 scripts/follow.pl | 0 scripts/foo.pl | 0 scripts/foreach_user.pl | 0 scripts/fortune.pl | 0 scripts/forward.pl | 0 scripts/freenode_filter.pl | 0 scripts/friends_peder.pl | 0 scripts/friends_shasta.pl | 0 scripts/frm_outgmsgs.pl | 0 scripts/fserve.pl | 0 scripts/fuckem.pl | 0 scripts/getop.pl | 0 scripts/gimmie.pl | 0 scripts/go.pl | 0 scripts/go2.pl | 0 scripts/google.pl | 0 scripts/gpgvalidator.pl | 0 scripts/greetignore.pl | 0 scripts/grep.pl | 0 scripts/grepbans.pl | 0 scripts/gsi.pl | 0 scripts/gtrans.pl | 0 scripts/guts.pl | 0 scripts/hddtemp.pl | 0 scripts/hello.pl | 0 scripts/hide.pl | 0 scripts/hideauth.pl | 0 scripts/highlite.pl | 0 scripts/hignore.pl | 0 scripts/hilightwin.pl | 0 scripts/hipchat_complete.pl | 0 scripts/history_search.pl | 0 scripts/hitcount.pl | 0 scripts/hl.pl | 0 scripts/hlbot.pl | 0 scripts/hostname.pl | 0 scripts/iMPD.pl | 0 scripts/identify-md5.pl | 0 scripts/idletime.pl | 0 scripts/idonkey.pl | 0 scripts/ignore_log.pl | 0 scripts/ignoreoc.pl | 0 scripts/ignorsula.pl | 0 scripts/il.pl | 0 scripts/imdb.pl | 0 scripts/intjoin.pl | 0 scripts/invitejoin.pl | 0 scripts/ipupdate.pl | 0 scripts/iraident.pl | 0 scripts/irc_chess.pl | 0 scripts/irccomplete.pl | 0 scripts/ircgallery.pl | 0 scripts/ircgmessagenotify.pl | 0 scripts/ircops.pl | 0 scripts/ircsec.pl | 0 scripts/irssi-feed.pl | 0 scripts/irssiBlaster.pl | 0 scripts/irssi_logger.pl | 0 scripts/irssiq.pl | 0 scripts/isbanned.pl | 0 scripts/isdn.pl | 0 scripts/itime.pl | 0 scripts/ixmmsa.pl | 0 scripts/joininfo.pl | 0 scripts/kban-referrals.pl | 0 scripts/kblamehost.pl | 0 scripts/keepnick.pl | 0 scripts/kenny.pl | 0 scripts/kernel.pl | 0 scripts/keybinds.pl | 0 scripts/kicks.pl | 0 scripts/kill_fake_gets.pl | 0 scripts/kills.pl | 0 scripts/kline_warning.pl | 0 scripts/l33tmusic.pl | 0 scripts/lastfm.pl | 0 scripts/lastspoke.pl | 0 scripts/len.pl | 0 scripts/leodict.pl | 0 scripts/levelclear.pl | 0 scripts/licq.pl | 0 scripts/linkchan.pl | 0 scripts/listen.pl | 0 scripts/loadavg.pl | 0 scripts/localize.pl | 0 scripts/log2ansi.pl | 0 scripts/logcompress.pl | 0 scripts/ls.pl | 0 scripts/lwho.pl | 0 scripts/mail.pl | 0 scripts/mailcheck_imap.pl | 0 scripts/mailcheck_mbox_flux.pl | 0 scripts/mailcheck_pop3_kimmo.pl | 0 scripts/mailcount.pl | 0 scripts/mangle.pl | 0 scripts/map.pl | 0 scripts/mass_hilight_blocker.pl | 0 scripts/mg.pl | 0 scripts/miodek.pl | 0 scripts/mirc_colour_popup.pl | 0 scripts/mkick.pl | 0 scripts/mkshorterlink.pl | 0 scripts/mldonkey_bandwidth.pl | 0 scripts/mlock.pl | 0 scripts/modelist-r.pl | 0 scripts/modelist.pl | 0 scripts/monitor.pl | 0 scripts/mood.pl | 0 scripts/morse.pl | 0 scripts/mouse.pl | 0 scripts/mpd.pl | 0 scripts/mpg123.pl | 0 scripts/mqtt-notify.pl | 0 scripts/msg2notice.pl | 0 scripts/multipaste.pl | 0 scripts/my_beep.pl | 0 scripts/mygoogle.pl | 0 scripts/myimdb.pl | 0 scripts/mysqlurllogger.pl | 0 scripts/nact.pl | 0 scripts/netswitch.pl | 0 scripts/news.pl | 0 scripts/newsline.pl | 0 scripts/nickban.pl | 0 scripts/nickcolor.pl | 0 scripts/nickignore.pl | 0 scripts/nickmix-c0ffee.pl | 0 scripts/nickmix_pasky.pl | 0 scripts/nickserv.pl | 0 scripts/niq.pl | 0 scripts/nm.pl | 0 scripts/nocaps.pl | 0 scripts/nocollide.pl | 0 scripts/noisyquery.pl | 0 scripts/nopl.pl | 0 scripts/norepeat.pl | 0 scripts/notes.pl | 0 scripts/noteserve.pl | 0 scripts/noticelogic.pl | 0 scripts/noticemove.pl | 0 scripts/notonline.pl | 0 scripts/null.pl | 0 scripts/ogg123.pl | 0 scripts/oidenty.pl | 0 scripts/on.pl | 0 scripts/ontv.pl | 0 scripts/oops.pl | 0 scripts/oopsie.pl | 0 scripts/openurl.pl | 0 scripts/operit.pl | 0 scripts/operview.pl | 0 scripts/opnotice.pl | 0 scripts/opnotify.pl | 0 scripts/orphamp.pl | 0 scripts/osd.pl | 0 scripts/ownage.pl | 0 scripts/page-c0ffee.pl | 0 scripts/page_reeler.pl | 0 scripts/pager.pl | 0 scripts/pangotext.pl | 0 scripts/paste-derwan.pl | 0 scripts/paste_derwan.pl | 0 scripts/paste_huggie.pl | 0 scripts/paste_kimmoke.pl | 0 scripts/pelix.pl | 0 scripts/people.pl | 0 scripts/per_window_prompt.pl | 0 scripts/pggb_sound.pl | 0 scripts/poison.pl | 0 scripts/postpone.pl | 0 scripts/ppl.pl | 0 scripts/procmaillog.pl | 0 scripts/query.pl | 0 scripts/queryresume.pl | 0 scripts/quitmsg.pl | 0 scripts/quitrand.pl | 0 scripts/quiz.pl | 0 scripts/quizgr.pl | 0 scripts/quizmaster-fr.pl | 0 scripts/quizmaster.pl | 0 scripts/rainbow.pl | 0 scripts/randaway.pl | 0 scripts/randname.pl | 0 scripts/redirect.pl | 0 scripts/relm.pl | 0 scripts/remote.pl | 0 scripts/reorder.pl | 0 scripts/repeat.pl | 0 scripts/resize_split.pl | 0 scripts/rhythmbox.pl | 0 scripts/rk.pl | 0 scripts/romaji.pl | 0 scripts/romajibind.pl | 0 scripts/rot13.pl | 0 scripts/rotator.pl | 0 scripts/sana_cmd.pl | 0 scripts/sb_search.pl | 0 scripts/schwaebisch.pl | 0 scripts/screen_away.pl | 0 scripts/scriptassist.pl | 0 scripts/scripthelp.pl | 0 scripts/scriptinfo.pl | 0 scripts/scriptsave.pl | 0 scripts/scrmable.pl | 0 scripts/scroller.pl | 0 scripts/securemsg.pl | 0 scripts/seen.pl | 0 scripts/send_scroll.pl | 0 scripts/servercomplete.pl | 0 scripts/seti.pl | 0 scripts/shortenurl.pl | 0 scripts/shorturl.pl | 0 scripts/showhilight.pl | 0 scripts/showhost.pl | 0 scripts/showmode.pl | 0 scripts/slack_complete.pl | 0 scripts/slack_emoji.pl | 0 scripts/smartfilter.pl | 0 scripts/smiley.pl | 0 scripts/sms.pl | 0 scripts/snmpup.pl | 0 scripts/spambot.pl | 0 scripts/special_complete.pl | 0 scripts/spell.pl | 0 scripts/spellcheck.pl | 0 scripts/sping.pl | 0 scripts/splitlong.pl | 0 scripts/spotify.pl | 0 scripts/stocks.pl | 0 scripts/studivz_bitlbee_rename.pl | 0 scripts/synccheck.pl | 0 scripts/sysinfo270-irssi.pl | 0 scripts/sysinfo277-irssi.pl | 0 scripts/sysinfo_dg.pl | 0 scripts/sysinfoplus.pl | 0 scripts/tab_stop.pl | 0 scripts/talk.pl | 0 scripts/target.pl | 0 scripts/thankop.pl | 0 scripts/thistory.pl | 0 scripts/timer.pl | 0 scripts/timezones.pl | 0 scripts/tinyurl.pl | 0 scripts/title.pl | 0 scripts/tlock.pl | 0 scripts/tmux_away.pl | 0 scripts/topics.pl | 0 scripts/topicsed.pl | 0 scripts/tordetect.pl | 0 scripts/track.pl | 0 scripts/trackbar.pl | 0 scripts/tracknick.pl | 0 scripts/translit.pl | 0 scripts/trigger.pl | 0 scripts/trustweb.pl | 0 scripts/tvmusor.pl | 0 scripts/twitter_theme.pl | 0 scripts/twprompt.pl | 0 scripts/twsocials.pl | 0 scripts/twtopic.pl | 0 scripts/u.pl | 0 scripts/unicode.pl | 0 scripts/upgradeinfo.pl | 0 scripts/upsidedown.pl | 0 scripts/uptime.pl | 0 scripts/url_log.pl | 0 scripts/urlfeed.pl | 0 scripts/urlgrab.pl | 0 scripts/urlinfo.pl | 0 scripts/urlplot.pl | 0 scripts/usercount.pl | 0 scripts/userhost.pl | 0 scripts/users.pl | 0 scripts/version-stat.pl | 0 scripts/verstats.pl | 0 scripts/vidinfo.pl | 0 scripts/vowels.pl | 0 scripts/wa.pl | 0 scripts/warnkick.pl | 0 scripts/washnicks.pl | 0 scripts/watch.pl | 0 scripts/whitelist.pl | 0 scripts/whocount.pl | 0 scripts/whois.pl | 0 scripts/whois_hexip.pl | 0 scripts/whos.pl | 0 scripts/wilm.pl | 0 scripts/window_switcher.pl | 0 scripts/winnum.pl | 0 scripts/wisestamp.pl | 0 scripts/wkb.pl | 0 scripts/wordcompletition.pl | 0 scripts/wordscramble.pl | 0 scripts/xauth.pl | 0 scripts/xcmd.pl | 0 scripts/xdcc.pl | 0 scripts/xdcc_autoget.pl | 19 ++++++++++++------- scripts/xdccget.pl | 0 scripts/xetra.pl | 0 scripts/xlist.pl | 0 scripts/xmms.pl | 0 scripts/xmms2.pl | 0 scripts/xmmsinfo.pl | 0 scripts/xmpp-notify.pl | 0 scripts/xqf.pl | 0 444 files changed, 12 insertions(+), 7 deletions(-) mode change 100755 => 100644 scripts/8-ball.pl mode change 100755 => 100644 scripts/Cirssi.pl mode change 100755 => 100644 scripts/UNIBG-autoident.pl mode change 100755 => 100644 scripts/accent.pl mode change 100755 => 100644 scripts/accountname.pl mode change 100755 => 100644 scripts/act.pl mode change 100755 => 100644 scripts/act_fifo.pl mode change 100755 => 100644 scripts/active_notice.pl mode change 100755 => 100644 scripts/active_notify.pl mode change 100755 => 100644 scripts/activity_file.pl mode change 100755 => 100644 scripts/ai.pl mode change 100755 => 100644 scripts/aidle.pl mode change 100755 => 100644 scripts/akftp.pl mode change 100755 => 100644 scripts/alame.pl mode change 100755 => 100644 scripts/amarok_ssh.pl mode change 100755 => 100644 scripts/amaroknp.pl mode change 100755 => 100644 scripts/anotherway.pl mode change 100755 => 100644 scripts/antiplenk.pl mode change 100755 => 100644 scripts/apm.pl mode change 100755 => 100644 scripts/armeija.pl mode change 100755 => 100644 scripts/ascii.pl mode change 100755 => 100644 scripts/aspell_complete.pl mode change 100755 => 100644 scripts/auth_quakenet.pl mode change 100755 => 100644 scripts/auto_whois.pl mode change 100755 => 100644 scripts/autoaway.pl mode change 100755 => 100644 scripts/autochannel.pl mode change 100755 => 100644 scripts/autoclearinput.pl mode change 100755 => 100644 scripts/autocycle.pl mode change 100755 => 100644 scripts/autolimit.pl mode change 100755 => 100644 scripts/autoop.pl mode change 100755 => 100644 scripts/autoopper.pl mode change 100755 => 100644 scripts/autorealname.pl mode change 100755 => 100644 scripts/autorejoin.pl mode change 100755 => 100644 scripts/autorejoinpunish.pl mode change 100755 => 100644 scripts/autoreminder.pl mode change 100755 => 100644 scripts/autostuff.pl mode change 100755 => 100644 scripts/autoversion.pl mode change 100755 => 100644 scripts/autovoice.pl mode change 100755 => 100644 scripts/autowhois.pl mode change 100755 => 100644 scripts/autowhois_simple.pl mode change 100755 => 100644 scripts/autowrap.pl mode change 100755 => 100644 scripts/away.pl mode change 100755 => 100644 scripts/away2web.pl mode change 100755 => 100644 scripts/away_hilight_notice.pl mode change 100755 => 100644 scripts/away_verbose.pl mode change 100755 => 100644 scripts/awaybar.pl mode change 100755 => 100644 scripts/awaylogcnt.pl mode change 100755 => 100644 scripts/awayproxy.pl mode change 100755 => 100644 scripts/babelirc.pl mode change 100755 => 100644 scripts/badword.pl mode change 100755 => 100644 scripts/ban.pl mode change 100755 => 100644 scripts/bandwidth.pl mode change 100755 => 100644 scripts/bansearch.pl mode change 100755 => 100644 scripts/bantime.pl mode change 100755 => 100644 scripts/beep.pl mode change 100755 => 100644 scripts/beep_beep.pl mode change 100755 => 100644 scripts/beepaway.pl mode change 100755 => 100644 scripts/bestoiber.pl mode change 100755 => 100644 scripts/bgta.pl mode change 100755 => 100644 scripts/binary.pl mode change 100755 => 100644 scripts/binary_time.pl mode change 100755 => 100644 scripts/bitlbee_blist.pl mode change 100755 => 100644 scripts/bitlbee_join_notice.pl mode change 100755 => 100644 scripts/bitlbee_nick_change.pl mode change 100755 => 100644 scripts/bitlbee_tab_completion.pl mode change 100755 => 100644 scripts/bitlbee_timestamp.pl mode change 100755 => 100644 scripts/bitlbee_typing_notice.pl mode change 100755 => 100644 scripts/blowjob.pl mode change 100755 => 100644 scripts/bmi.pl mode change 100755 => 100644 scripts/buf.pl mode change 100755 => 100644 scripts/calc.pl mode change 100755 => 100644 scripts/callerid.pl mode change 100755 => 100644 scripts/cap_sasl.pl mode change 100755 => 100644 scripts/cddb.pl mode change 100755 => 100644 scripts/centericq.pl mode change 100755 => 100644 scripts/cgrep.pl mode change 100755 => 100644 scripts/chanact.pl mode change 100755 => 100644 scripts/chanfull.pl mode change 100755 => 100644 scripts/chanfull_duden.pl mode change 100755 => 100644 scripts/chanpeak.pl mode change 100755 => 100644 scripts/chansearch.pl mode change 100755 => 100644 scripts/chanshare.pl mode change 100755 => 100644 scripts/chansort.pl mode change 100755 => 100644 scripts/chansync.pl mode change 100755 => 100644 scripts/chops.pl mode change 100755 => 100644 scripts/cleanpublic.pl mode change 100755 => 100644 scripts/clipboard.pl mode change 100755 => 100644 scripts/cloneprot.pl mode change 100755 => 100644 scripts/clones.pl mode change 100755 => 100644 scripts/clones_scanner.pl mode change 100755 => 100644 scripts/colorkick.pl mode change 100755 => 100644 scripts/colorswap.pl mode change 100755 => 100644 scripts/complete_lastspoke.pl mode change 100755 => 100644 scripts/connectcmd.pl mode change 100755 => 100644 scripts/countdown.pl mode change 100755 => 100644 scripts/country.pl mode change 100755 => 100644 scripts/cp1250_kick.pl mode change 100755 => 100644 scripts/crapbuster.pl mode change 100755 => 100644 scripts/credstore.pl mode change 100755 => 100644 scripts/cron.pl mode change 100755 => 100644 scripts/cwho.pl mode change 100755 => 100644 scripts/dancer_forwardfix.pl mode change 100755 => 100644 scripts/dancer_hide_477.pl mode change 100755 => 100644 scripts/dau.pl mode change 100755 => 100644 scripts/dcc_ip.pl mode change 100755 => 100644 scripts/dccmove.pl mode change 100755 => 100644 scripts/dccself.pl mode change 100755 => 100644 scripts/dccstat.pl mode change 100755 => 100644 scripts/defaultchanmode.pl mode change 100755 => 100644 scripts/dejunk.pl mode change 100755 => 100644 scripts/deliciousurl.pl mode change 100755 => 100644 scripts/df.pl mode change 100755 => 100644 scripts/dice.pl mode change 100755 => 100644 scripts/dice_concise.pl mode change 100755 => 100644 scripts/dictcomplete.pl mode change 100755 => 100644 scripts/dispatch.pl mode change 100755 => 100644 scripts/dns.pl mode change 100755 => 100644 scripts/dnsspam.pl mode change 100755 => 100644 scripts/doc.pl mode change 100755 => 100644 scripts/doublefilter.pl mode change 100755 => 100644 scripts/dr_who.pl mode change 100755 => 100644 scripts/efnetorg.pl mode change 100755 => 100644 scripts/elist.pl mode change 100755 => 100644 scripts/eliza.pl mode change 100755 => 100644 scripts/email_msgs.pl mode change 100755 => 100644 scripts/email_privmsgs.pl mode change 100755 => 100644 scripts/emaildb1.0.pl mode change 100755 => 100644 scripts/emo.pl mode change 100755 => 100644 scripts/events.pl mode change 100755 => 100644 scripts/exec_clean.pl mode change 100755 => 100644 scripts/extaway.pl mode change 100755 => 100644 scripts/fakectcp.pl mode change 100755 => 100644 scripts/fcountry.pl mode change 100755 => 100644 scripts/figlet.pl mode change 100755 => 100644 scripts/file.pl mode change 100755 => 100644 scripts/find.pl mode change 100755 => 100644 scripts/findbot.pl mode change 100755 => 100644 scripts/fleech.pl mode change 100755 => 100644 scripts/fnotify.pl mode change 100755 => 100644 scripts/follow.pl mode change 100755 => 100644 scripts/foo.pl mode change 100755 => 100644 scripts/foreach_user.pl mode change 100755 => 100644 scripts/fortune.pl mode change 100755 => 100644 scripts/forward.pl mode change 100755 => 100644 scripts/freenode_filter.pl mode change 100755 => 100644 scripts/friends_peder.pl mode change 100755 => 100644 scripts/friends_shasta.pl mode change 100755 => 100644 scripts/frm_outgmsgs.pl mode change 100755 => 100644 scripts/fserve.pl mode change 100755 => 100644 scripts/fuckem.pl mode change 100755 => 100644 scripts/getop.pl mode change 100755 => 100644 scripts/gimmie.pl mode change 100755 => 100644 scripts/go.pl mode change 100755 => 100644 scripts/go2.pl mode change 100755 => 100644 scripts/google.pl mode change 100755 => 100644 scripts/gpgvalidator.pl mode change 100755 => 100644 scripts/greetignore.pl mode change 100755 => 100644 scripts/grep.pl mode change 100755 => 100644 scripts/grepbans.pl mode change 100755 => 100644 scripts/gsi.pl mode change 100755 => 100644 scripts/gtrans.pl mode change 100755 => 100644 scripts/guts.pl mode change 100755 => 100644 scripts/hddtemp.pl mode change 100755 => 100644 scripts/hello.pl mode change 100755 => 100644 scripts/hide.pl mode change 100755 => 100644 scripts/hideauth.pl mode change 100755 => 100644 scripts/highlite.pl mode change 100755 => 100644 scripts/hignore.pl mode change 100755 => 100644 scripts/hilightwin.pl mode change 100755 => 100644 scripts/hipchat_complete.pl mode change 100755 => 100644 scripts/history_search.pl mode change 100755 => 100644 scripts/hitcount.pl mode change 100755 => 100644 scripts/hl.pl mode change 100755 => 100644 scripts/hlbot.pl mode change 100755 => 100644 scripts/hostname.pl mode change 100755 => 100644 scripts/iMPD.pl mode change 100755 => 100644 scripts/identify-md5.pl mode change 100755 => 100644 scripts/idletime.pl mode change 100755 => 100644 scripts/idonkey.pl mode change 100755 => 100644 scripts/ignore_log.pl mode change 100755 => 100644 scripts/ignoreoc.pl mode change 100755 => 100644 scripts/ignorsula.pl mode change 100755 => 100644 scripts/il.pl mode change 100755 => 100644 scripts/imdb.pl mode change 100755 => 100644 scripts/intjoin.pl mode change 100755 => 100644 scripts/invitejoin.pl mode change 100755 => 100644 scripts/ipupdate.pl mode change 100755 => 100644 scripts/iraident.pl mode change 100755 => 100644 scripts/irc_chess.pl mode change 100755 => 100644 scripts/irccomplete.pl mode change 100755 => 100644 scripts/ircgallery.pl mode change 100755 => 100644 scripts/ircgmessagenotify.pl mode change 100755 => 100644 scripts/ircops.pl mode change 100755 => 100644 scripts/ircsec.pl mode change 100755 => 100644 scripts/irssi-feed.pl mode change 100755 => 100644 scripts/irssiBlaster.pl mode change 100755 => 100644 scripts/irssi_logger.pl mode change 100755 => 100644 scripts/irssiq.pl mode change 100755 => 100644 scripts/isbanned.pl mode change 100755 => 100644 scripts/isdn.pl mode change 100755 => 100644 scripts/itime.pl mode change 100755 => 100644 scripts/ixmmsa.pl mode change 100755 => 100644 scripts/joininfo.pl mode change 100755 => 100644 scripts/kban-referrals.pl mode change 100755 => 100644 scripts/kblamehost.pl mode change 100755 => 100644 scripts/keepnick.pl mode change 100755 => 100644 scripts/kenny.pl mode change 100755 => 100644 scripts/kernel.pl mode change 100755 => 100644 scripts/keybinds.pl mode change 100755 => 100644 scripts/kicks.pl mode change 100755 => 100644 scripts/kill_fake_gets.pl mode change 100755 => 100644 scripts/kills.pl mode change 100755 => 100644 scripts/kline_warning.pl mode change 100755 => 100644 scripts/l33tmusic.pl mode change 100755 => 100644 scripts/lastfm.pl mode change 100755 => 100644 scripts/lastspoke.pl mode change 100755 => 100644 scripts/len.pl mode change 100755 => 100644 scripts/leodict.pl mode change 100755 => 100644 scripts/levelclear.pl mode change 100755 => 100644 scripts/licq.pl mode change 100755 => 100644 scripts/linkchan.pl mode change 100755 => 100644 scripts/listen.pl mode change 100755 => 100644 scripts/loadavg.pl mode change 100755 => 100644 scripts/localize.pl mode change 100755 => 100644 scripts/log2ansi.pl mode change 100755 => 100644 scripts/logcompress.pl mode change 100755 => 100644 scripts/ls.pl mode change 100755 => 100644 scripts/lwho.pl mode change 100755 => 100644 scripts/mail.pl mode change 100755 => 100644 scripts/mailcheck_imap.pl mode change 100755 => 100644 scripts/mailcheck_mbox_flux.pl mode change 100755 => 100644 scripts/mailcheck_pop3_kimmo.pl mode change 100755 => 100644 scripts/mailcount.pl mode change 100755 => 100644 scripts/mangle.pl mode change 100755 => 100644 scripts/map.pl mode change 100755 => 100644 scripts/mass_hilight_blocker.pl mode change 100755 => 100644 scripts/mg.pl mode change 100755 => 100644 scripts/miodek.pl mode change 100755 => 100644 scripts/mirc_colour_popup.pl mode change 100755 => 100644 scripts/mkick.pl mode change 100755 => 100644 scripts/mkshorterlink.pl mode change 100755 => 100644 scripts/mldonkey_bandwidth.pl mode change 100755 => 100644 scripts/mlock.pl mode change 100755 => 100644 scripts/modelist-r.pl mode change 100755 => 100644 scripts/modelist.pl mode change 100755 => 100644 scripts/monitor.pl mode change 100755 => 100644 scripts/mood.pl mode change 100755 => 100644 scripts/morse.pl mode change 100755 => 100644 scripts/mouse.pl mode change 100755 => 100644 scripts/mpd.pl mode change 100755 => 100644 scripts/mpg123.pl mode change 100755 => 100644 scripts/mqtt-notify.pl mode change 100755 => 100644 scripts/msg2notice.pl mode change 100755 => 100644 scripts/multipaste.pl mode change 100755 => 100644 scripts/my_beep.pl mode change 100755 => 100644 scripts/mygoogle.pl mode change 100755 => 100644 scripts/myimdb.pl mode change 100755 => 100644 scripts/mysqlurllogger.pl mode change 100755 => 100644 scripts/nact.pl mode change 100755 => 100644 scripts/netswitch.pl mode change 100755 => 100644 scripts/news.pl mode change 100755 => 100644 scripts/newsline.pl mode change 100755 => 100644 scripts/nickban.pl mode change 100755 => 100644 scripts/nickcolor.pl mode change 100755 => 100644 scripts/nickignore.pl mode change 100755 => 100644 scripts/nickmix-c0ffee.pl mode change 100755 => 100644 scripts/nickmix_pasky.pl mode change 100755 => 100644 scripts/nickserv.pl mode change 100755 => 100644 scripts/niq.pl mode change 100755 => 100644 scripts/nm.pl mode change 100755 => 100644 scripts/nocaps.pl mode change 100755 => 100644 scripts/nocollide.pl mode change 100755 => 100644 scripts/noisyquery.pl mode change 100755 => 100644 scripts/nopl.pl mode change 100755 => 100644 scripts/norepeat.pl mode change 100755 => 100644 scripts/notes.pl mode change 100755 => 100644 scripts/noteserve.pl mode change 100755 => 100644 scripts/noticelogic.pl mode change 100755 => 100644 scripts/noticemove.pl mode change 100755 => 100644 scripts/notonline.pl mode change 100755 => 100644 scripts/null.pl mode change 100755 => 100644 scripts/ogg123.pl mode change 100755 => 100644 scripts/oidenty.pl mode change 100755 => 100644 scripts/on.pl mode change 100755 => 100644 scripts/ontv.pl mode change 100755 => 100644 scripts/oops.pl mode change 100755 => 100644 scripts/oopsie.pl mode change 100755 => 100644 scripts/openurl.pl mode change 100755 => 100644 scripts/operit.pl mode change 100755 => 100644 scripts/operview.pl mode change 100755 => 100644 scripts/opnotice.pl mode change 100755 => 100644 scripts/opnotify.pl mode change 100755 => 100644 scripts/orphamp.pl mode change 100755 => 100644 scripts/osd.pl mode change 100755 => 100644 scripts/ownage.pl mode change 100755 => 100644 scripts/page-c0ffee.pl mode change 100755 => 100644 scripts/page_reeler.pl mode change 100755 => 100644 scripts/pager.pl mode change 100755 => 100644 scripts/pangotext.pl mode change 100755 => 100644 scripts/paste-derwan.pl mode change 100755 => 100644 scripts/paste_derwan.pl mode change 100755 => 100644 scripts/paste_huggie.pl mode change 100755 => 100644 scripts/paste_kimmoke.pl mode change 100755 => 100644 scripts/pelix.pl mode change 100755 => 100644 scripts/people.pl mode change 100755 => 100644 scripts/per_window_prompt.pl mode change 100755 => 100644 scripts/pggb_sound.pl mode change 100755 => 100644 scripts/poison.pl mode change 100755 => 100644 scripts/postpone.pl mode change 100755 => 100644 scripts/ppl.pl mode change 100755 => 100644 scripts/procmaillog.pl mode change 100755 => 100644 scripts/query.pl mode change 100755 => 100644 scripts/queryresume.pl mode change 100755 => 100644 scripts/quitmsg.pl mode change 100755 => 100644 scripts/quitrand.pl mode change 100755 => 100644 scripts/quiz.pl mode change 100755 => 100644 scripts/quizgr.pl mode change 100755 => 100644 scripts/quizmaster-fr.pl mode change 100755 => 100644 scripts/quizmaster.pl mode change 100755 => 100644 scripts/rainbow.pl mode change 100755 => 100644 scripts/randaway.pl mode change 100755 => 100644 scripts/randname.pl mode change 100755 => 100644 scripts/redirect.pl mode change 100755 => 100644 scripts/relm.pl mode change 100755 => 100644 scripts/remote.pl mode change 100755 => 100644 scripts/reorder.pl mode change 100755 => 100644 scripts/repeat.pl mode change 100755 => 100644 scripts/resize_split.pl mode change 100755 => 100644 scripts/rhythmbox.pl mode change 100755 => 100644 scripts/rk.pl mode change 100755 => 100644 scripts/romaji.pl mode change 100755 => 100644 scripts/romajibind.pl mode change 100755 => 100644 scripts/rot13.pl mode change 100755 => 100644 scripts/rotator.pl mode change 100755 => 100644 scripts/sana_cmd.pl mode change 100755 => 100644 scripts/sb_search.pl mode change 100755 => 100644 scripts/schwaebisch.pl mode change 100755 => 100644 scripts/screen_away.pl mode change 100755 => 100644 scripts/scriptassist.pl mode change 100755 => 100644 scripts/scripthelp.pl mode change 100755 => 100644 scripts/scriptinfo.pl mode change 100755 => 100644 scripts/scriptsave.pl mode change 100755 => 100644 scripts/scrmable.pl mode change 100755 => 100644 scripts/scroller.pl mode change 100755 => 100644 scripts/securemsg.pl mode change 100755 => 100644 scripts/seen.pl mode change 100755 => 100644 scripts/send_scroll.pl mode change 100755 => 100644 scripts/servercomplete.pl mode change 100755 => 100644 scripts/seti.pl mode change 100755 => 100644 scripts/shortenurl.pl mode change 100755 => 100644 scripts/shorturl.pl mode change 100755 => 100644 scripts/showhilight.pl mode change 100755 => 100644 scripts/showhost.pl mode change 100755 => 100644 scripts/showmode.pl mode change 100755 => 100644 scripts/slack_complete.pl mode change 100755 => 100644 scripts/slack_emoji.pl mode change 100755 => 100644 scripts/smartfilter.pl mode change 100755 => 100644 scripts/smiley.pl mode change 100755 => 100644 scripts/sms.pl mode change 100755 => 100644 scripts/snmpup.pl mode change 100755 => 100644 scripts/spambot.pl mode change 100755 => 100644 scripts/special_complete.pl mode change 100755 => 100644 scripts/spell.pl mode change 100755 => 100644 scripts/spellcheck.pl mode change 100755 => 100644 scripts/sping.pl mode change 100755 => 100644 scripts/splitlong.pl mode change 100755 => 100644 scripts/spotify.pl mode change 100755 => 100644 scripts/stocks.pl mode change 100755 => 100644 scripts/studivz_bitlbee_rename.pl mode change 100755 => 100644 scripts/synccheck.pl mode change 100755 => 100644 scripts/sysinfo270-irssi.pl mode change 100755 => 100644 scripts/sysinfo277-irssi.pl mode change 100755 => 100644 scripts/sysinfo_dg.pl mode change 100755 => 100644 scripts/sysinfoplus.pl mode change 100755 => 100644 scripts/tab_stop.pl mode change 100755 => 100644 scripts/talk.pl mode change 100755 => 100644 scripts/target.pl mode change 100755 => 100644 scripts/thankop.pl mode change 100755 => 100644 scripts/thistory.pl mode change 100755 => 100644 scripts/timer.pl mode change 100755 => 100644 scripts/timezones.pl mode change 100755 => 100644 scripts/tinyurl.pl mode change 100755 => 100644 scripts/title.pl mode change 100755 => 100644 scripts/tlock.pl mode change 100755 => 100644 scripts/tmux_away.pl mode change 100755 => 100644 scripts/topics.pl mode change 100755 => 100644 scripts/topicsed.pl mode change 100755 => 100644 scripts/tordetect.pl mode change 100755 => 100644 scripts/track.pl mode change 100755 => 100644 scripts/trackbar.pl mode change 100755 => 100644 scripts/tracknick.pl mode change 100755 => 100644 scripts/translit.pl mode change 100755 => 100644 scripts/trigger.pl mode change 100755 => 100644 scripts/trustweb.pl mode change 100755 => 100644 scripts/tvmusor.pl mode change 100755 => 100644 scripts/twitter_theme.pl mode change 100755 => 100644 scripts/twprompt.pl mode change 100755 => 100644 scripts/twsocials.pl mode change 100755 => 100644 scripts/twtopic.pl mode change 100755 => 100644 scripts/u.pl mode change 100755 => 100644 scripts/unicode.pl mode change 100755 => 100644 scripts/upgradeinfo.pl mode change 100755 => 100644 scripts/upsidedown.pl mode change 100755 => 100644 scripts/uptime.pl mode change 100755 => 100644 scripts/url_log.pl mode change 100755 => 100644 scripts/urlfeed.pl mode change 100755 => 100644 scripts/urlgrab.pl mode change 100755 => 100644 scripts/urlinfo.pl mode change 100755 => 100644 scripts/urlplot.pl mode change 100755 => 100644 scripts/usercount.pl mode change 100755 => 100644 scripts/userhost.pl mode change 100755 => 100644 scripts/users.pl mode change 100755 => 100644 scripts/version-stat.pl mode change 100755 => 100644 scripts/verstats.pl mode change 100755 => 100644 scripts/vidinfo.pl mode change 100755 => 100644 scripts/vowels.pl mode change 100755 => 100644 scripts/wa.pl mode change 100755 => 100644 scripts/warnkick.pl mode change 100755 => 100644 scripts/washnicks.pl mode change 100755 => 100644 scripts/watch.pl mode change 100755 => 100644 scripts/whitelist.pl mode change 100755 => 100644 scripts/whocount.pl mode change 100755 => 100644 scripts/whois.pl mode change 100755 => 100644 scripts/whois_hexip.pl mode change 100755 => 100644 scripts/whos.pl mode change 100755 => 100644 scripts/wilm.pl mode change 100755 => 100644 scripts/window_switcher.pl mode change 100755 => 100644 scripts/winnum.pl mode change 100755 => 100644 scripts/wisestamp.pl mode change 100755 => 100644 scripts/wkb.pl mode change 100755 => 100644 scripts/wordcompletition.pl mode change 100755 => 100644 scripts/wordscramble.pl mode change 100755 => 100644 scripts/xauth.pl mode change 100755 => 100644 scripts/xcmd.pl mode change 100755 => 100644 scripts/xdcc.pl mode change 100755 => 100644 scripts/xdcc_autoget.pl mode change 100755 => 100644 scripts/xdccget.pl mode change 100755 => 100644 scripts/xetra.pl mode change 100755 => 100644 scripts/xlist.pl mode change 100755 => 100644 scripts/xmms.pl mode change 100755 => 100644 scripts/xmms2.pl mode change 100755 => 100644 scripts/xmmsinfo.pl mode change 100755 => 100644 scripts/xmpp-notify.pl mode change 100755 => 100644 scripts/xqf.pl (limited to 'scripts') diff --git a/scripts/8-ball.pl b/scripts/8-ball.pl old mode 100755 new mode 100644 diff --git a/scripts/Cirssi.pl b/scripts/Cirssi.pl old mode 100755 new mode 100644 diff --git a/scripts/UNIBG-autoident.pl b/scripts/UNIBG-autoident.pl old mode 100755 new mode 100644 diff --git a/scripts/accent.pl b/scripts/accent.pl old mode 100755 new mode 100644 diff --git a/scripts/accountname.pl b/scripts/accountname.pl old mode 100755 new mode 100644 diff --git a/scripts/act.pl b/scripts/act.pl old mode 100755 new mode 100644 diff --git a/scripts/act_fifo.pl b/scripts/act_fifo.pl old mode 100755 new mode 100644 diff --git a/scripts/active_notice.pl b/scripts/active_notice.pl old mode 100755 new mode 100644 diff --git a/scripts/active_notify.pl b/scripts/active_notify.pl old mode 100755 new mode 100644 diff --git a/scripts/activity_file.pl b/scripts/activity_file.pl old mode 100755 new mode 100644 diff --git a/scripts/ai.pl b/scripts/ai.pl old mode 100755 new mode 100644 diff --git a/scripts/aidle.pl b/scripts/aidle.pl old mode 100755 new mode 100644 diff --git a/scripts/akftp.pl b/scripts/akftp.pl old mode 100755 new mode 100644 diff --git a/scripts/alame.pl b/scripts/alame.pl old mode 100755 new mode 100644 diff --git a/scripts/amarok_ssh.pl b/scripts/amarok_ssh.pl old mode 100755 new mode 100644 diff --git a/scripts/amaroknp.pl b/scripts/amaroknp.pl old mode 100755 new mode 100644 diff --git a/scripts/anotherway.pl b/scripts/anotherway.pl old mode 100755 new mode 100644 diff --git a/scripts/antiplenk.pl b/scripts/antiplenk.pl old mode 100755 new mode 100644 diff --git a/scripts/apm.pl b/scripts/apm.pl old mode 100755 new mode 100644 diff --git a/scripts/armeija.pl b/scripts/armeija.pl old mode 100755 new mode 100644 diff --git a/scripts/ascii.pl b/scripts/ascii.pl old mode 100755 new mode 100644 diff --git a/scripts/aspell_complete.pl b/scripts/aspell_complete.pl old mode 100755 new mode 100644 diff --git a/scripts/auth_quakenet.pl b/scripts/auth_quakenet.pl old mode 100755 new mode 100644 diff --git a/scripts/auto_whois.pl b/scripts/auto_whois.pl old mode 100755 new mode 100644 diff --git a/scripts/autoaway.pl b/scripts/autoaway.pl old mode 100755 new mode 100644 diff --git a/scripts/autochannel.pl b/scripts/autochannel.pl old mode 100755 new mode 100644 diff --git a/scripts/autoclearinput.pl b/scripts/autoclearinput.pl old mode 100755 new mode 100644 diff --git a/scripts/autocycle.pl b/scripts/autocycle.pl old mode 100755 new mode 100644 diff --git a/scripts/autolimit.pl b/scripts/autolimit.pl old mode 100755 new mode 100644 diff --git a/scripts/autoop.pl b/scripts/autoop.pl old mode 100755 new mode 100644 diff --git a/scripts/autoopper.pl b/scripts/autoopper.pl old mode 100755 new mode 100644 diff --git a/scripts/autorealname.pl b/scripts/autorealname.pl old mode 100755 new mode 100644 diff --git a/scripts/autorejoin.pl b/scripts/autorejoin.pl old mode 100755 new mode 100644 diff --git a/scripts/autorejoinpunish.pl b/scripts/autorejoinpunish.pl old mode 100755 new mode 100644 diff --git a/scripts/autoreminder.pl b/scripts/autoreminder.pl old mode 100755 new mode 100644 diff --git a/scripts/autostuff.pl b/scripts/autostuff.pl old mode 100755 new mode 100644 diff --git a/scripts/autoversion.pl b/scripts/autoversion.pl old mode 100755 new mode 100644 diff --git a/scripts/autovoice.pl b/scripts/autovoice.pl old mode 100755 new mode 100644 diff --git a/scripts/autowhois.pl b/scripts/autowhois.pl old mode 100755 new mode 100644 diff --git a/scripts/autowhois_simple.pl b/scripts/autowhois_simple.pl old mode 100755 new mode 100644 diff --git a/scripts/autowrap.pl b/scripts/autowrap.pl old mode 100755 new mode 100644 diff --git a/scripts/away.pl b/scripts/away.pl old mode 100755 new mode 100644 diff --git a/scripts/away2web.pl b/scripts/away2web.pl old mode 100755 new mode 100644 diff --git a/scripts/away_hilight_notice.pl b/scripts/away_hilight_notice.pl old mode 100755 new mode 100644 diff --git a/scripts/away_verbose.pl b/scripts/away_verbose.pl old mode 100755 new mode 100644 diff --git a/scripts/awaybar.pl b/scripts/awaybar.pl old mode 100755 new mode 100644 diff --git a/scripts/awaylogcnt.pl b/scripts/awaylogcnt.pl old mode 100755 new mode 100644 diff --git a/scripts/awayproxy.pl b/scripts/awayproxy.pl old mode 100755 new mode 100644 diff --git a/scripts/babelirc.pl b/scripts/babelirc.pl old mode 100755 new mode 100644 diff --git a/scripts/badword.pl b/scripts/badword.pl old mode 100755 new mode 100644 diff --git a/scripts/ban.pl b/scripts/ban.pl old mode 100755 new mode 100644 diff --git a/scripts/bandwidth.pl b/scripts/bandwidth.pl old mode 100755 new mode 100644 diff --git a/scripts/bansearch.pl b/scripts/bansearch.pl old mode 100755 new mode 100644 diff --git a/scripts/bantime.pl b/scripts/bantime.pl old mode 100755 new mode 100644 diff --git a/scripts/beep.pl b/scripts/beep.pl old mode 100755 new mode 100644 diff --git a/scripts/beep_beep.pl b/scripts/beep_beep.pl old mode 100755 new mode 100644 diff --git a/scripts/beepaway.pl b/scripts/beepaway.pl old mode 100755 new mode 100644 diff --git a/scripts/bestoiber.pl b/scripts/bestoiber.pl old mode 100755 new mode 100644 diff --git a/scripts/bgta.pl b/scripts/bgta.pl old mode 100755 new mode 100644 diff --git a/scripts/binary.pl b/scripts/binary.pl old mode 100755 new mode 100644 diff --git a/scripts/binary_time.pl b/scripts/binary_time.pl old mode 100755 new mode 100644 diff --git a/scripts/bitlbee_blist.pl b/scripts/bitlbee_blist.pl old mode 100755 new mode 100644 diff --git a/scripts/bitlbee_join_notice.pl b/scripts/bitlbee_join_notice.pl old mode 100755 new mode 100644 diff --git a/scripts/bitlbee_nick_change.pl b/scripts/bitlbee_nick_change.pl old mode 100755 new mode 100644 diff --git a/scripts/bitlbee_tab_completion.pl b/scripts/bitlbee_tab_completion.pl old mode 100755 new mode 100644 diff --git a/scripts/bitlbee_timestamp.pl b/scripts/bitlbee_timestamp.pl old mode 100755 new mode 100644 diff --git a/scripts/bitlbee_typing_notice.pl b/scripts/bitlbee_typing_notice.pl old mode 100755 new mode 100644 diff --git a/scripts/blowjob.pl b/scripts/blowjob.pl old mode 100755 new mode 100644 diff --git a/scripts/bmi.pl b/scripts/bmi.pl old mode 100755 new mode 100644 diff --git a/scripts/buf.pl b/scripts/buf.pl old mode 100755 new mode 100644 diff --git a/scripts/calc.pl b/scripts/calc.pl old mode 100755 new mode 100644 diff --git a/scripts/callerid.pl b/scripts/callerid.pl old mode 100755 new mode 100644 diff --git a/scripts/cap_sasl.pl b/scripts/cap_sasl.pl old mode 100755 new mode 100644 diff --git a/scripts/cddb.pl b/scripts/cddb.pl old mode 100755 new mode 100644 diff --git a/scripts/centericq.pl b/scripts/centericq.pl old mode 100755 new mode 100644 diff --git a/scripts/cgrep.pl b/scripts/cgrep.pl old mode 100755 new mode 100644 diff --git a/scripts/chanact.pl b/scripts/chanact.pl old mode 100755 new mode 100644 diff --git a/scripts/chanfull.pl b/scripts/chanfull.pl old mode 100755 new mode 100644 diff --git a/scripts/chanfull_duden.pl b/scripts/chanfull_duden.pl old mode 100755 new mode 100644 diff --git a/scripts/chanpeak.pl b/scripts/chanpeak.pl old mode 100755 new mode 100644 diff --git a/scripts/chansearch.pl b/scripts/chansearch.pl old mode 100755 new mode 100644 diff --git a/scripts/chanshare.pl b/scripts/chanshare.pl old mode 100755 new mode 100644 diff --git a/scripts/chansort.pl b/scripts/chansort.pl old mode 100755 new mode 100644 diff --git a/scripts/chansync.pl b/scripts/chansync.pl old mode 100755 new mode 100644 diff --git a/scripts/chops.pl b/scripts/chops.pl old mode 100755 new mode 100644 diff --git a/scripts/cleanpublic.pl b/scripts/cleanpublic.pl old mode 100755 new mode 100644 diff --git a/scripts/clipboard.pl b/scripts/clipboard.pl old mode 100755 new mode 100644 diff --git a/scripts/cloneprot.pl b/scripts/cloneprot.pl old mode 100755 new mode 100644 diff --git a/scripts/clones.pl b/scripts/clones.pl old mode 100755 new mode 100644 diff --git a/scripts/clones_scanner.pl b/scripts/clones_scanner.pl old mode 100755 new mode 100644 diff --git a/scripts/colorkick.pl b/scripts/colorkick.pl old mode 100755 new mode 100644 diff --git a/scripts/colorswap.pl b/scripts/colorswap.pl old mode 100755 new mode 100644 diff --git a/scripts/complete_lastspoke.pl b/scripts/complete_lastspoke.pl old mode 100755 new mode 100644 diff --git a/scripts/connectcmd.pl b/scripts/connectcmd.pl old mode 100755 new mode 100644 diff --git a/scripts/countdown.pl b/scripts/countdown.pl old mode 100755 new mode 100644 diff --git a/scripts/country.pl b/scripts/country.pl old mode 100755 new mode 100644 diff --git a/scripts/cp1250_kick.pl b/scripts/cp1250_kick.pl old mode 100755 new mode 100644 diff --git a/scripts/crapbuster.pl b/scripts/crapbuster.pl old mode 100755 new mode 100644 diff --git a/scripts/credstore.pl b/scripts/credstore.pl old mode 100755 new mode 100644 diff --git a/scripts/cron.pl b/scripts/cron.pl old mode 100755 new mode 100644 diff --git a/scripts/cwho.pl b/scripts/cwho.pl old mode 100755 new mode 100644 diff --git a/scripts/dancer_forwardfix.pl b/scripts/dancer_forwardfix.pl old mode 100755 new mode 100644 diff --git a/scripts/dancer_hide_477.pl b/scripts/dancer_hide_477.pl old mode 100755 new mode 100644 diff --git a/scripts/dau.pl b/scripts/dau.pl old mode 100755 new mode 100644 diff --git a/scripts/dcc_ip.pl b/scripts/dcc_ip.pl old mode 100755 new mode 100644 diff --git a/scripts/dccmove.pl b/scripts/dccmove.pl old mode 100755 new mode 100644 diff --git a/scripts/dccself.pl b/scripts/dccself.pl old mode 100755 new mode 100644 diff --git a/scripts/dccstat.pl b/scripts/dccstat.pl old mode 100755 new mode 100644 diff --git a/scripts/defaultchanmode.pl b/scripts/defaultchanmode.pl old mode 100755 new mode 100644 diff --git a/scripts/dejunk.pl b/scripts/dejunk.pl old mode 100755 new mode 100644 diff --git a/scripts/deliciousurl.pl b/scripts/deliciousurl.pl old mode 100755 new mode 100644 diff --git a/scripts/df.pl b/scripts/df.pl old mode 100755 new mode 100644 diff --git a/scripts/dice.pl b/scripts/dice.pl old mode 100755 new mode 100644 diff --git a/scripts/dice_concise.pl b/scripts/dice_concise.pl old mode 100755 new mode 100644 diff --git a/scripts/dictcomplete.pl b/scripts/dictcomplete.pl old mode 100755 new mode 100644 diff --git a/scripts/dispatch.pl b/scripts/dispatch.pl old mode 100755 new mode 100644 diff --git a/scripts/dns.pl b/scripts/dns.pl old mode 100755 new mode 100644 diff --git a/scripts/dnsspam.pl b/scripts/dnsspam.pl old mode 100755 new mode 100644 diff --git a/scripts/doc.pl b/scripts/doc.pl old mode 100755 new mode 100644 diff --git a/scripts/doublefilter.pl b/scripts/doublefilter.pl old mode 100755 new mode 100644 diff --git a/scripts/dr_who.pl b/scripts/dr_who.pl old mode 100755 new mode 100644 diff --git a/scripts/efnetorg.pl b/scripts/efnetorg.pl old mode 100755 new mode 100644 diff --git a/scripts/elist.pl b/scripts/elist.pl old mode 100755 new mode 100644 diff --git a/scripts/eliza.pl b/scripts/eliza.pl old mode 100755 new mode 100644 diff --git a/scripts/email_msgs.pl b/scripts/email_msgs.pl old mode 100755 new mode 100644 diff --git a/scripts/email_privmsgs.pl b/scripts/email_privmsgs.pl old mode 100755 new mode 100644 diff --git a/scripts/emaildb1.0.pl b/scripts/emaildb1.0.pl old mode 100755 new mode 100644 diff --git a/scripts/emo.pl b/scripts/emo.pl old mode 100755 new mode 100644 diff --git a/scripts/events.pl b/scripts/events.pl old mode 100755 new mode 100644 diff --git a/scripts/exec_clean.pl b/scripts/exec_clean.pl old mode 100755 new mode 100644 diff --git a/scripts/extaway.pl b/scripts/extaway.pl old mode 100755 new mode 100644 diff --git a/scripts/fakectcp.pl b/scripts/fakectcp.pl old mode 100755 new mode 100644 diff --git a/scripts/fcountry.pl b/scripts/fcountry.pl old mode 100755 new mode 100644 diff --git a/scripts/figlet.pl b/scripts/figlet.pl old mode 100755 new mode 100644 diff --git a/scripts/file.pl b/scripts/file.pl old mode 100755 new mode 100644 diff --git a/scripts/find.pl b/scripts/find.pl old mode 100755 new mode 100644 diff --git a/scripts/findbot.pl b/scripts/findbot.pl old mode 100755 new mode 100644 diff --git a/scripts/fleech.pl b/scripts/fleech.pl old mode 100755 new mode 100644 diff --git a/scripts/fnotify.pl b/scripts/fnotify.pl old mode 100755 new mode 100644 diff --git a/scripts/follow.pl b/scripts/follow.pl old mode 100755 new mode 100644 diff --git a/scripts/foo.pl b/scripts/foo.pl old mode 100755 new mode 100644 diff --git a/scripts/foreach_user.pl b/scripts/foreach_user.pl old mode 100755 new mode 100644 diff --git a/scripts/fortune.pl b/scripts/fortune.pl old mode 100755 new mode 100644 diff --git a/scripts/forward.pl b/scripts/forward.pl old mode 100755 new mode 100644 diff --git a/scripts/freenode_filter.pl b/scripts/freenode_filter.pl old mode 100755 new mode 100644 diff --git a/scripts/friends_peder.pl b/scripts/friends_peder.pl old mode 100755 new mode 100644 diff --git a/scripts/friends_shasta.pl b/scripts/friends_shasta.pl old mode 100755 new mode 100644 diff --git a/scripts/frm_outgmsgs.pl b/scripts/frm_outgmsgs.pl old mode 100755 new mode 100644 diff --git a/scripts/fserve.pl b/scripts/fserve.pl old mode 100755 new mode 100644 diff --git a/scripts/fuckem.pl b/scripts/fuckem.pl old mode 100755 new mode 100644 diff --git a/scripts/getop.pl b/scripts/getop.pl old mode 100755 new mode 100644 diff --git a/scripts/gimmie.pl b/scripts/gimmie.pl old mode 100755 new mode 100644 diff --git a/scripts/go.pl b/scripts/go.pl old mode 100755 new mode 100644 diff --git a/scripts/go2.pl b/scripts/go2.pl old mode 100755 new mode 100644 diff --git a/scripts/google.pl b/scripts/google.pl old mode 100755 new mode 100644 diff --git a/scripts/gpgvalidator.pl b/scripts/gpgvalidator.pl old mode 100755 new mode 100644 diff --git a/scripts/greetignore.pl b/scripts/greetignore.pl old mode 100755 new mode 100644 diff --git a/scripts/grep.pl b/scripts/grep.pl old mode 100755 new mode 100644 diff --git a/scripts/grepbans.pl b/scripts/grepbans.pl old mode 100755 new mode 100644 diff --git a/scripts/gsi.pl b/scripts/gsi.pl old mode 100755 new mode 100644 diff --git a/scripts/gtrans.pl b/scripts/gtrans.pl old mode 100755 new mode 100644 diff --git a/scripts/guts.pl b/scripts/guts.pl old mode 100755 new mode 100644 diff --git a/scripts/hddtemp.pl b/scripts/hddtemp.pl old mode 100755 new mode 100644 diff --git a/scripts/hello.pl b/scripts/hello.pl old mode 100755 new mode 100644 diff --git a/scripts/hide.pl b/scripts/hide.pl old mode 100755 new mode 100644 diff --git a/scripts/hideauth.pl b/scripts/hideauth.pl old mode 100755 new mode 100644 diff --git a/scripts/highlite.pl b/scripts/highlite.pl old mode 100755 new mode 100644 diff --git a/scripts/hignore.pl b/scripts/hignore.pl old mode 100755 new mode 100644 diff --git a/scripts/hilightwin.pl b/scripts/hilightwin.pl old mode 100755 new mode 100644 diff --git a/scripts/hipchat_complete.pl b/scripts/hipchat_complete.pl old mode 100755 new mode 100644 diff --git a/scripts/history_search.pl b/scripts/history_search.pl old mode 100755 new mode 100644 diff --git a/scripts/hitcount.pl b/scripts/hitcount.pl old mode 100755 new mode 100644 diff --git a/scripts/hl.pl b/scripts/hl.pl old mode 100755 new mode 100644 diff --git a/scripts/hlbot.pl b/scripts/hlbot.pl old mode 100755 new mode 100644 diff --git a/scripts/hostname.pl b/scripts/hostname.pl old mode 100755 new mode 100644 diff --git a/scripts/iMPD.pl b/scripts/iMPD.pl old mode 100755 new mode 100644 diff --git a/scripts/identify-md5.pl b/scripts/identify-md5.pl old mode 100755 new mode 100644 diff --git a/scripts/idletime.pl b/scripts/idletime.pl old mode 100755 new mode 100644 diff --git a/scripts/idonkey.pl b/scripts/idonkey.pl old mode 100755 new mode 100644 diff --git a/scripts/ignore_log.pl b/scripts/ignore_log.pl old mode 100755 new mode 100644 diff --git a/scripts/ignoreoc.pl b/scripts/ignoreoc.pl old mode 100755 new mode 100644 diff --git a/scripts/ignorsula.pl b/scripts/ignorsula.pl old mode 100755 new mode 100644 diff --git a/scripts/il.pl b/scripts/il.pl old mode 100755 new mode 100644 diff --git a/scripts/imdb.pl b/scripts/imdb.pl old mode 100755 new mode 100644 diff --git a/scripts/intjoin.pl b/scripts/intjoin.pl old mode 100755 new mode 100644 diff --git a/scripts/invitejoin.pl b/scripts/invitejoin.pl old mode 100755 new mode 100644 diff --git a/scripts/ipupdate.pl b/scripts/ipupdate.pl old mode 100755 new mode 100644 diff --git a/scripts/iraident.pl b/scripts/iraident.pl old mode 100755 new mode 100644 diff --git a/scripts/irc_chess.pl b/scripts/irc_chess.pl old mode 100755 new mode 100644 diff --git a/scripts/irccomplete.pl b/scripts/irccomplete.pl old mode 100755 new mode 100644 diff --git a/scripts/ircgallery.pl b/scripts/ircgallery.pl old mode 100755 new mode 100644 diff --git a/scripts/ircgmessagenotify.pl b/scripts/ircgmessagenotify.pl old mode 100755 new mode 100644 diff --git a/scripts/ircops.pl b/scripts/ircops.pl old mode 100755 new mode 100644 diff --git a/scripts/ircsec.pl b/scripts/ircsec.pl old mode 100755 new mode 100644 diff --git a/scripts/irssi-feed.pl b/scripts/irssi-feed.pl old mode 100755 new mode 100644 diff --git a/scripts/irssiBlaster.pl b/scripts/irssiBlaster.pl old mode 100755 new mode 100644 diff --git a/scripts/irssi_logger.pl b/scripts/irssi_logger.pl old mode 100755 new mode 100644 diff --git a/scripts/irssiq.pl b/scripts/irssiq.pl old mode 100755 new mode 100644 diff --git a/scripts/isbanned.pl b/scripts/isbanned.pl old mode 100755 new mode 100644 diff --git a/scripts/isdn.pl b/scripts/isdn.pl old mode 100755 new mode 100644 diff --git a/scripts/itime.pl b/scripts/itime.pl old mode 100755 new mode 100644 diff --git a/scripts/ixmmsa.pl b/scripts/ixmmsa.pl old mode 100755 new mode 100644 diff --git a/scripts/joininfo.pl b/scripts/joininfo.pl old mode 100755 new mode 100644 diff --git a/scripts/kban-referrals.pl b/scripts/kban-referrals.pl old mode 100755 new mode 100644 diff --git a/scripts/kblamehost.pl b/scripts/kblamehost.pl old mode 100755 new mode 100644 diff --git a/scripts/keepnick.pl b/scripts/keepnick.pl old mode 100755 new mode 100644 diff --git a/scripts/kenny.pl b/scripts/kenny.pl old mode 100755 new mode 100644 diff --git a/scripts/kernel.pl b/scripts/kernel.pl old mode 100755 new mode 100644 diff --git a/scripts/keybinds.pl b/scripts/keybinds.pl old mode 100755 new mode 100644 diff --git a/scripts/kicks.pl b/scripts/kicks.pl old mode 100755 new mode 100644 diff --git a/scripts/kill_fake_gets.pl b/scripts/kill_fake_gets.pl old mode 100755 new mode 100644 diff --git a/scripts/kills.pl b/scripts/kills.pl old mode 100755 new mode 100644 diff --git a/scripts/kline_warning.pl b/scripts/kline_warning.pl old mode 100755 new mode 100644 diff --git a/scripts/l33tmusic.pl b/scripts/l33tmusic.pl old mode 100755 new mode 100644 diff --git a/scripts/lastfm.pl b/scripts/lastfm.pl old mode 100755 new mode 100644 diff --git a/scripts/lastspoke.pl b/scripts/lastspoke.pl old mode 100755 new mode 100644 diff --git a/scripts/len.pl b/scripts/len.pl old mode 100755 new mode 100644 diff --git a/scripts/leodict.pl b/scripts/leodict.pl old mode 100755 new mode 100644 diff --git a/scripts/levelclear.pl b/scripts/levelclear.pl old mode 100755 new mode 100644 diff --git a/scripts/licq.pl b/scripts/licq.pl old mode 100755 new mode 100644 diff --git a/scripts/linkchan.pl b/scripts/linkchan.pl old mode 100755 new mode 100644 diff --git a/scripts/listen.pl b/scripts/listen.pl old mode 100755 new mode 100644 diff --git a/scripts/loadavg.pl b/scripts/loadavg.pl old mode 100755 new mode 100644 diff --git a/scripts/localize.pl b/scripts/localize.pl old mode 100755 new mode 100644 diff --git a/scripts/log2ansi.pl b/scripts/log2ansi.pl old mode 100755 new mode 100644 diff --git a/scripts/logcompress.pl b/scripts/logcompress.pl old mode 100755 new mode 100644 diff --git a/scripts/ls.pl b/scripts/ls.pl old mode 100755 new mode 100644 diff --git a/scripts/lwho.pl b/scripts/lwho.pl old mode 100755 new mode 100644 diff --git a/scripts/mail.pl b/scripts/mail.pl old mode 100755 new mode 100644 diff --git a/scripts/mailcheck_imap.pl b/scripts/mailcheck_imap.pl old mode 100755 new mode 100644 diff --git a/scripts/mailcheck_mbox_flux.pl b/scripts/mailcheck_mbox_flux.pl old mode 100755 new mode 100644 diff --git a/scripts/mailcheck_pop3_kimmo.pl b/scripts/mailcheck_pop3_kimmo.pl old mode 100755 new mode 100644 diff --git a/scripts/mailcount.pl b/scripts/mailcount.pl old mode 100755 new mode 100644 diff --git a/scripts/mangle.pl b/scripts/mangle.pl old mode 100755 new mode 100644 diff --git a/scripts/map.pl b/scripts/map.pl old mode 100755 new mode 100644 diff --git a/scripts/mass_hilight_blocker.pl b/scripts/mass_hilight_blocker.pl old mode 100755 new mode 100644 diff --git a/scripts/mg.pl b/scripts/mg.pl old mode 100755 new mode 100644 diff --git a/scripts/miodek.pl b/scripts/miodek.pl old mode 100755 new mode 100644 diff --git a/scripts/mirc_colour_popup.pl b/scripts/mirc_colour_popup.pl old mode 100755 new mode 100644 diff --git a/scripts/mkick.pl b/scripts/mkick.pl old mode 100755 new mode 100644 diff --git a/scripts/mkshorterlink.pl b/scripts/mkshorterlink.pl old mode 100755 new mode 100644 diff --git a/scripts/mldonkey_bandwidth.pl b/scripts/mldonkey_bandwidth.pl old mode 100755 new mode 100644 diff --git a/scripts/mlock.pl b/scripts/mlock.pl old mode 100755 new mode 100644 diff --git a/scripts/modelist-r.pl b/scripts/modelist-r.pl old mode 100755 new mode 100644 diff --git a/scripts/modelist.pl b/scripts/modelist.pl old mode 100755 new mode 100644 diff --git a/scripts/monitor.pl b/scripts/monitor.pl old mode 100755 new mode 100644 diff --git a/scripts/mood.pl b/scripts/mood.pl old mode 100755 new mode 100644 diff --git a/scripts/morse.pl b/scripts/morse.pl old mode 100755 new mode 100644 diff --git a/scripts/mouse.pl b/scripts/mouse.pl old mode 100755 new mode 100644 diff --git a/scripts/mpd.pl b/scripts/mpd.pl old mode 100755 new mode 100644 diff --git a/scripts/mpg123.pl b/scripts/mpg123.pl old mode 100755 new mode 100644 diff --git a/scripts/mqtt-notify.pl b/scripts/mqtt-notify.pl old mode 100755 new mode 100644 diff --git a/scripts/msg2notice.pl b/scripts/msg2notice.pl old mode 100755 new mode 100644 diff --git a/scripts/multipaste.pl b/scripts/multipaste.pl old mode 100755 new mode 100644 diff --git a/scripts/my_beep.pl b/scripts/my_beep.pl old mode 100755 new mode 100644 diff --git a/scripts/mygoogle.pl b/scripts/mygoogle.pl old mode 100755 new mode 100644 diff --git a/scripts/myimdb.pl b/scripts/myimdb.pl old mode 100755 new mode 100644 diff --git a/scripts/mysqlurllogger.pl b/scripts/mysqlurllogger.pl old mode 100755 new mode 100644 diff --git a/scripts/nact.pl b/scripts/nact.pl old mode 100755 new mode 100644 diff --git a/scripts/netswitch.pl b/scripts/netswitch.pl old mode 100755 new mode 100644 diff --git a/scripts/news.pl b/scripts/news.pl old mode 100755 new mode 100644 diff --git a/scripts/newsline.pl b/scripts/newsline.pl old mode 100755 new mode 100644 diff --git a/scripts/nickban.pl b/scripts/nickban.pl old mode 100755 new mode 100644 diff --git a/scripts/nickcolor.pl b/scripts/nickcolor.pl old mode 100755 new mode 100644 diff --git a/scripts/nickignore.pl b/scripts/nickignore.pl old mode 100755 new mode 100644 diff --git a/scripts/nickmix-c0ffee.pl b/scripts/nickmix-c0ffee.pl old mode 100755 new mode 100644 diff --git a/scripts/nickmix_pasky.pl b/scripts/nickmix_pasky.pl old mode 100755 new mode 100644 diff --git a/scripts/nickserv.pl b/scripts/nickserv.pl old mode 100755 new mode 100644 diff --git a/scripts/niq.pl b/scripts/niq.pl old mode 100755 new mode 100644 diff --git a/scripts/nm.pl b/scripts/nm.pl old mode 100755 new mode 100644 diff --git a/scripts/nocaps.pl b/scripts/nocaps.pl old mode 100755 new mode 100644 diff --git a/scripts/nocollide.pl b/scripts/nocollide.pl old mode 100755 new mode 100644 diff --git a/scripts/noisyquery.pl b/scripts/noisyquery.pl old mode 100755 new mode 100644 diff --git a/scripts/nopl.pl b/scripts/nopl.pl old mode 100755 new mode 100644 diff --git a/scripts/norepeat.pl b/scripts/norepeat.pl old mode 100755 new mode 100644 diff --git a/scripts/notes.pl b/scripts/notes.pl old mode 100755 new mode 100644 diff --git a/scripts/noteserve.pl b/scripts/noteserve.pl old mode 100755 new mode 100644 diff --git a/scripts/noticelogic.pl b/scripts/noticelogic.pl old mode 100755 new mode 100644 diff --git a/scripts/noticemove.pl b/scripts/noticemove.pl old mode 100755 new mode 100644 diff --git a/scripts/notonline.pl b/scripts/notonline.pl old mode 100755 new mode 100644 diff --git a/scripts/null.pl b/scripts/null.pl old mode 100755 new mode 100644 diff --git a/scripts/ogg123.pl b/scripts/ogg123.pl old mode 100755 new mode 100644 diff --git a/scripts/oidenty.pl b/scripts/oidenty.pl old mode 100755 new mode 100644 diff --git a/scripts/on.pl b/scripts/on.pl old mode 100755 new mode 100644 diff --git a/scripts/ontv.pl b/scripts/ontv.pl old mode 100755 new mode 100644 diff --git a/scripts/oops.pl b/scripts/oops.pl old mode 100755 new mode 100644 diff --git a/scripts/oopsie.pl b/scripts/oopsie.pl old mode 100755 new mode 100644 diff --git a/scripts/openurl.pl b/scripts/openurl.pl old mode 100755 new mode 100644 diff --git a/scripts/operit.pl b/scripts/operit.pl old mode 100755 new mode 100644 diff --git a/scripts/operview.pl b/scripts/operview.pl old mode 100755 new mode 100644 diff --git a/scripts/opnotice.pl b/scripts/opnotice.pl old mode 100755 new mode 100644 diff --git a/scripts/opnotify.pl b/scripts/opnotify.pl old mode 100755 new mode 100644 diff --git a/scripts/orphamp.pl b/scripts/orphamp.pl old mode 100755 new mode 100644 diff --git a/scripts/osd.pl b/scripts/osd.pl old mode 100755 new mode 100644 diff --git a/scripts/ownage.pl b/scripts/ownage.pl old mode 100755 new mode 100644 diff --git a/scripts/page-c0ffee.pl b/scripts/page-c0ffee.pl old mode 100755 new mode 100644 diff --git a/scripts/page_reeler.pl b/scripts/page_reeler.pl old mode 100755 new mode 100644 diff --git a/scripts/pager.pl b/scripts/pager.pl old mode 100755 new mode 100644 diff --git a/scripts/pangotext.pl b/scripts/pangotext.pl old mode 100755 new mode 100644 diff --git a/scripts/paste-derwan.pl b/scripts/paste-derwan.pl old mode 100755 new mode 100644 diff --git a/scripts/paste_derwan.pl b/scripts/paste_derwan.pl old mode 100755 new mode 100644 diff --git a/scripts/paste_huggie.pl b/scripts/paste_huggie.pl old mode 100755 new mode 100644 diff --git a/scripts/paste_kimmoke.pl b/scripts/paste_kimmoke.pl old mode 100755 new mode 100644 diff --git a/scripts/pelix.pl b/scripts/pelix.pl old mode 100755 new mode 100644 diff --git a/scripts/people.pl b/scripts/people.pl old mode 100755 new mode 100644 diff --git a/scripts/per_window_prompt.pl b/scripts/per_window_prompt.pl old mode 100755 new mode 100644 diff --git a/scripts/pggb_sound.pl b/scripts/pggb_sound.pl old mode 100755 new mode 100644 diff --git a/scripts/poison.pl b/scripts/poison.pl old mode 100755 new mode 100644 diff --git a/scripts/postpone.pl b/scripts/postpone.pl old mode 100755 new mode 100644 diff --git a/scripts/ppl.pl b/scripts/ppl.pl old mode 100755 new mode 100644 diff --git a/scripts/procmaillog.pl b/scripts/procmaillog.pl old mode 100755 new mode 100644 diff --git a/scripts/query.pl b/scripts/query.pl old mode 100755 new mode 100644 diff --git a/scripts/queryresume.pl b/scripts/queryresume.pl old mode 100755 new mode 100644 diff --git a/scripts/quitmsg.pl b/scripts/quitmsg.pl old mode 100755 new mode 100644 diff --git a/scripts/quitrand.pl b/scripts/quitrand.pl old mode 100755 new mode 100644 diff --git a/scripts/quiz.pl b/scripts/quiz.pl old mode 100755 new mode 100644 diff --git a/scripts/quizgr.pl b/scripts/quizgr.pl old mode 100755 new mode 100644 diff --git a/scripts/quizmaster-fr.pl b/scripts/quizmaster-fr.pl old mode 100755 new mode 100644 diff --git a/scripts/quizmaster.pl b/scripts/quizmaster.pl old mode 100755 new mode 100644 diff --git a/scripts/rainbow.pl b/scripts/rainbow.pl old mode 100755 new mode 100644 diff --git a/scripts/randaway.pl b/scripts/randaway.pl old mode 100755 new mode 100644 diff --git a/scripts/randname.pl b/scripts/randname.pl old mode 100755 new mode 100644 diff --git a/scripts/redirect.pl b/scripts/redirect.pl old mode 100755 new mode 100644 diff --git a/scripts/relm.pl b/scripts/relm.pl old mode 100755 new mode 100644 diff --git a/scripts/remote.pl b/scripts/remote.pl old mode 100755 new mode 100644 diff --git a/scripts/reorder.pl b/scripts/reorder.pl old mode 100755 new mode 100644 diff --git a/scripts/repeat.pl b/scripts/repeat.pl old mode 100755 new mode 100644 diff --git a/scripts/resize_split.pl b/scripts/resize_split.pl old mode 100755 new mode 100644 diff --git a/scripts/rhythmbox.pl b/scripts/rhythmbox.pl old mode 100755 new mode 100644 diff --git a/scripts/rk.pl b/scripts/rk.pl old mode 100755 new mode 100644 diff --git a/scripts/romaji.pl b/scripts/romaji.pl old mode 100755 new mode 100644 diff --git a/scripts/romajibind.pl b/scripts/romajibind.pl old mode 100755 new mode 100644 diff --git a/scripts/rot13.pl b/scripts/rot13.pl old mode 100755 new mode 100644 diff --git a/scripts/rotator.pl b/scripts/rotator.pl old mode 100755 new mode 100644 diff --git a/scripts/sana_cmd.pl b/scripts/sana_cmd.pl old mode 100755 new mode 100644 diff --git a/scripts/sb_search.pl b/scripts/sb_search.pl old mode 100755 new mode 100644 diff --git a/scripts/schwaebisch.pl b/scripts/schwaebisch.pl old mode 100755 new mode 100644 diff --git a/scripts/screen_away.pl b/scripts/screen_away.pl old mode 100755 new mode 100644 diff --git a/scripts/scriptassist.pl b/scripts/scriptassist.pl old mode 100755 new mode 100644 diff --git a/scripts/scripthelp.pl b/scripts/scripthelp.pl old mode 100755 new mode 100644 diff --git a/scripts/scriptinfo.pl b/scripts/scriptinfo.pl old mode 100755 new mode 100644 diff --git a/scripts/scriptsave.pl b/scripts/scriptsave.pl old mode 100755 new mode 100644 diff --git a/scripts/scrmable.pl b/scripts/scrmable.pl old mode 100755 new mode 100644 diff --git a/scripts/scroller.pl b/scripts/scroller.pl old mode 100755 new mode 100644 diff --git a/scripts/securemsg.pl b/scripts/securemsg.pl old mode 100755 new mode 100644 diff --git a/scripts/seen.pl b/scripts/seen.pl old mode 100755 new mode 100644 diff --git a/scripts/send_scroll.pl b/scripts/send_scroll.pl old mode 100755 new mode 100644 diff --git a/scripts/servercomplete.pl b/scripts/servercomplete.pl old mode 100755 new mode 100644 diff --git a/scripts/seti.pl b/scripts/seti.pl old mode 100755 new mode 100644 diff --git a/scripts/shortenurl.pl b/scripts/shortenurl.pl old mode 100755 new mode 100644 diff --git a/scripts/shorturl.pl b/scripts/shorturl.pl old mode 100755 new mode 100644 diff --git a/scripts/showhilight.pl b/scripts/showhilight.pl old mode 100755 new mode 100644 diff --git a/scripts/showhost.pl b/scripts/showhost.pl old mode 100755 new mode 100644 diff --git a/scripts/showmode.pl b/scripts/showmode.pl old mode 100755 new mode 100644 diff --git a/scripts/slack_complete.pl b/scripts/slack_complete.pl old mode 100755 new mode 100644 diff --git a/scripts/slack_emoji.pl b/scripts/slack_emoji.pl old mode 100755 new mode 100644 diff --git a/scripts/smartfilter.pl b/scripts/smartfilter.pl old mode 100755 new mode 100644 diff --git a/scripts/smiley.pl b/scripts/smiley.pl old mode 100755 new mode 100644 diff --git a/scripts/sms.pl b/scripts/sms.pl old mode 100755 new mode 100644 diff --git a/scripts/snmpup.pl b/scripts/snmpup.pl old mode 100755 new mode 100644 diff --git a/scripts/spambot.pl b/scripts/spambot.pl old mode 100755 new mode 100644 diff --git a/scripts/special_complete.pl b/scripts/special_complete.pl old mode 100755 new mode 100644 diff --git a/scripts/spell.pl b/scripts/spell.pl old mode 100755 new mode 100644 diff --git a/scripts/spellcheck.pl b/scripts/spellcheck.pl old mode 100755 new mode 100644 diff --git a/scripts/sping.pl b/scripts/sping.pl old mode 100755 new mode 100644 diff --git a/scripts/splitlong.pl b/scripts/splitlong.pl old mode 100755 new mode 100644 diff --git a/scripts/spotify.pl b/scripts/spotify.pl old mode 100755 new mode 100644 diff --git a/scripts/stocks.pl b/scripts/stocks.pl old mode 100755 new mode 100644 diff --git a/scripts/studivz_bitlbee_rename.pl b/scripts/studivz_bitlbee_rename.pl old mode 100755 new mode 100644 diff --git a/scripts/synccheck.pl b/scripts/synccheck.pl old mode 100755 new mode 100644 diff --git a/scripts/sysinfo270-irssi.pl b/scripts/sysinfo270-irssi.pl old mode 100755 new mode 100644 diff --git a/scripts/sysinfo277-irssi.pl b/scripts/sysinfo277-irssi.pl old mode 100755 new mode 100644 diff --git a/scripts/sysinfo_dg.pl b/scripts/sysinfo_dg.pl old mode 100755 new mode 100644 diff --git a/scripts/sysinfoplus.pl b/scripts/sysinfoplus.pl old mode 100755 new mode 100644 diff --git a/scripts/tab_stop.pl b/scripts/tab_stop.pl old mode 100755 new mode 100644 diff --git a/scripts/talk.pl b/scripts/talk.pl old mode 100755 new mode 100644 diff --git a/scripts/target.pl b/scripts/target.pl old mode 100755 new mode 100644 diff --git a/scripts/thankop.pl b/scripts/thankop.pl old mode 100755 new mode 100644 diff --git a/scripts/thistory.pl b/scripts/thistory.pl old mode 100755 new mode 100644 diff --git a/scripts/timer.pl b/scripts/timer.pl old mode 100755 new mode 100644 diff --git a/scripts/timezones.pl b/scripts/timezones.pl old mode 100755 new mode 100644 diff --git a/scripts/tinyurl.pl b/scripts/tinyurl.pl old mode 100755 new mode 100644 diff --git a/scripts/title.pl b/scripts/title.pl old mode 100755 new mode 100644 diff --git a/scripts/tlock.pl b/scripts/tlock.pl old mode 100755 new mode 100644 diff --git a/scripts/tmux_away.pl b/scripts/tmux_away.pl old mode 100755 new mode 100644 diff --git a/scripts/topics.pl b/scripts/topics.pl old mode 100755 new mode 100644 diff --git a/scripts/topicsed.pl b/scripts/topicsed.pl old mode 100755 new mode 100644 diff --git a/scripts/tordetect.pl b/scripts/tordetect.pl old mode 100755 new mode 100644 diff --git a/scripts/track.pl b/scripts/track.pl old mode 100755 new mode 100644 diff --git a/scripts/trackbar.pl b/scripts/trackbar.pl old mode 100755 new mode 100644 diff --git a/scripts/tracknick.pl b/scripts/tracknick.pl old mode 100755 new mode 100644 diff --git a/scripts/translit.pl b/scripts/translit.pl old mode 100755 new mode 100644 diff --git a/scripts/trigger.pl b/scripts/trigger.pl old mode 100755 new mode 100644 diff --git a/scripts/trustweb.pl b/scripts/trustweb.pl old mode 100755 new mode 100644 diff --git a/scripts/tvmusor.pl b/scripts/tvmusor.pl old mode 100755 new mode 100644 diff --git a/scripts/twitter_theme.pl b/scripts/twitter_theme.pl old mode 100755 new mode 100644 diff --git a/scripts/twprompt.pl b/scripts/twprompt.pl old mode 100755 new mode 100644 diff --git a/scripts/twsocials.pl b/scripts/twsocials.pl old mode 100755 new mode 100644 diff --git a/scripts/twtopic.pl b/scripts/twtopic.pl old mode 100755 new mode 100644 diff --git a/scripts/u.pl b/scripts/u.pl old mode 100755 new mode 100644 diff --git a/scripts/unicode.pl b/scripts/unicode.pl old mode 100755 new mode 100644 diff --git a/scripts/upgradeinfo.pl b/scripts/upgradeinfo.pl old mode 100755 new mode 100644 diff --git a/scripts/upsidedown.pl b/scripts/upsidedown.pl old mode 100755 new mode 100644 diff --git a/scripts/uptime.pl b/scripts/uptime.pl old mode 100755 new mode 100644 diff --git a/scripts/url_log.pl b/scripts/url_log.pl old mode 100755 new mode 100644 diff --git a/scripts/urlfeed.pl b/scripts/urlfeed.pl old mode 100755 new mode 100644 diff --git a/scripts/urlgrab.pl b/scripts/urlgrab.pl old mode 100755 new mode 100644 diff --git a/scripts/urlinfo.pl b/scripts/urlinfo.pl old mode 100755 new mode 100644 diff --git a/scripts/urlplot.pl b/scripts/urlplot.pl old mode 100755 new mode 100644 diff --git a/scripts/usercount.pl b/scripts/usercount.pl old mode 100755 new mode 100644 diff --git a/scripts/userhost.pl b/scripts/userhost.pl old mode 100755 new mode 100644 diff --git a/scripts/users.pl b/scripts/users.pl old mode 100755 new mode 100644 diff --git a/scripts/version-stat.pl b/scripts/version-stat.pl old mode 100755 new mode 100644 diff --git a/scripts/verstats.pl b/scripts/verstats.pl old mode 100755 new mode 100644 diff --git a/scripts/vidinfo.pl b/scripts/vidinfo.pl old mode 100755 new mode 100644 diff --git a/scripts/vowels.pl b/scripts/vowels.pl old mode 100755 new mode 100644 diff --git a/scripts/wa.pl b/scripts/wa.pl old mode 100755 new mode 100644 diff --git a/scripts/warnkick.pl b/scripts/warnkick.pl old mode 100755 new mode 100644 diff --git a/scripts/washnicks.pl b/scripts/washnicks.pl old mode 100755 new mode 100644 diff --git a/scripts/watch.pl b/scripts/watch.pl old mode 100755 new mode 100644 diff --git a/scripts/whitelist.pl b/scripts/whitelist.pl old mode 100755 new mode 100644 diff --git a/scripts/whocount.pl b/scripts/whocount.pl old mode 100755 new mode 100644 diff --git a/scripts/whois.pl b/scripts/whois.pl old mode 100755 new mode 100644 diff --git a/scripts/whois_hexip.pl b/scripts/whois_hexip.pl old mode 100755 new mode 100644 diff --git a/scripts/whos.pl b/scripts/whos.pl old mode 100755 new mode 100644 diff --git a/scripts/wilm.pl b/scripts/wilm.pl old mode 100755 new mode 100644 diff --git a/scripts/window_switcher.pl b/scripts/window_switcher.pl old mode 100755 new mode 100644 diff --git a/scripts/winnum.pl b/scripts/winnum.pl old mode 100755 new mode 100644 diff --git a/scripts/wisestamp.pl b/scripts/wisestamp.pl old mode 100755 new mode 100644 diff --git a/scripts/wkb.pl b/scripts/wkb.pl old mode 100755 new mode 100644 diff --git a/scripts/wordcompletition.pl b/scripts/wordcompletition.pl old mode 100755 new mode 100644 diff --git a/scripts/wordscramble.pl b/scripts/wordscramble.pl old mode 100755 new mode 100644 diff --git a/scripts/xauth.pl b/scripts/xauth.pl old mode 100755 new mode 100644 diff --git a/scripts/xcmd.pl b/scripts/xcmd.pl old mode 100755 new mode 100644 diff --git a/scripts/xdcc.pl b/scripts/xdcc.pl old mode 100755 new mode 100644 diff --git a/scripts/xdcc_autoget.pl b/scripts/xdcc_autoget.pl old mode 100755 new mode 100644 index 5923a21..16f4639 --- a/scripts/xdcc_autoget.pl +++ b/scripts/xdcc_autoget.pl @@ -50,7 +50,7 @@ use File::Copy; use Try::Tiny; use vars qw($VERSION %IRSSI); -$VERSION = "2.1"; +$VERSION = "2.0"; %IRSSI = ( name => "autoget", description => "XDCC Autoget, for automated searching and downloading of xdcc packs", @@ -143,7 +143,7 @@ sub ag_list sub ag_initserver #init server { - Irssi::signal_remove("server connected", "ag_initserver"); + Irssi::signal_remove("server connected", "ag_server"); $statusbarmessage = "Connected"; $server = $_[0]; if (!$runningflag) {Irssi::timeout_add_once(5000, sub { &ag_run; }, []);} @@ -270,11 +270,11 @@ sub ag_search #searches bots for packs $msgflag[$botcounter] = 0; #unset message flag so that ag_skip knows no important message has arrived if($episodicflag) { - my $searchterm = $terms[$termcounter[$botcounter]]; + my $searchterm; my @words = split(/#/, $terms[$termcounter[$botcounter]]); - my $ep = sprintf("%d", $episode[$botcounter]); + my $ep = sprintf("%.2d", $episode[$botcounter]); if ($#words > 0){$searchterm = "$words[0]$ep$words[1]";} - else {$searchterm = "$terms[$termcounter[$botcounter]] $ep";} + else {$searchterm = "$words[0] $ep";} ag_message("msg $bots[$botcounter] $findprefix $searchterm" ); push(@{$totags[$botcounter]}, Irssi::timeout_add_once($botdelay * 1000, sub { ag_skip($botcounter); } , [])); @@ -323,9 +323,9 @@ sub ag_getpacks #if ($m =~ m{#(\d+):}) my @temp = split(/[#,]/, $message); #split up the message into 'words' my $timeoutscleared = 0; + my $newpackflag = 1; foreach my $m (@temp) #find packs (#[NUMBER]: format) { - my $newpackflag = 1; if ($m =~ m/(\d+):(.+)/) { if (!$timeoutscleared) #reset timeouts if any packs are found @@ -339,7 +339,7 @@ sub ag_getpacks #if ($m =~ m{#(\d+):}) my $filename = $2; $filename =~ tr/[ ']/[__]/; if ($n eq "$bots[$botcounter] $1" or $n eq $filename) {$newpackflag = 0;} - last if ($n eq "$bots[$botcounter] $1" or $n eq $filename); + last if ($n eq "$bots[$botcounter] $1"); } if($newpackflag){push(@{$packs[$botcounter]}, $1);} #push all new pack numbers to list of packs } @@ -580,6 +580,7 @@ sub ag_addfinished #save finished downloads ag_getfinished; } + sub ag_parseadd #parses add arguments for storage { my ($file, @args) = @_; @@ -649,6 +650,7 @@ sub ag_parserem #parses remove arguments for deletion from file sub ag_add #add search terms { + ag_server; my @args = quotewords('\s+', 0, $_[0]); #split arguments (words in brackets not seperated) if ($#args < 0) { @@ -662,6 +664,7 @@ sub ag_add #add search terms sub ag_rem #remove ssearch terms { + ag_server; my @args = quotewords('\s+', 0, $_[0]); if ($#args < 0) { @@ -675,6 +678,7 @@ sub ag_rem #remove ssearch terms sub ag_botadd #add bots { + ag_server; my @args = quotewords('\s+', 0, $_[0]); if ($#args < 0) { @@ -688,6 +692,7 @@ sub ag_botadd #add bots sub ag_botrem #remove bots { + ag_server; my @args = quotewords('\s+', 0, $_[0]); if ($#args < 0) { diff --git a/scripts/xdccget.pl b/scripts/xdccget.pl old mode 100755 new mode 100644 diff --git a/scripts/xetra.pl b/scripts/xetra.pl old mode 100755 new mode 100644 diff --git a/scripts/xlist.pl b/scripts/xlist.pl old mode 100755 new mode 100644 diff --git a/scripts/xmms.pl b/scripts/xmms.pl old mode 100755 new mode 100644 diff --git a/scripts/xmms2.pl b/scripts/xmms2.pl old mode 100755 new mode 100644 diff --git a/scripts/xmmsinfo.pl b/scripts/xmmsinfo.pl old mode 100755 new mode 100644 diff --git a/scripts/xmpp-notify.pl b/scripts/xmpp-notify.pl old mode 100755 new mode 100644 diff --git a/scripts/xqf.pl b/scripts/xqf.pl old mode 100755 new mode 100644 -- cgit v1.2.3 From deae6f8abf891c7595594134b6aafbbcb0052ee9 Mon Sep 17 00:00:00 2001 From: Alex Checca Date: Wed, 26 Oct 2016 19:23:08 -0400 Subject: various bugfixes from many months of usage --- scripts/xdcc_autoget.pl | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) (limited to 'scripts') diff --git a/scripts/xdcc_autoget.pl b/scripts/xdcc_autoget.pl index 16f4639..57bcf65 100644 --- a/scripts/xdcc_autoget.pl +++ b/scripts/xdcc_autoget.pl @@ -50,7 +50,7 @@ use File::Copy; use Try::Tiny; use vars qw($VERSION %IRSSI); -$VERSION = "2.0"; +$VERSION = "2.1"; %IRSSI = ( name => "autoget", description => "XDCC Autoget, for automated searching and downloading of xdcc packs", @@ -143,7 +143,7 @@ sub ag_list sub ag_initserver #init server { - Irssi::signal_remove("server connected", "ag_server"); + Irssi::signal_remove("server connected", "ag_initserver"); $statusbarmessage = "Connected"; $server = $_[0]; if (!$runningflag) {Irssi::timeout_add_once(5000, sub { &ag_run; }, []);} @@ -270,11 +270,11 @@ sub ag_search #searches bots for packs $msgflag[$botcounter] = 0; #unset message flag so that ag_skip knows no important message has arrived if($episodicflag) { - my $searchterm; + my $searchterm = $terms[$termcounter[$botcounter]]; my @words = split(/#/, $terms[$termcounter[$botcounter]]); my $ep = sprintf("%.2d", $episode[$botcounter]); if ($#words > 0){$searchterm = "$words[0]$ep$words[1]";} - else {$searchterm = "$words[0] $ep";} + elsif ($words[0] ne $searchterm) {$searchterm = "$words[0] $ep";} ag_message("msg $bots[$botcounter] $findprefix $searchterm" ); push(@{$totags[$botcounter]}, Irssi::timeout_add_once($botdelay * 1000, sub { ag_skip($botcounter); } , [])); @@ -323,9 +323,9 @@ sub ag_getpacks #if ($m =~ m{#(\d+):}) my @temp = split(/[#,]/, $message); #split up the message into 'words' my $timeoutscleared = 0; - my $newpackflag = 1; foreach my $m (@temp) #find packs (#[NUMBER]: format) { + my $newpackflag = 1; if ($m =~ m/(\d+):(.+)/) { if (!$timeoutscleared) #reset timeouts if any packs are found @@ -339,7 +339,7 @@ sub ag_getpacks #if ($m =~ m{#(\d+):}) my $filename = $2; $filename =~ tr/[ ']/[__]/; if ($n eq "$bots[$botcounter] $1" or $n eq $filename) {$newpackflag = 0;} - last if ($n eq "$bots[$botcounter] $1"); + last if ($n eq "$bots[$botcounter] $1" or $n eq $filename); } if($newpackflag){push(@{$packs[$botcounter]}, $1);} #push all new pack numbers to list of packs } @@ -650,7 +650,6 @@ sub ag_parserem #parses remove arguments for deletion from file sub ag_add #add search terms { - ag_server; my @args = quotewords('\s+', 0, $_[0]); #split arguments (words in brackets not seperated) if ($#args < 0) { @@ -664,7 +663,6 @@ sub ag_add #add search terms sub ag_rem #remove ssearch terms { - ag_server; my @args = quotewords('\s+', 0, $_[0]); if ($#args < 0) { @@ -678,7 +676,6 @@ sub ag_rem #remove ssearch terms sub ag_botadd #add bots { - ag_server; my @args = quotewords('\s+', 0, $_[0]); if ($#args < 0) { @@ -692,7 +689,6 @@ sub ag_botadd #add bots sub ag_botrem #remove bots { - ag_server; my @args = quotewords('\s+', 0, $_[0]); if ($#args < 0) { -- cgit v1.2.3 From ae6cf76d83852c2c2e819a9921d515b7f2e30a79 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Tue, 1 Nov 2016 17:15:32 +0100 Subject: adv_windowlist update to 1.3 - workaround for irssi issue #572 --- scripts/adv_windowlist.pl | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/adv_windowlist.pl b/scripts/adv_windowlist.pl index ee0219b..6285786 100644 --- a/scripts/adv_windowlist.pl +++ b/scripts/adv_windowlist.pl @@ -1,7 +1,7 @@ use strict; use warnings; -our $VERSION = '1.2'; # 762850b0c2c1d5a +our $VERSION = '1.3'; # 463402cffae35e5 our %IRSSI = ( authors => 'Nei', contact => 'Nei @ anti@conference.jabber.teamidiot.de', @@ -1710,8 +1710,13 @@ sub string_LCSS { (sort { length $b <=> length $a } $str =~ /(?=(.+).*\0.*\1)/g)[0] } +# workaround for issue #271 { package Irssi::Nick } +# workaround for issue #572 +@Irssi::UI::Exec::ISA = 'Irssi::Windowitem' + if Irssi::version >= 20140822 && Irssi::version <= 20161101 && !@Irssi::UI::Exec::ISA; + UNITCHECK { package AwlViewer; use strict; @@ -2388,6 +2393,7 @@ UNITCHECK # Changelog # ========= +# 1.3 - workaround for irssi issue #572 # 1.2 - new format to choose abbreviation character # 1.1 - infinite loop on shortening certain window names reported by Kalan # -- cgit v1.2.3 From d4523a4d2f6604d0fd63de85f7ad681640fcd113 Mon Sep 17 00:00:00 2001 From: mh Date: Mon, 7 Nov 2016 14:57:43 +0100 Subject: mh_sbuserinfo.pl v1.05 statusbar item that shows users and limit info in channels changes: added setting _show_details_oper and supporting code added setting _format_sep and supportingf code added setting _format_div and supporting code added setting _group_begin and _format_group_end and supporting code added setting _format_mode_oper, _format_mode_op, _format_mode_ho, _format_mode_vo and _format_mode_other, and supporting code added settting _show_warning_limit_difference and supporting code (changing _show_warning_limit_percent behavior) changed default of _show_warning_limit_percent from 95 to 0--- scripts/mh_sbuserinfo.pl | 162 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 126 insertions(+), 36 deletions(-) (limited to 'scripts') diff --git a/scripts/mh_sbuserinfo.pl b/scripts/mh_sbuserinfo.pl index fde7ebc..c9ee211 100644 --- a/scripts/mh_sbuserinfo.pl +++ b/scripts/mh_sbuserinfo.pl @@ -1,8 +1,8 @@ ############################################################################## # -# mh_sbuserinfo.pl v1.04 (20151225) +# mh_sbuserinfo.pl v1.05 (20161106) # -# Copyright (c) 2015 Michael Hansen +# Copyright (c) 2015, 2016 Michael Hansen # # Permission to use, copy, modify, and distribute this software # for any purpose with or without fee is hereby granted, provided @@ -25,23 +25,41 @@ # displays in the statusbar the number of users and the limit of the channel, # with several settings for finetuning: # -# default settings: [Users: (@:+:)/()] +# default settings: [Users: (*:@:+:)/()] # "/()" will only show when there is a limit set. # "()" shows the difference between the limit and current # users (this can be negative if the limit is lower than users) # +# setting mh_sbuserinfo_format_group_begin (default '(') and +# setting mh_sbuserinfo_format_group_end' (default ')'); change the characters grouping +# details +# +# setting mh_sbuserinfo_format_sep (default ':'): change the : seperator to another string +# +# setting mh_sbuserinfo_format_div (default '/'): change the / divider to another string +# # setting mh_sbuserinfo_show_prefix (default 'Users: '): set/unset the prefix # in the window item # # setting mh_sbuserinfo_show_details (default ON): enable/disable showing a -# detailed breakout of users into ops, halfops, voice and normal +# detailed breakout of users into opers, ops, halfops, voice and normal # # setting mh_sbuserinfo_show_details_mode (default ON): enable/disable -# prefixing ops, halfops and voice with @%+ when details are enabled +# prefixing opers, ops, halfops and voice with *@%+ when details are enabled +# +# setting mh_sbuserinfo_format_mode_oper (default '*'), +# setting mh_sbuserinfo_format_mode_op (default '@'), +# setting mh_sbuserinfo_format_mode_ho (default '%%'), +# setting mh_sbuserinfo_format_mode_vo (default '+') and +# setting mh_sbuserinfo_format_mode_other (default ''): change the mode prefix +# for each of oper, op, halfdop, voice and others # # setting mh_sbuserinfo_show_details_halfop (default OFF): enable/disable # showing halfops when details are enabled # +# setting mh_sbuserinfo_show_details_oper (default ON): enable/disable +# showing opers when details are enabled +# # setting mh_sbuserinfo_show_details_difference (default ON): enable/disable # showing the "()" # @@ -51,9 +69,13 @@ # setting mh_sbuserinfo_show_warning_limit (default ON): change the colour # of "" if channel is above, at or close to the limited amount of users # -# setting mh_sbuserinfo_show_warning_limit_percent (default 95): number in +# setting mh_sbuserinfo_show_warning_limit_percent (default 0): number in # percent (0-100) of users relative to the limit before a limit warning is -# triggered +# triggered (if set to 0 see mh_sbuserinfo_show_warning_limit_difference) +# +# setting mh_sbuserinfo_show_warning_limit_difference (default 5): when +# mh_sbuserinfo_show_warning_limit_percent is 0, use this absolute value +# as the difference warning trigger instead of percentage # # setting mh_sbuserinfo_warning_format (default '%Y'): the colour used for # warnings. see http://www.irssi.org/documentation/formats @@ -63,6 +85,15 @@ # see '/help statusbar' for more details and do not forget to '/save' # # history: +# +# v1.05 (20161106) +# added setting _show_details_oper and supporting code +# added setting _format_sep and supportingf code +# added setting _format_div and supporting code +# added setting _group_begin and _format_group_end and supporting code +# added setting _format_mode_oper, _format_mode_op, _format_mode_ho, _format_mode_vo and _format_mode_other, and supporting code +# added settting _show_warning_limit_difference and supporting code (changing _show_warning_limit_percent behavior) +# changed default of _show_warning_limit_percent from 95 to 0 # v1.04 (20151225) # added setting _show_details_difference and supporting code # changed _show_warning_limit_percent default from 90 to 95 @@ -96,7 +127,7 @@ use strict; use Irssi 20100403; use Irssi::TextUI; -our $VERSION = '1.04'; +our $VERSION = '1.05'; our %IRSSI = ( 'name' => 'mh_sbuserinfo', @@ -105,7 +136,7 @@ our %IRSSI = 'authors' => 'Michael Hansen', 'contact' => 'mh on IRCnet #help', 'url' => 'http://scripts.irssi.org / https://github.com/mh-source/irssi-scripts', - 'changed' => 'Fri Dec 25 17:14:34 CET 2015', + 'changed' => 'Sun Nov 6 20:37:05 CET 2016', ); ############################################################################## @@ -183,6 +214,7 @@ sub statusbar_userinfo my $users_op = 0; my $users_ho = 0; my $users_vo = 0; + my $users_oper = 0; my $warning_format = Irssi::settings_get_str('mh_sbuserinfo_warning_format'); for my $nick ($channel->nicks()) @@ -201,56 +233,84 @@ sub statusbar_userinfo { $users_vo++; } + + if ($nick->{'serverop'}) + { + $users_oper++; + } } - $format = $format . $users; + $format .= $users; + + my $format_sep = Irssi::settings_get_str('mh_sbuserinfo_format_sep'); + my $format_div = Irssi::settings_get_str('mh_sbuserinfo_format_div'); + + my $format_group_begin = Irssi::settings_get_str('mh_sbuserinfo_format_group_begin'); + my $format_group_end = Irssi::settings_get_str('mh_sbuserinfo_format_group_end'); if (Irssi::settings_get_bool('mh_sbuserinfo_show_details')) { - $format = $format . '('; + $format .= $format_group_begin; my $showmode = Irssi::settings_get_bool('mh_sbuserinfo_show_details_mode'); + if (Irssi::settings_get_bool('mh_sbuserinfo_show_details_oper')) + { + if ($showmode) + { + $format .= Irssi::settings_get_str('mh_sbuserinfo_format_mode_oper'); + } + + $format .= $users_oper . $format_sep + } + if (Irssi::settings_get_bool('mh_sbuserinfo_show_warning_opless') and (not $users_op)) { - $format = $format . $warning_format; + $format .= $warning_format; } if ($showmode) { - $format = $format . '@'; + $format .= Irssi::settings_get_str('mh_sbuserinfo_format_mode_op'); } - $format = $format . $users_op . '%n:'; + $format .= $users_op . '%n' . $format_sep; if (Irssi::settings_get_bool('mh_sbuserinfo_show_details_halfop')) { # # add halfops to ops so users calculation below matches # - $users_op = $users_op + $users_ho; + $users_op += $users_ho; if ($showmode) { - $format = $format . '%%'; + $format .= Irssi::settings_get_str('mh_sbuserinfo_format_mode_ho'); } - $format = $format . $users_ho . ':'; + $format .= $users_ho . $format_sep; + } + + if ($showmode) + { + $format .= Irssi::settings_get_str('mh_sbuserinfo_format_mode_vo');; } + $format .= $users_vo . $format_sep; + if ($showmode) { - $format = $format . '+'; + $format .= Irssi::settings_get_str('mh_sbuserinfo_format_mode_other');; } - $format = $format . $users_vo . ':' . ($users - ($users_op + $users_vo)) . ')'; + $format .= ($users - ($users_op + $users_vo)) . $format_group_end; } my $limit = $channel->{'limit'}; if ($limit) { - $format = $format . '/'; + $format .= $format_div; if (Irssi::settings_get_bool('mh_sbuserinfo_show_warning_limit')) { @@ -265,20 +325,39 @@ sub statusbar_userinfo $setting_percent = 0; } - my $percent = int(($users / $limit) * 100); + if ($setting_percent) + { + + my $percent = int(($users / $limit) * 100); - if ($percent >= $setting_percent) + if ($percent >= $setting_percent) + { + $format .= $warning_format; + } + } else { - $format = $format . $warning_format; + my $setting_percent = Irssi::settings_get_int('mh_sbuserinfo_show_warning_limit_difference'); + + my $difference = ($limit - $users); + + if ($setting_percent < 0) + { + $setting_percent = 0; + } + + if ($difference < $setting_percent) + { + $format .= $warning_format; + } } } if (Irssi::settings_get_bool('mh_sbuserinfo_show_details_difference')) { - $limit = $limit . '(' . ($limit - $users) . ')'; + $limit .= $format_group_begin . ($limit - $users) . $format_group_end; } - $format = $format . $limit . '%n'; + $format .= $limit . '%n'; } } } @@ -292,17 +371,26 @@ sub statusbar_userinfo # ############################################################################## -Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_details', 1); -Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_details_mode', 1); -Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_details_halfop', 0); -Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_warning_opless', 1); -Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_warning_limit', 1); -Irssi::settings_add_int( 'mh_sbuserinfo', 'mh_sbuserinfo_show_warning_limit_percent', 95); -Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_warning_format', '%Y'); -Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_show_prefix', 'Users: '); -Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_details_difference', 1); - -Irssi::statusbar_item_register('mh_sbuserinfo', '', 'statusbar_userinfo'); +Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_details', 1); +Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_details_mode', 1); +Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_details_halfop', 0); +Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_warning_opless', 1); +Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_warning_limit', 1); +Irssi::settings_add_int( 'mh_sbuserinfo', 'mh_sbuserinfo_show_warning_limit_percent', 0); +Irssi::settings_add_int( 'mh_sbuserinfo', 'mh_sbuserinfo_show_warning_limit_difference', 5); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_warning_format', '%Y'); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_show_prefix', 'Users: '); +Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_details_difference', 1); +Irssi::settings_add_bool('mh_sbuserinfo', 'mh_sbuserinfo_show_details_oper', 1); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_format_sep', ':'); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_format_div', '/'); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_format_group_begin', '('); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_format_group_end', ')'); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_format_mode_oper', '*'); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_format_mode_op', '@'); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_format_mode_ho', '%%'); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_format_mode_vo', '+'); +Irssi::settings_add_str( 'mh_sbuserinfo', 'mh_sbuserinfo_format_mode_other', ''); Irssi::signal_add_last('channel sync', 'statusbar_redraw'); Irssi::signal_add_last('channel mode changed', 'statusbar_redraw'); @@ -312,6 +400,8 @@ Irssi::signal_add_last('nicklist remove', 'statusbar_redraw'); Irssi::signal_add_last('setup changed', 'signal_setup_changed_last'); Irssi::signal_add_last('window changed', 'signal_window_changed_last'); +Irssi::statusbar_item_register('mh_sbuserinfo', '', 'statusbar_userinfo'); + 1; ############################################################################## -- cgit v1.2.3 From a81c449e6666de7b22c0c4a9e28a8c406d027a78 Mon Sep 17 00:00:00 2001 From: Dawid Ł Date: Mon, 7 Nov 2016 15:43:52 +0100 Subject: Update rud_emotes.pl --- scripts/rud_emotes.pl | 58 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 21 deletions(-) (limited to 'scripts') diff --git a/scripts/rud_emotes.pl b/scripts/rud_emotes.pl index e783d75..de55cba 100644 --- a/scripts/rud_emotes.pl +++ b/scripts/rud_emotes.pl @@ -1,4 +1,4 @@ -# Copyright (C) 2015 Dawid Lekawski +# Copyright (C) 2016 Dawid Lekawski # contact: xxrud0lf@gmail.com # # --- INFORMATION --- @@ -33,7 +33,7 @@ # notes: # # - script doesn't work with /msg target text; must be typed in a channel -# or query window +# or query window (from version 1.10 it works with /me command too) # # - Ctrl+O (ascii 15) at the beggining of your text turns off emote replacing # for this text @@ -41,20 +41,31 @@ # - remeber to escape "\" characters in emotes (just type it twice -> "\\"), # take a look at 'shrug' emote for reference # +# +# +# -- CHANGES: -- +# +# - script now works with /me command (action) +# +# - moved text output messages into nice and clean theme_register +# +# use strict; use warnings; use utf8; -use Irssi qw(signal_add signal_continue command_bind); +use Irssi qw(signal_add signal_continue command_bind theme_register + printformat); -our $VERSION = "1.00"; +our $VERSION = "1.10"; our %IRSSI = ( authors => "Dawid 'rud0lf' Lekawski", contact => 'rud0lf/IRCnet; rud0lf/freenode; xxrud0lf@gmail.com', name => 'emotes script', description => 'Replaces :emote_name: text in your sent messages into pre-defined emotes (unicode mostly).', - license => 'GPLv3' + license => 'GPLv3', + changed => 'Mon Nov 07 14:54:38 2016' ); my $pattern = ''; @@ -94,10 +105,18 @@ my %emotes = ( 'wink', '◕‿↼', 'gift', '(´・ω・)っ由', 'success', '(•̀ᴗ•́)و', - 'whatever', '◔_◔' + 'whatever', '◔_◔', + 'run', 'ᕕ(⚆ ʖ̯⚆)ᕗ', + 'rock', '(ツ)\m/' ); sub init { + theme_register([ + 'rud_emotes_list', 'List of emotes:', + 'rud_emotes_emote', '* $[!15]0 : $1', + 'rud_emotes_total', 'Total of $0 emotes.' +]); + $pattern = join('|', keys %emotes); if ($pattern eq '') { $pattern = '!?'; @@ -127,31 +146,28 @@ sub sig_send_text { signal_continue($newline, $server, $witem); } -sub pad { - my ($txt, $cnt) = @_; +sub sig_command_me { + my ($line, $server, $witem) = @_; - if (length($txt) >= $cnt) { - return $txt; - } - - $txt .= " " x ($cnt - length($txt)); - return $txt; + return unless ($witem); + return unless ($witem->{type} eq "CHANNEL" or $witem->{type} eq "QUERY"); + + my $newline = process_emotes($line); + signal_continue($newline, $server, $witem); } sub cmd_emotes { my ($data, $server, $witem) = @_; - - Irssi::print('List of emotes:', MSGLEVEL_CLIENTCRAP); + + printformat(MSGLEVEL_CLIENTCRAP, 'rud_emotes_list'); foreach my $key (sort(keys %emotes)) { - my $emote = $emotes{$key}; - Irssi::print('* '. pad($key, 15) . ' : ' . $emote, MSGLEVEL_CLIENTCRAP); + printformat(MSGLEVEL_CLIENTCRAP, 'rud_emotes_emote', $key, $emotes{$key}); } - Irssi::print('Total of '.scalar(keys %emotes).' emotes.', MSGLEVEL_CLIENTCRAP); + printformat(MSGLEVEL_CLIENTCRAP, 'rud_emotes_total', scalar(keys %emotes)); } init(); signal_add("send text", "sig_send_text"); +signal_add("command me", "sig_command_me"); command_bind("emotes", "cmd_emotes"); - - -- cgit v1.2.3 From d5063cf314ba7c08e9441f128735ba4169a56cd6 Mon Sep 17 00:00:00 2001 From: Isaac Good Date: Tue, 6 Dec 2016 17:19:56 -0800 Subject: New listsort.pl script: order /list by chan size --- scripts/listsort.pl | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 scripts/listsort.pl (limited to 'scripts') diff --git a/scripts/listsort.pl b/scripts/listsort.pl new file mode 100644 index 0000000..f615cd9 --- /dev/null +++ b/scripts/listsort.pl @@ -0,0 +1,59 @@ +use Irssi; +use vars qw/$VERSION %IRSSI/; + +$VERSION = '0.1'; +%IRSSI = ( + authors => 'Isaac Good', + name => 'listsort', + contact => 'irssi@isaacgood.com', + decsription => 'Sort the /list output by channel size', + license => 'BSD', + url => 'https://github.com/IsaacG/irssi-scripts', + created => '2013/02/23', +); + +# Bindings. Start of channel list, end of list, list item. +Irssi::signal_add_last('event 322', \&list_event); +Irssi::signal_add_last('event 323', \&list_end); +Irssi::signal_add_last('notifylist event', \&list_start); + +# Store the channel list between IRC messages +my %list; + +# When we get a start-list, create an empty list. +sub list_start { + %list = {}; +} + +# Store list info in the hash. +sub list_event { + my ($server, $data, $server_name) = @_; + my ($meta, $more) = split (/ :/, $data, 2); + my ($nick, $name, $size) = split (/ /, $meta, 3); + $list{$name}{'size'} = $size; + + $more =~ /^[^[]*\[([^]]*)\][^ ]* *([^ ].*)$/; + my $modes = $1; + $list{$name}{'desc'} = $2; + + $modes =~ s/ +$//; + $list{$name}{'modes'} = $modes; +} + +# Print out the whole list in sorted order. +sub list_end { + for my $name (sort {$list{$a}{'size'} <=> $list{$b}{'size'}} keys %list) { + my $msg = sprintf ( + "%d %s: %s (%s)", + $list{$name}{'size'}, + $name, + $list{$name}{'desc'}, + $list{$name}{'modes'} + ); + + Irssi::print($msg, MSGLEVEL_CRAP); + } + # Drop the hash values; no point in holding them in memory. + delete @list{keys %list}; +} + -- cgit v1.2.3 From 9e36a6abb0bea4f766b72fd41514d766c8cdc141 Mon Sep 17 00:00:00 2001 From: Isaac Good Date: Tue, 6 Dec 2016 17:53:07 -0800 Subject: Clean up my reorder script --- scripts/reorder.pl | 311 +++++++++++++++++++++++++++-------------------------- 1 file changed, 161 insertions(+), 150 deletions(-) (limited to 'scripts') diff --git a/scripts/reorder.pl b/scripts/reorder.pl index 7bec6b8..475db41 100644 --- a/scripts/reorder.pl +++ b/scripts/reorder.pl @@ -1,150 +1,161 @@ -# Save window layout to an arbitrary file and load layouts upon demand -# Useful for being able to temporarily reorder your windows and then reverting to your "normal" layout -# Also useful as an easy way to reorder your windows -# -# A special thanks to billnye, Zed` and Bazerka for their help -# -# Usage: -# /layout_save filename -# Saves the layout to the textfile "filename.layout" -# /layout_load filename -# Loads the layout from the textfile "filename.layout" -# /set layout_savepath path -# Use to set a default path for layouts -# -# TODO: -# Check the layout file for a number used twice -# - -use strict; -use Irssi; -use Data::Dumper; -use vars qw($VERSION %IRSSI); - -%IRSSI = ( - authors => "Isaac G", - contact => "irssi\@isaac.otherinbox.com", - name => "reorder", - description => "Reordering windows based on a textfile.", - license => "GPL", -); - -sub doFilenameFixing -{ - my ($filename) = @_; - unless ($filename) - { - print "No filename specified!"; - return; - } - - $filename = glob($filename); - - if ($filename =~ /\//) - { - unless ($filename =~ /^\//) - { - print "I don't like /'s in filenames. Unless you want to specify an absolute path."; - return; - } - # Let it go? - } - - $filename .= '.layout' unless ($filename =~ /.layout$/); - - my $path = Irssi::settings_get_str('layout_savepath'); - $path .= '/' unless ($path =~ /\/$/); - $filename = $path . $filename unless ($filename =~ /\//); - - return $filename; -} - -sub canReadFile -{ - my ($filename) = @_; - unless (-f $filename) - { - print "No such file $filename"; - return; - } - unless (-r $filename) - { - print "Can not read file $filename"; - return; - } - return 1; -} - -# Save a list of refnum and window info to file -sub cmd_layout_save -{ - my ($filename, $data, $more) = @_; - my $FH; - - $filename = doFilenameFixing($filename); - return unless ($filename); - - unless(open $FH, ">", $filename) - { - print "Can not open $filename"; - return; - } - - # Order by ref. Print ref and an id tag - for my $win (sort {$a->{'refnum'} <=> $b->{'refnum'}} Irssi::windows()) - { - my $id = $win->{'name'} ? $win->{'name'} : $win->{'active'}->{'name'} . ":" . $win->{'active'}->{'server'}->{'tag'}; - printf $FH "%d\t%s\n", $win->{'refnum'}, $id; - } - close $FH; - print "Layout saved to $filename"; -} - -# Load a list and use it to reorder -sub cmd_layout_load -{ - # Check filename supplied, exists and readable - my ($filename, $data, $more) = @_; - $filename = doFilenameFixing($filename); - return unless ($filename); - - return unless canReadFile($filename); - - my @layout; - my ($ref, $id, $FH); - - # Pull the refnum and id - unless(open $FH, "<", $filename) - { - print "Can not open file $filename."; - return; - } - while (my $line = <$FH>) - { - chomp $line; - my ($ref, $id) = split(/\t/, $line, 2); - next unless ($ref and $id); - - push @layout, {refnum => $ref, id => $id}; - } - close $FH; - - # For each layout item from the file, find the window and set it's ref to that number - for my $position (sort {$a->{'refnum'} <=> $b->{'refnum'}} @layout) - { - for my $win (Irssi::windows()) - { - $id = $win->{'name'} ? $win->{'name'} : $win->{'active'}->{'name'} . ":" . $win->{'active'}->{'server'}->{'tag'}; - if ($id eq $position->{'id'}) - { - $win->set_refnum($position->{'refnum'}); - last; - } - } - } -} - -Irssi::settings_add_str('misc', 'layout_savepath', Irssi::get_irssi_dir()); - -Irssi::command_bind( 'layout_save', 'cmd_layout_save' ); -Irssi::command_bind( 'layout_load', 'cmd_layout_load' ); \ No newline at end of file +# Save window layout to an arbitrary file and load layouts upon demand +# Useful for being able to temporarily reorder your windows and then reverting to your "normal" layout +# Also useful as an easy way to reorder your windows +# +# A special thanks to billnye, Zed` and Bazerka for their help +# +# Usage: +# /layout_save filename +# Saves the layout to the textfile "filename.layout" +# /layout_load filename +# Loads the layout from the textfile "filename.layout" +# +# TODO: +# Check the layout file for a number used twice +# On script load, run a layout_load +# On channel join, run load: channel joined +# + +use strict; +use Irssi; +use Data::Dumper; +use vars qw($VERSION %IRSSI); +use POSIX 'strftime'; + +%IRSSI = ( + authors => "Isaac Good", + contact => "irssi\@isaacgood.com", + name => "reorder", + description => "Reordering windows based on a textfile.", + license => "GPL", +); +$VERSION = '1.0'; + +# Map user input to a valid filename +sub GetFilename +{ + my ($filename) = @_; + + # On no input, use a default filename. + unless (length($filename)) + { + my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); + $filename = POSIX::strftime("%y%m%d", $sec, $min, $hour, $mday, $mon, $year); + # If you prefer not having datestamped filenames, uncomment: + # $filename = "default"; + } + + # Use glob expansion to match things like ~/ + my $glob = glob($filename); + $filename = $glob if $glob; + + # Only handle directories when using an absolute path. + if ($filename =~ /\// and $filename !~ /^\//) + { + print "I don't like /'s in filenames. Unless you want to specify an absolute path."; + return; + } + + # Add a file extension + $filename .= '.layout' unless ($filename =~ /.layout$/); + + # Use get_irssi_dir() unless using an absolute path + if ($filename !~ /\//) { + my $path = Irssi::get_irssi_dir(); + $path .= '/' unless ($path =~ /\/$/); + $filename = $path . $filename; + } + + return $filename; +} + +# Check a filename exists and can be read. +sub CanReadFile +{ + my ($filename) = @_; + unless (-f $filename) + { + print "No such file $filename"; + return 0; + } + unless (-r $filename) + { + print "Can not read file $filename"; + return 0; + } + return 1; +} + +# Save the current layout to file +sub CmdLayoutSave +{ + my ($filename, $data, $more) = @_; + my $FH; + + $filename = GetFilename($filename); + return unless ($filename); + + unless(open $FH, ">", $filename) + { + print "Can not open $filename"; + return; + } + + # Order by ref. Print ref and an id tag + for my $win (sort {$a->{'refnum'} <=> $b->{'refnum'}} Irssi::windows()) + { + my $id = $win->{'name'} ? $win->{'name'} : $win->{'active'}->{'name'}; + my $tag = $win->{'active'}->{'server'}->{'tag'}; + printf $FH "%d\t%s:%s\n", $win->{'refnum'}, $id, $tag; + } + close $FH; + print "Layout saved to $filename"; +} + +# Load a list and use it to reorder +sub CmdLayoutLoad +{ + my ($filename, $data, $more) = @_; + $filename = GetFilename($filename); + + return unless ($filename); + return unless CanReadFile($filename); + + my @layout; + my ($ref, $id, $tag, $FH); + + # Pull the refnum and id + unless(open $FH, "<", $filename) + { + print "Can not open file $filename."; + return; + } + while (my $line = <$FH>) + { + chomp $line; + my ($ref, $id) = split(/\t/, $line, 2); + next unless ($ref and $id); + + push @layout, {refnum => $ref, id => $id}; + } + close $FH; + + # For each layout item from the file, find the window and set it's ref to that number + for my $position (sort {$a->{'refnum'} <=> $b->{'refnum'}} @layout) + { + for my $win (Irssi::windows()) + { + $id = $win->{'name'} ? $win->{'name'} : $win->{'active'}->{'name'}; + $tag = $win->{'active'}->{'server'}->{'tag'}; + $id .= ":" . $tag; + if ($id eq $position->{'id'}) + { + $win->set_refnum($position->{'refnum'}); + last; + } + } + } +} + +Irssi::command_bind( 'layout_save', 'CmdLayoutSave' ); +Irssi::command_bind( 'layout_load', 'CmdLayoutLoad' ); -- cgit v1.2.3 From c6a8871200c852e3a0f7a3fe924a686679689f33 Mon Sep 17 00:00:00 2001 From: Isaac Good Date: Tue, 6 Dec 2016 18:20:10 -0800 Subject: Add ident.pl to auto identify when prompted, using a pw file. --- scripts/ident.pl | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 scripts/ident.pl (limited to 'scripts') diff --git a/scripts/ident.pl b/scripts/ident.pl new file mode 100644 index 0000000..0c0de96 --- /dev/null +++ b/scripts/ident.pl @@ -0,0 +1,68 @@ +#!/usr/bin/perl -w + +use strict; +use Irssi; +use POSIX; + +use vars qw($VERSION %IRSSI); + +$VERSION = "1.0"; +%IRSSI = ( + authors => 'Isaac Good', + contact => "irssi\@isaacgood.com; irc.freenode.net/yitz", + name => 'ident', + description => 'Ident to NickServs', + name => "ident", + description => "Automatically IDENTIFY when prompted", + license => 'MIT', +); + + +my %pw; + + +sub LoadPasswords { + # Load the passwords from file. + delete @pw{keys %pw}; + my $filename = Irssi::get_irssi_dir() . '/passwords'; + my $FH; + unless(open $FH, ">", $filename) + { + print "Can not open $filename"; + return 0; + } + while (my $line = <$FH>) + { + chomp $line; + next unless ($line); + my ($tag, $password) = split(/ /, $line, 2); + next unless ($tag and $password); + $pw{$tag} = $password; + } + return 1; +} + + +sub notice { + my ($server, $data, $nick, $host) = @_; + my ($channel, $msg) = split(/ :/, $data, 2); + my $l = 0; + + # Test the notice. Must be from nickserv and be asking you to identify. + return undef unless (lc($nick) eq 'nickserv'); + return undef unless (lc($msg) =~ /msg nickserv identify/); + # Check it's a direct message and we have a password for this network. + return undef unless (lc($channel) eq lc($server->{'nick'})); + return undef unless ($pw{$server->{'chatnet'}}); + + my $pw = $pw{$server->{'chatnet'}}; + # Use the /quote nickserv approach to reduce chance of leaking the password to a bad actor, ie someone pretending to be nickserv. + $server->command("^quote nickserv identify $pw"); + + return undef; +} + + +if (LoadPasswords()) { + Irssi::signal_add('event notice', \¬ice); +} -- cgit v1.2.3 From 86bf168817775db2359e45c6672930471c67c08e Mon Sep 17 00:00:00 2001 From: Isaac Good Date: Tue, 6 Dec 2016 18:22:39 -0800 Subject: Support multiple spaces between tag and password --- scripts/ident.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/ident.pl b/scripts/ident.pl index 0c0de96..1250825 100644 --- a/scripts/ident.pl +++ b/scripts/ident.pl @@ -35,7 +35,7 @@ sub LoadPasswords { { chomp $line; next unless ($line); - my ($tag, $password) = split(/ /, $line, 2); + my ($tag, $password) = split(/ */, $line, 2); next unless ($tag and $password); $pw{$tag} = $password; } -- cgit v1.2.3 From 2d83df01cbda6946f84c1bba1c01c34bd05e9570 Mon Sep 17 00:00:00 2001 From: Isaac Good Date: Tue, 6 Dec 2016 18:44:35 -0800 Subject: Fix build errors --- scripts/listsort.pl | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'scripts') diff --git a/scripts/listsort.pl b/scripts/listsort.pl index f615cd9..deb8770 100644 --- a/scripts/listsort.pl +++ b/scripts/listsort.pl @@ -1,3 +1,5 @@ +use strict; +use warnings; use Irssi; use vars qw/$VERSION %IRSSI/; @@ -15,16 +17,10 @@ $VERSION = '0.1'; # Bindings. Start of channel list, end of list, list item. Irssi::signal_add_last('event 322', \&list_event); Irssi::signal_add_last('event 323', \&list_end); -Irssi::signal_add_last('notifylist event', \&list_start); # Store the channel list between IRC messages my %list; -# When we get a start-list, create an empty list. -sub list_start { - %list = {}; -} - # Store list info in the hash. sub list_event { my ($server, $data, $server_name) = @_; @@ -32,9 +28,12 @@ sub list_event { my ($nick, $name, $size) = split (/ /, $meta, 3); $list{$name}{'size'} = $size; - $more =~ /^[^[]*\[([^]]*)\][^ ]* *([^ ].*)$/; - my $modes = $1; - $list{$name}{'desc'} = $2; + my $modes = ''; + $list{$name}{'desc'} = ''; + if ($more =~ /^[^[]*\[([^]]*)\][^ ]* *([^ ].*)$/) { + $modes = $1; + $list{$name}{'desc'} = $2; + } $modes =~ s/ +$//; $list{$name}{'modes'} = $modes; @@ -43,12 +42,14 @@ sub list_event { # Print out the whole list in sorted order. sub list_end { for my $name (sort {$list{$a}{'size'} <=> $list{$b}{'size'}} keys %list) { + my $mode = $list{$name}{'modes'}; + $mode = " ($mode)" if ($mode); my $msg = sprintf ( - "%d %s: %s (%s)", + "%d %s: %s%s", $list{$name}{'size'}, $name, $list{$name}{'desc'}, - $list{$name}{'modes'} + $mode ); Irssi::print($msg, MSGLEVEL_CRAP); -- cgit v1.2.3 From 994d8ebc5abda99d3d672c4219ae42f083fa9c46 Mon Sep 17 00:00:00 2001 From: Isaac Good Date: Tue, 6 Dec 2016 18:45:34 -0800 Subject: Drop tabs. Read instead of write passwords. --- scripts/ident.pl | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'scripts') diff --git a/scripts/ident.pl b/scripts/ident.pl index 1250825..a4854f2 100644 --- a/scripts/ident.pl +++ b/scripts/ident.pl @@ -22,11 +22,11 @@ my %pw; sub LoadPasswords { - # Load the passwords from file. + # Load the passwords from file. delete @pw{keys %pw}; my $filename = Irssi::get_irssi_dir() . '/passwords'; - my $FH; - unless(open $FH, ">", $filename) + my $FH; + unless(open $FH, "<", $filename) { print "Can not open $filename"; return 0; @@ -34,12 +34,12 @@ sub LoadPasswords { while (my $line = <$FH>) { chomp $line; - next unless ($line); + next unless ($line); my ($tag, $password) = split(/ */, $line, 2); next unless ($tag and $password); - $pw{$tag} = $password; - } - return 1; + $pw{$tag} = $password; + } + return 1; } @@ -48,15 +48,15 @@ sub notice { my ($channel, $msg) = split(/ :/, $data, 2); my $l = 0; - # Test the notice. Must be from nickserv and be asking you to identify. + # Test the notice. Must be from nickserv and be asking you to identify. return undef unless (lc($nick) eq 'nickserv'); return undef unless (lc($msg) =~ /msg nickserv identify/); - # Check it's a direct message and we have a password for this network. + # Check it's a direct message and we have a password for this network. return undef unless (lc($channel) eq lc($server->{'nick'})); return undef unless ($pw{$server->{'chatnet'}}); my $pw = $pw{$server->{'chatnet'}}; - # Use the /quote nickserv approach to reduce chance of leaking the password to a bad actor, ie someone pretending to be nickserv. + # Use the /quote nickserv approach to reduce chance of leaking the password to a bad actor, ie someone pretending to be nickserv. $server->command("^quote nickserv identify $pw"); return undef; @@ -64,5 +64,5 @@ sub notice { if (LoadPasswords()) { - Irssi::signal_add('event notice', \¬ice); + Irssi::signal_add('event notice', \¬ice); } -- cgit v1.2.3 From a276aad4819e7d3a2c24cc2e621d7fce0dcac574 Mon Sep 17 00:00:00 2001 From: Isaac Good Date: Tue, 6 Dec 2016 18:46:15 -0800 Subject: Drop remaining tabs --- scripts/listsort.pl | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'scripts') diff --git a/scripts/listsort.pl b/scripts/listsort.pl index deb8770..8e6e02d 100644 --- a/scripts/listsort.pl +++ b/scripts/listsort.pl @@ -29,11 +29,11 @@ sub list_event { $list{$name}{'size'} = $size; my $modes = ''; - $list{$name}{'desc'} = ''; + $list{$name}{'desc'} = ''; if ($more =~ /^[^[]*\[([^]]*)\][^ ]* *([^ ].*)$/) { - $modes = $1; - $list{$name}{'desc'} = $2; - } + $modes = $1; + $list{$name}{'desc'} = $2; + } $modes =~ s/ +$//; $list{$name}{'modes'} = $modes; @@ -42,8 +42,8 @@ sub list_event { # Print out the whole list in sorted order. sub list_end { for my $name (sort {$list{$a}{'size'} <=> $list{$b}{'size'}} keys %list) { - my $mode = $list{$name}{'modes'}; - $mode = " ($mode)" if ($mode); + my $mode = $list{$name}{'modes'}; + $mode = " ($mode)" if ($mode); my $msg = sprintf ( "%d %s: %s%s", $list{$name}{'size'}, -- cgit v1.2.3 From 15b7c92887924a416ae468f7d85cf01d74ce662e Mon Sep 17 00:00:00 2001 From: Isaac Good Date: Tue, 6 Dec 2016 18:47:28 -0800 Subject: Escape . in .layout regexp --- scripts/reorder.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/reorder.pl b/scripts/reorder.pl index 475db41..ce82fa4 100644 --- a/scripts/reorder.pl +++ b/scripts/reorder.pl @@ -57,7 +57,7 @@ sub GetFilename } # Add a file extension - $filename .= '.layout' unless ($filename =~ /.layout$/); + $filename .= '.layout' unless ($filename =~ /\.layout$/); # Use get_irssi_dir() unless using an absolute path if ($filename !~ /\//) { -- cgit v1.2.3 From 4d704c971074017215867b054c80c26517a4e1c4 Mon Sep 17 00:00:00 2001 From: Isaac Good Date: Wed, 7 Dec 2016 11:32:54 -0800 Subject: Reset the list hash cleanly. Avoid deleting key by key. --- scripts/listsort.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/listsort.pl b/scripts/listsort.pl index 8e6e02d..81b9ab9 100644 --- a/scripts/listsort.pl +++ b/scripts/listsort.pl @@ -55,6 +55,6 @@ sub list_end { Irssi::print($msg, MSGLEVEL_CRAP); } # Drop the hash values; no point in holding them in memory. - delete @list{keys %list}; + %list = (); } -- cgit v1.2.3 From eae98b67185fcd845f47bdb5e5776c72b7e28992 Mon Sep 17 00:00:00 2001 From: Jari Matilainen Date: Sat, 7 Jan 2017 11:40:40 +0000 Subject: Added unlink to remove the uncompressed log --- scripts/logcompress_perl.pl | 1 + 1 file changed, 1 insertion(+) (limited to 'scripts') diff --git a/scripts/logcompress_perl.pl b/scripts/logcompress_perl.pl index 062331e..37395b5 100644 --- a/scripts/logcompress_perl.pl +++ b/scripts/logcompress_perl.pl @@ -18,6 +18,7 @@ $VERSION = "0.01"; sub sig_rotate { my $input = $_[0]->{real_fname}; gzip $input => "$input.gz" or Irssi::print(MSGLEVEL_CLIENTERROR, "gzip failed: $GzipError\n"); + unlink $input if -e "$input.gz"; } Irssi::signal_add('log rotated', 'sig_rotate'); -- cgit v1.2.3 From 1227498150f85df70ce134759b5e83ef3852d4b4 Mon Sep 17 00:00:00 2001 From: Jari Matilainen Date: Sat, 7 Jan 2017 11:52:46 +0000 Subject: Forgot to change version --- scripts/logcompress_perl.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'scripts') diff --git a/scripts/logcompress_perl.pl b/scripts/logcompress_perl.pl index 37395b5..d75755a 100644 --- a/scripts/logcompress_perl.pl +++ b/scripts/logcompress_perl.pl @@ -4,7 +4,7 @@ use Irssi; use IO::Compress::Gzip qw(gzip $GzipError); use vars qw($VERSION %IRSSI); -$VERSION = "0.01"; +$VERSION = "0.02"; %IRSSI = ( authors => 'vague', contact => 'vague!#irssi@fgreenode', @@ -12,7 +12,7 @@ $VERSION = "0.01"; description => "compress logfiles then they're rotated, modified from original logcompress.pl to use perl modules instead", license => "Public Domain", url => "http://irssi.org/", - changed => "2016-01-31T01:45+0100" + changed => "2017-01-07T12:00+0100" ); sub sig_rotate { -- cgit v1.2.3 From 12d9a5088baea7eb6118b567c734af996f9f7ba2 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Mon, 9 Jan 2017 14:35:07 +0100 Subject: update trackbar22 to v2.3 * fix uninitialized warning reported by varazir * add trackbar signals for use in other scripts --- scripts/trackbar22.pl | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'scripts') diff --git a/scripts/trackbar22.pl b/scripts/trackbar22.pl index 30015a2..6c899b6 100644 --- a/scripts/trackbar22.pl +++ b/scripts/trackbar22.pl @@ -96,7 +96,7 @@ use Encode; use POSIX qw(strftime); use vars qw($VERSION %IRSSI); -$VERSION = "2.2"; # cb3189a33c8e5f9 +$VERSION = "2.3"; # 45c0adad4366edd %IRSSI = ( authors => 'Peter Leurs and Geert Hauwaerts', @@ -106,7 +106,6 @@ $VERSION = "2.2"; # cb3189a33c8e5f9 description => 'Shows a bar where you have last read a window.', license => 'GNU General Public License', url => 'http://www.pfoe.be/~peter/trackbar/', - changed => 'Fri Jan 23 23:59:11 2004', commands => 'trackbar', ); @@ -234,6 +233,7 @@ sub add_one_trackbar { $win->print(line($win->{width}), MSGLEVEL_NEVER); $view->set_bookmark_bottom('trackbar'); $unseen_trackbar{ $win->{_irssi} } = 1; + Irssi::signal_emit("window trackbar added", $win); $view->redraw; } @@ -253,6 +253,7 @@ sub win_ignored { my $view = shift || $win->view; return 1 unless $view->{buffer}{lines_count}; return 1 if $win->{name} eq '(status)' && !$config{use_status_window}; + no warnings 'uninitialized'; return 1 if grep { $win->{name} eq $_ || $win->{refnum} eq $_ || $win->get_active_name eq $_ } @{ $config{ignore_windows} }; return 0; @@ -271,10 +272,13 @@ sub sig_window_changed { sub trackbar_update_seen { my $win = shift; return unless $win; + return unless $unseen_trackbar{ $win->{_irssi} }; + my $view = $win->view; my $line = $view->get_bookmark('trackbar'); unless ($line) { delete $unseen_trackbar{ $win->{_irssi} }; + Irssi::signal_emit("window trackbar seen", $win); return; } my $startline = $view->{startline}; @@ -283,6 +287,7 @@ sub trackbar_update_seen { if ($startline->{info}{time} < $line->{info}{time} || $startline->{_irssi} == $line->{_irssi}) { delete $unseen_trackbar{ $win->{_irssi} }; + Irssi::signal_emit("window trackbar seen", $win); } } @@ -477,6 +482,8 @@ update_config(); Irssi::signal_add_last( 'mainwindow resized' => 'redraw_trackbars') unless $old_irssi; +Irssi::signal_register({'window trackbar added' => [qw/Irssi::UI::Window/]}); +Irssi::signal_register({'window trackbar seen' => [qw/Irssi::UI::Window/]}); Irssi::signal_register({'gui page scrolled' => [qw/Irssi::UI::Window/]}); Irssi::signal_add_last('gui page scrolled' => 'trackbar_update_seen'); -- cgit v1.2.3 From aab7a303ca7743cf58635d5bb2177208acfb97e7 Mon Sep 17 00:00:00 2001 From: Stefan Heinemann Date: Thu, 12 Jan 2017 12:37:37 +0100 Subject: Simple script that just highlights URLs in public messages --- scripts/hilite_url.pl | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 scripts/hilite_url.pl (limited to 'scripts') diff --git a/scripts/hilite_url.pl b/scripts/hilite_url.pl new file mode 100644 index 0000000..11c4b0d --- /dev/null +++ b/scripts/hilite_url.pl @@ -0,0 +1,28 @@ +# Simple script to highlight links in public messages + +use strict; +use vars qw($VERSION %IRSSI); + +# Dev. info ^_^ +$VERSION = "0.1"; +%IRSSI = ( + authors => "Stefan Heinemann", + contact => "stefan.heinemann\@codedump.ch", + name => "hilite url", + description => "Simple script that highlights URL", + license => "GPL", + url => "http://senseless.codedump.ch", +); + +sub hilite_url { + my ($server, $data, $nick, $mask, $target) = @_; + + # Add Colours + $data =~ s/(https?:\/\/[^\s]+)/\e[4;34m\1\e[00m/g; + + # Let it flow + Irssi::signal_continue($server, $data, $nick, $mask, $target); +} + +# Hook me up +Irssi::signal_add('message public', 'hilite_url'); -- cgit v1.2.3 From c1a1a518cb93c92eae84f4ba514aa1768b5d9ae5 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Mon, 16 Jan 2017 16:43:50 +0100 Subject: exempt cap_sasl_fail, it has been deprecated --- scripts/cap_sasl_fail.pl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'scripts') diff --git a/scripts/cap_sasl_fail.pl b/scripts/cap_sasl_fail.pl index 226bc2c..22d0b79 100644 --- a/scripts/cap_sasl_fail.pl +++ b/scripts/cap_sasl_fail.pl @@ -1,7 +1,7 @@ use strict; use warnings; -our $VERSION = '2.0'; # ed9e98e5d63cfb3 +our $VERSION = '2.1'; # bb62357c61d9e54 our %IRSSI = ( authors => 'Nei', name => 'cap_sasl_fail', @@ -15,8 +15,8 @@ use version; my %disconnect_next; my $irssi_version = qv(Irssi::parse_special('v$J') =~ s/-.*//r); -die sprintf "Support for Irssi v%vd has not been written yet.\n", $irssi_version - if $irssi_version > v0.8.20; +die sprintf "Please use /set sasl_disconnect_on_failure instead of this script.\n" + if $irssi_version >= v1.0.0; Irssi::signal_register({'server sasl fail' => [qw[iobject string]]}); Irssi::signal_add_first('server sasl fail' => 'sasl_fail_failed'); -- cgit v1.2.3 From d5701d108190a251839e049f68e910d151d59b5b Mon Sep 17 00:00:00 2001 From: dedeibel Date: Mon, 2 Jan 2017 23:28:47 +0100 Subject: Added post auth command, for example to trigger a chanserv invite --- scripts/nickserv.pl | 193 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 180 insertions(+), 13 deletions(-) (limited to 'scripts') diff --git a/scripts/nickserv.pl b/scripts/nickserv.pl index c1d9ce8..216a6b7 100644 --- a/scripts/nickserv.pl +++ b/scripts/nickserv.pl @@ -24,7 +24,7 @@ use strict; use Irssi; use vars qw($VERSION %IRSSI); -$VERSION = "1.10"; +$VERSION = "1.11"; %IRSSI = ( authors => 'Geert Hauwaerts', @@ -41,6 +41,9 @@ my $nickservnet_file = "nickserv.networks"; my @nickservauth = (); my $nickservauth_file = "nickserv.auth"; +my @nickservpostcmd = (); +my $nickservpostcmd_file = "nickserv.postcmd"; + my $irssidir = Irssi::get_irssi_dir(); my $help = < ] [addnick ] + [addpostcmd ] [delnet ] [delnick ] - [help listnet listnick] - -addnet: Add a new network into the NickServ list. -addnick: Add a new nickname into the NickServ list. -delnet: Delete a network from the NickServ list. -delnick: Delete a nickname from the NickServ list. -listnet: Display the contents of the NickServ network list. -listnick: Display the contents of the NickServ nickname list. -help: Display this useful little helptext. + [delpostcmd ] + [help listnet listnick listpostcmd] + +addnet: Add a new network into the NickServ list. +addnick: Add a new nickname into the NickServ list. +addpostcmd: Add a new post auth command for nickname into the NickServ list. +delnet: Delete a network from the NickServ list. +delnick: Delete a nickname from the NickServ list. +delpostcmd: Deletes all post auth command for nickame. +listnet: Display the contents of the NickServ network list. +listnick: Display the contents of the NickServ nickname list. +listpostcmd: Display the contents of the NickServ postcmd list. +help: Display this useful little helptext. Examples: (all on one line) /NICKSERV addnet Freenode NickServ\@services. /NICKSERV addnick Freenode Geert mypass +/NICKSERV addpostcmd Freenode Geert ^MSG ChanServ invite #heaven /NICKSERV delnet Freenode /NICKSERV delnick Freenode Geert @@ -74,19 +83,25 @@ EOF Irssi::theme_register([ 'nickserv_usage_network', '%R>>%n %_NickServ:%_ Insufficient parameters: Usage "%_/NICKSERV addnet ircnet services@host%_".', 'nickserv_usage_nickname', '%R>>%n %_NickServ:%_ Insufficient parameters: Usage "%_/NICKSERV addnick ircnet nickname password%_".', + 'nickserv_usage_postcmd', '%R>>%n %_NickServ:%_ Insufficient parameters: Usage "%_/NICKSERV addpostcmd ircnet nickname command%_".', 'nickserv_delusage', '%R>>%n %_NickServ:%_ Insufficient parameters: Usage "%_/NICKSERV delnet ircnet%_".', 'nickserv_delnickusage', '%R>>%n %_NickServ:%_ Insufficient parameters: Usage "%_/NICKSERV delnick ircnet nickname%_".', + 'nickserv_delpostcmdusage', '%R>>%n %_NickServ:%_ Insufficient parameters: Usage "%_/NICKSERV delpostcmd ircnet nickname%_".', 'nickserv_delled', '%R>>%n %_NickServ:%_ Deleted %_$0%_ and his nicknames from the NickServ ircnet list.', 'nickserv_delled_nick', '%R>>%n %_NickServ:%_ Deleted %_$1%_ from the NickServ list on $0.', + 'nickserv_delled_postcmd', '%R>>%n %_NickServ:%_ Deleted all entries for %_$1%_ from the NickServ postcmd list on $0.', 'nickserv_nfound', '%R>>%n %_NickServ:%_ The NickServ ircnet %_$0%_ could not be found.', 'nickserv_nfound_nick', '%R>>%n %_NickServ:%_ The NickServ nickname %_$0%_ could not be found on $1.', + 'nickserv_nfound_postcmd', '%R>>%n %_NickServ:%_ The NickServ nickname %_$0%_ could not be found on $1.', 'nickserv_usage', '%R>>%n %_NickServ:%_ Insufficient parameters: Use "%_/NICKSERV help%_" for further instructions.', 'nickserv_no_net', '%R>>%n %_NickServ:%_ Unknown Irssi ircnet %_$0%_.', 'nickserv_wrong_host', '%R>>%n %_NickServ:%_ Malformed services hostname %_$0%_.', 'already_loaded_network', '%R>>%n %_NickServ:%_ The ircnet %_$0%_ already exists in the NickServ ircnet list, please remove it first.', 'nickserv_loaded_nick', '%R>>%n %_NickServ:%_ The nickname %_$0%_ already exists in the NickServ authlist on %_$1%_, please remove it first.', 'nickserv_not_loaded_net', '%R>>%n %_NickServ:%_ The ircnet %_$0%_ doesn\'t exists in the NickServ ircnet list, please add it first.', + 'nickserv_not_loaded_nick', '%R>>%n %_NickServ:%_ The nickname %_$0%_ doesn\'t exists in the NickServ authlist on %_$1%_, please add it first.', 'saved_nickname', '%R>>%n %_NickServ:%_ Added nickname %_$1%_ on %_$0%_.', + 'saved_postcmd', '%R>>%n %_NickServ:%_ Added postcmd %_$1%_ on %_$0%_: %_%2%_.', 'network_print', '$[!-2]0 $[20]1 $2', 'password_request', '%R>>%n %_NickServ:%_ Auth Request from NickServ on %_$0%_.', 'password_accepted', '%R>>%n %_NickServ:%_ Password accepted on %_$0%_.', @@ -96,6 +111,9 @@ Irssi::theme_register([ 'nickname_print', '$[!-2]0 $[20]1 $[18]2 $3', 'nickname_info', '%_ # Ircnet Nickname Password%_', 'nickname_empty', '%R>>%n %_NickServ:%_ Your NickServ authlist is empty.', + 'postcmd_print', '$[!-2]0 $[20]1 $[18]2 $3', + 'postcmd_info', '%_ # Ircnet Nickname Postcmd%_', + 'postcmd_empty', '%R>>%n %_NickServ:%_ Your NickServ postcmd list is empty.', 'nickserv_help', '$0', 'saved_network', '%R>>%n %_NickServ:%_ Added services mask "%_$1%_" on %_$0%_.', 'nickserv_loaded', '%R>>%n %_Scriptinfo:%_ Loaded $0 version $1 by $2.' @@ -187,6 +205,30 @@ sub load_nickservnick { } } +sub load_nickservpostcmd { + + my ($file) = @_; + + @nickservpostcmd = (); + + if (-e $file) { + local *F; + open(F, "<" ,$file); + local $/ = "\n"; + + while () { + chop; + my $new_postcmd = new_postcmd(split("\t")); + + if (($new_postcmd->{ircnet} ne "") && ($new_postcmd->{nick} ne "") && ($new_postcmd->{postcmd} ne "")) { + push(@nickservpostcmd, $new_postcmd); + } + } + + close(F); + } +} + sub save_nickservnick { my ($file) = @_; @@ -203,12 +245,33 @@ sub save_nickservnick { close(F); } else { - create_nick_file($file); + create_save_file($file); save_nickservnick($file); } } -sub create_nick_file { +sub save_nickservpostcmd { + + my ($file) = @_; + + return unless scalar @nickservpostcmd; # there's nothing to save + + if (-e $file) { + local *F; + open(F, ">", $file); + + for (my $n = 0; $n < @nickservpostcmd; ++$n) { + print(F join("\t", $nickservpostcmd[$n]->{ircnet}, $nickservpostcmd[$n]->{nick}, $nickservpostcmd[$n]->{postcmd}) . "\n"); + } + + close(F); + } else { + create_save_file($file); + save_nickservpostcmd($file); + } +} + +sub create_save_file { my ($file) = @_; @@ -228,10 +291,21 @@ sub new_nickserv_nick { return $nsnick; } +sub new_postcmd { + + my $nspostcmd = {}; + + $nspostcmd->{ircnet} = shift; + $nspostcmd->{nick} = shift; + $nspostcmd->{postcmd} = shift; + + return $nspostcmd; +} + sub add_nickname { my ($network, $nickname, $password) = split(" ", $_[0], 3); - my ($correct_network, $correct_nickname, $correct_password); + my ($correct_network, $correct_nickname); if ($network eq "" || $nickname eq "" || $password eq "") { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_usage_nickname'); @@ -264,6 +338,42 @@ sub add_nickname { } } +sub add_postcmd { + + my ($network, $nickname, $postcmd) = split(" ", $_[0], 3); + my ($correct_network, $correct_nickname); + + if ($network eq "" || $nickname eq "" || $postcmd eq "") { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_usage_postcmd'); + return; + } + + if ($network) { + if (!already_loaded_net($network)) { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_not_loaded_net', $network); + return; + } else { + $correct_network = 1; + } + } + + if ($nickname) { + if (!already_loaded_nick($nickname, $network)) { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_not_loaded_nick', $nickname, $network); + return; + } else { + $correct_nickname = 1; + } + } + + if ($correct_network && $correct_nickname) { + push(@nickservpostcmd, new_postcmd($network, $nickname, $postcmd)); + save_nickservpostcmd("$irssidir/$nickservpostcmd_file"); + + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'saved_postcmd', $network, $nickname, $postcmd); + } +} + sub add_network { my ($network, $hostname) = split(" ", $_[0], 2); @@ -382,6 +492,19 @@ sub list_nick { } } +sub list_postcmd { + + if (@nickservpostcmd == 0) { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'postcmd_empty'); + } else { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'postcmd_info'); + + for (my $n = 0; $n < @nickservpostcmd ; ++$n) { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'postcmd_print', $n, $nickservpostcmd[$n]->{ircnet}, $nickservpostcmd[$n]->{nick}, $nickservpostcmd[$n]->{postcmd}); + } + } +} + sub nickserv_notice { my ($server, $data, $nick, $address) = @_; @@ -442,6 +565,7 @@ sub nickserv_notice { } elsif ($text =~ /^Password accepted - you are now recognized/ || $text =~ /^You are now identified for/) { Irssi::signal_stop(); Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'password_accepted', $server->{tag}); + run_postcmds($server, $server->{tag}, $server->{nick}) } elsif ($text =~ /^Password Incorrect/ || $text =~ /^Password incorrect./) { Irssi::signal_stop(); Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'password_wrong', $server->{tag}); @@ -449,6 +573,17 @@ sub nickserv_notice { } } +sub run_postcmds { + my ($server, $tag, $nick) = @_; + return unless scalar @nickservpostcmd; # there's nothing to save + + for my $cmd (@nickservpostcmd) { + if ($tag eq $cmd->{ircnet} && $nick eq $cmd->{nick} && $cmd->{postcmd}) { + $server->command($cmd->{postcmd}); + } + } +} + sub is_nickserv { my ($net, $host) = @_; @@ -521,6 +656,28 @@ sub del_nickname { } } +sub del_postcmd { + + my ($ircnet, $nickname) = split(" ", $_[0], 2); + my ($nickindex); + + if ($ircnet eq "" || $nickname eq "") { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_delpostcmdusage'); + return; + } + + my $size_before = scalar(@nickservpostcmd); + @nickservpostcmd = grep { !( lc($_->{ircnet}) eq lc($ircnet) && lc($_->{nick}) eq lc($nickname) )} @nickservpostcmd; + my $size_after = scalar(@nickservpostcmd); + + if ($size_before != $size_after) { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_delled_postcmd', $ircnet, $nickname); + save_nickservpostcmd("$irssidir/$nickservpostcmd_file"); + } else { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_nfound_postcmd', $ircnet, $nickname); + } +} + sub nickserv_runsub { my ($data, $server, $item) = @_; @@ -535,6 +692,7 @@ sub nickserv_runsub { load_nickservnet("$irssidir/$nickservnet_file"); load_nickservnick("$irssidir/$nickservauth_file"); +load_nickservpostcmd("$irssidir/$nickservpostcmd_file"); Irssi::command_bind('nickserv', 'nickserv_runsub'); Irssi::command_bind('ns', 'nickserv_runsub'); @@ -545,18 +703,27 @@ Irssi::command_bind('ns addnet', 'add_network'); Irssi::command_bind('nickserv addnick', 'add_nickname'); Irssi::command_bind('ns addnick', 'add_nickname'); +Irssi::command_bind('nickserv addpostcmd', 'add_postcmd'); +Irssi::command_bind('ns addpostcmd', 'add_postcmd'); + Irssi::command_bind('nickserv listnet', 'list_net'); Irssi::command_bind('ns listnet', 'list_net'); Irssi::command_bind('nickserv listnick', 'list_nick'); Irssi::command_bind('ns listnick', 'list_nick'); +Irssi::command_bind('nickserv listpostcmd', 'list_postcmd'); +Irssi::command_bind('ns listpostcmd', 'list_postcmd'); + Irssi::command_bind('nickserv delnet', 'del_network'); Irssi::command_bind('ns delnet', 'del_network'); Irssi::command_bind('nickserv delnick', 'del_nickname'); Irssi::command_bind('ns delnick', 'del_nickname'); +Irssi::command_bind('nickserv delpostcmd', 'del_postcmd'); +Irssi::command_bind('ns delpostcmd', 'del_postcmd'); + Irssi::command_bind('nickserv help' => sub { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_help', $help) }); Irssi::command_bind('ns help' => sub { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_help', $help) }); -- cgit v1.2.3 From 9da504bbb393dc265a6106df47e1488b26fd09ad Mon Sep 17 00:00:00 2001 From: dedeibel Date: Tue, 3 Jan 2017 21:10:02 +0100 Subject: Added allowed users list to invitejoin script --- scripts/invitejoin.pl | 200 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 186 insertions(+), 14 deletions(-) (limited to 'scripts') diff --git a/scripts/invitejoin.pl b/scripts/invitejoin.pl index c69ed01..f873dd5 100644 --- a/scripts/invitejoin.pl +++ b/scripts/invitejoin.pl @@ -24,7 +24,7 @@ use strict; use Irssi; use vars qw($VERSION %IRSSI); -$VERSION = "0.01"; +$VERSION = "0.02"; %IRSSI = ( authors => 'Geert Hauwaerts', @@ -33,36 +33,200 @@ $VERSION = "0.01"; description => 'This script will join a channel if somebody invites you to it.', license => 'Public Domain', url => 'http://irssi.hauwaerts.be/invitejoin.pl', - changed => 'Sun Apr 11 12:38:18 2004', + changed => 'Di 3. Jan 19:46:51 CET 2017', ); -## Comments and remarks. -# -# This script uses settings. -# Use /SET to change the value or /TOGGLE to switch it on or off. -# -# Setting: invitejoin -# Description: If this setting is turned on, you will join the channel -# when invite to. -# -## +my $help = < ] + [delnick ] + [listnick] + [help] +addnick: Add a new nickname on the given net as allowed autoinvite source. +delnick: Delete a nickname from the allowed list. +listnick: Display the contents of the allowed nickname list. +help: Display this useful little helptext. + +Examples: (all on one line) +/INVITEJOIN addnick Freenode ChanServ + +Note: This script doesn't allow wildcards +EOF + +my @allowed_nicks = (); +my $allowed_nicks_file = "invitejoin.nicks"; + +my $irssidir = Irssi::get_irssi_dir(); Irssi::theme_register([ + 'invitejoin_usage', '%R>>%n %_Invitejoin:%_ Insufficient parameters: Use "%_/INVITEJOIN help%_" for further instructions.', + 'invitejoin_help', '$0', 'invitejoin_loaded', '%R>>%n %_Scriptinfo:%_ Loaded $0 version $1 by $2.', - 'invitejoin_invited', '%R>>%n %_Invitejoin:%_ Joined $1 (Invited by $0).' + 'invitejoin_invited', '%R>>%n %_Invitejoin:%_ Joined $1 (Invited by $0).', + 'invitejoin_usage_add_nick', '%R>>%n %_Invitejoin:%_ Insufficient parameters: Usage "%_/INVITEJOIN addnick ircnet ChanServ%_".', + 'invitejoin_no_net', '%R>>%n %_Invitejoin:%_ Unknown Irssi ircnet %_$0%_.', + 'saved_nick', '%R>>%n %_Invitejoin:%_ Added allowed nick "%_$1%_" on %_$0%_.', + 'invitejoin_delusage', '%R>>%n %_Invitejoin:%_ Insufficient parameters: Usage "%_/INVITEJOIN delnick ircnet nick%_".', + 'invitejoin_delled', '%R>>%n %_Invitejoin:%_ Deleted %_$1%_ on %_$0%_ from allowed list.', + 'invitejoin_nfound', '%R>>%n %_Invitejoin:%_ The nick %_$1%_ on %_$0%_ could not be found.', + 'allowed_nicks_info', '%_Ircnet Nick%_', + 'allowed_nicks_empty', '%R>>%n %_Invitejoin:%_ Your allowed nick list is empty.', + 'allowed_nicks_print', '$[18]0 $1', + 'invite_denied', '%R>>%n %_Invitejoin:%_ Invite from nick %_$1%_ on %_$0%_ to %_$2%_ not followed because it is not in the allowed list.', ]); -sub invitejoin { +sub load_allowed_nicks { + my ($file) = @_; + @allowed_nicks = (); + if (-e $file) { + local *F; + open(F, "<", $file); + local $/ = "\n"; + + while () { + chomp; + my $new_allowed = new_allowed_nick(split("\t")); + if (($new_allowed->{net} ne "") && ($new_allowed->{nick} ne "")) { + push(@allowed_nicks, $new_allowed); + } + } + close(F); + } +} + +sub save_allowed_nicks { + my ($file) = @_; + + if (-e $file) { + local *F; + open(F, ">", $file); + + for my $allowed (@allowed_nicks) { + print(F join("\t", $allowed->{net}, $allowed->{nick}) . "\n"); + } + + close(F); + } else { + open(F, ">", $file) or die "Can't create $file. Reason: $!"; + close(F); + save_allowed_nicks($file); + } +} + +sub new_allowed_nick { + my $anick = {}; + + $anick->{net} = shift; + $anick->{nick} = shift; + + return $anick; +} + +sub add_allowed_nick { + my ($network, $nick) = split(" ", $_[0], 2); + my ($correct_net); + + if ($network eq "" || $nick eq "") { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'invitejoin_usage_add_nick'); + return; + } + if ($network) { + my ($ircnet) = Irssi::chatnet_find($network); + if (!$ircnet) { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'invitejoin_no_net', $network); + return; + } else { + $correct_net = 1; + } + } + + if ($correct_net && $nick) { + push(@allowed_nicks, new_allowed_nick($network, $nick)); + save_allowed_nicks("$irssidir/$allowed_nicks_file"); + + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'saved_nick', $network, $nick); + } +} + +sub del_allowed_nick { + my ($ircnet, $nick) = split(" ", $_[0], 2); + + if ($ircnet eq "") { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'invitejoin_delusage'); + return; + } + + my $size_before = scalar(@allowed_nicks); + @allowed_nicks = grep { ! ($_->{net} eq $ircnet && $_->{nick} eq $nick) } @allowed_nicks; + my $size_after = scalar(@allowed_nicks); + + if ($size_after != $size_before) { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'invitejoin_delled', $ircnet, $nick); + save_allowed_nicks("$irssidir/$allowed_nicks_file"); + } else { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'invitejoin_nfound', $ircnet, $nick); + } +} + +sub list_allowed_nicks { + + if (@allowed_nicks == 0) { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'allowed_nicks_empty'); + } else { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'allowed_nicks_info'); + + for my $allowed (@allowed_nicks) { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'allowed_nicks_print', $allowed->{net}, $allowed->{nick}); + } + } +} + +sub invitejoin_runsub { + + my ($data, $server, $item) = @_; + $data =~ s/\s+$//g; + + if ($data) { + Irssi::command_runsub('invitejoin', $data, $server, $item); + } else { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'invitejoin_usage'); + } +} + +sub is_allowed_nick { + my ($server, $nick) = @_; + + return 1 unless @allowed_nicks < 1; + + return (grep { + $_->{net} eq $server->{tag} && + $_->{nick} eq $nick + } @allowed_nicks) > 0; +} + +sub invitejoin { my ($server, $channel, $nick, $address) = @_; my $invitejoin = Irssi::settings_get_bool('invitejoin'); if ($invitejoin) { + if (is_allowed_nick($server, $nick)) { $server->command("join $channel"); Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'invitejoin_invited', $nick, $channel); Irssi::signal_stop(); + } + else { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'invite_denied', $server->{tag}, $nick, $channel); + } } } @@ -70,4 +234,12 @@ Irssi::signal_add('message invite', 'invitejoin'); Irssi::settings_add_bool('invitejoin', 'invitejoin' => 1); +load_allowed_nicks("$irssidir/$allowed_nicks_file"); + +Irssi::command_bind('invitejoin', 'invitejoin_runsub'); +Irssi::command_bind('invitejoin addnick', 'add_allowed_nick'); +Irssi::command_bind('invitejoin delnick', 'del_allowed_nick'); +Irssi::command_bind('invitejoin listnick', 'list_allowed_nicks'); +Irssi::command_bind('invitejoin help' => sub { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'invitejoin_help', $help) }); + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'invitejoin_loaded', $IRSSI{name}, $VERSION, $IRSSI{authors}); -- cgit v1.2.3 From 9d4f90c395fef0b7eaa382000a82e26b671f5a20 Mon Sep 17 00:00:00 2001 From: dedeibel Date: Tue, 3 Jan 2017 21:26:25 +0100 Subject: Removed early exit when writing files which prevented deleting the last entry of a list. Closed files after creating them (touch) --- scripts/nickserv.pl | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) (limited to 'scripts') diff --git a/scripts/nickserv.pl b/scripts/nickserv.pl index 216a6b7..02a5983 100644 --- a/scripts/nickserv.pl +++ b/scripts/nickserv.pl @@ -147,8 +147,6 @@ sub save_nickservnet { my ($file) = @_; - return unless scalar @nickservnet; # there's nothing to save - if (-e $file) { local *F; open(F, ">", $file); @@ -206,7 +204,6 @@ sub load_nickservnick { } sub load_nickservpostcmd { - my ($file) = @_; @nickservpostcmd = (); @@ -230,11 +227,8 @@ sub load_nickservpostcmd { } sub save_nickservnick { - my ($file) = @_; - return unless scalar @nickservauth; # there's nothing to save - if (-e $file) { local *F; open(F, ">", $file); @@ -251,11 +245,8 @@ sub save_nickservnick { } sub save_nickservpostcmd { - my ($file) = @_; - return unless scalar @nickservpostcmd; # there's nothing to save - if (-e $file) { local *F; open(F, ">", $file); @@ -272,11 +263,10 @@ sub save_nickservpostcmd { } sub create_save_file { - my ($file) = @_; - my $umask = umask 0077; # save old umask open(F, ">", $file) or die "Can't create $file. Reason: $!"; + close(F); umask $umask; } @@ -565,7 +555,7 @@ sub nickserv_notice { } elsif ($text =~ /^Password accepted - you are now recognized/ || $text =~ /^You are now identified for/) { Irssi::signal_stop(); Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'password_accepted', $server->{tag}); - run_postcmds($server, $server->{tag}, $server->{nick}) + run_postcmds($server, $server->{tag}, $server->{nick}) } elsif ($text =~ /^Password Incorrect/ || $text =~ /^Password incorrect./) { Irssi::signal_stop(); Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'password_wrong', $server->{tag}); -- cgit v1.2.3 From a01a4010b00526742ddad918d15e2b1c296f9b99 Mon Sep 17 00:00:00 2001 From: dedeibel Date: Mon, 16 Jan 2017 22:54:21 +0100 Subject: Modernized file opening section. Corrected empty allowed list handling. --- scripts/invitejoin.pl | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) (limited to 'scripts') diff --git a/scripts/invitejoin.pl b/scripts/invitejoin.pl index f873dd5..38205c2 100644 --- a/scripts/invitejoin.pl +++ b/scripts/invitejoin.pl @@ -87,38 +87,29 @@ sub load_allowed_nicks { my ($file) = @_; @allowed_nicks = (); if (-e $file) { - local *F; - open(F, "<", $file); + open(my $fh, "<", $file); local $/ = "\n"; - while () { + while (<$fh>) { chomp; my $new_allowed = new_allowed_nick(split("\t")); if (($new_allowed->{net} ne "") && ($new_allowed->{nick} ne "")) { push(@allowed_nicks, $new_allowed); } } - close(F); + close($fh); } } sub save_allowed_nicks { my ($file) = @_; + open(my $fh, ">", $file) or die "Can't create $file. Reason: $!"; - if (-e $file) { - local *F; - open(F, ">", $file); - - for my $allowed (@allowed_nicks) { - print(F join("\t", $allowed->{net}, $allowed->{nick}) . "\n"); - } - - close(F); - } else { - open(F, ">", $file) or die "Can't create $file. Reason: $!"; - close(F); - save_allowed_nicks($file); + for my $allowed (@allowed_nicks) { + print($fh join("\t", $allowed->{net}, $allowed->{nick}) . "\n"); } + + close($fh); } sub new_allowed_nick { @@ -205,7 +196,9 @@ sub invitejoin_runsub { sub is_allowed_nick { my ($server, $nick) = @_; - return 1 unless @allowed_nicks < 1; + # If no allowed nicks are specified (initial configuration) accept + # all invite requests, which mimics previous behavior of this script + return 1 if @allowed_nicks == 0; return (grep { $_->{net} eq $server->{tag} && -- cgit v1.2.3 From 6342d84f5f6871442f61b4f0c7c262eb7cf4c474 Mon Sep 17 00:00:00 2001 From: dedeibel Date: Tue, 17 Jan 2017 00:18:42 +0100 Subject: Nickserv script refactoring, modernized file handling and reused common code parts. Refactoring save file location building to single position. Removing postcmds after deletion of net or nick. --- scripts/nickserv.pl | 453 ++++++++++++++++++++++++---------------------------- 1 file changed, 208 insertions(+), 245 deletions(-) (limited to 'scripts') diff --git a/scripts/nickserv.pl b/scripts/nickserv.pl index 02a5983..ff2738d 100644 --- a/scripts/nickserv.pl +++ b/scripts/nickserv.pl @@ -32,19 +32,20 @@ $VERSION = "1.11"; name => 'nickserv.pl', description => 'This script will authorize you into NickServ.', license => 'GNU General Public License', - url => 'http://irssi.hauwaerts.be/nickserv.pl', + url => 'https://github.com/irssi/scripts.irssi.org/blob/master/scripts/nickserv.pl', + changed => 'Di 17. Jan 19:32:45 CET 2017', ); +my $irssidir = Irssi::get_irssi_dir(); + my @nickservnet = (); -my $nickservnet_file = "nickserv.networks"; +my $nickservnet_file = "$irssidir/nickserv.networks"; my @nickservauth = (); -my $nickservauth_file = "nickserv.auth"; +my $nickservauth_file = "$irssidir/nickserv.auth"; my @nickservpostcmd = (); -my $nickservpostcmd_file = "nickserv.postcmd"; - -my $irssidir = Irssi::get_irssi_dir(); +my $nickservpostcmd_file = "$irssidir/nickserv.postcmd"; my $help = <>%n %_NickServ:%_ Insufficient parameters: Usage "%_/NICKSERV delnet ircnet%_".', 'nickserv_delnickusage', '%R>>%n %_NickServ:%_ Insufficient parameters: Usage "%_/NICKSERV delnick ircnet nickname%_".', 'nickserv_delpostcmdusage', '%R>>%n %_NickServ:%_ Insufficient parameters: Usage "%_/NICKSERV delpostcmd ircnet nickname%_".', - 'nickserv_delled', '%R>>%n %_NickServ:%_ Deleted %_$0%_ and his nicknames from the NickServ ircnet list.', - 'nickserv_delled_nick', '%R>>%n %_NickServ:%_ Deleted %_$1%_ from the NickServ list on $0.', + 'nickserv_delled', '%R>>%n %_NickServ:%_ Deleted %_$0%_ and it\'s nicknames and post commands from the NickServ ircnet list.', + 'nickserv_delled_nick', '%R>>%n %_NickServ:%_ Deleted %_$1%_ and it\'s post commands from the NickServ list on $0.', 'nickserv_delled_postcmd', '%R>>%n %_NickServ:%_ Deleted all entries for %_$1%_ from the NickServ postcmd list on $0.', 'nickserv_nfound', '%R>>%n %_NickServ:%_ The NickServ ircnet %_$0%_ could not be found.', 'nickserv_nfound_nick', '%R>>%n %_NickServ:%_ The NickServ nickname %_$0%_ could not be found on $1.', - 'nickserv_nfound_postcmd', '%R>>%n %_NickServ:%_ The NickServ nickname %_$0%_ could not be found on $1.', + 'nickserv_nfound_postcmd', '%R>>%n %_NickServ:%_ The NickServ post commands for nickname %_$1%_ could not be found on $0.', 'nickserv_usage', '%R>>%n %_NickServ:%_ Insufficient parameters: Use "%_/NICKSERV help%_" for further instructions.', 'nickserv_no_net', '%R>>%n %_NickServ:%_ Unknown Irssi ircnet %_$0%_.', 'nickserv_wrong_host', '%R>>%n %_NickServ:%_ Malformed services hostname %_$0%_.', @@ -123,177 +124,163 @@ sub load_nickservnet { my ($file) = @_; - @nickservnet = (); - - if (-e $file) { - local *F; - open(F, "<", $file); - local $/ = "\n"; - - while () { - chop; - my $new_nsnet = new_nickserv_network(split("\t")); - - if (($new_nsnet->{name} ne "") && ($new_nsnet->{host} ne "")) { - push(@nickservnet, $new_nsnet); - } - } - - close(F); - } + @nickservnet = load_file($file, sub { + my $new_nsnet = new_nickserv_network(@_); + return undef if ($new_nsnet->{name} eq "" || $new_nsnet->{host} eq ""); + return $new_nsnet; + }); } sub save_nickservnet { - my ($file) = @_; - - if (-e $file) { - local *F; - open(F, ">", $file); - - for (my $n = 0; $n < @nickservnet; ++$n) { - print(F join("\t", $nickservnet[$n]->{name}, $nickservnet[$n]->{host}) . "\n"); - } - - close(F); - } else { - create_network_file($file); - save_nickservnet($file); - } -} - -sub create_network_file { - - my ($file) = @_; - - open(F, ">", $file) or die "Can't create $file. Reason: $!"; + save_file($nickservnet_file, \@nickservnet, \&nickservnet_as_list); } sub new_nickserv_network { - my $nsnet = {}; + return { + name => shift, + host => shift + }; +} + +sub nickservnet_as_list { - $nsnet->{name} = shift; - $nsnet->{host} = shift; + my $nickserv_net = shift; - return $nsnet; + return ( + $nickserv_net->{name}, + $nickserv_net->{host} + ); } sub load_nickservnick { my ($file) = @_; - @nickservauth = (); + @nickservauth = load_file($file, sub { + my $new_nsnick = new_nickserv_nick(@_); - if (-e $file) { - local *F; - open(F, "<" ,$file); - local $/ = "\n"; + return undef if ($new_nsnick->{ircnet} eq "" || $new_nsnick->{nick} eq "" || $new_nsnick->{pass} eq ""); + return $new_nsnick; + }); +} - while () { - chop; - my $new_nsnick = new_nickserv_nick(split("\t")); - - if (($new_nsnick->{ircnet} ne "") && ($new_nsnick->{nick} ne "") && ($new_nsnick->{pass} ne "")) { - push(@nickservauth, $new_nsnick); - } - } - - close(F); - } +sub save_nickservnick { + + save_file($nickservauth_file, \@nickservauth, \&nickserv_nick_as_list); } -sub load_nickservpostcmd { - my ($file) = @_; +sub new_nickserv_nick { - @nickservpostcmd = (); + return { + ircnet => shift, + nick => shift, + pass => shift + }; +} - if (-e $file) { - local *F; - open(F, "<" ,$file); - local $/ = "\n"; +sub nickserv_nick_as_list { - while () { - chop; - my $new_postcmd = new_postcmd(split("\t")); - - if (($new_postcmd->{ircnet} ne "") && ($new_postcmd->{nick} ne "") && ($new_postcmd->{postcmd} ne "")) { - push(@nickservpostcmd, $new_postcmd); - } - } - - close(F); - } + my $nickserv_nick = shift; + return ( + $nickserv_nick->{ircnet}, + $nickserv_nick->{nick}, + $nickserv_nick->{pass} + ); } -sub save_nickservnick { +sub load_nickservpostcmd { + my ($file) = @_; - if (-e $file) { - local *F; - open(F, ">", $file); + @nickservpostcmd = load_file($file, sub { + my $new_postcmd = new_postcmd(@_); - for (my $n = 0; $n < @nickservauth; ++$n) { - print(F join("\t", $nickservauth[$n]->{ircnet}, $nickservauth[$n]->{nick}, $nickservauth[$n]->{pass}) . "\n"); - } - - close(F); - } else { - create_save_file($file); - save_nickservnick($file); - } + return undef if ($new_postcmd->{ircnet} eq "" || $new_postcmd->{nick} eq "" || $new_postcmd->{postcmd} eq ""); + return $new_postcmd; + }); } sub save_nickservpostcmd { - my ($file) = @_; - if (-e $file) { - local *F; - open(F, ">", $file); + save_file($nickservpostcmd_file, \@nickservpostcmd, \&postcmd_as_list); +} - for (my $n = 0; $n < @nickservpostcmd; ++$n) { - print(F join("\t", $nickservpostcmd[$n]->{ircnet}, $nickservpostcmd[$n]->{nick}, $nickservpostcmd[$n]->{postcmd}) . "\n"); - } - - close(F); - } else { - create_save_file($file); - save_nickservpostcmd($file); - } +sub new_postcmd { + + return { + ircnet => shift, + nick => shift, + postcmd => shift + }; } -sub create_save_file { - my ($file) = @_; - my $umask = umask 0077; # save old umask - open(F, ">", $file) or die "Can't create $file. Reason: $!"; - close(F); - umask $umask; +sub postcmd_as_list { + my $postcmd = shift; + + return ( + $postcmd->{ircnet}, + $postcmd->{nick}, + $postcmd->{postcmd} + ); } -sub new_nickserv_nick { +# file: filename to be read +# parse_line_fn: receives array of entries of a single line as input, should +# return parsed data object or undef in the data is incomplete +# returns: parsed data array +sub load_file { + + my ($file, $parse_line_fn) = @_; + my @parsed_data = (); - my $nsnick = {}; + if (-e $file) { + open(my $fh, "<", $file); + local $/ = "\n"; + + while (<$fh>) { + chomp; + my $data = $parse_line_fn->(split("\t")); + push(@parsed_data, $data) if $data; + } - $nsnick->{ircnet} = shift; - $nsnick->{nick} = shift; - $nsnick->{pass} = shift; + close($fh); + } - return $nsnick; + return @parsed_data; } -sub new_postcmd { +# file: filename to be written, is created accessable only by the user +# data_ref: array ref of data entries +# serialize_fn: receives a data reference and should return an array or tuples +# for that data that will be serialized into one line +sub save_file { + + my ($file, $data_ref, $serialize_fn) = @_; + + create_private_file($file) unless -e $file; + + open(my $fh, ">", $file) or die "Can't create $file. Reason: $!"; - my $nspostcmd = {}; + for my $data (@$data_ref) { + print($fh join("\t", $serialize_fn->($data)), "\n"); + } + + close($fh); +} - $nspostcmd->{ircnet} = shift; - $nspostcmd->{nick} = shift; - $nspostcmd->{postcmd} = shift; +sub create_private_file { - return $nspostcmd; + my ($file) = @_; + my $umask = umask 0077; # save old umask + open(my $fh, ">", $file) or die "Can't create $file. Reason: $!"; + close($fh); + umask $umask; } sub add_nickname { - + my ($network, $nickname, $password) = split(" ", $_[0], 3); my ($correct_network, $correct_nickname); @@ -301,7 +288,7 @@ sub add_nickname { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_usage_nickname'); return; } - + if ($network) { if (!already_loaded_net($network)) { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_not_loaded_net', $network); @@ -310,7 +297,7 @@ sub add_nickname { $correct_network = 1; } } - + if ($nickname) { if (already_loaded_nick($nickname, $network)) { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_loaded_nick', $nickname, $network); @@ -319,17 +306,17 @@ sub add_nickname { $correct_nickname = 1; } } - + if ($correct_network && $correct_nickname) { push(@nickservauth, new_nickserv_nick($network, $nickname, $password)); - save_nickservnick("$irssidir/$nickservauth_file"); - + save_nickservnick(); + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'saved_nickname', $network, $nickname); } } sub add_postcmd { - + my ($network, $nickname, $postcmd) = split(" ", $_[0], 3); my ($correct_network, $correct_nickname); @@ -337,7 +324,7 @@ sub add_postcmd { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_usage_postcmd'); return; } - + if ($network) { if (!already_loaded_net($network)) { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_not_loaded_net', $network); @@ -346,7 +333,7 @@ sub add_postcmd { $correct_network = 1; } } - + if ($nickname) { if (!already_loaded_nick($nickname, $network)) { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_not_loaded_nick', $nickname, $network); @@ -355,28 +342,28 @@ sub add_postcmd { $correct_nickname = 1; } } - + if ($correct_network && $correct_nickname) { push(@nickservpostcmd, new_postcmd($network, $nickname, $postcmd)); - save_nickservpostcmd("$irssidir/$nickservpostcmd_file"); - + save_nickservpostcmd(); + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'saved_postcmd', $network, $nickname, $postcmd); } } sub add_network { - + my ($network, $hostname) = split(" ", $_[0], 2); my ($correct_net, $correct_host); - + if ($network eq "" || $hostname eq "") { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_usage_network'); return; } - + if ($network) { my ($ircnet) = Irssi::chatnet_find($network); - + if (!$ircnet) { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_no_net', $network); return; @@ -387,7 +374,7 @@ sub add_network { $correct_net = 1; } } - + if ($hostname) { if ($hostname !~ /^[.+a-zA-Z0-9_-]{1,}@[.+a-zA-Z0-9_-]{1,}$/) { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_wrong_host', $hostname); @@ -396,68 +383,44 @@ sub add_network { $correct_host = 1; } } - + if ($correct_net && $correct_host) { push(@nickservnet, new_nickserv_network($network, $hostname)); - save_nickservnet("$irssidir/$nickservnet_file"); - + save_nickservnet(); + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'saved_network', $network, $hostname); } } sub already_loaded_net { - my ($ircnet) = @_; - my $loaded = check_loaded_net($ircnet); - - if ($loaded > -1) { - return 1; - } - - return 0; -} - -sub check_loaded_net { - my ($ircnet) = @_; $ircnet = lc($ircnet); - for (my $loaded = 0; $loaded < @nickservnet; ++$loaded) { - return $loaded if (lc($nickservnet[$loaded]->{name}) eq $ircnet); + for my $loaded (@nickservnet) { + return 1 if (lc($loaded->{name}) eq $ircnet); } - - return -1; + + return 0; } sub already_loaded_nick { - my ($nickname, $network) = @_; - my $loaded = check_loaded_nick($nickname, $network); - - if ($loaded > -1) { - return 1; - } - - return 0 -} -sub check_loaded_nick { - - my ($nickname, $network) = @_; - $nickname = lc($nickname); $network = lc($network); - - for (my $loaded = 0; $loaded < @nickservauth; ++$loaded) { - return $loaded if (lc($nickservauth[$loaded]->{nick}) eq $nickname && lc ($nickservauth[$loaded]->{ircnet}) eq $network); + + for my $loaded (@nickservauth) { + return 1 if (lc($loaded->{nick}) eq $nickname && + lc($loaded->{ircnet}) eq $network); } - - return -1; + + return 0; } sub list_net { - + if (@nickservnet == 0) { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'network_empty'); } else { @@ -470,7 +433,7 @@ sub list_net { } sub list_nick { - + if (@nickservauth == 0) { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickname_empty'); } else { @@ -483,7 +446,7 @@ sub list_nick { } sub list_postcmd { - + if (@nickservpostcmd == 0) { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'postcmd_empty'); } else { @@ -496,7 +459,7 @@ sub list_postcmd { } sub nickserv_notice { - + my ($server, $data, $nick, $address) = @_; my ($target, $text) = $data =~ /^(\S*)\s:(.*)/; @@ -505,14 +468,14 @@ sub nickserv_notice { if ($text =~ /^(?:If this is your nickname, type|Please identify via|Type) \/msg NickServ (?i:identify)/ || $text =~ /^This nickname is registered and protected. If it is your/ || $text =~ /This nickname is registered\. Please choose a different nickname/) { my $password = get_password($server->{tag}, $server->{nick}); - + if ($password == -1) { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'password_request', $server->{tag}); Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_nfound_nick', $server->{nick}, $server->{tag}); Irssi::signal_stop(); return; } - + Irssi::signal_stop(); Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'password_request', $server->{tag}); $server->command("^MSG NickServ IDENTIFY $password"); @@ -564,34 +527,38 @@ sub nickserv_notice { } sub run_postcmds { - my ($server, $tag, $nick) = @_; - return unless scalar @nickservpostcmd; # there's nothing to save + my ($server, $ircnet, $nick) = @_; + return if @nickservpostcmd == 0; for my $cmd (@nickservpostcmd) { - if ($tag eq $cmd->{ircnet} && $nick eq $cmd->{nick} && $cmd->{postcmd}) { + if ($ircnet eq $cmd->{ircnet} && + $nick eq $cmd->{nick} && + $cmd->{postcmd}) { $server->command($cmd->{postcmd}); } } } sub is_nickserv { - + my ($net, $host) = @_; for (my $loaded = 0; $loaded < @nickservnet; ++$loaded) { - return 1 if (lc($nickservnet[$loaded]->{name}) eq lc($net) && lc($nickservnet[$loaded]->{host}) eq lc($host)); + return 1 if (lc($nickservnet[$loaded]->{name}) eq lc($net) && + lc($nickservnet[$loaded]->{host}) eq lc($host)); } return 0; } sub get_password { - + my ($ircnet, $nick) = @_; - + for (my $loaded = 0; $loaded < @nickservauth; ++$loaded) { - return $nickservauth[$loaded]->{pass} if (lc($nickservauth[$loaded]->{ircnet}) eq lc($ircnet) && lc($nickservauth[$loaded]->{nick}) eq lc($nick)); + return $nickservauth[$loaded]->{pass} if (lc($nickservauth[$loaded]->{ircnet}) eq lc($ircnet) && + lc($nickservauth[$loaded]->{nick}) eq lc($nick)); } - + return -1; } @@ -610,47 +577,54 @@ sub del_network { $ircnetindex = 1; } } - + if ($ircnetindex) { @nickservnet = grep {lc($_->{name}) ne lc($ircnet)} @nickservnet; @nickservauth = grep {lc($_->{ircnet}) ne lc($ircnet)} @nickservauth; + @nickservpostcmd = grep {lc($_->{ircnet}) ne lc($ircnet)} @nickservpostcmd; Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_delled', $ircnet); - save_nickservnet("$irssidir/$nickservnet_file"); - save_nickservnick("$irssidir/$nickservauth_file"); + save_nickservnet(); + save_nickservnick(); + save_nickservpostcmd(); } else { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_nfound', $ircnet); } } sub del_nickname { - + my ($ircnet, $nickname) = split(" ", $_[0], 2); my ($nickindex); - + if ($ircnet eq "" || $nickname eq "") { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_delnickusage'); return; } for (my $index = 0; $index < @nickservauth; ++$index) { - if (lc($nickservauth[$index]->{ircnet}) eq lc($ircnet) && lc($nickservauth[$index]->{nick}) eq lc($nickname)) { + if (lc($nickservauth[$index]->{ircnet}) eq lc($ircnet) && + lc($nickservauth[$index]->{nick}) eq lc($nickname)) { $nickindex = splice(@nickservauth, $index, 1); - } + } } if ($nickindex) { + @nickservpostcmd = grep {lc($_->{ircnet}) ne lc($ircnet) || + lc($_->{nick}) ne lc($nickname)} + @nickservpostcmd; + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_delled_nick', $ircnet, $nickname); - save_nickservnick("$irssidir/$nickservauth_file"); + save_nickservnick(); + save_nickservpostcmd(); } else { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_nfound_nick', $ircnet, $nickname); } } sub del_postcmd { - + my ($ircnet, $nickname) = split(" ", $_[0], 2); - my ($nickindex); - + if ($ircnet eq "" || $nickname eq "") { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_delpostcmdusage'); return; @@ -662,17 +636,17 @@ sub del_postcmd { if ($size_before != $size_after) { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_delled_postcmd', $ircnet, $nickname); - save_nickservpostcmd("$irssidir/$nickservpostcmd_file"); + save_nickservpostcmd(); } else { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_nfound_postcmd', $ircnet, $nickname); } } sub nickserv_runsub { - + my ($data, $server, $item) = @_; $data =~ s/\s+$//g; - + if ($data) { Irssi::command_runsub('nickserv', $data, $server, $item); } else { @@ -680,42 +654,31 @@ sub nickserv_runsub { } } -load_nickservnet("$irssidir/$nickservnet_file"); -load_nickservnick("$irssidir/$nickservauth_file"); -load_nickservpostcmd("$irssidir/$nickservpostcmd_file"); +load_nickservnet($nickservnet_file); +load_nickservnick($nickservauth_file); +load_nickservpostcmd($nickservpostcmd_file); Irssi::command_bind('nickserv', 'nickserv_runsub'); Irssi::command_bind('ns', 'nickserv_runsub'); -Irssi::command_bind('nickserv addnet', 'add_network'); -Irssi::command_bind('ns addnet', 'add_network'); - -Irssi::command_bind('nickserv addnick', 'add_nickname'); -Irssi::command_bind('ns addnick', 'add_nickname'); - -Irssi::command_bind('nickserv addpostcmd', 'add_postcmd'); -Irssi::command_bind('ns addpostcmd', 'add_postcmd'); - -Irssi::command_bind('nickserv listnet', 'list_net'); -Irssi::command_bind('ns listnet', 'list_net'); - -Irssi::command_bind('nickserv listnick', 'list_nick'); -Irssi::command_bind('ns listnick', 'list_nick'); - -Irssi::command_bind('nickserv listpostcmd', 'list_postcmd'); -Irssi::command_bind('ns listpostcmd', 'list_postcmd'); - -Irssi::command_bind('nickserv delnet', 'del_network'); -Irssi::command_bind('ns delnet', 'del_network'); - -Irssi::command_bind('nickserv delnick', 'del_nickname'); -Irssi::command_bind('ns delnick', 'del_nickname'); - -Irssi::command_bind('nickserv delpostcmd', 'del_postcmd'); -Irssi::command_bind('ns delpostcmd', 'del_postcmd'); - Irssi::command_bind('nickserv help' => sub { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_help', $help) }); Irssi::command_bind('ns help' => sub { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_help', $help) }); +# "command binding" -> "function name" mapping +for my $cmd (( + ['addnet' => 'add_network'], + ['addnick' => 'add_nickname'], + ['addpostcmd' => 'add_postcmd'], + ['listnet' => 'list_net'], + ['listnick' => 'list_nick'], + ['listpostcmd' => 'list_postcmd'], + ['delnet' => 'del_network'], + ['delnick' => 'del_nickname'], + ['delpostcmd' => 'del_postcmd'], +)) { + Irssi::command_bind("nickserv $cmd->[0]", $cmd->[1]); + Irssi::command_bind("ns $cmd->[0]", $cmd->[1]); +} + Irssi::signal_add('event notice', 'nickserv_notice'); Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_loaded', $IRSSI{name}, $VERSION, $IRSSI{authors}); -- cgit v1.2.3 From dd9f917353b3486195ffc11026ccdd95beb93d07 Mon Sep 17 00:00:00 2001 From: dedeibel Date: Tue, 17 Jan 2017 20:26:41 +0100 Subject: Invitejoin refactoring of the load and save functionallity as of the nickserv script. Added nicklist empty notice. Validated nick name against being empty. --- scripts/invitejoin.pl | 162 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 111 insertions(+), 51 deletions(-) (limited to 'scripts') diff --git a/scripts/invitejoin.pl b/scripts/invitejoin.pl index 38205c2..d3b5871 100644 --- a/scripts/invitejoin.pl +++ b/scripts/invitejoin.pl @@ -24,7 +24,7 @@ use strict; use Irssi; use vars qw($VERSION %IRSSI); -$VERSION = "0.02"; +$VERSION = '0.02'; %IRSSI = ( authors => 'Geert Hauwaerts', @@ -32,8 +32,8 @@ $VERSION = "0.02"; name => 'invitejoin.pl', description => 'This script will join a channel if somebody invites you to it.', license => 'Public Domain', - url => 'http://irssi.hauwaerts.be/invitejoin.pl', - changed => 'Di 3. Jan 19:46:51 CET 2017', + url => 'https://github.com/irssi/scripts.irssi.org/blob/master/scripts/invitejoin.pl', + changed => 'Di 17. Jan 19:32:45 CET 2017', ); my $help = <>%n %_Invitejoin:%_ Insufficient parameters: Usage "%_/INVITEJOIN addnick ircnet ChanServ%_".', 'invitejoin_no_net', '%R>>%n %_Invitejoin:%_ Unknown Irssi ircnet %_$0%_.', 'saved_nick', '%R>>%n %_Invitejoin:%_ Added allowed nick "%_$1%_" on %_$0%_.', + 'nick_already_present', '%R>>%n %_Invitejoin:%_ Nick already present.', 'invitejoin_delusage', '%R>>%n %_Invitejoin:%_ Insufficient parameters: Usage "%_/INVITEJOIN delnick ircnet nick%_".', 'invitejoin_delled', '%R>>%n %_Invitejoin:%_ Deleted %_$1%_ on %_$0%_ from allowed list.', 'invitejoin_nfound', '%R>>%n %_Invitejoin:%_ The nick %_$1%_ on %_$0%_ could not be found.', 'allowed_nicks_info', '%_Ircnet Nick%_', - 'allowed_nicks_empty', '%R>>%n %_Invitejoin:%_ Your allowed nick list is empty.', + 'allowed_nicks_empty', '%R>>%n %_Invitejoin:%_ Your allowed nick list is empty. All invites will be followed.', 'allowed_nicks_print', '$[18]0 $1', 'invite_denied', '%R>>%n %_Invitejoin:%_ Invite from nick %_$1%_ on %_$0%_ to %_$2%_ not followed because it is not in the allowed list.', ]); sub load_allowed_nicks { my ($file) = @_; - @allowed_nicks = (); + + @allowed_nicks = load_file($file, sub { + my $new_allowed = new_allowed_nick(@_); + + return undef if ($new_allowed->{net} eq '' || $new_allowed->{nick} eq ''); + return $new_allowed; + }); +} + +sub save_allowed_nicks { + my ($file) = @_; + save_file($file, \@allowed_nicks, \&allowed_nick_to_list); +} + +sub allowed_nick_to_list { + my $allowed_nick = shift; + + return ( + $allowed_nick->{net}, + $allowed_nick->{nick} + ); +} + +sub new_allowed_nick { + return { + net => shift, + nick => shift + }; +} + +# file: filename to be read +# parse_line_fn: receives array of entries of a single line as input, should +# return parsed data object or undef in the data is incomplete +# returns: parsed data array +sub load_file { + my ($file, $parse_line_fn) = @_; + my @parsed_data = (); + if (-e $file) { open(my $fh, "<", $file); local $/ = "\n"; while (<$fh>) { chomp; - my $new_allowed = new_allowed_nick(split("\t")); - if (($new_allowed->{net} ne "") && ($new_allowed->{nick} ne "")) { - push(@allowed_nicks, $new_allowed); - } + my $data = $parse_line_fn->(split("\t")); + push(@parsed_data, $data) if $data; } + close($fh); } + + return @parsed_data; } -sub save_allowed_nicks { - my ($file) = @_; +# file: filename to be written, is created accessable only by the user +# data_ref: array ref of data entries +# serialize_fn: receives a data reference and should return an array or tuples +# for that data that will be serialized into one line +sub save_file { + my ($file, $data_ref, $serialize_fn) = @_; + + create_private_file($file) unless -e $file; + open(my $fh, ">", $file) or die "Can't create $file. Reason: $!"; - for my $allowed (@allowed_nicks) { - print($fh join("\t", $allowed->{net}, $allowed->{nick}) . "\n"); + for my $data (@$data_ref) { + print($fh join("\t", $serialize_fn->($data)), "\n"); } close($fh); } -sub new_allowed_nick { - my $anick = {}; - - $anick->{net} = shift; - $anick->{nick} = shift; - - return $anick; +sub create_private_file { + my ($file) = @_; + my $umask = umask 0077; # save old umask + open(my $fh, ">", $file) or die "Can't create $file. Reason: $!"; + close($fh); + umask $umask; } sub add_allowed_nick { my ($network, $nick) = split(" ", $_[0], 2); my ($correct_net); - - if ($network eq "" || $nick eq "") { + + if ($network eq '' || $nick eq '') { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'invitejoin_usage_add_nick'); return; } - + if ($network) { my ($ircnet) = Irssi::chatnet_find($network); if (!$ircnet) { @@ -139,11 +184,16 @@ sub add_allowed_nick { $correct_net = 1; } } - + if ($correct_net && $nick) { + if (is_nick_in_list($network, $nick)) { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nick_already_present'); + return; + } + push(@allowed_nicks, new_allowed_nick($network, $nick)); save_allowed_nicks("$irssidir/$allowed_nicks_file"); - + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'saved_nick', $network, $nick); } } @@ -151,7 +201,7 @@ sub add_allowed_nick { sub del_allowed_nick { my ($ircnet, $nick) = split(" ", $_[0], 2); - if ($ircnet eq "") { + if ($ircnet eq '' || $nick eq '') { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'invitejoin_delusage'); return; } @@ -159,17 +209,20 @@ sub del_allowed_nick { my $size_before = scalar(@allowed_nicks); @allowed_nicks = grep { ! ($_->{net} eq $ircnet && $_->{nick} eq $nick) } @allowed_nicks; my $size_after = scalar(@allowed_nicks); - + if ($size_after != $size_before) { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'invitejoin_delled', $ircnet, $nick); save_allowed_nicks("$irssidir/$allowed_nicks_file"); } else { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'invitejoin_nfound', $ircnet, $nick); } + + if ($size_after == 0) { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'allowed_nicks_empty'); + } } sub list_allowed_nicks { - if (@allowed_nicks == 0) { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'allowed_nicks_empty'); } else { @@ -182,10 +235,9 @@ sub list_allowed_nicks { } sub invitejoin_runsub { - my ($data, $server, $item) = @_; $data =~ s/\s+$//g; - + if ($data) { Irssi::command_runsub('invitejoin', $data, $server, $item); } else { @@ -193,17 +245,25 @@ sub invitejoin_runsub { } } +sub is_nick_in_list { + my ($net, $nick) = @_; + + return (grep { + $_->{net} eq $net && + $_->{nick} eq $nick + } @allowed_nicks) > 0; +} + sub is_allowed_nick { - my ($server, $nick) = @_; + my ($net, $nick) = @_; - # If no allowed nicks are specified (initial configuration) accept - # all invite requests, which mimics previous behavior of this script - return 1 if @allowed_nicks == 0; + # If no allowed nicks are specified (initial configuration) accept + # all invite requests. + # # (This mimics previous behavior of this script + # before there was an allowed list) + return 1 if @allowed_nicks == 0; - return (grep { - $_->{net} eq $server->{tag} && - $_->{nick} eq $nick - } @allowed_nicks) > 0; + return is_nick_in_list($net, $nick); } sub invitejoin { @@ -211,15 +271,15 @@ sub invitejoin { my $invitejoin = Irssi::settings_get_bool('invitejoin'); if ($invitejoin) { - if (is_allowed_nick($server, $nick)) { - $server->command("join $channel"); - - Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'invitejoin_invited', $nick, $channel); - Irssi::signal_stop(); - } - else { - Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'invite_denied', $server->{tag}, $nick, $channel); - } + if (is_allowed_nick($server->{tag}, $nick)) { + $server->command("join $channel"); + + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'invitejoin_invited', $nick, $channel); + Irssi::signal_stop(); + } + else { + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'invite_denied', $server->{tag}, $nick, $channel); + } } } @@ -229,10 +289,10 @@ Irssi::settings_add_bool('invitejoin', 'invitejoin' => 1); load_allowed_nicks("$irssidir/$allowed_nicks_file"); -Irssi::command_bind('invitejoin', 'invitejoin_runsub'); -Irssi::command_bind('invitejoin addnick', 'add_allowed_nick'); -Irssi::command_bind('invitejoin delnick', 'del_allowed_nick'); -Irssi::command_bind('invitejoin listnick', 'list_allowed_nicks'); +Irssi::command_bind('invitejoin', 'invitejoin_runsub'); +Irssi::command_bind('invitejoin addnick', 'add_allowed_nick'); +Irssi::command_bind('invitejoin delnick', 'del_allowed_nick'); +Irssi::command_bind('invitejoin listnick', 'list_allowed_nicks'); Irssi::command_bind('invitejoin help' => sub { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'invitejoin_help', $help) }); Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'invitejoin_loaded', $IRSSI{name}, $VERSION, $IRSSI{authors}); -- cgit v1.2.3 From 104347576d0972cfb08c916269c09bd7cc10f714 Mon Sep 17 00:00:00 2001 From: Thomas Stagner Date: Fri, 20 Jan 2017 17:30:17 -0700 Subject: Add perlalias.pl : Provides for quick perl-based commands --- scripts/perlalias.pl | 259 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 259 insertions(+) create mode 100644 scripts/perlalias.pl (limited to 'scripts') diff --git a/scripts/perlalias.pl b/scripts/perlalias.pl new file mode 100644 index 0000000..9a3e1fa --- /dev/null +++ b/scripts/perlalias.pl @@ -0,0 +1,259 @@ +=head1 perlalias.pl - Perl-based command aliases for irssi + +This script provides an /alias-like function that uses small pieces of perl code to carry out the commands. + +=head2 Usage + +Install into irssi script directory and /run perlalias and/or put into autorun. + +=head2 Commands + +=over + +=item /perlalias + +Syntax: /perlalias [[[-]] []] + +Parameters: A name of the alias and the perl code to execute. + +If you prepend the alias with -, it will remove the alias. + +If you give no arguments, the list of defined aliases will be displayed. + +Description: + +Creates or updates an alias. Like any perl code, multiple statements must be separated using ; characters. +No replacement of parameter values is done: any $text is a perl variable. + +The arguments given to the /alias when typed are put into $_ and are also split on whitespace and put into @_. + +Examples: + +/PERLALIAS UNACT foreach my $w (Irssi::windows) { $w->activity(0); } + +=back + +=over + +=item /perlunalias + +Syntax: /perlunalias + +Parameters: The alias to remove. + +Description: + +Removes the given alias. + +=back + +Additionally, all aliases added are linked to perlalias.pl: if it is unloaded, the aliases will be removed. + +Aliases can be saved and reloaded with the usual /save and /reload (including autosave). Saved aliases are loaded at script load. + +=head2 ChangeLog + +=over + +=item 1.0 + +First version. + +=back + +=cut + +use strict; +use warnings FATAL => qw(all); +use Irssi; +use Irssi::Irc; +use Carp (); + +#use Cwd; +use POSIX qw(strftime); + +{ package Irssi::Nick; } # Keeps trying to look for this package but for some reason it doesn't get loaded. + +our $VERSION = '1.0'; +our %IRSSI = ( + authors => 'aquanight', + contact => 'aquanight@gmail.com', + name => 'perlalias', + description => 'Quickly create commands from short perl blocks', + license => 'public domain' + ); + +# Bound commands +my %cmds; # Contains command entries. The entry has three items: + # textcmd => Plaintext of the command to execute, which is used for loading/saving + # cmpcmd => Compiled command, for executing. + # tag => Our tag which we need to remove the command + +# Package we execute all the commands within, to keep them away from our bits. +package Irssi::Script::perlalias::aliaspkg { +} + +sub DESTROY { + Symbol::delete_package("Irssi::Script::perlalias::aliaspkg::"); +} + +# Alias executor +sub exec_perlalias { + my ($cmd, $data, $server, $witem) = @_; + exists $cmds{$cmd} or return; + defined $cmds{$cmd}->{cmpcmd} or return; + local $_ = $data; + $cmds{$cmd}->{cmpcmd}->(split / +/, $data); +} + +# Bind a command +sub setup_command { + my ($cmd, $data) = @_; + # Compile the script. + my $code = qq{package Irssi::Scripts::perlalias::aliaspkg;\nno warnings;\nsub {\n#line 1 "perlalias $cmd"\n$data}\n}; + my $proc = eval $code; + if ($@) { + Irssi::printformat(MSGLEVEL_CLIENTERROR, perlalias_compile_error => $cmd); + Irssi::print(MSGLEVEL_CLIENTERROR, $@); + return ""; + } + if (exists($cmds{$cmd})) { + my $entry = $cmds{$cmd}; + $entry->{textcmd} = $data; + $entry->{cmpcmd} = $proc; + } + else { + my $entry = {}; + my $tag = sub { exec_perlalias $cmd, @_; }; + foreach my $existing_cmd (Irssi::commands()) { + if ($existing_cmd->{cmd} eq $cmd) { + Irssi::print_format(MSGLEVEL_CLIENTERROR, perlalias_cmd_in_use => $cmd); + return ""; + } + } + $entry->{textcmd} = $data; + $entry->{cmpcmd} = $proc; + $entry->{tag} = sub { exec_perlalias $cmd, @_; }; + Irssi::command_bind($cmd, $entry->{tag}); + $cmds{$cmd} = $entry; + } + return 1; +} + +sub remove_command { + my ($cmd) = @_; + if (exists($cmds{$cmd})) { + my $entry = $cmds{$cmd}; + $entry->{tag}//die "Missing the tag we need to remove the alias!!!"; + Irssi::command_unbind($cmd, $entry->{tag}); + delete $cmds{$cmd}; + return 1; + } + else { + Irssi::printformat(MSGLEVEL_CLIENTERROR, perlalias_not_found => $cmd); + return ""; + } +} + +sub list_commands { + my ($prefix) = @_; + my @whichones = sort grep /^\Q$prefix\E/, keys %cmds; + Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'perlaliaslist_header'); + for my $name (@whichones) { + my $entry = $cmds{$name}; + Irssi::printformat(MSGLEVEL_CLIENTCRAP, perlaliaslist_line => $name, $entry->{textcmd}); + } +} + +sub cmd_perlalias { + my ($data, $server, $witem) = @_; + my ($command, $script) = split /\s+/, $data, 2; + if (($command//"") eq "") { + list_commands ""; + } + elsif ($command =~ m/^-/) { + $command = substr($command, 1); + if (remove_command($command)) { Irssi::printformat(MSGLEVEL_CLIENTNOTICE, perlalias_removed => $command); } + } + elsif (($script//"") eq "") { + list_commands $command; + } + else { + if (setup_command($command, $script)) { Irssi::printformat(MSGLEVEL_CLIENTNOTICE, perlalias_added => $command); } + } + +} + +sub cmd_perlunalias { + my ($data, $server, $witem) = @_; + if (remove_command $data) { Irssi::printformat(MSGLEVEL_CLIENTNOTICE, perlalias_removed => $data); } +} + +sub sig_setup_saved { + my ($main, $auto) = @_; + my $file = Irssi::get_irssi_dir() . "/perlalias"; + open my $fd, '>', $file or return; + for my $cmd (keys %cmds) { + my $entry = $cmds{$cmd}; + printf $fd "%s\t%s\n", $cmd, $entry->{textcmd}; + } + close $fd; +} + +sub sig_setup_reread { + my $file = Irssi::get_irssi_dir() . "/perlalias"; + open my $fd, "<", $file or return; + my $ln; + my %newcmds; + while (defined($ln = <$fd>)) { + chomp $ln; + my ($cmd, $script) = split /\t/, $ln, 2; + if (exists $newcmds{$cmd}) { + Irssi::print(MSGLEVEL_CLIENTERROR, "There is a duplicate record in the PerlAlias save file."); + Irssi::print(MSGLEVEL_CLIENTERROR, "Offending alias: $cmd"); + Irssi::print(MSGLEVEL_CLIENTERROR, "Previous definition: " . $newcmds{$cmd}); + Irssi::print(MSGLEVEL_CLIENTERROR, "Duplicate definition: $script"); + } + $newcmds{$cmd} = $script; + } + # Scrub the existing list. Update existings, remove any that aren't in the config, then we'll add any that's new. + my @currentcmds = keys %cmds; + for my $cmd (@currentcmds) { + if (exists $newcmds{$cmd}) { + setup_command($cmd, $newcmds{$cmd}); + } + else { + remove_command($cmd); + } + delete $newcmds{$cmd}; + } + # By this point all that should be in newcmds is any ... new commands. + for my $cmd (keys %newcmds) { + setup_command($cmd, $newcmds{$cmd}); + } + close $fd; +} + +Irssi::signal_add("setup saved" => \&sig_setup_saved); +Irssi::signal_add("setup reread" => \&sig_setup_reread); + +Irssi::command_bind(perlalias => \&cmd_perlalias); +Irssi::command_bind(perlunalias => \&cmd_perlunalias); + +my %formats = ( + # $0 Name of alias + 'perlalias_compile_error' => '{error Error compiling alias {hilight $0}:}', + # $0 Name of alias + 'perlalias_exec_error' => '{error Error executing alias {hilight $0}:}', + 'perlalias_cmd_in_use' => 'Command {hilight $0} is already in use', + 'perlalias_added' => 'PerlAlias {hilight $0} added', + 'perlalias_removed' => 'PerlAlias {hilight $0} removed', + 'perlalias_not_found' => 'PerlAlias {hilight $0} not found', + 'perlaliaslist_header' => '%#PerlAliases:', + # $0 Name of alias, $1 alias text + 'perlaliaslist_line' => '%#$[10]0 $1', +); + +Irssi::theme_register([%formats]); + +sig_setup_reread; -- cgit v1.2.3 From f27407be6f922a2bede01b97795c12db9bba4077 Mon Sep 17 00:00:00 2001 From: Thomas Stagner Date: Sat, 21 Jan 2017 05:12:33 -0700 Subject: Make active server and window item visible to scriptlets --- scripts/perlalias.pl | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'scripts') diff --git a/scripts/perlalias.pl b/scripts/perlalias.pl index 9a3e1fa..bb3b306 100644 --- a/scripts/perlalias.pl +++ b/scripts/perlalias.pl @@ -26,6 +26,7 @@ Creates or updates an alias. Like any perl code, multiple statements must be sep No replacement of parameter values is done: any $text is a perl variable. The arguments given to the /alias when typed are put into $_ and are also split on whitespace and put into @_. +In addition, the variables $server and $witem will refer to the active server and window item respectively. Examples: @@ -74,7 +75,7 @@ use POSIX qw(strftime); { package Irssi::Nick; } # Keeps trying to look for this package but for some reason it doesn't get loaded. -our $VERSION = '1.0'; +our $VERSION = '1.1'; our %IRSSI = ( authors => 'aquanight', contact => 'aquanight@gmail.com', @@ -103,14 +104,14 @@ sub exec_perlalias { exists $cmds{$cmd} or return; defined $cmds{$cmd}->{cmpcmd} or return; local $_ = $data; - $cmds{$cmd}->{cmpcmd}->(split / +/, $data); + $cmds{$cmd}->{cmpcmd}->($server, $witem, split / +/, $data); } # Bind a command sub setup_command { my ($cmd, $data) = @_; # Compile the script. - my $code = qq{package Irssi::Scripts::perlalias::aliaspkg;\nno warnings;\nsub {\n#line 1 "perlalias $cmd"\n$data}\n}; + my $code = qq{package Irssi::Scripts::perlalias::aliaspkg;\nno warnings;\nsub {my \$server = shift; my \$witem = shift;\n#line 1 "perlalias $cmd"\n$data}\n}; my $proc = eval $code; if ($@) { Irssi::printformat(MSGLEVEL_CLIENTERROR, perlalias_compile_error => $cmd); -- cgit v1.2.3 From e786fbdfb17aac5ca19cbf1646e44b6009f02c60 Mon Sep 17 00:00:00 2001 From: xhe Date: Mon, 23 Jan 2017 21:47:58 +0800 Subject: desktop-notify.pl: process non-ascii msgs irssi-1.0.0 bug found by jimgrape, patched by xhebox. https://github.com/irssi/scripts.irssi.org/issues/334--- scripts/desktop-notify.pl | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'scripts') diff --git a/scripts/desktop-notify.pl b/scripts/desktop-notify.pl index da25b8c..97c3012 100644 --- a/scripts/desktop-notify.pl +++ b/scripts/desktop-notify.pl @@ -24,6 +24,7 @@ use strict; use Irssi; use HTML::Entities; use Glib::Object::Introspection; # Ignore 'late INIT' warning message if autoloading +use Encode; our $VERSION = '1.0.0'; our %IRSSI = ( @@ -38,6 +39,7 @@ our %IRSSI = ( # List of standard icons can be found here: # http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html#names my $notify_icon; +my $term_charset; my $help = ' /set notify_icon @@ -60,6 +62,7 @@ sub UNLOAD { sub setup_changed { $notify_icon = Irssi::settings_get_str('notify_icon'); + $term_charset = Irssi::settings_get_str('term_charset'); } sub priv_msg { @@ -71,9 +74,9 @@ sub priv_msg { return; } - my $msg = HTML::Entities::encode_entities(Irssi::strip_codes($msg)); + my $msg = HTML::Entities::encode_entities(Irssi::strip_codes($msg), "\<>&'"); my $network = $server->{tag}; - my $noti = Notify::Notification->new($nick . '@' . $network, $msg, $notify_icon); + my $noti = Notify::Notification->new($nick . '@' . $network, decode($term_charset, $msg), $notify_icon); $noti->show(); } @@ -94,8 +97,8 @@ sub hilight { } my $network = $server->{tag}; - my $msg = HTML::Entities::encode_entities($stripped); - my $noti = Notify::Notification->new($dest->{target} . '@' . $network, $msg, $notify_icon); + my $msg = HTML::Entities::encode_entities($stripped, "\'<>&"); + my $noti = Notify::Notification->new($dest->{target} . '@' . $network, decode($term_charset, $msg), $notify_icon); $noti->show(); } -- cgit v1.2.3 From ed5b752d6505e2ca82728dfeabd77214d0edc5c4 Mon Sep 17 00:00:00 2001 From: xhe Date: Mon, 23 Jan 2017 21:52:29 +0800 Subject: desktop-notify.pl: bump to 1.0.1 as title--- scripts/desktop-notify.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/desktop-notify.pl b/scripts/desktop-notify.pl index 97c3012..c41a9f4 100644 --- a/scripts/desktop-notify.pl +++ b/scripts/desktop-notify.pl @@ -26,7 +26,7 @@ use HTML::Entities; use Glib::Object::Introspection; # Ignore 'late INIT' warning message if autoloading use Encode; -our $VERSION = '1.0.0'; +our $VERSION = '1.0.1'; our %IRSSI = ( authors => 'Felipe F. Tonello', contact => 'eu@felipetonello.com', -- cgit v1.2.3 From 5267f201686061ee0ac7c812b94381de619a4685 Mon Sep 17 00:00:00 2001 From: martin f. krafft Date: Fri, 3 Feb 2017 11:47:17 +1300 Subject: Initial checkin of print_signals script Signed-off-by: martin f. krafft --- scripts/print_signals.pl | 280 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 280 insertions(+) create mode 100644 scripts/print_signals.pl (limited to 'scripts') diff --git a/scripts/print_signals.pl b/scripts/print_signals.pl new file mode 100644 index 0000000..dadd9eb --- /dev/null +++ b/scripts/print_signals.pl @@ -0,0 +1,280 @@ +# print_signals.pl — Irssi script to help with inspecting signals +# +# © 2017 martin f. krafft +# Released under the MIT licence. +# +### Usage: +# +# /script load print_signals +# +# and then use e.g. tail -F /tmp/irssi_signals.log outside of irssi. +# +### Settings: +# +# /set print_signals_to_file ["/tmp/irssi_signals.log"] +# Set the file to which to log all signals and their data +# +# /set print_signals_limit_regexp [""] +# Specify a regexp to limit the signals being captured, e.g. "^window". +# Default is no limit. +# +# # Please note that exclude takes precedence over limit: +# +# /set print_signals_exclude_regexp ["print text|key press|textbuffer"] +# Specify a regexp to exclude signals from being captured. Default is not to +# fire on signals about printing text or key presses. +# + +use strict; +use warnings; +use vars qw($VERSION %IRSSI); +use Irssi; +use Data::Dumper; + +$VERSION = '1.0'; + +%IRSSI = ( + authors => 'martin f. krafft', + contact => 'madduck@madduck.net', + name => 'print signals debugger', + description => 'hooks into every signal and writes the information provided to a file', + license => 'MIT', + changed => '2017-02-03' +); + +Irssi::settings_add_str('print_signals', 'print_signals_to_file', '/tmp/irssi_signals.log'); +Irssi::settings_add_str('print_signals', 'print_signals_limit_regexp', ''); +Irssi::settings_add_str('print_signals', 'print_signals_exclude_regexp', + 'print text|key press|textbuffer|rawlog|log written'); + +$Data::Dumper::Sortkeys = 1; +$Data::Dumper::Pad = ' '; + +sub signal_handler { + my $signal = shift(@_); + my $limitre = Irssi::settings_get_str('print_signals_limit_regexp'); + return unless $signal =~ qr/$limitre/; + my $excludere = Irssi::settings_get_str('print_signals_exclude_regexp'); + return if $signal =~ qr/$excludere/; + my @names = shift(@_); + my @data = shift(@_); + my $outfile = Irssi::settings_get_str('print_signals_to_file'); + my $fh; + if (!open($fh, '>>', $outfile)) { + Irssi::print("cannot append to log file $outfile while handling signal '$signal'"); + return; + }; + print $fh "\n== $signal ==\n"; + print $fh Data::Dumper->Dump(@data, @names); + close($fh); +} + +# TODO: a programmatic way to extract the list of all signals from Irssi +# itself, along with descriptive names of the arguments. +my $signals = <<_END; +# curl -s https://raw.githubusercontent.com/irssi/irssi/master/docs/signals.txt | sed -rne 's,^ ",",p' +"gui exit" +"gui dialog", char *type, char *text +"send command", char *command, SERVER_REC, WI_ITEM_REC +"chat protocol created", CHAT_PROTOCOL_REC +"chat protocol updated", CHAT_PROTOCOL_REC +"chat protocol destroyed", CHAT_PROTOCOL_REC +"channel created", CHANNEL_REC, int automatic +"channel destroyed", CHANNEL_REC +"chatnet created", CHATNET_REC +"chatnet destroyed", CHATNET_REC +"commandlist new", COMMAND_REC +"commandlist remove", COMMAND_REC +"error command", int err, char *cmd +"send command", char *args, SERVER_REC, WI_ITEM_REC +"send text", char *line, SERVER_REC, WI_ITEM_REC +"command ", char *args, SERVER_REC, WI_ITEM_REC +"default command", char *args, SERVER_REC, WI_ITEM_REC +"ignore created", IGNORE_REC +"ignore destroyed", IGNORE_REC +"ignore changed", IGNORE_REC +"log new", LOG_REC +"log remove", LOG_REC +"log create failed", LOG_REC +"log locked", LOG_REC +"log started", LOG_REC +"log stopped", LOG_REC +"log rotated", LOG_REC +"log written", LOG_REC, char *line +"module loaded", MODULE_REC, MODULE_FILE_REC +"module unloaded", MODULE_REC, MODULE_FILE_REC +"module error", int error, char *text, char *rootmodule, char *submodule +"tls handshake finished", SERVER_REC, TLS_REC +"nicklist new", CHANNEL_REC, NICK_REC +"nicklist remove", CHANNEL_REC, NICK_REC +"nicklist changed", CHANNEL_REC, NICK_REC, char *old_nick +"nicklist host changed", CHANNEL_REC, NICK_REC +"nicklist gone changed", CHANNEL_REC, NICK_REC +"nicklist serverop changed", CHANNEL_REC, NICK_REC +"pidwait", int pid, int status +"query created", QUERY_REC, int automatic +"query destroyed", QUERY_REC +"query nick changed", QUERY_REC, char *orignick +"window item name changed", WI_ITEM_REC +"query address changed", QUERY_REC +"query server changed", QUERY_REC, SERVER_REC +"rawlog", RAWLOG_REC, char *data +"server looking", SERVER_REC +"server connected", SERVER_REC +"server connecting", SERVER_REC, ulong *ip +"server connect failed", SERVER_REC +"server disconnected", SERVER_REC +"server quit", SERVER_REC, char *msg +"server sendmsg", SERVER_REC, char *target, char *msg, int target_type +"setup changed" +"setup reread", char *fname +"setup saved", char *fname, int autosaved +"ban type changed", char *bantype +"channel joined", CHANNEL_REC +"channel wholist", CHANNEL_REC +"channel sync", CHANNEL_REC +"channel topic changed", CHANNEL_REC +"ctcp msg", SERVER_REC, char *args, char *nick, char *addr, char *target +"ctcp msg ", SERVER_REC, char *args, char *nick, char *addr, char *target +"default ctcp msg", SERVER_REC, char *args, char *nick, char *addr, char *target +"ctcp reply", SERVER_REC, char *args, char *nick, char *addr, char *target +"ctcp reply ", SERVER_REC, char *args, char *nick, char *addr, char *target +"default ctcp reply", SERVER_REC, char *args, char *nick, char *addr, char *target +"ctcp action", SERVER_REC, char *args, char *nick, char *addr, char *target +"awaylog show", LOG_REC, int away_msgs, int filepos +"server nick changed", SERVER_REC +"event connected", SERVER_REC +"server cap ack ", SERVER_REC +"server cap nak ", SERVER_REC +"server cap end", SERVER_REC +"server sasl failure", SERVER_REC, char *reason +"server sasl success", SERVER_REC +"server event", SERVER_REC, char *data, char *sender_nick, char *sender_address +"event ", SERVER_REC, char *args, char *sender_nick, char *sender_address +"default event", SERVER_REC, char *data, char *sender_nick, char *sender_address +"whois default event", SERVER_REC, char *args, char *sender_nick, char *sender_address +"server incoming", SERVER_REC, char *data +"redir ", SERVER_REC, char *args, char *sender_nick, char *sender_address +"server lag", SERVER_REC +"server lag disconnect", SERVER_REC +"massjoin", CHANNEL_REC, GSList of NICK_RECs +"ban new", CHANNEL_REC, BAN_REC +"ban remove", CHANNEL_REC, BAN_REC, char *setby +"channel mode changed", CHANNEL_REC, char *setby +"nick mode changed", CHANNEL_REC, NICK_REC, char *setby, char *mode, char *type +"user mode changed", SERVER_REC, char *old +"away mode changed", SERVER_REC +"netsplit server new", SERVER_REC, NETSPLIT_SERVER_REC +"netsplit server remove", SERVER_REC, NETSPLIT_SERVER_REC +"netsplit new", NETSPLIT_REC +"netsplit remove", NETSPLIT_REC +"dcc ctcp ", char *args, DCC_REC +"default dcc ctcp", char *args, DCC_REC +"dcc unknown ctcp", char *args, char *sender, char *sendaddr +"dcc reply ", char *args, DCC_REC +"default dcc reply", char *args, DCC_REC +"dcc unknown reply", char *args, char *sender, char *sendaddr +"dcc chat message", DCC_REC, char *msg +"dcc created", DCC_REC +"dcc destroyed", DCC_REC +"dcc connected", DCC_REC +"dcc rejecting", DCC_REC +"dcc closed", DCC_REC +"dcc request", DCC_REC, char *sendaddr +"dcc request send", DCC_REC +"dcc chat message", DCC_REC, char *msg +"dcc transfer update", DCC_REC +"dcc get receive", DCC_REC +"dcc error connect", DCC_REC +"dcc error file create", DCC_REC, char *filename +"dcc error file open", char *nick, char *filename, int errno +"dcc error get not found", char *nick +"dcc error send exists", char *nick, char *filename +"dcc error unknown type", char *type +"dcc error close not found", char *type, char *nick, char *filename +"autoignore new", SERVER_REC, AUTOIGNORE_REC +"autoignore remove", SERVER_REC, AUTOIGNORE_REC +"flood", SERVER_REC, char *nick, char *host, int level, char *target +"notifylist new", NOTIFYLIST_REC +"notifylist remove", NOTIFYLIST_REC +"notifylist joined", SERVER_REC, char *nick, char *user, char *host, char *realname, char *awaymsg +"notifylist away changed", SERVER_REC, char *nick, char *user, char *host, char *realname, char *awaymsg +"notifylist left", SERVER_REC, char *nick, char *user, char *host, char *realname, char *awaymsg +"proxy client connecting", CLIENT_REC +"proxy client connected", CLIENT_REC +"proxy client disconnected", CLIENT_REC +"proxy client command", CLIENT_REC, char *args, char *data +"proxy client dump", CLIENT_REC, char *data +"gui print text", WINDOW_REC, int fg, int bg, int flags, char *text, TEXT_DEST_REC +"gui print text finished", WINDOW_REC +"complete word", GList * of char*, WINDOW_REC, char *word, char *linestart, int *want_space +"irssi init read settings" +"exec new", PROCESS_REC +"exec remove", PROCESS_REC, int status +"exec input", PROCESS_REC, char *text +"message public", SERVER_REC, char *msg, char *nick, char *address, char *target +"message private", SERVER_REC, char *msg, char *nick, char *address, char *target +"message own_public", SERVER_REC, char *msg, char *target +"message own_private", SERVER_REC, char *msg, char *target, char *orig_target +"message join", SERVER_REC, char *channel, char *nick, char *address +"message part", SERVER_REC, char *channel, char *nick, char *address, char *reason +"message quit", SERVER_REC, char *nick, char *address, char *reason +"message kick", SERVER_REC, char *channel, char *nick, char *kicker, char *address, char *reason +"message nick", SERVER_REC, char *newnick, char *oldnick, char *address +"message own_nick", SERVER_REC, char *newnick, char *oldnick, char *address +"message invite", SERVER_REC, char *channel, char *nick, char *address +"message topic", SERVER_REC, char *channel, char *topic, char *nick, char *address +"keyinfo created", KEYINFO_REC +"keyinfo destroyed", KEYINFO_REC +"print text", TEXT_DEST_REC *dest, char *text, char *stripped +"theme created", THEME_REC +"theme destroyed", THEME_REC +"window hilight", WINDOW_REC +"window dehilight", WINDOW_REC +"window activity", WINDOW_REC, int old_level +"window item hilight", WI_ITEM_REC +"window item activity", WI_ITEM_REC, int old_level +"window item new", WINDOW_REC, WI_ITEM_REC +"window item remove", WINDOW_REC, WI_ITEM_REC +"window item moved", WINDOW_REC, WI_ITEM_REC, WINDOW_REC +"window item changed", WINDOW_REC, WI_ITEM_REC +"window item server changed", WINDOW_REC, WI_ITEM_REC +"window created", WINDOW_REC +"window destroyed", WINDOW_REC +"window changed", WINDOW_REC, WINDOW_REC old +"window changed automatic", WINDOW_REC +"window server changed", WINDOW_REC, SERVER_REC +"window refnum changed", WINDOW_REC, int old +"window name changed", WINDOW_REC +"window history changed", WINDOW_REC, char *oldname +"window level changed", WINDOW_REC +"default event numeric", SERVER_REC, char *data, char *nick, char *address +"message irc op_public", SERVER_REC, char *msg, char *nick, char *address, char *target +"message irc own_wall", SERVER_REC, char *msg, char *target +"message irc own_action", SERVER_REC, char *msg, char *target +"message irc action", SERVER_REC, char *msg, char *nick, char *address, char *target +"message irc own_notice", SERVER_REC, char *msg, char *target +"message irc notice", SERVER_REC, char *msg, char *nick, char *address, char *target +"message irc own_ctcp", SERVER_REC, char *cmd, char *data, char *target +"message irc ctcp", SERVER_REC, char *cmd, char *data, char *nick, char *address, char *target +"message irc mode", SERVER_REC, char *channel, char *nick, char *addr, char *mode +"message dcc own", DCC_REC *dcc, char *msg +"message dcc own_action", DCC_REC *dcc, char *msg +"message dcc own_ctcp", DCC_REC *dcc, char *cmd, char *data +"message dcc", DCC_REC *dcc, char *msg +"message dcc action", DCC_REC *dcc, char *msg +"message dcc ctcp", DCC_REC *dcc, char *cmd, char *data +"gui key pressed", int key +"beep" +"gui print text after finished", WINDOW_REC, LINE_REC *line, LINE_REC *prev_line +"gui textbuffer line removed", TEXTBUFFER_VIEW_REC *view, LINE_REC *line, LINE_REC *prev_line +_END + +foreach my $sigline (split(/\n/, $signals)) { + my ($sig, @args) = split(/, /, $sigline); + $sig =~ y/"//d; + Irssi::signal_add_first($sig, sub { + signal_handler($sig, \@args, \@_); + } + ); +}; -- cgit v1.2.3 From 4d80ff9fa33f2afd845e8c5a4b70ceec61d2f6d7 Mon Sep 17 00:00:00 2001 From: martin f. krafft Date: Wed, 1 Feb 2017 22:56:07 +0100 Subject: Make case-sensitivity of match configurable Introduces two new settings: - 'go_match_case_sensitive' which, if OFF, causes channel/window names to be matched case-insensitively. /go foo → #Foobar - 'go_complete_case_sensitive' which, if ON, causes channel/window names to be matched case-sensitively during tab-completion: /go foo → will not yield #Foobar Signed-off-by: martin f. krafft --- scripts/go.pl | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) (limited to 'scripts') diff --git a/scripts/go.pl b/scripts/go.pl index b656a0f..f9320b8 100644 --- a/scripts/go.pl +++ b/scripts/go.pl @@ -7,8 +7,19 @@ use Irssi::Irc; # /script load go.pl # If you are in #irssi you can type /go #irssi or /go irssi or even /go ir ... # also try /go ir and /go (that's two spaces) +# +# The following settings exist: +# +# /SET go_match_case_sensitive [ON|OFF] +# Match window/item names sensitively (the default). Turning this off +# means e.g. "/go foo" would jump to a window named "Foobar", too. +# +# /SET go_complete_case_sensitive [ON|OFF] +# When using tab-completion, match case-insensitively (the default). +# Turning this on means that "/go foo" will *not* suggest "Foobar". +# -$VERSION = '1.01'; +$VERSION = '1.1'; %IRSSI = ( authors => 'nohar', @@ -16,9 +27,16 @@ $VERSION = '1.01'; name => 'go to window', description => 'Implements /go command that activates a window given a name/partial name. It features a nice completion.', license => 'GPLv2 or later', - changed => '2014-10-19' + changed => '2017-02-02' ); +sub _make_regexp { + my ($name, $ci) = @_; + my $re = "^#?\Q${name}\E"; + $re = "(?i:$re)" unless $ci; + return $re; +} + sub signal_complete_go { my ($complist, $window, $word, $linestart, $want_space) = @_; my $channel = $window->get_active_name(); @@ -26,11 +44,12 @@ sub signal_complete_go { return unless ($linestart =~ /^\Q${k}\Ego\b/i); + my $re = _make_regexp($word, Irssi::settings_get_bool('go_complete_case_sensitive')); @$complist = (); foreach my $w (Irssi::windows) { my $name = $w->get_active_name(); if ($word ne "") { - if ($name =~ /\Q${word}\E/i) { + if ($name =~ $re) { push(@$complist, $name) } } else { @@ -45,9 +64,11 @@ sub cmd_go my($chan,$server,$witem) = @_; $chan =~ s/ *//g; + my $re = _make_regexp($chan, Irssi::settings_get_bool('go_match_case_sensitive')); + foreach my $w (Irssi::windows) { my $name = $w->get_active_name(); - if ($name =~ /^#?\Q${chan}\E/) { + if ($name =~ $re) { $w->set_active(); return; } @@ -56,4 +77,11 @@ sub cmd_go Irssi::command_bind("go", "cmd_go"); Irssi::signal_add_first('complete word', 'signal_complete_go'); +Irssi::settings_add_bool('go', 'go_match_case_sensitive', 1); +Irssi::settings_add_bool('go', 'go_complete_case_sensitive', 0); +# Changelog +# +# 2017-02-02 1.1 martin f. krafft +# - made case-sensitivity of match configurable +# -- cgit v1.2.3 From eae3efb813b4864c532c5728880cac45a3263333 Mon Sep 17 00:00:00 2001 From: martin f. krafft Date: Sat, 4 Feb 2017 02:11:54 +0100 Subject: Add discard subcommand to drop messages Signed-off-by: martin f. krafft --- scripts/postpone.pl | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'scripts') diff --git a/scripts/postpone.pl b/scripts/postpone.pl index 72e0a90..11011f2 100644 --- a/scripts/postpone.pl +++ b/scripts/postpone.pl @@ -5,7 +5,7 @@ use strict; use vars qw($VERSION %IRSSI); -$VERSION = "20030208"; +$VERSION = "20170204"; %IRSSI = ( authors => "Stefan 'tommie' Tomanek", contact => "stefan\@pico.ruhr.de", @@ -37,6 +37,8 @@ sub show_help() { Display this help /postpone flush Flush postponed messages to +/postpone discard + Discard postponed messages to /postpone list List postponed messages "; @@ -85,11 +87,11 @@ sub cmd_postpone ($$$) { my @arg = split(/ /, $args); if (scalar(@arg) < 1) { #foo - } elsif ($arg[0] eq 'flush' && defined $arg[1]) { + } elsif (($arg[0] eq 'discard' || $arg[0] eq 'flush') && defined $arg[1]) { return unless ($witem && $witem->{type} eq "CHANNEL"); while (scalar(@{$messages{$server->{tag}}{$witem->{name}}{$arg[1]}}) > 0) { my $msg = pop @{$messages{$server->{tag}}{$witem->{name}}{$arg[1]}}; - $server->command('MSG '.$witem->{name}.' '.$msg); + $server->command('MSG '.$witem->{name}.' '.$msg) if $arg[0] eq 'flush'; } } elsif ($arg[0] eq 'list') { my $text; -- cgit v1.2.3 From 883d7a8f9d00a8f080891725ce0fb1c1dcc8ea27 Mon Sep 17 00:00:00 2001 From: martin f. krafft Date: Thu, 2 Feb 2017 02:40:44 +0100 Subject: Make anchored string matching configurable Introduces two new settings `go_match_anchored` and `go_complete_anchored` that control whether the search string (the argument to `/go`) matches only at the start of window/item names (the default), or anywhere in the names. Signed-off-by: martin f. krafft --- scripts/go.pl | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'scripts') diff --git a/scripts/go.pl b/scripts/go.pl index f9320b8..0b0a2a2 100644 --- a/scripts/go.pl +++ b/scripts/go.pl @@ -14,10 +14,20 @@ use Irssi::Irc; # Match window/item names sensitively (the default). Turning this off # means e.g. "/go foo" would jump to a window named "Foobar", too. # +# /SET go_match_anchored [ON|OFF] +# Match window/names only at the start of the word (the default). Turning +# this off will mean that strings can match anywhere in the window/names. +# The leading '#' of channel names is optional either way. +# # /SET go_complete_case_sensitive [ON|OFF] # When using tab-completion, match case-insensitively (the default). # Turning this on means that "/go foo" will *not* suggest "Foobar". # +# /SET go_complete_anchored [ON|OFF] +# Match window/names only at the start of the word. The default is 'off', +# which causes completion to match anywhere in the window/names during +# completion. The leading '#' of channel names is optional either way. +# $VERSION = '1.1'; @@ -31,9 +41,10 @@ $VERSION = '1.1'; ); sub _make_regexp { - my ($name, $ci) = @_; - my $re = "^#?\Q${name}\E"; + my ($name, $ci, $aw) = @_; + my $re = "\Q${name}\E"; $re = "(?i:$re)" unless $ci; + $re = "^#?$re" if $aw; return $re; } @@ -44,7 +55,9 @@ sub signal_complete_go { return unless ($linestart =~ /^\Q${k}\Ego\b/i); - my $re = _make_regexp($word, Irssi::settings_get_bool('go_complete_case_sensitive')); + my $re = _make_regexp($word, + Irssi::settings_get_bool('go_complete_case_sensitive'), + Irssi::settings_get_bool('go_complete_anchored')); @$complist = (); foreach my $w (Irssi::windows) { my $name = $w->get_active_name(); @@ -64,7 +77,9 @@ sub cmd_go my($chan,$server,$witem) = @_; $chan =~ s/ *//g; - my $re = _make_regexp($chan, Irssi::settings_get_bool('go_match_case_sensitive')); + my $re = _make_regexp($chan, + Irssi::settings_get_bool('go_match_case_sensitive'), + Irssi::settings_get_bool('go_match_anchored')); foreach my $w (Irssi::windows) { my $name = $w->get_active_name(); @@ -79,9 +94,12 @@ Irssi::command_bind("go", "cmd_go"); Irssi::signal_add_first('complete word', 'signal_complete_go'); Irssi::settings_add_bool('go', 'go_match_case_sensitive', 1); Irssi::settings_add_bool('go', 'go_complete_case_sensitive', 0); +Irssi::settings_add_bool('go', 'go_match_anchored', 1); +Irssi::settings_add_bool('go', 'go_complete_anchored', 0); # Changelog # # 2017-02-02 1.1 martin f. krafft # - made case-sensitivity of match configurable +# - made anchoring of search strings configurable # -- cgit v1.2.3 From 6839be2ccdb9cd97cfc2131cdcadda3123a5ad13 Mon Sep 17 00:00:00 2001 From: martin f. krafft Date: Sun, 12 Feb 2017 10:19:02 +0100 Subject: Initial checkin of ctrlact script Signed-off-by: martin f. krafft --- scripts/ctrlact.pl | 510 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 510 insertions(+) create mode 100644 scripts/ctrlact.pl (limited to 'scripts') diff --git a/scripts/ctrlact.pl b/scripts/ctrlact.pl new file mode 100644 index 0000000..5bc807e --- /dev/null +++ b/scripts/ctrlact.pl @@ -0,0 +1,510 @@ +# ctrlact.pl — Irssi script for fine-grained control of activity indication +# +# © 2017 martin f. krafft +# Released under the MIT licence. +# +### Usage: +# +# /script load ctrlact +# +# If you like a busy activity statusbar, this script is not for you. +# +# If, on the other hand, you don't care about most activity, but you do want +# the ability to define per-item and per-window, what level of activity should +# trigger a change in the statusbar, then ctrlact might be for you. +# +# For instance, you might never want to be disturbed by activity in any +# channel, unless someone highlights you. However, you do want all activity +# in queries, as well as an indication about any chatter in your company +# channels. The following ctrlact map would do this for you: +# +# channel /^#myco-/ messages +# channel * hilights +# query * all +# +# These three lines would be interpreted/read as: +# "only messages or higher in a channel matching /^#myco-/ should trigger act" +# "in all other channels, only hilights (or higher) should trigger act" +# "messages of all levels should trigger act in queries" +# +# The activity level in the third column is thus to be interpreted as +# "the minimum level of activity that will trigger an indication" +# +# Loading this script per-se should not change anything, except it will create +# ~/.irssi/ctrlact with some informational content, including the defaults and +# some examples. +# +# The four activity levels are, and you can use either the words, or the +# integers in the map. +# +# all (data_level: 1) +# messages (data_level: 2) +# hilights (data_level: 3) +# none (data_level: 4) +# +# Note that the name is either matched in full and verbatim, or treated like +# a regular expression, if it starts and ends with the same punctuation +# character. The asterisk ('*') is special and simply gets translated to /.*/ +# internally. No other wildcards are supported. +# +# Once you defined your mappings, please don't forget to /ctrlact reload them. +# You can then use the following commands from Irssi to check out the result: +# +# # list all mappings +# /ctrlact list +# +# # query the applicable activity levels, possibly limited to +# # windows/channels/queries +# /ctrlact query name [name, …] [-window|-channel|-query] +# +# # display the applicable level for each window/channel/query +# /ctrlact show [-window|-channel|-query] +# +# There's an interplay between window items and windows here, and you can +# specify mininum activity levels for each. Here are the rules: +# +# 1. if the minimum activity level of a window item (channel or query) is not +# reached, then the window is prevented from indicating activity. +# 2. if traffic in a window item does reach minimum activity level, then the +# minimum activity level of the window is considered, and activity is only +# indicated if the window's minimum activity level is lower. +# +# In general, this means you'd have windows defaulting to 'all', but it might +# come in handy to move window items to windows with min.levels of 'hilights' +# or even 'none' in certain cases, to further limit activity indication for +# them. +# +# You can use the Irssi settings activity_msg_level and activity_hilight_level +# to specify which IRC levels will be considered messages and hilights. Note +# that if an activity indication is inhibited, then there also won't be +# a beep (cf. beep_msg_level). +# +### Settings: +# +# /set ctrlact_map_file [~/.irssi/ctrlact] +# Controls where the activity control map will be read from (and saved to) +# +# /set ctrlact_fallback_(channel|query|window)_threshold [1] +# Controls the lowest data level that will trigger activity for channels, +# queries, and windows respectively, if no applicable mapping could be +# found. +# +# /set ctrlact_debug [off] +# Turns on debug output. Not that this may itself be buggy, so please don't +# use it unless you really need it. +# +### To-do: +# +# - figure out interplay with activity_hide_level +# - /ctrlact add/delete/move and /ctrlact save, maybe +# - ability to add a server tag to an item name to make matches more specific +# - make beep inhibition configurable +# - completion for commands +# +use strict; +use warnings; +use Irssi; +use Text::ParseWords; + +our $VERSION = '1.0'; + +our %IRSSI = ( + authors => 'martin f. krafft', + contact => 'madduck@madduck.net', + name => 'ctrlact', + description => 'allows per-channel control over activity indication', + license => 'MIT', + changed => '2017-02-12' +); + +### DEFAULTS AND SETTINGS ###################################################### + +my $debug = 0; +my $map_file = Irssi::get_irssi_dir()."/ctrlact"; +my $fallback_channel_threshold = 1; +my $fallback_query_threshold = 1; +my $fallback_window_threshold = 1; + +Irssi::settings_add_str('ctrlact', 'ctrlact_map_file', $map_file); +Irssi::settings_add_bool('ctrlact', 'ctrlact_debug', $debug); +Irssi::settings_add_int('ctrlact', 'ctrlact_fallback_channel_threshold', $fallback_channel_threshold); +Irssi::settings_add_int('ctrlact', 'ctrlact_fallback_query_threshold', $fallback_query_threshold); +Irssi::settings_add_int('ctrlact', 'ctrlact_fallback_window_threshold', $fallback_window_threshold); + +sub sig_setup_changed { + $debug = Irssi::settings_get_bool('ctrlact_debug'); + $map_file = Irssi::settings_get_str('ctrlact_map_file'); + $fallback_channel_threshold = Irssi::settings_get_int('ctrlact_fallback_channel_threshold'); + $fallback_query_threshold = Irssi::settings_get_int('ctrlact_fallback_query_threshold'); + $fallback_window_threshold = Irssi::settings_get_int('ctrlact_fallback_window_threshold'); +} +Irssi::signal_add('setup changed', \&sig_setup_changed); +sig_setup_changed(); + +my $changed_since_last_save = 0; + +my @DATALEVEL_KEYWORDS = ('all', 'messages', 'hilights', 'none'); + +### HELPERS #################################################################### + +my $_inhibit_debug_activity = 0; +sub debugprint { + return unless $debug; + my ($msg, @rest) = @_; + $_inhibit_debug_activity = 1; + Irssi::print("ctrlact debug: ".$msg); + $_inhibit_debug_activity = 0; +} + +sub error { + my ($msg) = @_; + Irssi::print("ctrlact: ERROR: $msg", MSGLEVEL_CLIENTERROR); +} + +my @window_thresholds; +my @channel_thresholds; +my @query_thresholds; + +sub match { + my ($pat, $text) = @_; + my $npat = ($pat eq '*') ? '/.*/' : $pat; + if ($npat =~ m/^(\W)(.+)\1$/) { + my $re = qr/$2/; + $pat = $2 unless $pat eq '*'; + return $pat if $text =~ /$re/i; + } + else { + return $pat if lc($text) eq lc($npat); + } + return 0; +} + +sub to_data_level { + my ($kw) = @_; + return $1 if $kw =~ m/^(\d+)$/; + foreach my $i (2..4) { + my $matcher = qr/^$DATALEVEL_KEYWORDS[5-$i]$/; + return 6-$i if $kw =~ m/$matcher/i; + } + return 1; +} + +sub from_data_level { + my ($dl) = @_; + die "Invalid numeric data level: $dl" unless $dl =~ m/^([1-4])$/; + return $DATALEVEL_KEYWORDS[$dl-1]; +} + +sub walk_match_array { + my ($name, $type, @arr) = @_; + foreach my $pair (@arr) { + my $match = match($pair->[0], $name); + next unless $match; + my $result = to_data_level($pair->[1]); + my $tresult = from_data_level($result); + $name = '(unnamed)' unless length $name; + debugprint("$name ($type) matches '$match' → '$tresult' ($result)"); + return $result + } + return -1; +} + +sub get_mappings_table { + my (@arr) = @_; + my @ret = (); + for (my $i = 0; $i < @arr; $i++) { + push @ret, sprintf("%4d: %-40s %-10s", $i, $arr[$i]->[0], $arr[$i]->[1]); + } + return join("\n", @ret); +} + +sub get_specific_threshold { + my ($type, $name) = @_; + $type = lc($type); + if ($type eq 'window') { + return walk_match_array($name, $type, @window_thresholds); + } + elsif ($type eq 'channel') { + return walk_match_array($name, $type, @channel_thresholds); + } + elsif ($type eq 'query') { + return walk_match_array($name, $type, @query_thresholds); + } + else { + die "ctrlact: can't look up threshold for type: $type"; + } +} + +sub get_item_threshold { + my ($chattype, $type, $name) = @_; + my $ret = get_specific_threshold($type, $name); + return $ret if $ret > 0; + return ($type eq 'CHANNEL') ? $fallback_channel_threshold : $fallback_query_threshold; +} + +sub get_win_threshold { + my ($name) = @_; + my $ret = get_specific_threshold('window', $name); + return ($ret > 0) ? $ret : $fallback_window_threshold; +} + +sub print_levels_for_all { + my ($type, @arr) = @_; + Irssi::print("ctrlact: $type mappings:"); + for (my $i = 0; $i < @arr; $i++) { + my $name = $arr[$i]->{'name'}; + my $t = get_specific_threshold($type, $name); + my $c = ($type eq 'window') ? $arr[$i]->{'refnum'} : $i; + printf CLIENTCRAP "%4d: %-40s → %d (%s)", $c, $name, $t, from_data_level($t); + } +} + +### HILIGHT SIGNAL HANDLERS #################################################### + +my $_inhibit_bell = 0; +my $_inhibit_window = 0; + +sub maybe_inhibit_witem_hilight { + my ($witem, $oldlevel) = @_; + return unless $witem; + $oldlevel = 0 unless $oldlevel; + my $newlevel = $witem->{'data_level'}; + return if ($newlevel <= $oldlevel); + + $_inhibit_window = 0; + $_inhibit_bell = 0; + my $wichattype = $witem->{'chat_type'}; + my $witype = $witem->{'type'}; + my $winame = $witem->{'name'}; + my $threshold = get_item_threshold($wichattype, $witype, $winame); + my $inhibit = $newlevel > 0 && $newlevel < $threshold; + debugprint("$winame: witem $wichattype:$witype:\"$winame\" $oldlevel → $newlevel (".($inhibit ? "< $threshold, inhibit" : ">= $threshold, pass").')'); + if ($inhibit) { + Irssi::signal_stop(); + $_inhibit_bell = 1; + $_inhibit_window = $witem->window(); + } +} +Irssi::signal_add_first('window item hilight', \&maybe_inhibit_witem_hilight); + +sub inhibit_win_hilight { + my ($win) = @_; + Irssi::signal_stop(); + Irssi::signal_emit('window dehilight', $win); +} + +sub maybe_inhibit_win_hilight { + my ($win, $oldlevel) = @_; + return unless $win; + if ($_inhibit_debug_activity) { + inhibit_win_hilight($win); + } + elsif ($_inhibit_window && $win->{'refnum'} == $_inhibit_window->{'refnum'}) { + inhibit_win_hilight($win); + } + else { + $oldlevel = 0 unless $oldlevel; + my $newlevel = $win->{'data_level'}; + return if ($newlevel <= $oldlevel); + + my $wname = $win->{'name'}; + my $threshold = get_win_threshold($wname); + my $inhibit = $newlevel > 0 && $newlevel < $threshold; + debugprint(($wname?$wname:'(unnamed)').": window \"$wname\" $oldlevel → $newlevel (".($inhibit ? "< $threshold, inhibit" : ">= $threshold, pass").')'); + inhibit_win_hilight($win) if $inhibit; + } +} +Irssi::signal_add_first('window hilight', \&maybe_inhibit_win_hilight); + +sub maybe_inhibit_beep { + Irssi::signal_stop() if $_inhibit_bell; +} +Irssi::signal_add_first('beep', \&maybe_inhibit_beep); + +### SAVING AND LOADING ######################################################### + +sub get_mappings_fh { + my ($filename) = @_; + my $fh; + if (-e $filename) { + open($fh, $filename) || die "Cannot open mappings file: $!"; + } + else { + open($fh, "+>$filename") || die "Cannot create mappings file: $!"; + + my $ftw = from_data_level($fallback_window_threshold); + my $ftc = from_data_level($fallback_channel_threshold); + my $ftq = from_data_level($fallback_query_threshold); + print $fh <<"EOF"; +# ctrlact mappings file (version:$VERSION) +# +# type: window, channel, query +# name: full name to match, /regexp/, or * (for all) +# min.level: none, messages, hilights, all, or 1,2,3,4 +# +# type name min.level + + +# EXAMPLES +# +### only indicate activity in the status window if messages were displayed: +# window (status) messages +# +### never ever indicate activity for any item bound to this window: +# window oubliette none +# +### indicate activity on all messages in debian-related channels: +# channel /^#debian/ messages +# +### display any text (incl. joins etc.) for the '#madduck' channel: +# channel #madduck all +# +### otherwise ignore everything in channels, unless a hilight is triggered: +# channel * hilights +# +### make somebot only get your attention if they hilight you: +# query somebot hilights +# +### otherwise we want to see everything in queries: +# query * all + +# DEFAULTS: +# window * $ftw +# channel * $ftc +# query * $ftq + +# vim:noet:tw=0:ts=16 +EOF + Irssi::print("ctrlact: created new/empty mappings file: $filename"); + } + return $fh; +} + +sub load_mappings { + my ($filename) = @_; + @window_thresholds = @channel_thresholds = @query_thresholds = (); + my $fh = get_mappings_fh($filename); + while (<$fh>) { + next if m/^\s*(?:#|$)/; + m/^\s*(\S+)\s+(\S+)\s+(\S+)\s*$/; + push @window_thresholds, [$2, $3] if match($1, 'window'); + push @channel_thresholds, [$2, $3] if match($1, 'channel'); + push @query_thresholds, [$2, $3] if match($1, 'query'); + } + close($fh) || die "Cannot close mappings file: $!"; +} + +sub cmd_load { + Irssi::print("ctrlact: loading mappings from $map_file"); + load_mappings($map_file); + $changed_since_last_save = 0; +} + +sub cmd_save { + error("saving not yet implemented"); + return 1; +} + +sub cmd_list { + Irssi::print("ctrlact: window mappings"); + print CLIENTCRAP get_mappings_table(@window_thresholds); + Irssi::print("ctrlact: channel mappings"); + print CLIENTCRAP get_mappings_table(@channel_thresholds); + Irssi::print("ctrlact: query mappings"); + print CLIENTCRAP get_mappings_table(@query_thresholds); +} + +sub parse_args { + my (@args) = @_; + my @words = (); + my $typewasset = 0; + my $max = 0; + my $type = undef; + foreach my $arg (@args) { + if ($arg =~ m/^-(windows?|channels?|quer(?:ys?|ies))/) { + if ($typewasset) { + error("can't specify -$1 after -$type"); + return 1; + } + $type = 'window' if $1 =~ m/^w/; + $type = 'channel' if $1 =~ m/^c/; + $type = 'query' if $1 =~ m/^q/; + $typewasset = 1 + } + elsif ($arg =~ m/^-/) { + error("Unknown argument: $arg"); + } + else { + push @words, $arg; + $max = length $arg if length $arg > $max; + } + } + return ($type, $max, @words); +} + +sub cmd_query { + my ($data, $server, $item) = @_; + my @args = shellwords($data); + my ($type, $max, @words) = parse_args(@args); + $type = $type // 'channel'; + foreach my $word (@words) { + my $t = get_specific_threshold($type, $word); + printf CLIENTCRAP "ctrlact $type map: %*s → %d (%s)", $max, $word, $t, from_data_level($t); + } +} + +sub cmd_show { + my ($data, $server, $item) = @_; + my @args = shellwords($data); + my ($type, $max, @words) = parse_args(@args); + $type = $type // 'all'; + + if ($type eq 'channel' or $type eq 'all') { + print_levels_for_all('channel', Irssi::channels()); + } + if ($type eq 'query' or $type eq 'all') { + print_levels_for_all('query', Irssi::queries()); + } + if ($type eq 'window' or $type eq 'all') { + print_levels_for_all('window', Irssi::windows()); + } +} + +sub autosave { + cmd_save() if ($changed_since_last_save); +} + +sub UNLOAD { + autosave(); +} + +Irssi::signal_add('setup saved', \&autosave); + +Irssi::command_bind('ctrlact help',\&cmd_help); +Irssi::command_bind('ctrlact reload',\&cmd_load); +Irssi::command_bind('ctrlact load',\&cmd_load); +Irssi::command_bind('ctrlact save',\&cmd_save); +Irssi::command_bind('ctrlact list',\&cmd_list); +Irssi::command_bind('ctrlact query',\&cmd_query); +Irssi::command_bind('ctrlact show',\&cmd_show); + +Irssi::command_bind('ctrlact' => sub { + my ( $data, $server, $item ) = @_; + $data =~ s/\s+$//g; + if ($data) { + Irssi::command_runsub('ctrlact', $data, $server, $item); + } + else { + cmd_help(); + } + } +); +Irssi::command_bind('help', sub { + $_[0] =~ s/\s+$//g; + return unless $_[0] eq 'ctrlact'; + cmd_help(); + Irssi::signal_stop(); + } +); + +cmd_load(); -- cgit v1.2.3 From f874b2743ec6455d9ccb6d17f219d8041e1c5d10 Mon Sep 17 00:00:00 2001 From: martin f. krafft Date: Mon, 13 Feb 2017 08:14:12 +0100 Subject: Make inhibiting the beep configurable Signed-off-by: martin f. krafft --- scripts/ctrlact.pl | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'scripts') diff --git a/scripts/ctrlact.pl b/scripts/ctrlact.pl index 5bc807e..0e471d0 100644 --- a/scripts/ctrlact.pl +++ b/scripts/ctrlact.pl @@ -77,7 +77,7 @@ # You can use the Irssi settings activity_msg_level and activity_hilight_level # to specify which IRC levels will be considered messages and hilights. Note # that if an activity indication is inhibited, then there also won't be -# a beep (cf. beep_msg_level). +# a beep (cf. beep_msg_level), unless you toggle ctrlmap_inhibit_beep. # ### Settings: # @@ -89,6 +89,10 @@ # queries, and windows respectively, if no applicable mapping could be # found. # +# /set ctrlact_inhibit_beep [on] +# If an activity wouldn't be indicated, also inhibit the beep/bell. Turn +# this off if you want the bell anyway. +# # /set ctrlact_debug [off] # Turns on debug output. Not that this may itself be buggy, so please don't # use it unless you really need it. @@ -98,7 +102,6 @@ # - figure out interplay with activity_hide_level # - /ctrlact add/delete/move and /ctrlact save, maybe # - ability to add a server tag to an item name to make matches more specific -# - make beep inhibition configurable # - completion for commands # use strict; @@ -124,12 +127,14 @@ my $map_file = Irssi::get_irssi_dir()."/ctrlact"; my $fallback_channel_threshold = 1; my $fallback_query_threshold = 1; my $fallback_window_threshold = 1; +my $inhibit_beep = 1; Irssi::settings_add_str('ctrlact', 'ctrlact_map_file', $map_file); Irssi::settings_add_bool('ctrlact', 'ctrlact_debug', $debug); Irssi::settings_add_int('ctrlact', 'ctrlact_fallback_channel_threshold', $fallback_channel_threshold); Irssi::settings_add_int('ctrlact', 'ctrlact_fallback_query_threshold', $fallback_query_threshold); Irssi::settings_add_int('ctrlact', 'ctrlact_fallback_window_threshold', $fallback_window_threshold); +Irssi::settings_add_bool('ctrlact', 'ctrlact_inhibit_beep', $inhibit_beep); sub sig_setup_changed { $debug = Irssi::settings_get_bool('ctrlact_debug'); @@ -137,6 +142,7 @@ sub sig_setup_changed { $fallback_channel_threshold = Irssi::settings_get_int('ctrlact_fallback_channel_threshold'); $fallback_query_threshold = Irssi::settings_get_int('ctrlact_fallback_query_threshold'); $fallback_window_threshold = Irssi::settings_get_int('ctrlact_fallback_window_threshold'); + $inhibit_beep = Irssi::settings_get_bool('ctrlact_inhibit_beep'); } Irssi::signal_add('setup changed', \&sig_setup_changed); sig_setup_changed(); @@ -261,7 +267,7 @@ sub print_levels_for_all { ### HILIGHT SIGNAL HANDLERS #################################################### -my $_inhibit_bell = 0; +my $_inhibit_beep = 0; my $_inhibit_window = 0; sub maybe_inhibit_witem_hilight { @@ -272,7 +278,7 @@ sub maybe_inhibit_witem_hilight { return if ($newlevel <= $oldlevel); $_inhibit_window = 0; - $_inhibit_bell = 0; + $_inhibit_beep = 0; my $wichattype = $witem->{'chat_type'}; my $witype = $witem->{'type'}; my $winame = $witem->{'name'}; @@ -281,7 +287,9 @@ sub maybe_inhibit_witem_hilight { debugprint("$winame: witem $wichattype:$witype:\"$winame\" $oldlevel → $newlevel (".($inhibit ? "< $threshold, inhibit" : ">= $threshold, pass").')'); if ($inhibit) { Irssi::signal_stop(); - $_inhibit_bell = 1; + # the rhval comes from config, so if the user doesn't want the + # bell inhibited, this is effectively a noop. + $_inhibit_beep = $inhibit_beep; $_inhibit_window = $witem->window(); } } @@ -317,7 +325,7 @@ sub maybe_inhibit_win_hilight { Irssi::signal_add_first('window hilight', \&maybe_inhibit_win_hilight); sub maybe_inhibit_beep { - Irssi::signal_stop() if $_inhibit_bell; + Irssi::signal_stop() if $_inhibit_beep; } Irssi::signal_add_first('beep', \&maybe_inhibit_beep); -- cgit v1.2.3 From 6ea316d2d74f5b55bc4ef8ef8e43ec8ed0132575 Mon Sep 17 00:00:00 2001 From: dequis Date: Fri, 10 Feb 2017 17:59:58 -0300 Subject: hilightwin.pl: Add hilightwin_ignore_targets setting Setting parser inspired by irssi's own strarray_find_dest() --- scripts/hilightwin.pl | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'scripts') diff --git a/scripts/hilightwin.pl b/scripts/hilightwin.pl index 7d70317..2e407fa 100644 --- a/scripts/hilightwin.pl +++ b/scripts/hilightwin.pl @@ -11,7 +11,7 @@ use Irssi; use POSIX; use vars qw($VERSION %IRSSI); -$VERSION = "0.04"; +$VERSION = "0.05"; %IRSSI = ( authors => "Timo \'cras\' Sirainen, Mark \'znx\' Sangster", contact => "tss\@iki.fi, znxster\@gmail.com", @@ -22,6 +22,26 @@ $VERSION = "0.04"; changed => "Sun May 25 18:59:57 BST 2008" ); +sub is_ignored { + my ($dest) = @_; + + my @ignore = split(' ', Irssi::settings_get_str('hilightwin_ignore_targets')); + return 0 if (!@ignore); + + my %targets = map { $_ => 1 } @ignore; + + return 1 if exists($targets{"*"}); + return 1 if exists($targets{$dest->{target}}); + + if ($dest->{server}) { + my $tag = $dest->{server}->{tag}; + return 1 if exists($targets{$tag . "/*"}); + return 1 if exists($targets{$tag . "/" . $dest->{target}}); + } + + return 0; +} + sub sig_printtext { my ($dest, $text, $stripped) = @_; @@ -33,7 +53,8 @@ sub sig_printtext { if( ($dest->{level} & ($opt)) && - ($dest->{level} & MSGLEVEL_NOHILIGHT) == 0 + ($dest->{level} & MSGLEVEL_NOHILIGHT) == 0 && + (!is_ignored($dest)) ) { my $window = Irssi::window_find_name('hilight'); @@ -49,6 +70,7 @@ my $window = Irssi::window_find_name('hilight'); Irssi::print("Create a window named 'hilight'") if (!$window); Irssi::settings_add_bool('hilightwin','hilightwin_showprivmsg',1); +Irssi::settings_add_str('hilightwin', 'hilightwin_ignore_targets', ''); Irssi::signal_add('print text', 'sig_printtext'); -- cgit v1.2.3 From 84f06260ddf6565609b707c6cbb3d6e16c019f8e Mon Sep 17 00:00:00 2001 From: Stefan Völkel Date: Mon, 13 Feb 2017 17:21:07 +0100 Subject: chanact: update to v0.6.0 --- scripts/chanact.pl | 181 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 107 insertions(+), 74 deletions(-) (limited to 'scripts') diff --git a/scripts/chanact.pl b/scripts/chanact.pl index ee6ef3c..4a42364 100644 --- a/scripts/chanact.pl +++ b/scripts/chanact.pl @@ -1,20 +1,25 @@ use Irssi 20020101.0001 (); + use strict; -# FIXME use warning; +use warnings; + use Irssi::TextUI; use vars qw($VERSION %IRSSI); -$VERSION = "0.5.15"; +$VERSION = "0.6.0"; %IRSSI = ( - authors => 'BC-bd, Veli', - contact => 'bd@bc-bd.org, veli@piipiip.net', + authors => 'BC-bd', + contact => 'bd@bc-bd.org', name => 'chanact', description => 'Adds new powerful and customizable [Act: ...] item (chanelnames,modes,alias). Lets you give alias characters to windows so that you can select those with meta-', license => 'GNU GPLv2 or later', - url => 'https://bc-bd.org/svn/repos/irssi/chanact' + url => 'http://bc-bd.org/blog/irssi/' ); +# Please send patches / pull requests to the email listed unter contact above +# and not to the irssi/scripts.irssi.org repository on github. + # Adds new powerful and customizable [Act: ...] item (chanelnames,modes,alias). # Lets you give alias characters to windows so that you can select those with # meta-. @@ -27,19 +32,22 @@ $VERSION = "0.5.15"; # Contributors ######### # -# veli@piipiip.net /window_alias code -# qrczak@knm.org.pl chanact_abbreviate_names -# qerub@home.se Extra chanact_show_mode and chanact_chop_status +# veli@piipiip.net original /window_alias code +# qrczak@knm.org.pl chanact_abbreviate_names +# qerub@home.se Extra chanact_show_mode and chanact_chop_status # madduck@madduck.net Better channel aliasing (case-sensitive, cross-network) # chanact_filter_windowlist basis -# Jan 'jast' Krueger , 2004-06-22 -# Ivo Timmermans win->{hilight} patch -# Trevor 'tee' Slocum Case-insensitive aliases, bugfix -# +# jast@heapsort.de Updated documentation +# ivo@o2w.nl win->{hilight} patch +# Bazerka base patch for sorting by level change +# updated documentation +# mrtnpaolo@gmail.com rename commands +# tslocum@gmail.com Case-insensitive aliases +# ######### # USAGE ### -# +# # copy the script to ~/.irssi/scripts/ # # In irssi: @@ -61,11 +69,11 @@ $VERSION = "0.5.15"; # aliases to your windows. Go to the window you want to give the alias to # and say: # -# /window_alias +# /chanact_window_alias # # You can remove the aliases with from an aliased window: # -# /window_unalias +# /chanact_window_unalias # # To see a list of your windows use: # @@ -100,11 +108,11 @@ $VERSION = "0.5.15"; # $H : Start highlightning # $S : Stop highlightning # * example: -# +# # /set chanact_display $H$N:$M.$S$C -# +# # will give you on #irssi.de if you have voice -# +# # [3:+.#irssi.de] # # with '3:+.' highlighted and the channel name printed in regular color @@ -113,12 +121,26 @@ $VERSION = "0.5.15"; # * ON : Aliases are case-sensitive # * OFF : Aliases are case-insensitive # -# Existing aliases must be reapplied after switching to case-insensitive. +# Existing aliases must be reapplied after changing this option +# +# Switching from OFF to ON _after_ aliases have been defined, and +# then redefining or changing an existing alias will leave some +# bindings behind, e.g. +# +# /set chanact_case_sensitive OFF +# /chanact_window_alias x +# +# -> window reachable with meta-x/meta-X +# +# /set chanact_case_sensitive ON +# /chanact_window_alias y +# +# -> window reachable with meta-y/meta-X # # /set chanact_display_alias # as 'chanact_display' but is used if the window has an alias and # 'chanact_show_alias' is set to on. -# +# # /set chanact_show_names # * ON : show the channelnames after the number/alias # * OFF : don't show the names @@ -141,7 +163,7 @@ $VERSION = "0.5.15"; # # /set chanact_autorenumber # * ON : Move the window automatically to first available slot -# starting from "chanact_renumber_start" when assigning +# starting from "chanact_renumber_start" when assigning # an alias to window. Also moves the window back to a # first available slot from refnum 1 when the window # loses it's alias. @@ -160,7 +182,7 @@ $VERSION = "0.5.15"; # beginning of the channel name. # * example : # To shorten a lot of debian channels: -# +# # /set chanact_remove_prefix deb(ian.(devel-)?)? # # /set chanact_filter @@ -174,7 +196,7 @@ $VERSION = "0.5.15"; # * : space-separated list of windows for which to use # chanact_filter_windowlist_level instead of # chanact_filter. -# +# # Alternatively, an entry can be postfixed with # a comma (',') and the level to use for that # window. @@ -232,15 +254,14 @@ sub expand { # but we dont need to recreate the item every time so we first # check if something has changed and only then we recreate the string # this might just save some cycles -# FIXME implement $get_size_only check, and user $item->{min|max-size} sub chanact { my ($item, $get_size_only) = @_; if ($needRemake) { remake(); } - - $item->default_handler($get_size_only, $actString, undef, 1); + + $item->default_handler($get_size_only, $actString, "", 1); } # build a hash to easily access special levels based on @@ -268,13 +289,13 @@ sub calculate_levels(@) { my %levels; foreach my $win (@windows) { - # FIXME we could use the next statements to weed out entries in - # @windows that we will not need later on !ref($win) && next; my $name = $win->get_active_name; + # skip nameless windows + next unless $name; - if (exists($matches{$name})) { + if ($name && exists($matches{$name})) { $levels{$name} = $matches{$name}; } else { $levels{$name} = $default; @@ -293,7 +314,7 @@ sub calculate_levels(@) { # this is the real creation method sub remake() { my ($afternumber,$finish,$hilight,$mode,$number,$display,@windows); - my $separator = Irssi::settings_get_str('chanact_separator'); + my $separator = Irssi::settings_get_str('chanact_separator'); my $abbrev = Irssi::settings_get_int('chanact_abbreviate_names'); my $remove_prefix = Irssi::settings_get_str('chanact_remove_prefix'); my $remove_hash = Irssi::settings_get_bool('chanact_remove_hash'); @@ -317,6 +338,8 @@ sub remake() { $type = $active->{type} if $active; my $name = $win->get_active_name; + # skip windows without a name + next unless $name; my $filter_level = $type eq 'QUERY' ? $levels{'@QUERIES'} : $levels{$name}; @@ -334,7 +357,7 @@ sub remake() { && $name eq "(status)") { $name = "S"; } - + # check if we should show the mode $mode = ""; if ($type eq "CHANNEL") { @@ -346,7 +369,7 @@ sub remake() { my $nick = $channel->nick_find($server->{nick}); !ref($nick) && next; - + if ($nick->{op}) { $mode = "@"; } elsif ($nick->{voice}) { @@ -377,13 +400,13 @@ sub remake() { $name =~ s/^[&#+!=]//; } - if (Irssi::settings_get_bool('chanact_show_alias') == 1 && + if (Irssi::settings_get_bool('chanact_show_alias') == 1 && $win->{name} =~ /^([a-zA-Z+]):(.+)$/) { $number = "$1"; - $display = Irssi::settings_get_str('chanact_display_alias'); + $display = Irssi::settings_get_str('chanact_display_alias'); } else { $number = $win->{refnum}; - $display = Irssi::settings_get_str('chanact_display'); + $display = Irssi::settings_get_str('chanact_display'); } # fixup { and } in nicks, those are used by irssi themes @@ -396,7 +419,7 @@ sub remake() { if ($actString ne "") { # Remove the last separator $actString =~ s/$separator$//; - + $actString = "{sb ".Irssi::settings_get_str('chanact_header').$actString."}"; } @@ -429,12 +452,33 @@ sub setup_changed { chanactHasChanged(); } +# Remove key binding for current window +sub unbind { + my ($name, $server) = @_; + + # chanact'ified windows have a name like this: X:servertag/name. if we + # can't find anything like this we return and do not unbind nor renumber + # anything + my ($key, $tag) = split(/:/, $name); + return unless $tag; + + ($tag, $name) = split('/', $tag); + return unless (length($key) == 1); + + if (Irssi::settings_get_bool('chanact_case_sensitive')) { + $server->command("/bind -delete meta-$key"); + } else { + $server->command("/bind -delete meta-" . lc($key)); + $server->command("/bind -delete meta-" . uc($key)); + } +} + # Remove alias sub cmd_window_unalias { - my ($data, $server, $witem, $internal) = @_; + my ($data, $server, $witem) = @_; - if ($data ne '' && !$internal) { - Irssi::print("chanact: /window_unalias does not take any ". + if ($data ne '') { + Irssi::print("chanact: /chanact_window_unalias does not take any ". "parameters, Run it in the window you want to unalias"); return; } @@ -442,24 +486,7 @@ sub cmd_window_unalias { my $win = Irssi::active_win(); my $name = Irssi::active_win()->{name}; - # chanact'ified windows have a name like this: X:servertag/name - my ($key, $tag) = split(/:/, $name); - ($tag, $name) = split('/', $tag); - - # remove alias only of we have a single character keybinding, if we - # haven't the name was not set by chanact, so we won't blindly unset - # stuff - if (length($key) == 1) { - if (Irssi::settings_get_bool('chanact_case_sensitive')) { - $server->command("/bind -delete meta-$data"); - } else { - $server->command("/bind -delete meta-" . lc($data)); - $server->command("/bind -delete meta-" . uc($data)); - } - } elsif (!$internal) { - Irssi::print("chanact: could not determine keybinding. ". - "Won't unbind anything"); - } + unbind($name, $server); # set the windowname back to it's old one. We don't bother checking # for a vaild name here, as we want to remove the current one and if @@ -472,7 +499,7 @@ sub cmd_window_unalias { # we are renumbering, so move the window to the lowest available # refnum. my $refnum = 1; - while (Irssi::window_find_refnum($refnum) ne "") { + while (Irssi::window_find_refnum($refnum)) { $refnum++; } @@ -480,14 +507,13 @@ sub cmd_window_unalias { Irssi::print("chanact: moved wintow to refnum $refnum"); } -# function by veli@piipiip.net # Make an alias sub cmd_window_alias { my ($data, $server, $witem) = @_; my $rn_start = Irssi::settings_get_int('chanact_renumber_start'); unless ($data =~ /^[a-zA-Z+]$/) { - Irssi::print("Usage: /window_alias "); + Irssi::print("Usage: /chanact_window_alias "); return; } @@ -508,23 +534,23 @@ sub cmd_window_alias { $winname = $window->{name}; } - cmd_window_unalias($data, $server, $witem, 1); + unbind($window->{name}, $server); my $winnum = $window->{refnum}; - + if (Irssi::settings_get_bool('chanact_autorenumber') == 1 && $window->{refnum} < $rn_start) { my $old_refnum = $window->{refnum}; $winnum = $rn_start; - + # Find the first available slot and move the window - while (Irssi::window_find_refnum($winnum) ne "") { $winnum++; } + while (Irssi::window_find_refnum($winnum)) { $winnum++; } $window->set_refnum($winnum); - + Irssi::print("Moved the window from $old_refnum to $winnum"); } - + my $winserver = $window->{active_server}->{tag}; my $winhandle = "$winserver/$winname"; # cmd_window_unalias relies on a certain format here @@ -543,8 +569,8 @@ sub cmd_window_alias { $needRemake = 1; # Window alias command -Irssi::command_bind('window_alias','cmd_window_alias'); -Irssi::command_bind('window_unalias','cmd_window_unalias'); +Irssi::command_bind('chanact_window_alias','cmd_window_alias'); +Irssi::command_bind('chanact_window_unalias','cmd_window_unalias'); # our config item Irssi::settings_add_str('chanact', 'chanact_display', '$H$N:$M$C$S'); @@ -587,8 +613,15 @@ Irssi::signal_add('nick mode changed', 'chanactHasChanged'); # # Changelog # -# 0.5.15 -# - fixed unbind error when aliasing a previously un-aliased window +# 0.6.0 +# - fixed URL +# - now with 'use warnings' +# - fix cmd_window_unalias call from cmd_window_alias +# - fix Use of uninitialized value $name in hash element warnings +# - return from cmd_window_unalias if the window has no valid +# chanact'ified name +# - rename /window_(un)alias to /chanact_window_(un)alias +# - fix refnum renumber race # - added setting to allow case-insensitive window aliases # # 0.5.14 @@ -645,10 +678,10 @@ Irssi::signal_add('nick mode changed', 'chanactHasChanged'); # # 0.5.6 # - fixed a bug (#1) reported by Wouter Coekaert -# +# # 0.5.5 # - some speedups from David Leadbeater -# +# # # 0.5.4 # - added help for chanact_display_alias @@ -662,7 +695,7 @@ Irssi::signal_add('nick mode changed', 'chanactHasChanged'); # - removed unused chanact_show_name settings (thx to Qerub) # - fixed $mode display # - guarded reference operations to (hopefully) fix errors on server disconnect -# +# # 0.5.1 # - small typo fixed # @@ -670,7 +703,7 @@ Irssi::signal_add('nick mode changed', 'chanactHasChanged'); # - changed chanact_show_mode to chanact_display. reversed changes from # Qerub through that, but kept funcionality. # - removed chanact_color_all since it is no longer needed -# +# # 0.4.3 # - changes by Qerub # + added chanact_show_mode to show the mode just before the channel name -- cgit v1.2.3 From 98c69f9c50bda34342f3ea6ff0b5aae1f7dad2ac Mon Sep 17 00:00:00 2001 From: martin f. krafft Date: Mon, 13 Feb 2017 08:57:36 +0100 Subject: React to setup reread signal Signed-off-by: martin f. krafft --- scripts/ctrlact.pl | 2 ++ 1 file changed, 2 insertions(+) (limited to 'scripts') diff --git a/scripts/ctrlact.pl b/scripts/ctrlact.pl index 0e471d0..2756244 100644 --- a/scripts/ctrlact.pl +++ b/scripts/ctrlact.pl @@ -145,6 +145,7 @@ sub sig_setup_changed { $inhibit_beep = Irssi::settings_get_bool('ctrlact_inhibit_beep'); } Irssi::signal_add('setup changed', \&sig_setup_changed); +Irssi::signal_add('setup reread', \&sig_setup_changed); sig_setup_changed(); my $changed_since_last_save = 0; @@ -487,6 +488,7 @@ sub UNLOAD { } Irssi::signal_add('setup saved', \&autosave); +Irssi::signal_add('setup reread', \&cmd_load); Irssi::command_bind('ctrlact help',\&cmd_help); Irssi::command_bind('ctrlact reload',\&cmd_load); -- cgit v1.2.3 From 1dacfd9fac96f478f31d6f54f252dae968064871 Mon Sep 17 00:00:00 2001 From: martin f. krafft Date: Mon, 13 Feb 2017 11:11:14 +0100 Subject: Single-line debug output Signed-off-by: martin f. krafft --- scripts/ctrlact.pl | 49 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 17 deletions(-) (limited to 'scripts') diff --git a/scripts/ctrlact.pl b/scripts/ctrlact.pl index 2756244..b7e694c 100644 --- a/scripts/ctrlact.pl +++ b/scripts/ctrlact.pl @@ -155,6 +155,7 @@ my @DATALEVEL_KEYWORDS = ('all', 'messages', 'hilights', 'none'); ### HELPERS #################################################################### my $_inhibit_debug_activity = 0; +use constant DEBUGEVENTFORMAT => "%7s %-22.22s %d %s %d → %-7s (%-8s ← %s)"; sub debugprint { return unless $debug; my ($msg, @rest) = @_; @@ -210,8 +211,7 @@ sub walk_match_array { my $result = to_data_level($pair->[1]); my $tresult = from_data_level($result); $name = '(unnamed)' unless length $name; - debugprint("$name ($type) matches '$match' → '$tresult' ($result)"); - return $result + return ($result, $tresult, $match) } return -1; } @@ -244,15 +244,25 @@ sub get_specific_threshold { sub get_item_threshold { my ($chattype, $type, $name) = @_; - my $ret = get_specific_threshold($type, $name); - return $ret if $ret > 0; - return ($type eq 'CHANNEL') ? $fallback_channel_threshold : $fallback_query_threshold; + my ($ret, $tret, $match) = get_specific_threshold($type, $name); + return ($ret, $tret, $match) if $ret > 0; + if ($type eq 'CHANNEL') { + return ($fallback_channel_threshold, from_data_level($fallback_channel_threshold), '[default]'); + } + else { + return ($fallback_query_threshold, from_data_level($fallback_query_threshold), '[default]'); + } } sub get_win_threshold { my ($name) = @_; - my $ret = get_specific_threshold('window', $name); - return ($ret > 0) ? $ret : $fallback_window_threshold; + my ($ret, $tret, $match) = get_specific_threshold('window', $name); + if ($ret > 0) { + return ($ret, $tret, $match); + } + else { + return ($fallback_window_threshold, from_data_level($fallback_window_threshold), '[default]'); + } } sub print_levels_for_all { @@ -260,9 +270,9 @@ sub print_levels_for_all { Irssi::print("ctrlact: $type mappings:"); for (my $i = 0; $i < @arr; $i++) { my $name = $arr[$i]->{'name'}; - my $t = get_specific_threshold($type, $name); + my ($t, $tt, $match) = get_specific_threshold($type, $name); my $c = ($type eq 'window') ? $arr[$i]->{'refnum'} : $i; - printf CLIENTCRAP "%4d: %-40s → %d (%s)", $c, $name, $t, from_data_level($t); + printf CLIENTCRAP "%4d: %-40s → %d (%s; match:%s)", $c, $name, $t, $tt, $match; } } @@ -283,9 +293,11 @@ sub maybe_inhibit_witem_hilight { my $wichattype = $witem->{'chat_type'}; my $witype = $witem->{'type'}; my $winame = $witem->{'name'}; - my $threshold = get_item_threshold($wichattype, $witype, $winame); - my $inhibit = $newlevel > 0 && $newlevel < $threshold; - debugprint("$winame: witem $wichattype:$witype:\"$winame\" $oldlevel → $newlevel (".($inhibit ? "< $threshold, inhibit" : ">= $threshold, pass").')'); + my ($th, $tth, $match) = get_item_threshold($wichattype, $witype, $winame); + my $inhibit = $newlevel > 0 && $newlevel < $th; + debugprint(sprintf(DEBUGEVENTFORMAT, lc($witype), $winame, $newlevel, + $inhibit ? ('<',$th,'inhibit'):('≥',$th,'pass'), + $tth, $match)); if ($inhibit) { Irssi::signal_stop(); # the rhval comes from config, so if the user doesn't want the @@ -317,9 +329,12 @@ sub maybe_inhibit_win_hilight { return if ($newlevel <= $oldlevel); my $wname = $win->{'name'}; - my $threshold = get_win_threshold($wname); - my $inhibit = $newlevel > 0 && $newlevel < $threshold; - debugprint(($wname?$wname:'(unnamed)').": window \"$wname\" $oldlevel → $newlevel (".($inhibit ? "< $threshold, inhibit" : ">= $threshold, pass").')'); + my ($th, $tth, $match) = get_win_threshold($wname); + my $inhibit = $newlevel > 0 && $newlevel < $th; + debugprint(sprintf(DEBUGEVENTFORMAT, 'window', + $wname?$wname:'(unnamed)', $newlevel, + $inhibit ? ('<',$th,'inhibit'):('≥',$th,'pass'), + $tth, $match)); inhibit_win_hilight($win) if $inhibit; } } @@ -457,8 +472,8 @@ sub cmd_query { my ($type, $max, @words) = parse_args(@args); $type = $type // 'channel'; foreach my $word (@words) { - my $t = get_specific_threshold($type, $word); - printf CLIENTCRAP "ctrlact $type map: %*s → %d (%s)", $max, $word, $t, from_data_level($t); + my ($t, $tt, $match) = get_specific_threshold($type, $word); + printf CLIENTCRAP "ctrlact $type map: %*s → %d (%s, match:%s)", $max, $word, $t, $tt, $match; } } -- cgit v1.2.3 From 4f9d8b3e4e90bb7606cebfb7786c3601df298ccd Mon Sep 17 00:00:00 2001 From: martin f. krafft Date: Wed, 15 Feb 2017 03:08:47 +0100 Subject: Add ability to match on server tag Signed-off-by: martin f. krafft --- scripts/ctrlact.pl | 142 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 89 insertions(+), 53 deletions(-) (limited to 'scripts') diff --git a/scripts/ctrlact.pl b/scripts/ctrlact.pl index b7e694c..6911192 100644 --- a/scripts/ctrlact.pl +++ b/scripts/ctrlact.pl @@ -15,17 +15,19 @@ # # For instance, you might never want to be disturbed by activity in any # channel, unless someone highlights you. However, you do want all activity -# in queries, as well as an indication about any chatter in your company -# channels. The following ctrlact map would do this for you: +# in queries (except on efnet, as well as an indication about any chatter in +# your company channels. The following ctrlact map would do this for you: # -# channel /^#myco-/ messages -# channel * hilights -# query * all +# channel /^#myco-/ messages +# channel * hilights +# query efnet * messages +# query * all # # These three lines would be interpreted/read as: # "only messages or higher in a channel matching /^#myco-/ should trigger act" # "in all other channels, only hilights (or higher) should trigger act" -# "messages of all levels should trigger act in queries" +# "queries on efnet should only trigger act for messages and higher" +# "messages of all levels should trigger act in queries elsewhere" # # The activity level in the third column is thus to be interpreted as # "the minimum level of activity that will trigger an indication" @@ -101,7 +103,6 @@ # # - figure out interplay with activity_hide_level # - /ctrlact add/delete/move and /ctrlact save, maybe -# - ability to add a server tag to an item name to make matches more specific # - completion for commands # use strict; @@ -109,7 +110,7 @@ use warnings; use Irssi; use Text::ParseWords; -our $VERSION = '1.0'; +our $VERSION = '1.1'; our %IRSSI = ( authors => 'martin f. krafft', @@ -117,7 +118,7 @@ our %IRSSI = ( name => 'ctrlact', description => 'allows per-channel control over activity indication', license => 'MIT', - changed => '2017-02-12' + changed => '2017-02-15' ); ### DEFAULTS AND SETTINGS ###################################################### @@ -155,7 +156,7 @@ my @DATALEVEL_KEYWORDS = ('all', 'messages', 'hilights', 'none'); ### HELPERS #################################################################### my $_inhibit_debug_activity = 0; -use constant DEBUGEVENTFORMAT => "%7s %-22.22s %d %s %d → %-7s (%-8s ← %s)"; +use constant DEBUGEVENTFORMAT => "%7s %7.7s %-22.22s %d %s %d → %-7s (%-8s ← %s)"; sub debugprint { return unless $debug; my ($msg, @rest) = @_; @@ -204,13 +205,17 @@ sub from_data_level { } sub walk_match_array { - my ($name, $type, @arr) = @_; - foreach my $pair (@arr) { - my $match = match($pair->[0], $name); - next unless $match; - my $result = to_data_level($pair->[1]); + my ($name, $net, $type, @arr) = @_; + foreach my $quadruplet (@arr) { + my $netmatch = match($quadruplet->[0], $net); + my $match = match($quadruplet->[1], $name); + next unless $netmatch and $match; + + my $result = to_data_level($quadruplet->[2]); my $tresult = from_data_level($result); $name = '(unnamed)' unless length $name; + $match = sprintf('line %-3d = net:%-10.10s name:%s', + $quadruplet->[3], $netmatch, $match); return ($result, $tresult, $match) } return -1; @@ -220,22 +225,23 @@ sub get_mappings_table { my (@arr) = @_; my @ret = (); for (my $i = 0; $i < @arr; $i++) { - push @ret, sprintf("%4d: %-40s %-10s", $i, $arr[$i]->[0], $arr[$i]->[1]); + push @ret, sprintf("%4d: %-10s %-40s %-10s", + $i, $arr[$i]->[0], $arr[$i]->[1], $arr[$i]->[2]); } return join("\n", @ret); } sub get_specific_threshold { - my ($type, $name) = @_; + my ($type, $name, $net) = @_; $type = lc($type); if ($type eq 'window') { - return walk_match_array($name, $type, @window_thresholds); + return walk_match_array($name, $net, $type, @window_thresholds); } elsif ($type eq 'channel') { - return walk_match_array($name, $type, @channel_thresholds); + return walk_match_array($name, $net, $type, @channel_thresholds); } elsif ($type eq 'query') { - return walk_match_array($name, $type, @query_thresholds); + return walk_match_array($name, $net, $type, @query_thresholds); } else { die "ctrlact: can't look up threshold for type: $type"; @@ -243,8 +249,8 @@ sub get_specific_threshold { } sub get_item_threshold { - my ($chattype, $type, $name) = @_; - my ($ret, $tret, $match) = get_specific_threshold($type, $name); + my ($chattype, $type, $name, $net) = @_; + my ($ret, $tret, $match) = get_specific_threshold($type, $name, $net); return ($ret, $tret, $match) if $ret > 0; if ($type eq 'CHANNEL') { return ($fallback_channel_threshold, from_data_level($fallback_channel_threshold), '[default]'); @@ -255,8 +261,8 @@ sub get_item_threshold { } sub get_win_threshold { - my ($name) = @_; - my ($ret, $tret, $match) = get_specific_threshold('window', $name); + my ($name, $net) = @_; + my ($ret, $tret, $match) = get_specific_threshold('window', $name, $net); if ($ret > 0) { return ($ret, $tret, $match); } @@ -270,9 +276,10 @@ sub print_levels_for_all { Irssi::print("ctrlact: $type mappings:"); for (my $i = 0; $i < @arr; $i++) { my $name = $arr[$i]->{'name'}; - my ($t, $tt, $match) = get_specific_threshold($type, $name); - my $c = ($type eq 'window') ? $arr[$i]->{'refnum'} : $i; - printf CLIENTCRAP "%4d: %-40s → %d (%s; match:%s)", $c, $name, $t, $tt, $match; + my $net = $arr[$i]->{'server'}->{'tag'} // ''; + my ($t, $tt, $match) = get_specific_threshold($type, $name, $net); + my $c = ($type eq 'window') ? $arr[$i]->{'refnum'} : $arr[$i]->window()->{'refnum'}; + printf CLIENTCRAP "%4d: %-40.40s → %d (%-8s) match %s", $c, $name, $t, $tt, $match; } } @@ -293,9 +300,10 @@ sub maybe_inhibit_witem_hilight { my $wichattype = $witem->{'chat_type'}; my $witype = $witem->{'type'}; my $winame = $witem->{'name'}; - my ($th, $tth, $match) = get_item_threshold($wichattype, $witype, $winame); + my $witag = $witem->{'server'}->{'tag'} // ''; + my ($th, $tth, $match) = get_item_threshold($wichattype, $witype, $winame, $witag); my $inhibit = $newlevel > 0 && $newlevel < $th; - debugprint(sprintf(DEBUGEVENTFORMAT, lc($witype), $winame, $newlevel, + debugprint(sprintf(DEBUGEVENTFORMAT, lc($witype), $witag, $winame, $newlevel, $inhibit ? ('<',$th,'inhibit'):('≥',$th,'pass'), $tth, $match)); if ($inhibit) { @@ -329,9 +337,10 @@ sub maybe_inhibit_win_hilight { return if ($newlevel <= $oldlevel); my $wname = $win->{'name'}; - my ($th, $tth, $match) = get_win_threshold($wname); + my $wtag = $win->{'server'}->{'tag'} // ''; + my ($th, $tth, $match) = get_win_threshold($wname, $wtag); my $inhibit = $newlevel > 0 && $newlevel < $th; - debugprint(sprintf(DEBUGEVENTFORMAT, 'window', + debugprint(sprintf(DEBUGEVENTFORMAT, 'window', $wtag, $wname?$wname:'(unnamed)', $newlevel, $inhibit ? ('<',$th,'inhibit'):('≥',$th,'pass'), $tth, $match)); @@ -363,39 +372,40 @@ sub get_mappings_fh { # ctrlact mappings file (version:$VERSION) # # type: window, channel, query +# server: the server tag (chatnet) # name: full name to match, /regexp/, or * (for all) # min.level: none, messages, hilights, all, or 1,2,3,4 # -# type name min.level +# type server name min.level # EXAMPLES # ### only indicate activity in the status window if messages were displayed: -# window (status) messages +# window * (status) messages # ### never ever indicate activity for any item bound to this window: -# window oubliette none +# window * oubliette none # -### indicate activity on all messages in debian-related channels: -# channel /^#debian/ messages +### indicate activity on all messages in debian-related channels on OFTC: +# channel oftc /^#debian/ messages # ### display any text (incl. joins etc.) for the '#madduck' channel: -# channel #madduck all +# channel * #madduck all # ### otherwise ignore everything in channels, unless a hilight is triggered: -# channel * hilights +# channel * * hilights # ### make somebot only get your attention if they hilight you: -# query somebot hilights +# query efnet somebot hilights # ### otherwise we want to see everything in queries: -# query * all +# query * * all # DEFAULTS: -# window * $ftw -# channel * $ftc -# query * $ftq +# window * * $ftw +# channel * * $ftc +# query * * $ftq # vim:noet:tw=0:ts=16 EOF @@ -408,12 +418,36 @@ sub load_mappings { my ($filename) = @_; @window_thresholds = @channel_thresholds = @query_thresholds = (); my $fh = get_mappings_fh($filename); + my $firstline = <$fh>; + my $version; + if ($firstline =~ m/^#+\s+ctrlact mappings file \(version:([\d.]+)\)/) { + $version = $1; + } + else { + die "First line of $filename is not a ctrlact header."; + } + + my $nrcols = 4; + if ($version eq $VERSION) { + # current version + } + elsif ($version eq "1.0") { + $nrcols = 3; + } + else { + die "Unsupported version found in $filename: $version" + } + my $linesplitter = '^\s*'.join('\s+', ('(\S+)') x $nrcols).'\s*$'; + my $l = 1; while (<$fh>) { + $l++; next if m/^\s*(?:#|$)/; - m/^\s*(\S+)\s+(\S+)\s+(\S+)\s*$/; - push @window_thresholds, [$2, $3] if match($1, 'window'); - push @channel_thresholds, [$2, $3] if match($1, 'channel'); - push @query_thresholds, [$2, $3] if match($1, 'query'); + my ($type, @matchers) = m/$linesplitter/; + @matchers = ['*', @matchers] if ($version eq "1.0"); + push @matchers, $l; + push @window_thresholds, [@matchers] if match($type, 'window'); + push @channel_thresholds, [@matchers] if match($type, 'channel'); + push @query_thresholds, [@matchers] if match($type, 'query'); } close($fh) || die "Cannot close mappings file: $!"; } @@ -442,6 +476,7 @@ sub parse_args { my (@args) = @_; my @words = (); my $typewasset = 0; + my $tag; my $max = 0; my $type = undef; foreach my $arg (@args) { @@ -455,25 +490,26 @@ sub parse_args { $type = 'query' if $1 =~ m/^q/; $typewasset = 1 } - elsif ($arg =~ m/^-/) { - error("Unknown argument: $arg"); + elsif ($arg =~ m/-(\S+)/) { + $tag = $1; } else { push @words, $arg; $max = length $arg if length $arg > $max; } } - return ($type, $max, @words); + return ($type, $tag, $max, @words); } sub cmd_query { my ($data, $server, $item) = @_; my @args = shellwords($data); - my ($type, $max, @words) = parse_args(@args); + my ($type, $tag, $max, @words) = parse_args(@args); $type = $type // 'channel'; + $tag = $tag // '*'; foreach my $word (@words) { - my ($t, $tt, $match) = get_specific_threshold($type, $word); - printf CLIENTCRAP "ctrlact $type map: %*s → %d (%s, match:%s)", $max, $word, $t, $tt, $match; + my ($t, $tt, $match) = get_specific_threshold($type, $word, $tag); + printf CLIENTCRAP "ctrlact $type map: %s %*s → %d (%s, match:%s)", $tag, $max, $word, $t, $tt, $match; } } -- cgit v1.2.3 From 970d433eaab3402cdb4edb8b67ae5026ad5c15b4 Mon Sep 17 00:00:00 2001 From: martin f. krafft Date: Wed, 15 Feb 2017 04:34:06 +0100 Subject: Lower message level of debug output Signed-off-by: martin f. krafft --- scripts/ctrlact.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/ctrlact.pl b/scripts/ctrlact.pl index 6911192..35e2cd7 100644 --- a/scripts/ctrlact.pl +++ b/scripts/ctrlact.pl @@ -161,7 +161,7 @@ sub debugprint { return unless $debug; my ($msg, @rest) = @_; $_inhibit_debug_activity = 1; - Irssi::print("ctrlact debug: ".$msg); + Irssi::print("ctrlact debug: ".$msg, MSGLEVEL_CRAP); $_inhibit_debug_activity = 0; } -- cgit v1.2.3 From 709c4bc9ef277e3391b115b1b0ed29f55f0d9314 Mon Sep 17 00:00:00 2001 From: martin f. krafft Date: Wed, 15 Feb 2017 04:43:40 +0100 Subject: Print linenumbers in /ctrlact list output Signed-off-by: martin f. krafft --- scripts/ctrlact.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'scripts') diff --git a/scripts/ctrlact.pl b/scripts/ctrlact.pl index 35e2cd7..6a48773 100644 --- a/scripts/ctrlact.pl +++ b/scripts/ctrlact.pl @@ -225,8 +225,8 @@ sub get_mappings_table { my (@arr) = @_; my @ret = (); for (my $i = 0; $i < @arr; $i++) { - push @ret, sprintf("%4d: %-10s %-40s %-10s", - $i, $arr[$i]->[0], $arr[$i]->[1], $arr[$i]->[2]); + push @ret, sprintf("%4d: %-10s %-40s %-10s (line: %3d)", + $i, $arr[$i]->[0], $arr[$i]->[1], $arr[$i]->[2], $arr[$i]->[3]); } return join("\n", @ret); } -- cgit v1.2.3 From d060a3072cdefa3a14f4a03a3c6c21ed2ec5a109 Mon Sep 17 00:00:00 2001 From: martin f. krafft Date: Wed, 15 Feb 2017 04:43:56 +0100 Subject: Unify print output Signed-off-by: martin f. krafft --- scripts/ctrlact.pl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'scripts') diff --git a/scripts/ctrlact.pl b/scripts/ctrlact.pl index 6a48773..931b89c 100644 --- a/scripts/ctrlact.pl +++ b/scripts/ctrlact.pl @@ -279,7 +279,7 @@ sub print_levels_for_all { my $net = $arr[$i]->{'server'}->{'tag'} // ''; my ($t, $tt, $match) = get_specific_threshold($type, $name, $net); my $c = ($type eq 'window') ? $arr[$i]->{'refnum'} : $arr[$i]->window()->{'refnum'}; - printf CLIENTCRAP "%4d: %-40.40s → %d (%-8s) match %s", $c, $name, $t, $tt, $match; + Irssi::print(sprintf("%4d: %-40.40s → %d (%-8s) match %s", $c, $name, $t, $tt, $match), MSGLEVEL_CRAP); } } @@ -465,11 +465,11 @@ sub cmd_save { sub cmd_list { Irssi::print("ctrlact: window mappings"); - print CLIENTCRAP get_mappings_table(@window_thresholds); + Irssi::print(get_mappings_table(@window_thresholds), MSGLEVEL_CRAP); Irssi::print("ctrlact: channel mappings"); - print CLIENTCRAP get_mappings_table(@channel_thresholds); + Irssi::print(get_mappings_table(@channel_thresholds), MSGLEVEL_CRAP); Irssi::print("ctrlact: query mappings"); - print CLIENTCRAP get_mappings_table(@query_thresholds); + Irssi::print(get_mappings_table(@query_thresholds), MSGLEVEL_CRAP); } sub parse_args { -- cgit v1.2.3 From 287853515d45770147a7083998fdbea8c5d65135 Mon Sep 17 00:00:00 2001 From: martin f. krafft Date: Wed, 15 Feb 2017 04:56:08 +0100 Subject: Simplify debug output Signed-off-by: martin f. krafft --- scripts/ctrlact.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/ctrlact.pl b/scripts/ctrlact.pl index 931b89c..25dbb0d 100644 --- a/scripts/ctrlact.pl +++ b/scripts/ctrlact.pl @@ -214,7 +214,7 @@ sub walk_match_array { my $result = to_data_level($quadruplet->[2]); my $tresult = from_data_level($result); $name = '(unnamed)' unless length $name; - $match = sprintf('line %-3d = net:%-10.10s name:%s', + $match = sprintf('line %3d = net:%s name:%s', $quadruplet->[3], $netmatch, $match); return ($result, $tresult, $match) } -- cgit v1.2.3 From 70893f08280e062732e84bed4314419ecfdfcd7a Mon Sep 17 00:00:00 2001 From: martin f. krafft Date: Wed, 15 Feb 2017 21:46:04 +0100 Subject: Use croak instead of die Signed-off-by: martin f. krafft --- scripts/ctrlact.pl | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'scripts') diff --git a/scripts/ctrlact.pl b/scripts/ctrlact.pl index 25dbb0d..28263ef 100644 --- a/scripts/ctrlact.pl +++ b/scripts/ctrlact.pl @@ -107,6 +107,7 @@ # use strict; use warnings; +use Carp qw( croak ); use Irssi; use Text::ParseWords; @@ -200,7 +201,7 @@ sub to_data_level { sub from_data_level { my ($dl) = @_; - die "Invalid numeric data level: $dl" unless $dl =~ m/^([1-4])$/; + croak "Invalid numeric data level: $dl" unless $dl =~ m/^([1-4])$/; return $DATALEVEL_KEYWORDS[$dl-1]; } @@ -244,7 +245,7 @@ sub get_specific_threshold { return walk_match_array($name, $net, $type, @query_thresholds); } else { - die "ctrlact: can't look up threshold for type: $type"; + croak "ctrlact: can't look up threshold for type: $type"; } } @@ -360,10 +361,10 @@ sub get_mappings_fh { my ($filename) = @_; my $fh; if (-e $filename) { - open($fh, $filename) || die "Cannot open mappings file: $!"; + open($fh, $filename) || croak "Cannot open mappings file: $!"; } else { - open($fh, "+>$filename") || die "Cannot create mappings file: $!"; + open($fh, "+>$filename") || croak "Cannot create mappings file: $!"; my $ftw = from_data_level($fallback_window_threshold); my $ftc = from_data_level($fallback_channel_threshold); @@ -424,7 +425,7 @@ sub load_mappings { $version = $1; } else { - die "First line of $filename is not a ctrlact header."; + croak "First line of $filename is not a ctrlact header."; } my $nrcols = 4; @@ -435,7 +436,7 @@ sub load_mappings { $nrcols = 3; } else { - die "Unsupported version found in $filename: $version" + croak "Unsupported version found in $filename: $version" } my $linesplitter = '^\s*'.join('\s+', ('(\S+)') x $nrcols).'\s*$'; my $l = 1; @@ -449,7 +450,7 @@ sub load_mappings { push @channel_thresholds, [@matchers] if match($type, 'channel'); push @query_thresholds, [@matchers] if match($type, 'query'); } - close($fh) || die "Cannot close mappings file: $!"; + close($fh) || croak "Cannot close mappings file: $!"; } sub cmd_load { -- cgit v1.2.3 From 9a06b4ae868eb006c1db46c61502ff8d49ebec4f Mon Sep 17 00:00:00 2001 From: martin f. krafft Date: Wed, 15 Feb 2017 22:14:05 +0100 Subject: Properly handle mappings file creation Signed-off-by: martin f. krafft --- scripts/ctrlact.pl | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'scripts') diff --git a/scripts/ctrlact.pl b/scripts/ctrlact.pl index 28263ef..c35a2c4 100644 --- a/scripts/ctrlact.pl +++ b/scripts/ctrlact.pl @@ -370,7 +370,7 @@ sub get_mappings_fh { my $ftc = from_data_level($fallback_channel_threshold); my $ftq = from_data_level($fallback_query_threshold); print $fh <<"EOF"; -# ctrlact mappings file (version:$VERSION) +# ctrlact mappings file (version: $VERSION) # # type: window, channel, query # server: the server tag (chatnet) @@ -411,6 +411,7 @@ sub get_mappings_fh { # vim:noet:tw=0:ts=16 EOF Irssi::print("ctrlact: created new/empty mappings file: $filename"); + seek($fh, 0, 0) || croak "Cannot rewind $filename."; } return $fh; } @@ -419,9 +420,9 @@ sub load_mappings { my ($filename) = @_; @window_thresholds = @channel_thresholds = @query_thresholds = (); my $fh = get_mappings_fh($filename); - my $firstline = <$fh>; + my $firstline = <$fh> || croak "Cannot read from $filename.";; my $version; - if ($firstline =~ m/^#+\s+ctrlact mappings file \(version:([\d.]+)\)/) { + if ($firstline =~ m/^#+\s+ctrlact mappings file \(version: *([\d.]+)\)/) { $version = $1; } else { -- cgit v1.2.3 From d707da591a371427bf67e9eb1a7a2993c5730c55 Mon Sep 17 00:00:00 2001 From: martin f. krafft Date: Wed, 15 Feb 2017 22:20:06 +0100 Subject: Switch to 3-arg open calls Signed-off-by: martin f. krafft --- scripts/ctrlact.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'scripts') diff --git a/scripts/ctrlact.pl b/scripts/ctrlact.pl index c35a2c4..534b00a 100644 --- a/scripts/ctrlact.pl +++ b/scripts/ctrlact.pl @@ -361,10 +361,10 @@ sub get_mappings_fh { my ($filename) = @_; my $fh; if (-e $filename) { - open($fh, $filename) || croak "Cannot open mappings file: $!"; + open($fh, '<', $filename) || croak "Cannot open mappings file: $!"; } else { - open($fh, "+>$filename") || croak "Cannot create mappings file: $!"; + open($fh, '+>', $filename) || croak "Cannot create mappings file: $!"; my $ftw = from_data_level($fallback_window_threshold); my $ftc = from_data_level($fallback_channel_threshold); -- cgit v1.2.3 From a5b61e32c4c77f3f6c31133812facbc7f90f35ff Mon Sep 17 00:00:00 2001 From: Thomas Stagner Date: Sun, 19 Feb 2017 12:43:16 -0700 Subject: Implement second-level tab completion for /perlalias and /perlunalias --- scripts/perlalias.pl | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'scripts') diff --git a/scripts/perlalias.pl b/scripts/perlalias.pl index bb3b306..c4e4803 100644 --- a/scripts/perlalias.pl +++ b/scripts/perlalias.pl @@ -235,6 +235,34 @@ sub sig_setup_reread { close $fd; } +sub sig_complete_perlalias { + my ($lst, $win, $word, $line, $want_space) = @_; + $word//return; + $line//return; + $lst//return; + if ($line ne '') { + my $def = $cmds{$line}; + $def//return; + push @$lst, $def->{textcmd}; + Irssi::signal_stop(); + } + else { + push @$lst, (grep /^\Q$word\E/i, keys %cmds); + Irssi::signal_stop(); + } +} + +sub sig_complete_perlunalias { + my ($lst, $win, $word, $line, $want_space) = @_; + $lst//return; + $word//return; + push @$lst, (grep /^\Q$word\E/i, keys %cmds); +} + +Irssi::signal_register({"complete command " => [qw(glistptr_char* Irssi::UI::Window string string intptr)]}); +Irssi::signal_add("complete command perlalias" => \&sig_complete_perlalias); +Irssi::signal_add("complete command perlunalias" => \&sig_complete_perlunalias); + Irssi::signal_add("setup saved" => \&sig_setup_saved); Irssi::signal_add("setup reread" => \&sig_setup_reread); -- cgit v1.2.3 From 42496f290059fd6e30be380f45b7f5f895ca9beb Mon Sep 17 00:00:00 2001 From: Thomas Stagner Date: Sun, 19 Feb 2017 12:53:47 -0700 Subject: Forgot the version bump --- scripts/perlalias.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/perlalias.pl b/scripts/perlalias.pl index c4e4803..b546688 100644 --- a/scripts/perlalias.pl +++ b/scripts/perlalias.pl @@ -75,7 +75,7 @@ use POSIX qw(strftime); { package Irssi::Nick; } # Keeps trying to look for this package but for some reason it doesn't get loaded. -our $VERSION = '1.1'; +our $VERSION = '1.2'; our %IRSSI = ( authors => 'aquanight', contact => 'aquanight@gmail.com', -- cgit v1.2.3 From 74c036b5a725d8d268ea62ace595bce9d4eaf36f Mon Sep 17 00:00:00 2001 From: martin f. krafft Date: Fri, 24 Feb 2017 07:33:08 +1300 Subject: Fix network matching for query subcommand In the absence of a network tag passed to the `query` subcommand, no rules but the default would match and so the returned match(es) would potentially not actually be the ones used in context of ctrlact's normal operation. This commit fixes #354 by special-casing the threshold match when the data to be looked up doesn't actually specify a network tag. In this case, the output for net will be '(ignored)'. Signed-off-by: martin f. krafft --- scripts/ctrlact.pl | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'scripts') diff --git a/scripts/ctrlact.pl b/scripts/ctrlact.pl index 534b00a..aa9dcfb 100644 --- a/scripts/ctrlact.pl +++ b/scripts/ctrlact.pl @@ -111,7 +111,7 @@ use Carp qw( croak ); use Irssi; use Text::ParseWords; -our $VERSION = '1.1'; +our $VERSION = '1.2'; our %IRSSI = ( authors => 'martin f. krafft', @@ -119,7 +119,7 @@ our %IRSSI = ( name => 'ctrlact', description => 'allows per-channel control over activity indication', license => 'MIT', - changed => '2017-02-15' + changed => '2017-02-24' ); ### DEFAULTS AND SETTINGS ###################################################### @@ -208,7 +208,8 @@ sub from_data_level { sub walk_match_array { my ($name, $net, $type, @arr) = @_; foreach my $quadruplet (@arr) { - my $netmatch = match($quadruplet->[0], $net); + my $netmatch = $net eq '*' ? '(ignored)' + : match($quadruplet->[0], $net); my $match = match($quadruplet->[1], $name); next unless $netmatch and $match; -- cgit v1.2.3 From 85e74f61af85356830030596e9ff77faf2f7c05f Mon Sep 17 00:00:00 2001 From: martin f. krafft Date: Fri, 24 Feb 2017 07:41:29 +1300 Subject: Loosen version check on data file read The versioning of the data file allows for making changes to the format, but if the script version increases without the data file-format being changed, things are expected to work as before, and thus there ought not be an error spouted. Let's only use the versioning to patch up handling for formats of the past. Signed-off-by: martin f. krafft --- scripts/ctrlact.pl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'scripts') diff --git a/scripts/ctrlact.pl b/scripts/ctrlact.pl index aa9dcfb..da39804 100644 --- a/scripts/ctrlact.pl +++ b/scripts/ctrlact.pl @@ -432,14 +432,14 @@ sub load_mappings { my $nrcols = 4; if ($version eq $VERSION) { - # current version + # current version, i.e. no special handling is required. If + # previous versions require special handling, then massage the + # data or do whatever is required in the following + # elsif-clauses: } elsif ($version eq "1.0") { $nrcols = 3; } - else { - croak "Unsupported version found in $filename: $version" - } my $linesplitter = '^\s*'.join('\s+', ('(\S+)') x $nrcols).'\s*$'; my $l = 1; while (<$fh>) { -- cgit v1.2.3 From 1a202f3e1ce94df47930d55db9067a95d3a05e81 Mon Sep 17 00:00:00 2001 From: bw1 Date: Sun, 5 Mar 2017 13:58:24 +0100 Subject: dccself add $VERSION --- scripts/dccself.pl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/dccself.pl b/scripts/dccself.pl index e944133..1a6ccea 100644 --- a/scripts/dccself.pl +++ b/scripts/dccself.pl @@ -1,7 +1,8 @@ use strict; -use vars qw/%IRSSI/; +use vars qw/%IRSSI $VERSION/; use Irssi qw(command_bind active_server); +$VERSION= "0.1"; %IRSSI = ( authors => "David Leadbeater", contact => "dgl\@dgl.cx", -- cgit v1.2.3 From a9279e9f678b81fe60b0459cd6efa7a76880cad9 Mon Sep 17 00:00:00 2001 From: bw1 Date: Sun, 5 Mar 2017 14:29:01 +0100 Subject: translit add $VERSION --- scripts/translit.pl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/translit.pl b/scripts/translit.pl index 478dd50..0a01506 100644 --- a/scripts/translit.pl +++ b/scripts/translit.pl @@ -1,7 +1,8 @@ use strict; -use vars qw(%IRSSI); +use vars qw(%IRSSI $VERSION); use Irssi; +$VERSION = "0.1"; %IRSSI = ( authors => 'dreg', contact => 'dreg@fine.lv', -- cgit v1.2.3 From c157fa194f4ec008a4d3c763043f1e73e07a013b Mon Sep 17 00:00:00 2001 From: bw1 Date: Mon, 6 Mar 2017 20:58:29 +0100 Subject: [pager] declaration $VERSION %IRSSI --- scripts/pager.pl | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'scripts') diff --git a/scripts/pager.pl b/scripts/pager.pl index 32f0902..50d7899 100644 --- a/scripts/pager.pl +++ b/scripts/pager.pl @@ -2,14 +2,16 @@ use strict; use Irssi 20020121.2020 (); -$VERSION = "1.1"; + +use vars qw/$VERSION %IRSSI/; +$VERSION = "1.2"; %IRSSI = ( authors => 'Jean-Yves Lefort', contact => 'jylefort\@brutele.be', name => 'pager', description => 'Notifies people if they send you a private message or a DCC chat offer while you are away; runs a shell command configurable via /set if they page you', license => 'BSD', - changed => '$Date: 2003/01/27 09:45:16 $ ', + changed => '$Date: 2017/03/06 $ ', ); # note: @@ -33,6 +35,9 @@ $VERSION = "1.1"; # # changes: # +# 2017-03-06 release 1.2 +# * declaration $VERSION %IRSSI +# # 2003-01-27 release 1.1 # * notices and commands are now optional # -- cgit v1.2.3 From 4d11f7ff9c1b2fb02b5984e11d0b9ae238383e53 Mon Sep 17 00:00:00 2001 From: bw1 Date: Tue, 7 Mar 2017 02:05:51 +0100 Subject: [colorkick] declare $VERSION %IRSSI --- scripts/colorkick.pl | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'scripts') diff --git a/scripts/colorkick.pl b/scripts/colorkick.pl index 24b29fd..de7e153 100644 --- a/scripts/colorkick.pl +++ b/scripts/colorkick.pl @@ -13,7 +13,8 @@ use strict; use Irssi; use Irssi::Irc; -use vars %IRSSI; +use vars qw/%IRSSI $VERSION/; +$VERSION='0.1'; %IRSSI = ( authors => "Gabor Nyeki", @@ -22,7 +23,7 @@ use vars %IRSSI; description => "kicking users for using colors or blinks", license => "public domain", written => "Thu Dec 26 00:22:54 CET 2002", - changed => "Fri Jan 2 03:43:10 CET 2004" + changed => "2017-03-07" ); sub catch_junk @@ -31,10 +32,10 @@ sub catch_junk my ($target, $text) = split(/ :/, $data, 2); my $valid_channel = 0; - if ($target[0] != '#' && $target[0] != '!' && $target[0] != '&') - { - return; - } + #if ($target[0] != '#' && $target[0] != '!' && $target[0] != '&') + #{ + # return; + #} for my $channel (split(/ /, Irssi::settings_get_str('colorkick_channels'))) -- cgit v1.2.3 From 5aee3660b915afbb3e0c6d4419bfaaaa1eb7420d Mon Sep 17 00:00:00 2001 From: bw1 Date: Tue, 7 Mar 2017 22:28:22 +0100 Subject: [colorkick] fix bug == with eq --- scripts/colorkick.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/colorkick.pl b/scripts/colorkick.pl index de7e153..c28e420 100644 --- a/scripts/colorkick.pl +++ b/scripts/colorkick.pl @@ -40,7 +40,7 @@ sub catch_junk for my $channel (split(/ /, Irssi::settings_get_str('colorkick_channels'))) { - if ($target == $channel) + if ($target eq $channel) { $valid_channel = 1; last; -- cgit v1.2.3