update weechat scripts

This commit is contained in:
Ben Harris 2019-10-23 20:49:15 -04:00
parent 756dbd8397
commit 0eebd01222
9 changed files with 192 additions and 175 deletions

@ -1 +1 @@
Subproject commit 315e568de006e80138f79c77d5508c7e4853e6b2
Subproject commit 0c6c76e08115d0ba160e2c95c8692e4174aa5368

View File

@ -14,5 +14,4 @@ instant = on
timer = 1
[buffer]
irc.freenode.#thunix.hotlist_max_level_nicks_add = "Bender:2"
irc.tilde.#trivia.hotlist_max_level_nicks_add = "Oz:2,Nerd:2"

View File

@ -106,6 +106,7 @@ whois_double_nick = off
whois = current
[ctcp]
pronouns = "he/him"
[ignore]
@ -153,10 +154,10 @@ usermode = ""
username = "${env:USER}"
[server]
tilde.addresses = "localhost"
tilde.addresses = "gingko.tilde.chat/6697"
tilde.proxy
tilde.ipv6
tilde.ssl = off
tilde.ssl = on
tilde.ssl_cert
tilde.ssl_priorities
tilde.ssl_dhkey_size
@ -179,9 +180,9 @@ tilde.username
tilde.realname
tilde.local_hostname
tilde.usermode
tilde.command = "/oper root ${sec.data.tildenetoper}; /msg operserv login ${sec.data.pass}"
tilde.command = "/msg operserv login ${sec.data.pass}"
tilde.command_delay
tilde.autojoin = "#chaos,#meta,#opers,#secret-sudoers,#team,#sudoers,#yourtilde,#music,#politics,#gopher,#tildeverse,#idlerpg,#tilderadio,#minecraft,#tildelinux,#cosmic,#institute,#.tilde,#tildetel,#thunix,#theasylum,#minetest,#aussie,#uucp,#projects,#hamradio,#vim,#black,#pink,#~,#netnews,#admin,#bots,#ctrl-c,#bitbot,#radiofreqs,#brains,#envs,#rfcs,#best :57:60,:10:20"
tilde.autojoin = "#meta,#secret-sudoers,#opers,#sudoers,#yourtilde,#music,#politics,#gopher,#tildeverse,#idlerpg,#tilderadio,#minecraft,#tildelinux,#cosmic,#institute,#.tilde,#tildetel,#thunix,#theasylum,#minetest,#aussie,#uucp,#projects,#hamradio,#vim,#black,#pink,#~,#netnews,#admin,#bots,#ctrl-c,#bitbot,#radiofreqs,#brains,#envs,#rfcs,#best,#wilde,#tildegames,#theasylum-admins,#tildenet,#gemini,#club,#zine,#twtxt,#factorio,#team,#summit :10:20,secretsudoteam"
tilde.autorejoin
tilde.autorejoin_delay
tilde.connection_timeout
@ -304,7 +305,7 @@ esper.local_hostname
esper.usermode
esper.command
esper.command_delay
esper.autojoin = "#lobby,#coders 10:30"
esper.autojoin = "#lobby,#coders,#factorio 10:30"
esper.autorejoin
esper.autorejoin_delay
esper.connection_timeout
@ -440,7 +441,7 @@ oftc.msg_part
oftc.msg_quit
oftc.notify
oftc.split_msg_max_length
freenode.addresses = "irc.freenode.net/6697"
freenode.addresses = "irc.us.freenode.net/6697"
freenode.proxy
freenode.ipv6
freenode.ssl = on
@ -468,7 +469,7 @@ freenode.local_hostname
freenode.usermode
freenode.command
freenode.command_delay
freenode.autojoin = "#weechat,##oodnet,#lobsters,#lobsters-boil,#gitea,#mastodon,#pleroma,#pleroma-offtopic,#oragono,#weechat-android,#git,#tilde.team,#sr.ht,#cmpwn,#gopherproject,#bitreich-en,#bitbot,#bitreich-de,#ircv3,#gophernicus,##jan6,##ircv3-offtopic,#ovh,#elixir-lang,#ascii.town,#sonarr,#lxcontainers 6:10"
freenode.autojoin = "#weechat,##oodnet,#lobsters,#lobsters-boil,#gitea,#mastodon,#pleroma,#pleroma-offtopic,#oragono,#weechat-android,#git,#tilde.team,#sr.ht,#cmpwn,#gopherproject,#bitreich-en,#bitbot,#bitreich-de,#ircv3,#gophernicus,##jan6,##ircv3-offtopic,#ovh,#elixir-lang,#ascii.town,#sonarr,#lxcontainers,#thelounge,#indieweb,#indieweb-dev,#indieweb-meta,#indieweb-chat,#knownchat,#NetBSD,#cjdns,##ircv3-chat,#mumble,#!,#tildeclub,#freenode,#stutter,#futel 6:10"
freenode.autorejoin
freenode.autorejoin_delay
freenode.connection_timeout
@ -591,7 +592,7 @@ slashnet.local_hostname
slashnet.usermode
slashnet.command
slashnet.command_delay
slashnet.autojoin = "#gtlug,#mefi"
slashnet.autojoin = "#gtlug"
slashnet.autorejoin
slashnet.autorejoin_delay
slashnet.connection_timeout
@ -686,44 +687,85 @@ red.msg_part
red.msg_quit
red.notify
red.split_msg_max_length
ascii.addresses = "ascii.town/6697"
ascii.proxy
ascii.ipv6
ascii.ssl = on
ascii.ssl_cert
ascii.ssl_priorities
ascii.ssl_dhkey_size
ascii.ssl_fingerprint
ascii.ssl_verify
ascii.password
ascii.capabilities
ascii.sasl_mechanism
ascii.sasl_username
ascii.sasl_password
ascii.sasl_key
ascii.sasl_timeout
ascii.sasl_fail
ascii.autoconnect
ascii.autoreconnect
ascii.autoreconnect_delay
ascii.nicks
ascii.nicks_alternate
ascii.username
ascii.realname
ascii.local_hostname
ascii.usermode
ascii.command
ascii.command_delay
ascii.autojoin = "&town"
ascii.autorejoin
ascii.autorejoin_delay
ascii.connection_timeout
ascii.anti_flood_prio_high
ascii.anti_flood_prio_low
ascii.away_check
ascii.away_check_max_nicks
ascii.msg_kick
ascii.msg_part
ascii.msg_quit
ascii.notify
ascii.split_msg_max_length
hackint.addresses = "irc.hackint.org/6697"
hackint.proxy
hackint.ipv6
hackint.ssl = on
hackint.ssl_cert
hackint.ssl_priorities
hackint.ssl_dhkey_size
hackint.ssl_fingerprint
hackint.ssl_verify
hackint.password
hackint.capabilities
hackint.sasl_mechanism
hackint.sasl_username = "benharri"
hackint.sasl_password = "${sec.data.pass}"
hackint.sasl_key
hackint.sasl_timeout
hackint.sasl_fail
hackint.autoconnect
hackint.autoreconnect
hackint.autoreconnect_delay
hackint.nicks = "benharri"
hackint.nicks_alternate
hackint.username
hackint.realname
hackint.local_hostname
hackint.usermode
hackint.command
hackint.command_delay
hackint.autojoin = "#tildeverse,#hackint,#36c3,#camp"
hackint.autorejoin
hackint.autorejoin_delay
hackint.connection_timeout
hackint.anti_flood_prio_high
hackint.anti_flood_prio_low
hackint.away_check
hackint.away_check_max_nicks
hackint.msg_kick
hackint.msg_part
hackint.msg_quit
hackint.notify
hackint.split_msg_max_length
efnet.addresses = "irc.servercentral.net"
efnet.proxy
efnet.ipv6
efnet.ssl
efnet.ssl_cert
efnet.ssl_priorities
efnet.ssl_dhkey_size
efnet.ssl_fingerprint
efnet.ssl_verify
efnet.password
efnet.capabilities
efnet.sasl_mechanism
efnet.sasl_username
efnet.sasl_password
efnet.sasl_key
efnet.sasl_timeout
efnet.sasl_fail
efnet.autoconnect
efnet.autoreconnect
efnet.autoreconnect_delay
efnet.nicks
efnet.nicks_alternate
efnet.username
efnet.realname
efnet.local_hostname
efnet.usermode
efnet.command
efnet.command_delay
efnet.autojoin = "#dragonflybsd,#freebsd"
efnet.autorejoin
efnet.autorejoin_delay
efnet.connection_timeout
efnet.anti_flood_prio_high
efnet.anti_flood_prio_low
efnet.away_check
efnet.away_check_max_nicks
efnet.msg_kick
efnet.msg_part
efnet.msg_quit
efnet.notify
efnet.split_msg_max_length

View File

@ -69,7 +69,7 @@ python.buffer_autoclose.age_limit = "30"
python.buffer_autoclose.ignore = ""
python.buffer_autoclose.interval = "1"
python.check_license = "off"
python.completion.replace_values = "shrug=>¯\_(ツ)_/¯;;wiki=>https://tilde.team/wiki/;;sword=>o()xxxx[{::::::::::::::::::::::::::::::::::>;;lenny=>( ͡° ͜ʖ ͡°);;byobu=>https://superuser.com/a/423397/866501;;huh=>(-_-)ゞ゛;;tablefix=>┬─┬ノ( º _ ºノ);;weedoc=>https://weechat.org/files/doc/stable/weechat_user.en.html;;weekeys=>https://weechat.org/files/doc/stable/weechat_user.en.html#key_bindings;;denko=>(´・ω・`);;yuno=>ლ(́ಠ◞益◟ಠ‵ლ);;tf=>(ノಥ益ಥ)ノ彡┻━┻;;tb=>┬─┬ノ( º _ ºノ);;ducc=>・゜゜・。。・゜゜\_o< QUACK!"
python.completion.replace_values = "shrug=>¯\_(ツ)_/¯;;wiki=>https://tilde.team/wiki/;;sword=>o()xxxx[{::::::::::::::::::::::::::::::::::>;;lenny=>( ͡° ͜ʖ ͡°);;byobu=>https://superuser.com/a/423397/866501;;fg=>(☞゚ヮ゚)☞;;huh=>(-_-)ゞ゛;;tablefix=>┬─┬ノ( º _ ºノ);;weedoc=>https://weechat.org/files/doc/stable/weechat_user.en.html;;weekeys=>https://weechat.org/files/doc/stable/weechat_user.en.html#key_bindings;;denko=>(´・ω・`);;yuno=>ლ(́ಠ◞益◟ಠ‵ლ);;tf=>(ノಥ益ಥ)ノ彡┻━┻;;tb=>┬─┬ノ( º _ ºノ);;ducc=>・゜゜・。。・゜゜\_o< QUACK!"
python.go.auto_jump = "off"
python.go.buffer_number = "on"
python.go.color_name = "black,cyan"

View File

@ -48,7 +48,10 @@
#
# 2018-08-09, Julien Palard <julien@palard.fr>
# version 0.3.0: Support for Python 3
#
# 2019-09-28, fructose
# version 0.3.1: Error on invalid arguments
#
# @TODO: add options to ignore certain buffers
# @TODO: maybe add an option to enable autosaving on part/join messages
@ -57,7 +60,7 @@ import re
SCRIPT_NAME = "autojoin"
SCRIPT_AUTHOR = "xt <xt@bash.no>"
SCRIPT_VERSION = "0.3.0"
SCRIPT_VERSION = "0.3.1"
SCRIPT_LICENSE = "GPL3"
SCRIPT_DESC = "Configure autojoin for all servers according to currently joined channels"
SCRIPT_COMMAND = "autojoin"
@ -77,8 +80,8 @@ if w.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION, SCRIPT_LICENSE, SCRIPT
"autojoin_cb",
"")
#w.hook_signal('*,irc_in2_join', 'autosave_channels_on_activity', '')
#w.hook_signal('*,irc_in2_part', 'autosave_channels_on_activity', '')
# w.hook_signal('*,irc_in2_join', 'autosave_channels_on_activity', '')
# w.hook_signal('*,irc_in2_part', 'autosave_channels_on_activity', '')
w.hook_signal('quit', 'autosave_channels_on_quit', '')
# Init everything
@ -86,6 +89,7 @@ for option, default_value in settings.items():
if w.config_get_plugin(option) == "":
w.config_set_plugin(option, default_value)
def autosave_channels_on_quit(signal, callback, callback_data):
''' Autojoin current channels '''
if w.config_get_plugin(option) != "on":
@ -114,54 +118,60 @@ def autosave_channels_on_activity(signal, callback, callback_data):
pattern = "^:%s!.*(JOIN|PART) :?(#[^ ]*)( :.*$)?" % nick
match = re.match(pattern, callback_data)
if match: # check if nick is my nick. In that case: save
if match: # check if nick is my nick. In that case: save
process_server(server, channels)
else: # someone else: ignore
else: # someone else: ignore
continue
return w.WEECHAT_RC_OK
def autojoin_cb(data, buffer, args):
"""Old behaviour: doesn't save empty channel list"""
"""In fact should also save open buffers with a /part'ed channel"""
"""But I can't believe somebody would want that behaviour"""
items = find_channels()
def autojoin_cb(data, buffer, args):
if args == '--run':
run = True
elif args != '':
w.prnt('', 'Unexpected argument: %s' % args)
return w.WEECHAT_RC_ERROR
else:
run = False
# Old behaviour: doesn't save empty channel list
# In fact should also save open buffers with a /part'ed channel
# But I can't believe somebody would want that behaviour
items = find_channels()
# print/execute commands
for server, channels in items.items():
process_server(server, channels, run)
return w.WEECHAT_RC_OK
def process_server(server, channels, run=True):
option = "irc.server.%s.autojoin" % server
channels = channels.rstrip(',')
oldchans = w.config_string(w.config_get(option))
option = "irc.server.%s.autojoin" % server
channels = channels.rstrip(',')
oldchans = w.config_string(w.config_get(option))
if not channels: # empty channel list
return
if not channels: # empty channel list
return
# Note: re already caches the result of regexp compilation
sec = re.match('^\${sec\.data\.(.*)}$', oldchans)
if sec:
secvar = sec.group(1)
command = "/secure set %s %s" % (secvar, channels)
else:
command = "/set irc.server.%s.autojoin '%s'" % (server, channels)
# Note: re already caches the result of regexp compilation
sec = re.match('^\${sec\.data\.(.*)}$', oldchans)
if sec:
secvar = sec.group(1)
command = "/secure set %s %s" % (secvar, channels)
else:
command = "/set irc.server.%s.autojoin '%s'" % (server, channels)
if run:
w.command('', command)
else:
w.prnt('', command)
if run:
w.command('', command)
else:
w.prnt('', command)
def find_channels():
"""Return list of servers and channels"""
#@TODO: make it return a dict with more options like "nicks_count etc."
# TODO: make it return a dict with more options like "nicks_count etc."
items = {}
infolist = w.infolist_get('irc_server', '', '')
# populate servers
@ -175,18 +185,18 @@ def find_channels():
keys = []
keyed_channels = []
unkeyed_channels = []
items[server] = '' #init if connected but no channels
items[server] = '' # init if connected but no channels
infolist = w.infolist_get('irc_channel', '', server)
while w.infolist_next(infolist):
if w.infolist_integer(infolist, 'nicks_count') == 0:
#parted but still open in a buffer: bit hackish
# parted but still open in a buffer: bit hackish
continue
if w.infolist_integer(infolist, 'type') == 0:
key = w.infolist_string(infolist, "key")
if len(key) > 0:
keys.append(key)
keyed_channels.append(w.infolist_string(infolist, "name"))
else :
else:
unkeyed_channels.append(w.infolist_string(infolist, "name"))
items[server] = ','.join(keyed_channels + unkeyed_channels)
if len(keys) > 0:
@ -194,4 +204,3 @@ def find_channels():
w.infolist_free(infolist)
return items

View File

@ -31,6 +31,10 @@
#
#
# History:
# 2019-08-20
# version 0.3: Ben Harris (benharri)
# * port for python3
#
# 2010-05-08
# version 0.2:
# * complete any word behind the cursor, not just the last one in input line.
@ -46,13 +50,13 @@ try:
WEECHAT_RC_OK = weechat.WEECHAT_RC_OK
import_ok = True
except ImportError:
print "This script must be run under WeeChat."
print "Get WeeChat now at: http://www.weechat.org/"
print("This script must be run under WeeChat.")
print("Get WeeChat now at: http://www.weechat.org/")
import_ok = False
SCRIPT_NAME = "completion"
SCRIPT_AUTHOR = "Elián Hanisch <lambdae2@gmail.com>"
SCRIPT_VERSION = "0.2"
SCRIPT_VERSION = "0.3"
SCRIPT_LICENSE = "GPL3"
SCRIPT_DESC = "Word completions for WeeChat"
SCRIPT_COMMAND = "completion"
@ -63,16 +67,6 @@ settings = {
}
### Messages ###
def decode(s):
if isinstance(s, str):
s = s.decode('utf-8')
return s
def encode(u):
if isinstance(u, unicode):
u = u.encode('utf-8')
return u
def debug(s, prefix='', buffer=None):
"""Debug msg"""
#if not weechat.config_get_plugin('debug'): return
@ -84,13 +78,11 @@ def debug(s, prefix='', buffer=None):
weechat.buffer_set(buffer, 'nicklist', '0')
weechat.buffer_set(buffer, 'time_for_each_line', '0')
weechat.buffer_set(buffer, 'localvar_set_no_log', '1')
s = encode(s)
weechat.prnt(buffer, '%s\t%s' %(prefix, s))
def error(s, prefix=None, buffer='', trace=''):
"""Error msg"""
prefix = prefix or script_nick
s = encode(s)
weechat.prnt(buffer, '%s%s %s' %(weechat.prefix('error'), prefix, s))
if weechat.config_get_plugin('debug'):
if not trace:
@ -102,67 +94,34 @@ def error(s, prefix=None, buffer='', trace=''):
def say(s, prefix=None, buffer=''):
"""normal msg"""
prefix = prefix or script_nick
s = encode(s)
weechat.prnt(buffer, '%s\t%s' %(prefix, s))
print_replace = lambda k,v : say('%s %s=>%s %s' %(k, color_delimiter, color_reset, v))
### Config functions ###
class UTFDict(dict):
decode = staticmethod(decode)
encode = staticmethod(encode)
def __init__(self, d={}):
dict.__init__(self)
for k, v in d.iteritems():
self[k] = v
def __setitem__(self, k, v):
k = self.decode(k)
v = self.decode(v)
dict.__setitem__(self, k, v)
def __getitem__(self, k):
k = self.decode(k)
return dict.__getitem__(self, k)
def __delitem__(self, k):
k = self.decode(k)
dict.__delitem__(self, k)
def __contains__(self, k):
k = self.decode(k)
return dict.__contains__(self, k)
def __str__(self):
values = [ '%s=>%s' %(k, v) for k, v in self.iteritems() ]
values = ';;'.join(values)
return self.encode(values)
def get_config_dict(config):
value = weechat.config_get_plugin(config)
if not value:
return {}
values = value.split(';;')
values = map(lambda s: s.split('=>'), values)
values = [s.split('=>') for s in value.split(';;')]
#debug(values)
return dict(values)
def load_replace_table():
global replace_table
replace_table = UTFDict(get_config_dict('replace_values'))
replace_table = dict(get_config_dict('replace_values'))
def save_replace_table():
global replace_table
weechat.config_set_plugin('replace_values', str(replace_table))
weechat.config_set_plugin('replace_values',
';;'.join(['%s=>%s' %(k, v) for k, v in replace_table.items()]))
### Commands ###
def cmd_completion(data, buffer, args):
global replace_table
if not args:
if replace_table:
for k, v in replace_table.iteritems():
for k, v in replace_table.items():
print_replace(k, v)
else:
say('No completions.')
@ -189,7 +148,7 @@ def cmd_completion(data, buffer, args):
def completion_replacer(data, completion_item, buffer, completion):
global replace_table
pos = weechat.buffer_get_integer(buffer, 'input_pos')
input = decode(weechat.buffer_get_string(buffer, 'input'))
input = weechat.buffer_get_string(buffer, 'input')
#debug('%r %s %s' %(input, len(input), pos))
if pos > 0 and (pos == len(input) or input[pos] == ' '):
n = input.rfind(' ', 0, pos)
@ -202,14 +161,14 @@ def completion_replacer(data, completion_item, buffer, completion):
replace += ' '
n = len(word)
input = '%s%s%s' %(input[:pos-n], replace, input[pos:])
weechat.buffer_set(buffer, 'input', encode(input))
weechat.buffer_set(buffer, 'input', input)
weechat.buffer_set(buffer, 'input_pos', str(pos - n + len(replace)))
return WEECHAT_RC_OK
def completion_keys(data, completion_item, buffer, completion):
global replace_table
for k in replace_table:
weechat.hook_completion_list_add(completion, encode(k), 0, weechat.WEECHAT_LIST_POS_SORT)
weechat.hook_completion_list_add(completion, k, 0, weechat.WEECHAT_LIST_POS_SORT)
return WEECHAT_RC_OK
### Main ###
@ -231,7 +190,7 @@ if __name__ == '__main__' and import_ok and \
error('WeeChat 0.3.1 or newer is required for this script.')
else:
# settings
for opt, val in settings.iteritems():
for opt, val in settings.items():
if not weechat.config_is_set_plugin(opt):
weechat.config_set_plugin(opt, val)

View File

@ -21,6 +21,8 @@
#
# History:
#
# 2019-07-11, Simmo Saan <simmo.saan@gmail.com>
# version 2.6: fix detection of "/input search_text_here"
# 2017-04-01, Sébastien Helleu <flashcode@flashtux.org>:
# version 2.5: add option "buffer_number"
# 2017-03-02, Sébastien Helleu <flashcode@flashtux.org>:
@ -92,7 +94,7 @@ from __future__ import print_function
SCRIPT_NAME = 'go'
SCRIPT_AUTHOR = 'Sébastien Helleu <flashcode@flashtux.org>'
SCRIPT_VERSION = '2.5'
SCRIPT_VERSION = '2.6'
SCRIPT_LICENSE = 'GPL3'
SCRIPT_DESC = 'Quick jump to buffers'
@ -480,7 +482,7 @@ def go_input_modifier(data, modifier, modifier_data, string):
def go_command_run_input(data, buf, command):
"""Function called when a command "/input xxx" is run."""
global buffers, buffers_pos
if command == '/input search_text' or command.find('/input jump') == 0:
if command.startswith('/input search_text') or command.startswith('/input jump'):
# search text or jump to another buffer is forbidden now
return weechat.WEECHAT_RC_OK_EAT
elif command == '/input complete_next':

View File

@ -69,6 +69,10 @@
#
# History:
#
# 2019-06-30, dabbill <dabbill@gmail.com>
# and Sébastien Helleu <flashcode@flashtux.org>
# version 0.8.2: make script compatible with Python 3
#
# 2018-04-10, Sébastien Helleu <flashcode@flashtux.org>
# version 0.8.1: fix infolist_time for WeeChat >= 2.2 (WeeChat returns a long
# integer instead of a string)
@ -117,9 +121,9 @@
# * supress highlights when printing in grep buffer
#
# 2010-10-06
# version 0.6.7: by xt <xt@bash.no>
# version 0.6.7: by xt <xt@bash.no>
# * better temporary file:
# use tempfile.mkstemp. to create a temp file in log dir,
# use tempfile.mkstemp. to create a temp file in log dir,
# makes it safer with regards to write permission and multi user
#
# 2010-04-08
@ -226,7 +230,7 @@ except ImportError:
SCRIPT_NAME = "grep"
SCRIPT_AUTHOR = "Elián Hanisch <lambdae2@gmail.com>"
SCRIPT_VERSION = "0.8.1"
SCRIPT_VERSION = "0.8.2"
SCRIPT_LICENSE = "GPL3"
SCRIPT_DESC = "Search in buffers and logs"
SCRIPT_COMMAND = "grep"
@ -259,14 +263,14 @@ class linesDict(dict):
def get_matches_count(self):
"""Return the sum of total matches stored."""
if dict.__len__(self):
return sum(map(lambda L: L.matches_count, self.itervalues()))
return sum(map(lambda L: L.matches_count, self.values()))
else:
return 0
def __len__(self):
"""Return the sum of total lines stored."""
if dict.__len__(self):
return sum(map(len, self.itervalues()))
return sum(map(len, self.values()))
else:
return 0
@ -274,7 +278,7 @@ class linesDict(dict):
"""Returns buffer count or buffer name if there's just one stored."""
n = len(self.keys())
if n == 1:
return self.keys()[0]
return list(self.keys())[0]
elif n > 1:
return '%s logs' %n
else:
@ -282,18 +286,18 @@ class linesDict(dict):
def items(self):
"""Returns a list of items sorted by line count."""
items = dict.items(self)
items = list(dict.items(self))
items.sort(key=lambda i: len(i[1]))
return items
def items_count(self):
"""Returns a list of items sorted by match count."""
items = dict.items(self)
items = list(dict.items(self))
items.sort(key=lambda i: i[1].matches_count)
return items
def strip_separator(self):
for L in self.itervalues():
for L in self.values():
L.strip_separator()
def get_last_lines(self, n):
@ -302,7 +306,7 @@ class linesDict(dict):
if n >= total_lines:
# nothing to do
return
for k, v in reversed(self.items()):
for k, v in reversed(list(self.items())):
l = len(v)
if n > 0:
if l > n:
@ -487,7 +491,7 @@ def dir_list(dir, filter_list=(), filter_excludes=True, include_dir=False):
return cache_dir[key]
except KeyError:
pass
filter_list = filter_list or get_config_log_filter()
dir_len = len(dir)
if filter_list:
@ -657,8 +661,8 @@ def make_regexp(pattern, matchcase=False):
regexp = re.compile(pattern, re.IGNORECASE)
else:
regexp = re.compile(pattern)
except Exception, e:
raise Exception, 'Bad pattern, %s' %e
except Exception as e:
raise Exception('Bad pattern, %s' % e)
return regexp
def check_string(s, regexp, hilight='', exact=False):
@ -716,7 +720,7 @@ def grep_file(file, head, tail, after_context, before_context, count, regexp, hi
return s
else:
check = lambda s: check_string(s, regexp, hilight, exact)
try:
file_object = open(file, 'r')
except IOError:
@ -736,7 +740,7 @@ def grep_file(file, head, tail, after_context, before_context, count, regexp, hi
before_context, after_context = after_context, before_context
if before_context:
before_context_range = range(1, before_context + 1)
before_context_range = list(range(1, before_context + 1))
before_context_range.reverse()
limit = tail or head
@ -800,7 +804,7 @@ def grep_file(file, head, tail, after_context, before_context, count, regexp, hi
while id < after_context + offset:
id += 1
try:
context_line = file_object.next()
context_line = next(file_object)
_context_line = check(context_line)
if _context_line:
offset = id
@ -1002,7 +1006,7 @@ def grep_process(*args):
global grep_options, log_pairs
for log_name, log in log_pairs:
result[log_name] = grep_file(log, *grep_options)
except Exception, e:
except Exception as e:
result = e
return pickle.dumps(result)
@ -1038,7 +1042,7 @@ def grep_process_cb(data, command, return_code, out, err):
if isinstance(data, Exception):
raise data
matched_lines.update(data)
except Exception, e:
except Exception as e:
set_buffer_error(repr(e))
return WEECHAT_RC_OK
else:
@ -1180,7 +1184,7 @@ def buffer_update():
# free matched_lines so it can be removed from memory
del matched_lines
def split_line(s):
"""Splits log's line 's' in 3 parts, date, nick and msg."""
global weechat_format
@ -1280,12 +1284,12 @@ def buffer_input(data, buffer, input_data):
weechat.infolist_free(infolist)
try:
cmd_grep_parsing(input_data)
except Exception, e:
error('Argument error, %s' %e, buffer=buffer)
except Exception as e:
error('Argument error, %s' % e, buffer=buffer)
return WEECHAT_RC_OK
try:
show_matching_lines()
except Exception, e:
except Exception as e:
error(e)
except NameError:
error("There isn't any previous search to repeat.", buffer=buffer)
@ -1342,11 +1346,11 @@ def cmd_grep_parsing(args):
args = ' '.join(args) # join pattern for keep spaces
if args:
pattern_tmpl = args
pattern_tmpl = args
pattern = _tmplRe.sub(tmplReplacer, args)
debug('Using regexp: %s', pattern)
if not pattern:
raise Exception, 'No pattern for grep the logs.'
raise Exception('No pattern for grep the logs.')
def positive_number(opt, val):
try:
@ -1359,7 +1363,7 @@ def cmd_grep_parsing(args):
opt = '-' + opt
else:
opt = '--' + opt
raise Exception, "argument for %s must be a positive integer." %opt
raise Exception("argument for %s must be a positive integer." % opt)
for opt, val in opts:
opt = opt.strip('-')
@ -1454,8 +1458,8 @@ def cmd_grep(data, buffer, args):
# parse
try:
cmd_grep_parsing(args)
except Exception, e:
error('Argument error, %s' %e)
except Exception as e:
error('Argument error, %s' % e)
return WEECHAT_RC_OK
# find logs
@ -1501,7 +1505,7 @@ def cmd_grep(data, buffer, args):
# grepping
try:
show_matching_lines()
except Exception, e:
except Exception as e:
error(e)
return WEECHAT_RC_OK
@ -1520,8 +1524,8 @@ def cmd_logs(data, buffer, args):
opt = opt.strip('-')
if opt in ('size', 's'):
sort_by_size = True
except Exception, e:
error('Argument error, %s' %e)
except Exception as e:
error('Argument error, %s' % e)
return WEECHAT_RC_OK
# is there's a filter, filter_excludes should be False
@ -1703,7 +1707,7 @@ Examples:
'completion_grep_args', '')
# settings
for opt, val in settings.iteritems():
for opt, val in settings.items():
if not weechat.config_is_set_plugin(opt):
weechat.config_set_plugin(opt, val)
@ -1716,7 +1720,7 @@ Examples:
color_summary = weechat.color('lightcyan')
color_delimiter = weechat.color('chat_delimiters')
color_script_nick = weechat.color('chat_nick')
# pretty [grep]
script_nick = '%s[%s%s%s]%s' %(color_delimiter, color_script_nick, SCRIPT_NAME, color_delimiter,
color_reset)

View File

@ -354,9 +354,11 @@ default.current = on
[notify]
irc.bitlbee = highlight
perl.highmon = none
[filter]
irc_smart = on;*;irc_smart_filter;*
markov_bitbot = on;irc.tilde.*;irc_privmsg;^,m(\s|arkov)|^\[Markov\]
[key]
ctrl-? = "/input delete_previous_char"