1
0
mirror of https://github.com/alrayyes/dotfiles/ synced 2023-11-14 15:56:30 +00:00

weechat config

This commit is contained in:
Ryan 2017-05-15 15:15:14 +02:00
parent 7642be66ac
commit 46c10934d9
28 changed files with 5622 additions and 0 deletions

View File

@ -0,0 +1,48 @@
#
# weechat -- alias.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[cmd]
AAWAY = "allserv /away"
AME = "allchan /me"
AMSG = "allchan /msg *"
ANICK = "allserv /nick"
BEEP = "print -beep"
BYE = "quit"
C = "buffer clear"
CHAT = "dcc chat"
CL = "buffer clear"
CLOSE = "buffer close"
EXIT = "quit"
IG = "ignore"
J = "join"
K = "kick"
KB = "kickban"
LEAVE = "part"
M = "msg"
MSGBUF = "command -buffer $1 * /input send $2-"
MUB = "unban *"
N = "names"
Q = "query"
REDRAW = "window refresh"
SAY = "msg *"
SIGNOFF = "quit"
T = "topic"
UB = "unban"
UMODE = "mode $nick"
V = "command core version"
W = "who"
WC = "window merge"
WI = "whois"
WII = "whois $1 $1"
WW = "whowas"
[completion]
MSGBUF = "%(buffers_plugins_names)"

View File

@ -0,0 +1,27 @@
#
# weechat -- aspell.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[color]
misspelled = lightred
suggestions = default
[check]
commands = "ame,amsg,away,command,cycle,kick,kickban,me,msg,notice,part,query,quit,topic"
default_dict = ""
during_search = off
enabled = off
real_time = off
suggestions = -1
word_min_length = 2
[dict]
[option]

View File

@ -0,0 +1,80 @@
#
# weechat -- buffers.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[color]
current_bg = red
current_fg = lightcyan
default_bg = default
default_fg = default
hotlist_highlight_bg = default
hotlist_highlight_fg = magenta
hotlist_low_bg = default
hotlist_low_fg = white
hotlist_message_bg = default
hotlist_message_fg = 7
hotlist_private_bg = default
hotlist_private_fg = lightgreen
none_channel_bg = default
none_channel_fg = default
number = lightgreen
number_char = lightgreen
prefix_bufname = default
queries_default_bg = default
queries_default_fg = default
queries_highlight_bg = default
queries_highlight_fg = default
queries_message_bg = default
queries_message_fg = default
suffix_bufname = default
whitelist_default_bg = default
whitelist_default_fg = default
whitelist_highlight_bg = default
whitelist_highlight_fg = default
whitelist_low_bg = default
whitelist_low_fg = default
whitelist_message_bg = default
whitelist_message_fg = default
whitelist_private_bg = default
whitelist_private_fg = default
[look]
core_to_front = off
detach = 600
detach_buffer_immediately = ""
detach_buffer_immediately_level = 2
detach_display_window_number = off
detach_displayed_buffers = on
detach_free_content = off
detach_query = off
hide_merged_buffers = server
hotlist_counter = off
immune_detach_buffers = ""
indenting = off
indenting_amount = 2
indenting_number = on
jump_prev_next_visited_buffer = off
mark_inactive = off
mouse_move_buffer = on
mouse_wheel = on
name_crop_suffix = "+"
name_size_max = 0
number_char = "."
prefix = off
prefix_bufname = ""
prefix_empty = on
prefix_for_query = ""
short_names = on
show_lag = off
show_number = on
sort = number
suffix_bufname = ""
toggle_bar = on
whitelist_buffers = ""

View File

@ -0,0 +1,18 @@
#
# weechat -- charset.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[default]
decode = "iso-8859-1"
encode = ""
[decode]
[encode]

View File

@ -0,0 +1,19 @@
#
# weechat -- colorize_nicks.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[look]
blacklist_channels = ""
blacklist_nicks = "so,root"
colorize_input = off
greedy_matching = on
ignore_nicks_in_urls = off
ignore_tags = ""
min_nick_length = 2

View File

@ -0,0 +1,18 @@
#
# weechat -- exec.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[command]
default_options = ""
purge_delay = 0
[color]
flag_finished = lightred
flag_running = lightgreen

View File

@ -0,0 +1,14 @@
#
# weechat -- fifo.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[file]
enabled = on
path = "%h/weechat_fifo"

View File

@ -0,0 +1,33 @@
#
# weechat -- logger.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[look]
backlog = 20
[color]
backlog_end = default
backlog_line = default
[file]
auto_log = on
flush_delay = 120
info_lines = off
mask = "$plugin.$name.weechatlog"
name_lower_case = on
nick_prefix = ""
nick_suffix = ""
path = "%h/logs/"
replacement_char = "_"
time_format = "%Y-%m-%d %H:%M:%S"
[level]
[mask]

View File

@ -0,0 +1 @@
../buffers.pl

View File

@ -0,0 +1 @@
../highmon.pl

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,58 @@
#
# weechat -- plugins.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[var]
lua.check_license = "off"
perl.check_license = "off"
perl.highmon.alignment = "channel"
perl.highmon.away_only = "off"
perl.highmon.color_buf = "on"
perl.highmon.first_run = "true"
perl.highmon.hotlist_show = "off"
perl.highmon.logging = "off"
perl.highmon.merge_private = "off"
perl.highmon.nick_prefix = "<"
perl.highmon.nick_suffix = ">"
perl.highmon.output = "buffer"
perl.highmon.short_names = "off"
python.buffer_autoclose.age_limit = "30"
python.buffer_autoclose.ignore = ""
python.buffer_autoclose.interval = "1"
python.check_license = "off"
python.go.auto_jump = "off"
python.go.buffer_number = "on"
python.go.color_name = "black,cyan"
python.go.color_name_highlight = "red,cyan"
python.go.color_name_highlight_selected = "red,brown"
python.go.color_name_selected = "black,brown"
python.go.color_number = "yellow,magenta"
python.go.color_number_selected = "yellow,red"
python.go.fuzzy_search = "off"
python.go.message = "Go to: "
python.go.short_name = "off"
python.go.sort = "number,beginning"
python.go.use_core_instead_weechat = "off"
ruby.check_license = "off"
[desc]
python.go.auto_jump = "automatically jump to buffer when it is uniquely selected (default: "off")"
python.go.buffer_number = "display buffer number (default: "on")"
python.go.color_name = "color for buffer name (not selected) (default: "black,cyan")"
python.go.color_name_highlight = "color for highlight in buffer name (not selected) (default: "red,cyan")"
python.go.color_name_highlight_selected = "color for highlight in a selected buffer name (default: "red,brown")"
python.go.color_name_selected = "color for a selected buffer name (default: "black,brown")"
python.go.color_number = "color for buffer number (not selected) (default: "yellow,magenta")"
python.go.color_number_selected = "color for selected buffer number (default: "yellow,red")"
python.go.fuzzy_search = "search buffer matches using approximation (default: "off")"
python.go.message = "message to display before list of buffers (default: "Go to: ")"
python.go.short_name = "display and search in short names instead of buffer name (default: "off")"
python.go.sort = "comma-separated list of keys to sort buffers (the order is important, sorts are performed in the given order): name = sort by name (or short name), (default: "number,beginning")"
python.go.use_core_instead_weechat = "use name "core" instead of "weechat" for core buffer (default: "off")"

View File

@ -0,0 +1 @@
../buffer_autoclose.py

View File

@ -0,0 +1 @@
../colorize_nicks.py

View File

@ -0,0 +1 @@
../go.py

View File

@ -0,0 +1 @@
../urlgrab.py

View File

@ -0,0 +1,130 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2009 by xt <xt@bash.no>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#
# (this script requires WeeChat 0.3.0 or newer)
#
# History:
# 2016-02-05, ixti
# version 0.4: Add Python3 support
# 2009-12-15, xt
# version 0.3: moved around some control structures to not be as noisy
# 2009-12-02, xt
# version 0.2: bugfix, more printing
# 2009-12-01, xt <xt@bash.no>
# version 0.1: initial release
import weechat as w
import time
SCRIPT_NAME = "buffer_autoclose"
SCRIPT_AUTHOR = "xt <xt@bash.no>"
SCRIPT_VERSION = "0.4"
SCRIPT_LICENSE = "GPL3"
SCRIPT_DESC = "Automatically close inactive private message buffers"
settings = {
'interval': '1', # How often in minutes to check
'age_limit': '30', # How old in minutes before auto close
'ignore': '', # Buffers to ignore (use full name: server.buffer_name)
}
if w.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION, SCRIPT_LICENSE,
SCRIPT_DESC, "", ""):
for option, default_value in settings.items():
if not w.config_is_set_plugin(option):
w.config_set_plugin(option, default_value)
w.hook_timer(\
int(w.config_get_plugin('interval')) * 1000 * 60,
0,
0,
"close_time_cb",
'')
def get_all_buffers():
'''Returns list with pointers of all open buffers.'''
buffers = []
infolist = w.infolist_get('buffer', '', '')
while w.infolist_next(infolist):
buffer_type = w.buffer_get_string(w.infolist_pointer(infolist, 'pointer'), 'localvar_type')
if buffer_type == 'private': # we only close private message buffers for now
buffers.append(w.infolist_pointer(infolist, 'pointer'))
w.infolist_free(infolist)
return buffers
def get_last_line_date(buffer):
date = '1970-01-01 01:00:00'
infolist = w.infolist_get('buffer_lines', buffer, '')
while w.infolist_prev(infolist):
date = w.infolist_time(infolist, 'date')
if date != '1970-01-01 01:00:00':
# Some lines like "Day changed to" message doesn't have date
# set so loop until we find a message that does
break
w.infolist_free(infolist)
return date
def is_in_hotlist(buffer):
''' Returns true if buffer is in hotlist, false if not'''
hotlist = w.infolist_get('hotlist', '', '')
found = False
while w.infolist_next(hotlist):
thebuffer = w.infolist_pointer(hotlist, 'buffer_pointer')
if thebuffer == buffer:
found = True
name = w.buffer_get_string(thebuffer, 'short_name')
break
w.infolist_free(hotlist)
return found
def close_time_cb(buffer, args):
''' Callback for check for inactivity and close '''
for buffer in get_all_buffers():
name = w.buffer_get_string(buffer, 'name')
date = get_last_line_date(buffer)
date = time.mktime(time.strptime(date, '%Y-%m-%d %H:%M:%S'))
now = time.time()
seconds_old = now - date
if seconds_old > int(w.config_get_plugin('age_limit'))*60:
if is_in_hotlist(buffer):
#w.prnt('', '%s: Not closing buffer: %s: it is in hotlist' %(SCRIPT_NAME, name))
continue
if name in w.config_get_plugin('ignore').split(','):
#w.prnt('', '%s: Not closing buffer: %s: it is in ignore list' %(SCRIPT_NAME, name))
continue
if buffer == w.current_buffer():
# Never close current buffer
#w.prnt('', '%s: Not closing buffer: %s: it is in currently active' %(SCRIPT_NAME, name))
continue
if len(w.buffer_get_string(buffer, 'input')):
# Don't close buffers with text on input line
#w.prnt('', '%s: Not closing buffer: %s: it has input' %(SCRIPT_NAME, name))
continue
w.prnt('', '%s: Closing buffer: %s' %(SCRIPT_NAME, name))
w.command(buffer, '/buffer close')
#else:
# w.prnt('', '%s: Not closing buffer: %s: it is too new: %s' %(SCRIPT_NAME, name, seconds_old))
return w.WEECHAT_RC_OK

View File

@ -0,0 +1,355 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2010 by xt <xt@bash.no>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# This script colors nicks in IRC channels in the actual message
# not just in the prefix section.
#
#
# History:
# 2017-03-01, arza <arza@arza.us>
# version 23: don't colorize nicklist group names
# 2016-05-01, Simmo Saan <simmo.saan@gmail.com>
# version 22: invalidate cached colors on hash algorithm change
# 2015-07-28, xt
# version 21: fix problems with nicks with commas in them
# 2015-04-19, xt
# version 20: fix ignore of nicks in URLs
# 2015-04-18, xt
# version 19: new option ignore nicks in URLs
# 2015-03-03, xt
# version 18: iterate buffers looking for nicklists instead of servers
# 2015-02-23, holomorph
# version 17: fix coloring in non-channel buffers (#58)
# 2014-09-17, holomorph
# version 16: use weechat config facilities
# clean unused, minor linting, some simplification
# 2014-05-05, holomorph
# version 15: fix python2-specific re.search check
# 2013-01-29, nils_2
# version 14: make script compatible with Python 3.x
# 2012-10-19, ldvx
# version 13: Iterate over every word to prevent incorrect colorization of
# nicks. Added option greedy_matching.
# 2012-04-28, ldvx
# version 12: added ignore_tags to avoid colorizing nicks if tags are present
# 2012-01-14, nesthib
# version 11: input_text_display hook and modifier to colorize nicks in input bar
# 2010-12-22, xt
# version 10: hook config option for updating blacklist
# 2010-12-20, xt
# version 0.9: hook new config option for weechat 0.3.4
# 2010-11-01, nils_2
# version 0.8: hook_modifier() added to communicate with rainbow_text
# 2010-10-01, xt
# version 0.7: changes to support non-irc-plugins
# 2010-07-29, xt
# version 0.6: compile regexp as per patch from Chris quigybo@hotmail.com
# 2010-07-19, xt
# version 0.5: fix bug with incorrect coloring of own nick
# 2010-06-02, xt
# version 0.4: update to reflect API changes
# 2010-03-26, xt
# version 0.3: fix error with exception
# 2010-03-24, xt
# version 0.2: use ignore_channels when populating to increase performance.
# 2010-02-03, xt
# version 0.1: initial (based on ruby script by dominikh)
#
# Known issues: nicks will not get colorized if they begin with a character
# such as ~ (which some irc networks do happen to accept)
import weechat
import re
w = weechat
SCRIPT_NAME = "colorize_nicks"
SCRIPT_AUTHOR = "xt <xt@bash.no>"
SCRIPT_VERSION = "23"
SCRIPT_LICENSE = "GPL"
SCRIPT_DESC = "Use the weechat nick colors in the chat area"
VALID_NICK = r'([@~&!%+])?([-a-zA-Z0-9\[\]\\`_^\{|\}]+)'
valid_nick_re = re.compile(VALID_NICK)
ignore_channels = []
ignore_nicks = []
# Dict with every nick on every channel with its color as lookup value
colored_nicks = {}
CONFIG_FILE_NAME = "colorize_nicks"
# config file and options
colorize_config_file = ""
colorize_config_option = {}
def colorize_config_init():
'''
Initialization of configuration file.
Sections: look.
'''
global colorize_config_file, colorize_config_option
colorize_config_file = weechat.config_new(CONFIG_FILE_NAME,
"colorize_config_reload_cb", "")
if colorize_config_file == "":
return
# section "look"
section_look = weechat.config_new_section(
colorize_config_file, "look", 0, 0, "", "", "", "", "", "", "", "", "", "")
if section_look == "":
weechat.config_free(colorize_config_file)
return
colorize_config_option["blacklist_channels"] = weechat.config_new_option(
colorize_config_file, section_look, "blacklist_channels",
"string", "Comma separated list of channels", "", 0, 0,
"", "", 0, "", "", "", "", "", "")
colorize_config_option["blacklist_nicks"] = weechat.config_new_option(
colorize_config_file, section_look, "blacklist_nicks",
"string", "Comma separated list of nicks", "", 0, 0,
"so,root", "so,root", 0, "", "", "", "", "", "")
colorize_config_option["min_nick_length"] = weechat.config_new_option(
colorize_config_file, section_look, "min_nick_length",
"integer", "Minimum length nick to colorize", "",
2, 20, "", "", 0, "", "", "", "", "", "")
colorize_config_option["colorize_input"] = weechat.config_new_option(
colorize_config_file, section_look, "colorize_input",
"boolean", "Whether to colorize input", "", 0,
0, "off", "off", 0, "", "", "", "", "", "")
colorize_config_option["ignore_tags"] = weechat.config_new_option(
colorize_config_file, section_look, "ignore_tags",
"string", "Comma separated list of tags to ignore; i.e. irc_join,irc_part,irc_quit", "", 0, 0,
"", "", 0, "", "", "", "", "", "")
colorize_config_option["greedy_matching"] = weechat.config_new_option(
colorize_config_file, section_look, "greedy_matching",
"boolean", "If off, then use lazy matching instead", "", 0,
0, "on", "on", 0, "", "", "", "", "", "")
colorize_config_option["ignore_nicks_in_urls"] = weechat.config_new_option(
colorize_config_file, section_look, "ignore_nicks_in_urls",
"boolean", "If on, don't colorize nicks inside URLs", "", 0,
0, "off", "off", 0, "", "", "", "", "", "")
def colorize_config_read():
''' Read configuration file. '''
global colorize_config_file
return weechat.config_read(colorize_config_file)
def colorize_nick_color(nick, my_nick):
''' Retrieve nick color from weechat. '''
if nick == my_nick:
return w.color(w.config_string(w.config_get('weechat.color.chat_nick_self')))
else:
return w.info_get('irc_nick_color', nick)
def colorize_cb(data, modifier, modifier_data, line):
''' Callback that does the colorizing, and returns new line if changed '''
global ignore_nicks, ignore_channels, colored_nicks
full_name = modifier_data.split(';')[1]
channel = '.'.join(full_name.split('.')[1:])
buffer = w.buffer_search('', full_name)
# Check if buffer has colorized nicks
if buffer not in colored_nicks:
return line
if channel and channel in ignore_channels:
return line
min_length = w.config_integer(colorize_config_option['min_nick_length'])
reset = w.color('reset')
# Don't colorize if the ignored tag is present in message
tags_line = modifier_data.rsplit(';')
if len(tags_line) >= 3:
tags_line = tags_line[2].split(',')
for i in w.config_string(colorize_config_option['ignore_tags']).split(','):
if i in tags_line:
return line
for words in valid_nick_re.findall(line):
nick = words[1]
# Check that nick is not ignored and longer than minimum length
if len(nick) < min_length or nick in ignore_nicks:
continue
# Check that nick is in the dictionary colored_nicks
if nick in colored_nicks[buffer]:
nick_color = colored_nicks[buffer][nick]
# Let's use greedy matching. Will check against every word in a line.
if w.config_boolean(colorize_config_option['greedy_matching']):
for word in line.split():
if w.config_boolean(colorize_config_option['ignore_nicks_in_urls']) and \
word.startswith(('http://', 'https://')):
continue
if nick in word:
# Is there a nick that contains nick and has a greater lenght?
# If so let's save that nick into var biggest_nick
biggest_nick = ""
for i in colored_nicks[buffer]:
if nick in i and nick != i and len(i) > len(nick):
if i in word:
# If a nick with greater len is found, and that word
# also happens to be in word, then let's save this nick
biggest_nick = i
# If there's a nick with greater len, then let's skip this
# As we will have the chance to colorize when biggest_nick
# iterates being nick.
if len(biggest_nick) > 0 and biggest_nick in word:
pass
elif len(word) < len(biggest_nick) or len(biggest_nick) == 0:
new_word = word.replace(nick, '%s%s%s' % (nick_color, nick, reset))
line = line.replace(word, new_word)
# Let's use lazy matching for nick
else:
nick_color = colored_nicks[buffer][nick]
# The two .? are in case somebody writes "nick:", "nick,", etc
# to address somebody
regex = r"(\A|\s).?(%s).?(\Z|\s)" % re.escape(nick)
match = re.search(regex, line)
if match is not None:
new_line = line[:match.start(2)] + nick_color+nick+reset + line[match.end(2):]
line = new_line
return line
def colorize_input_cb(data, modifier, modifier_data, line):
''' Callback that does the colorizing in input '''
global ignore_nicks, ignore_channels, colored_nicks
min_length = w.config_integer(colorize_config_option['min_nick_length'])
if not w.config_boolean(colorize_config_option['colorize_input']):
return line
buffer = w.current_buffer()
# Check if buffer has colorized nicks
if buffer not in colored_nicks:
return line
channel = w.buffer_get_string(buffer, 'name')
if channel and channel in ignore_channels:
return line
reset = w.color('reset')
for words in valid_nick_re.findall(line):
nick = words[1]
# Check that nick is not ignored and longer than minimum length
if len(nick) < min_length or nick in ignore_nicks:
continue
if nick in colored_nicks[buffer]:
nick_color = colored_nicks[buffer][nick]
line = line.replace(nick, '%s%s%s' % (nick_color, nick, reset))
return line
def populate_nicks(*args):
''' Fills entire dict with all nicks weechat can see and what color it has
assigned to it. '''
global colored_nicks
colored_nicks = {}
buffers = w.infolist_get('buffer', '', '')
while w.infolist_next(buffers):
buffer_ptr = w.infolist_pointer(buffers, 'pointer')
my_nick = w.buffer_get_string(buffer_ptr, 'localvar_nick')
nicklist = w.infolist_get('nicklist', buffer_ptr, '')
while w.infolist_next(nicklist):
if buffer_ptr not in colored_nicks:
colored_nicks[buffer_ptr] = {}
if w.infolist_string(nicklist, 'type') != 'nick':
continue
nick = w.infolist_string(nicklist, 'name')
nick_color = colorize_nick_color(nick, my_nick)
colored_nicks[buffer_ptr][nick] = nick_color
w.infolist_free(nicklist)
w.infolist_free(buffers)
return w.WEECHAT_RC_OK
def add_nick(data, signal, type_data):
''' Add nick to dict of colored nicks '''
global colored_nicks
# Nicks can have , in them in some protocols
splitted = type_data.split(',')
pointer = splitted[0]
nick = ",".join(splitted[1:])
if pointer not in colored_nicks:
colored_nicks[pointer] = {}
my_nick = w.buffer_get_string(pointer, 'localvar_nick')
nick_color = colorize_nick_color(nick, my_nick)
colored_nicks[pointer][nick] = nick_color
return w.WEECHAT_RC_OK
def remove_nick(data, signal, type_data):
''' Remove nick from dict with colored nicks '''
global colored_nicks
# Nicks can have , in them in some protocols
splitted = type_data.split(',')
pointer = splitted[0]
nick = ",".join(splitted[1:])
if pointer in colored_nicks and nick in colored_nicks[pointer]:
del colored_nicks[pointer][nick]
return w.WEECHAT_RC_OK
def update_blacklist(*args):
''' Set the blacklist for channels and nicks. '''
global ignore_channels, ignore_nicks
ignore_channels = w.config_string(colorize_config_option['blacklist_channels']).split(',')
ignore_nicks = w.config_string(colorize_config_option['blacklist_nicks']).split(',')
return w.WEECHAT_RC_OK
if __name__ == "__main__":
if w.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION, SCRIPT_LICENSE,
SCRIPT_DESC, "", ""):
colorize_config_init()
colorize_config_read()
# Run once to get data ready
update_blacklist()
populate_nicks()
w.hook_signal('nicklist_nick_added', 'add_nick', '')
w.hook_signal('nicklist_nick_removed', 'remove_nick', '')
w.hook_modifier('weechat_print', 'colorize_cb', '')
# Hook config for changing colors
w.hook_config('weechat.color.chat_nick_colors', 'populate_nicks', '')
w.hook_config('weechat.look.nick_color_hash', 'populate_nicks', '')
# Hook for working togheter with other scripts (like colorize_lines)
w.hook_modifier('colorize_nicks', 'colorize_cb', '')
# Hook for modifying input
w.hook_modifier('250|input_text_display', 'colorize_input_cb', '')
# Hook for updating blacklist (this could be improved to use fnmatch)
weechat.hook_config('%s.look.blacklist*' % SCRIPT_NAME, 'update_blacklist', '')

View File

@ -0,0 +1,561 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2009-2014 Sébastien Helleu <flashcode@flashtux.org>
# Copyright (C) 2010 m4v <lambdae2@gmail.com>
# Copyright (C) 2011 stfn <stfnmd@googlemail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#
# History:
#
# 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>:
# version 2.4: fix syntax and indentation error
# 2017-02-25, Simmo Saan <simmo.saan@gmail.com>
# version 2.3: fix fuzzy search breaking buffer number search display
# 2016-01-28, ylambda <ylambda@koalabeast.com>
# version 2.2: add option "fuzzy_search"
# 2015-11-12, nils_2 <weechatter@arcor.de>
# version 2.1: fix problem with buffer short_name "weechat", using option
# "use_core_instead_weechat", see:
# https://github.com/weechat/weechat/issues/574
# 2014-05-12, Sébastien Helleu <flashcode@flashtux.org>:
# version 2.0: add help on options, replace option "sort_by_activity" by
# "sort" (add sort by name and first match at beginning of
# name and by number), PEP8 compliance
# 2012-11-26, Nei <anti.teamidiot.de>
# version 1.9: add auto_jump option to automatically go to buffer when it
# is uniquely selected
# 2012-09-17, Sébastien Helleu <flashcode@flashtux.org>:
# version 1.8: fix jump to non-active merged buffers (jump with buffer name
# instead of number)
# 2012-01-03 nils_2 <weechatter@arcor.de>
# version 1.7: add option "use_core_instead_weechat"
# 2012-01-03, Sébastien Helleu <flashcode@flashtux.org>:
# version 1.6: make script compatible with Python 3.x
# 2011-08-24, stfn <stfnmd@googlemail.com>:
# version 1.5: /go with name argument jumps directly to buffer
# Remember cursor position in buffer input
# 2011-05-31, Elián Hanisch <lambdae2@gmail.com>:
# version 1.4: Sort list of buffers by activity.
# 2011-04-25, Sébastien Helleu <flashcode@flashtux.org>:
# version 1.3: add info "go_running" (used by script input_lock.rb)
# 2010-11-01, Sébastien Helleu <flashcode@flashtux.org>:
# version 1.2: use high priority for hooks to prevent conflict with other
# plugins/scripts (WeeChat >= 0.3.4 only)
# 2010-03-25, Elián Hanisch <lambdae2@gmail.com>:
# version 1.1: use a space to match the end of a string
# 2009-11-16, Sébastien Helleu <flashcode@flashtux.org>:
# version 1.0: add new option to display short names
# 2009-06-15, Sébastien Helleu <flashcode@flashtux.org>:
# version 0.9: fix typo in /help go with command /key
# 2009-05-16, Sébastien Helleu <flashcode@flashtux.org>:
# version 0.8: search buffer by number, fix bug when window is split
# 2009-05-03, Sébastien Helleu <flashcode@flashtux.org>:
# version 0.7: eat tab key (do not complete input, just move buffer
# pointer)
# 2009-05-02, Sébastien Helleu <flashcode@flashtux.org>:
# version 0.6: sync with last API changes
# 2009-03-22, Sébastien Helleu <flashcode@flashtux.org>:
# version 0.5: update modifier signal name for input text display,
# fix arguments for function string_remove_color
# 2009-02-18, Sébastien Helleu <flashcode@flashtux.org>:
# version 0.4: do not hook command and init options if register failed
# 2009-02-08, Sébastien Helleu <flashcode@flashtux.org>:
# version 0.3: case insensitive search for buffers names
# 2009-02-08, Sébastien Helleu <flashcode@flashtux.org>:
# version 0.2: add help about Tab key
# 2009-02-08, Sébastien Helleu <flashcode@flashtux.org>:
# version 0.1: initial release
#
"""
Quick jump to buffers.
(this script requires WeeChat 0.3.0 or newer)
"""
from __future__ import print_function
SCRIPT_NAME = 'go'
SCRIPT_AUTHOR = 'Sébastien Helleu <flashcode@flashtux.org>'
SCRIPT_VERSION = '2.5'
SCRIPT_LICENSE = 'GPL3'
SCRIPT_DESC = 'Quick jump to buffers'
SCRIPT_COMMAND = 'go'
IMPORT_OK = True
try:
import weechat
except ImportError:
print('This script must be run under WeeChat.')
print('Get WeeChat now at: http://www.weechat.org/')
IMPORT_OK = False
import re
# script options
SETTINGS = {
'color_number': (
'yellow,magenta',
'color for buffer number (not selected)'),
'color_number_selected': (
'yellow,red',
'color for selected buffer number'),
'color_name': (
'black,cyan',
'color for buffer name (not selected)'),
'color_name_selected': (
'black,brown',
'color for a selected buffer name'),
'color_name_highlight': (
'red,cyan',
'color for highlight in buffer name (not selected)'),
'color_name_highlight_selected': (
'red,brown',
'color for highlight in a selected buffer name'),
'message': (
'Go to: ',
'message to display before list of buffers'),
'short_name': (
'off',
'display and search in short names instead of buffer name'),
'sort': (
'number,beginning',
'comma-separated list of keys to sort buffers '
'(the order is important, sorts are performed in the given order): '
'name = sort by name (or short name), ',
'hotlist = sort by hotlist order, '
'number = first match a buffer number before digits in name, '
'beginning = first match at beginning of names (or short names); '
'the default sort of buffers is by numbers'),
'use_core_instead_weechat': (
'off',
'use name "core" instead of "weechat" for core buffer'),
'auto_jump': (
'off',
'automatically jump to buffer when it is uniquely selected'),
'fuzzy_search': (
'off',
'search buffer matches using approximation'),
'buffer_number': (
'on',
'display buffer number'),
}
# hooks management
HOOK_COMMAND_RUN = {
'input': ('/input *', 'go_command_run_input'),
'buffer': ('/buffer *', 'go_command_run_buffer'),
'window': ('/window *', 'go_command_run_window'),
}
hooks = {}
# input before command /go (we'll restore it later)
saved_input = ''
saved_input_pos = 0
# last user input (if changed, we'll update list of matching buffers)
old_input = None
# matching buffers
buffers = []
buffers_pos = 0
def go_option_enabled(option):
"""Checks if a boolean script option is enabled or not."""
return weechat.config_string_to_boolean(weechat.config_get_plugin(option))
def go_info_running(data, info_name, arguments):
"""Returns "1" if go is running, otherwise "0"."""
return '1' if 'modifier' in hooks else '0'
def go_unhook_one(hook):
"""Unhook something hooked by this script."""
global hooks
if hook in hooks:
weechat.unhook(hooks[hook])
del hooks[hook]
def go_unhook_all():
"""Unhook all."""
go_unhook_one('modifier')
for hook in HOOK_COMMAND_RUN:
go_unhook_one(hook)
def go_hook_all():
"""Hook command_run and modifier."""
global hooks
priority = ''
version = weechat.info_get('version_number', '') or 0
# use high priority for hook to prevent conflict with other plugins/scripts
# (WeeChat >= 0.3.4 only)
if int(version) >= 0x00030400:
priority = '2000|'
for hook, value in HOOK_COMMAND_RUN.items():
if hook not in hooks:
hooks[hook] = weechat.hook_command_run(
'%s%s' % (priority, value[0]),
value[1], '')
if 'modifier' not in hooks:
hooks['modifier'] = weechat.hook_modifier(
'input_text_display_with_cursor', 'go_input_modifier', '')
def go_start(buf):
"""Start go on buffer."""
global saved_input, saved_input_pos, old_input, buffers_pos
go_hook_all()
saved_input = weechat.buffer_get_string(buf, 'input')
saved_input_pos = weechat.buffer_get_integer(buf, 'input_pos')
weechat.buffer_set(buf, 'input', '')
old_input = None
buffers_pos = 0
def go_end(buf):
"""End go on buffer."""
global saved_input, saved_input_pos, old_input
go_unhook_all()
weechat.buffer_set(buf, 'input', saved_input)
weechat.buffer_set(buf, 'input_pos', str(saved_input_pos))
old_input = None
def go_match_beginning(buf, string):
"""Check if a string matches the beginning of buffer name/short name."""
if not string:
return False
esc_str = re.escape(string)
if re.search(r'^#?' + esc_str, buf['name']) \
or re.search(r'^#?' + esc_str, buf['short_name']):
return True
return False
def go_match_fuzzy(name, string):
"""Check if string matches name using approximation."""
if not string:
return False
name_len = len(name)
string_len = len(string)
if string_len > name_len:
return False
if name_len == string_len:
return name == string
# Attempt to match all chars somewhere in name
prev_index = -1
for i, char in enumerate(string):
index = name.find(char, prev_index+1)
if index == -1:
return False
prev_index = index
return True
def go_now(buf, args):
"""Go to buffer specified by args."""
listbuf = go_matching_buffers(args)
if not listbuf:
return
# prefer buffer that matches at beginning (if option is enabled)
if 'beginning' in weechat.config_get_plugin('sort').split(','):
for index in range(len(listbuf)):
if go_match_beginning(listbuf[index], args):
weechat.command(buf,
'/buffer ' + str(listbuf[index]['full_name']))
return
# jump to first buffer in matching buffers by default
weechat.command(buf, '/buffer ' + str(listbuf[0]['full_name']))
def go_cmd(data, buf, args):
"""Command "/go": just hook what we need."""
global hooks
if args:
go_now(buf, args)
elif 'modifier' in hooks:
go_end(buf)
else:
go_start(buf)
return weechat.WEECHAT_RC_OK
def go_matching_buffers(strinput):
"""Return a list with buffers matching user input."""
global buffers_pos
listbuf = []
if len(strinput) == 0:
buffers_pos = 0
strinput = strinput.lower()
infolist = weechat.infolist_get('buffer', '', '')
while weechat.infolist_next(infolist):
short_name = weechat.infolist_string(infolist, 'short_name')
if go_option_enabled('short_name'):
name = weechat.infolist_string(infolist, 'short_name')
else:
name = weechat.infolist_string(infolist, 'name')
if name == 'weechat' \
and go_option_enabled('use_core_instead_weechat') \
and weechat.infolist_string(infolist, 'plugin_name') == 'core':
name = 'core'
number = weechat.infolist_integer(infolist, 'number')
full_name = weechat.infolist_string(infolist, 'full_name')
if not full_name:
full_name = '%s.%s' % (
weechat.infolist_string(infolist, 'plugin_name'),
weechat.infolist_string(infolist, 'name'))
pointer = weechat.infolist_pointer(infolist, 'pointer')
matching = name.lower().find(strinput) >= 0
if not matching and strinput[-1] == ' ':
matching = name.lower().endswith(strinput.strip())
if not matching and go_option_enabled('fuzzy_search'):
matching = go_match_fuzzy(name.lower(), strinput)
if not matching and strinput.isdigit():
matching = str(number).startswith(strinput)
if len(strinput) == 0 or matching:
listbuf.append({
'number': number,
'short_name': short_name,
'name': name,
'full_name': full_name,
'pointer': pointer,
})
weechat.infolist_free(infolist)
# sort buffers
hotlist = []
infolist = weechat.infolist_get('hotlist', '', '')
while weechat.infolist_next(infolist):
hotlist.append(
weechat.infolist_pointer(infolist, 'buffer_pointer'))
weechat.infolist_free(infolist)
last_index_hotlist = len(hotlist)
def _sort_name(buf):
"""Sort buffers by name (or short name)."""
return buf['name']
def _sort_hotlist(buf):
"""Sort buffers by hotlist order."""
try:
return hotlist.index(buf['pointer'])
except ValueError:
# not in hotlist, always last.
return last_index_hotlist
def _sort_match_number(buf):
"""Sort buffers by match on number."""
return 0 if str(buf['number']) == strinput else 1
def _sort_match_beginning(buf):
"""Sort buffers by match at beginning."""
return 0 if go_match_beginning(buf, strinput) else 1
funcs = {
'name': _sort_name,
'hotlist': _sort_hotlist,
'number': _sort_match_number,
'beginning': _sort_match_beginning,
}
for key in weechat.config_get_plugin('sort').split(','):
if key in funcs:
listbuf = sorted(listbuf, key=funcs[key])
if not strinput:
index = [i for i, buf in enumerate(listbuf)
if buf['pointer'] == weechat.current_buffer()]
if index:
buffers_pos = index[0]
return listbuf
def go_buffers_to_string(listbuf, pos, strinput):
"""Return string built with list of buffers found (matching user input)."""
string = ''
strinput = strinput.lower()
for i in range(len(listbuf)):
selected = '_selected' if i == pos else ''
buffer_name = listbuf[i]['name']
index = buffer_name.lower().find(strinput)
if index >= 0:
index2 = index + len(strinput)
name = '%s%s%s%s%s' % (
buffer_name[:index],
weechat.color(weechat.config_get_plugin(
'color_name_highlight' + selected)),
buffer_name[index:index2],
weechat.color(weechat.config_get_plugin(
'color_name' + selected)),
buffer_name[index2:])
elif go_option_enabled("fuzzy_search") and \
go_match_fuzzy(buffer_name.lower(), strinput):
name = ""
prev_index = -1
for char in strinput.lower():
index = buffer_name.lower().find(char, prev_index+1)
if prev_index < 0:
name += buffer_name[:index]
name += weechat.color(weechat.config_get_plugin(
'color_name_highlight' + selected))
if prev_index >= 0 and index > prev_index+1:
name += weechat.color(weechat.config_get_plugin(
'color_name' + selected))
name += buffer_name[prev_index+1:index]
name += weechat.color(weechat.config_get_plugin(
'color_name_highlight' + selected))
name += buffer_name[index]
prev_index = index
name += weechat.color(weechat.config_get_plugin(
'color_name' + selected))
name += buffer_name[prev_index+1:]
else:
name = buffer_name
string += ' '
if go_option_enabled('buffer_number'):
string += '%s%s' % (
weechat.color(weechat.config_get_plugin(
'color_number' + selected)),
str(listbuf[i]['number']))
string += '%s%s%s' % (
weechat.color(weechat.config_get_plugin(
'color_name' + selected)),
name,
weechat.color('reset'))
return ' ' + string if string else ''
def go_input_modifier(data, modifier, modifier_data, string):
"""This modifier is called when input text item is built by WeeChat.
This is commonly called after changes in input or cursor move: it builds
a new input with prefix ("Go to:"), and suffix (list of buffers found).
"""
global old_input, buffers, buffers_pos
if modifier_data != weechat.current_buffer():
return ''
names = ''
new_input = weechat.string_remove_color(string, '')
new_input = new_input.lstrip()
if old_input is None or new_input != old_input:
old_buffers = buffers
buffers = go_matching_buffers(new_input)
if buffers != old_buffers and len(new_input) > 0:
if len(buffers) == 1 and go_option_enabled('auto_jump'):
weechat.command(modifier_data, '/wait 1ms /input return')
buffers_pos = 0
old_input = new_input
names = go_buffers_to_string(buffers, buffers_pos, new_input.strip())
return weechat.config_get_plugin('message') + string + names
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:
# search text or jump to another buffer is forbidden now
return weechat.WEECHAT_RC_OK_EAT
elif command == '/input complete_next':
# choose next buffer in list
buffers_pos += 1
if buffers_pos >= len(buffers):
buffers_pos = 0
weechat.hook_signal_send('input_text_changed',
weechat.WEECHAT_HOOK_SIGNAL_STRING, '')
return weechat.WEECHAT_RC_OK_EAT
elif command == '/input complete_previous':
# choose previous buffer in list
buffers_pos -= 1
if buffers_pos < 0:
buffers_pos = len(buffers) - 1
weechat.hook_signal_send('input_text_changed',
weechat.WEECHAT_HOOK_SIGNAL_STRING, '')
return weechat.WEECHAT_RC_OK_EAT
elif command == '/input return':
# switch to selected buffer (if any)
go_end(buf)
if len(buffers) > 0:
weechat.command(
buf, '/buffer ' + str(buffers[buffers_pos]['full_name']))
return weechat.WEECHAT_RC_OK_EAT
return weechat.WEECHAT_RC_OK
def go_command_run_buffer(data, buf, command):
"""Function called when a command "/buffer xxx" is run."""
return weechat.WEECHAT_RC_OK_EAT
def go_command_run_window(data, buf, command):
"""Function called when a command "/window xxx" is run."""
return weechat.WEECHAT_RC_OK_EAT
def go_unload_script():
"""Function called when script is unloaded."""
go_unhook_all()
return weechat.WEECHAT_RC_OK
def go_main():
"""Entry point."""
if not weechat.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION,
SCRIPT_LICENSE, SCRIPT_DESC,
'go_unload_script', ''):
return
weechat.hook_command(
SCRIPT_COMMAND,
'Quick jump to buffers', '[name]',
'name: directly jump to buffer by name (without argument, list is '
'displayed)\n\n'
'You can bind command to a key, for example:\n'
' /key bind meta-g /go\n\n'
'You can use completion key (commonly Tab and shift-Tab) to select '
'next/previous buffer in list.',
'%(buffers_names)',
'go_cmd', '')
# set default settings
version = weechat.info_get('version_number', '') or 0
for option, value in SETTINGS.items():
if not weechat.config_is_set_plugin(option):
weechat.config_set_plugin(option, value[0])
if int(version) >= 0x00030500:
weechat.config_set_desc_plugin(
option, '%s (default: "%s")' % (value[1], value[0]))
weechat.hook_info('go_running',
'Return "1" if go is running, otherwise "0"',
'',
'go_info_running', '')
if __name__ == "__main__" and IMPORT_OK:
go_main()

View File

@ -0,0 +1,687 @@
#
# UrlGrab, for weechat version >= 0.3.0
#
# Listens to all channels for URLs, collects them in a list, and launches
# them in your favourite web server on the local host or a remote server.
# Copies url to X11 clipboard via xsel
# (http://www.vergenet.net/~conrad/software/xsel)
#
# Usage:
#
# The /url command provides access to all UrlGrab functions. Run
# '/help url' for complete command usage.
#
# In general, use '/url list' to list the entire url list for the current
# channel, and '/url <n>' to launch the nth url in the list. For
# example, to launch the first (and most-recently added) url in the list,
# you would run '/url 1'
#
# From the server window, you must specify a specific channel for the
# list and launch commands, for example:
# /url list weechat
# /url 3 weechat
#
# Configuration:
#
# The '/url set' command lets you get and set the following options:
#
# historysize
# The maximum number of URLs saved per channel. Default is 10
#
# method
# Must be one of 'local' or 'remote' - Defines how URLs are launched by
# the script. If 'local', the script will run 'localcmd' on the host.
# If 'remote', the script will run 'remotessh remotehost remotecmd' on
# the local host which should normally use ssh to connect to another
# host and run the browser command there.
#
# localcmd
# The command to run on the local host to launch URLs in 'local' mode.
# The string '%s' will be replaced with the URL. The default is
# 'firefox %s'.
#
# remotessh
# The command (and arguments) used to connect to the remote host for
# 'remote' mode. The default is 'ssh -x' which will connect as the
# current username via ssh and disable X11 forwarding.
#
# remotehost
# The remote host to which we will connect in 'remote' mode. For ssh,
# this can just be a hostname or 'user@host' to specify a username
# other than your current login name. The default is 'localhost'.
#
# remotecmd
# The command to execute on the remote host for 'remote' mode. The
# default is 'bash -c "DISPLAY=:0.0 firefox '%s'"' Which runs bash, sets
# up the environment to display on the remote host's main X display,
# and runs firefox. As with 'localcmd', the string '%s' will be
# replaced with the URL.
#
# cmdoutput
# The file where the command output (if any) is saved. Overwritten
# each time you launch a new URL. Default is ~/.weechat/urllaunch.log
#
# default
# The command that will be run if no arguemnts to /url are given.
# Default is show
#
# Requirements:
#
# - Designed to run with weechat version 0.3 or better.
# http://www.weechat.org/
#
# Acknowlegements:
#
# - Based on an earlier version called 'urlcollector.py' by 'kolter' of
# irc.freenode.net/#weechat Honestly, I just cleaned up the code a bit and
# made the settings a little more useful (to me).
#
# - With changes by Leonid Evdokimov (weechat at darkk dot net another dot ru):
# http://darkk.net.ru/weechat/urlgrab.py
# v1.1: added better handling of dead zombie-childs
# added parsing of private messages
# added default command setting
# added parsing of scrollback buffers on load
# v1.2: `historysize` was ignored
#
# - With changes by ExclusivE (exclusive_tm at mail dot ru):
# v1.3: X11 clipboard support
#
# - V1.4 Just ported it over to weechat 0.2.7 drubin AT smartcube dot co dot za
# - V1.5 1) I created a logging feature for urls, Time, Date, buffer, and url.
# 2) Added selectable urls support, similar to the iset plugin (Thanks FlashCode)
# 3) Colors/formats are configuarable.
# 4) browser now uses hook_process (Please test with remote clients)
# 5) Added /url open http://url.com functionality
# 6) Changed urls detection to use regexpressions so should be much better
# Thanks to xt of #weechat bassed on on urlbar.py
# - V1.6 FlashCode <flashcode@flashtux.org>: Increase timeout for hook_process
# (from 1 second to 1 minute)
# - V1.7 FlashCode <flashcode@flashtux.org>: Update WeeChat site
# - V1.8 drubin <drubin [at] smartcube . co.za>:
# - Changed remote cmd to be single option
# - Added scrolling on up and down arrow keys for /url show
# - Changed remotecmd to include options with public/private keys password auth doesn't work
# - V1.9 Specimen <spinifer [at] gmail . com>:
# - Changed the default command when /url is run with no arguments to 'show'
# - Removed '/url help' command, because /help <command> is the standard way
# - V2.0 Xilov: replace "/url help" by "/help url"
# - V2.1 nand: Changed default: firefox %s to firefox '%s' (localcmd)
# - V2.2 Sebastien Helleu <flashcode@flashtux.org>: fix reload of config file
# - V2.3 nand: Allowed trailing )s for unmatched (s in URLs
# - V2.4 nand: Escaped URLs via URL-encoding instead of shell escaping, fixes '
# - V2.5 nand: Fixed some URLs that got incorrectly mangled by escaping
# - V2.6 nesthib: Fixed escaping of "="
# Added missing quotes in default parameter (firefox '%s')
# Removed the mix of tabs and spaces in the file indentation
# - V2.7 dobbymoodge <john.w.lamb [at] gmail . com>
# ( https://github.com/dobbymoodge/ ):
# - Added 'copycmd' setting, users can set command to pipe into
# for '/url copy'
# - V2.8 Simmo Saan <simmo.saan@gmail.com>:
# - Changed print hook to ignore filtered lines
#
# Copyright (C) 2005 David Rubin <drubin AT smartcube dot co dot za>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.
#
import sys
import os
try:
import weechat
import_ok = True
except:
print "This script must be run under WeeChat."
print "Get WeeChat now at: http://www.weechat.org/"
import_ok = False
import subprocess
import time
import urllib
import re
from UserDict import UserDict
octet = r'(?:2(?:[0-4]\d|5[0-5])|1\d\d|\d{1,2})'
ipAddr = r'%s(?:\.%s){3}' % (octet, octet)
# Base domain regex off RFC 1034 and 1738
label = r'[0-9a-z][-0-9a-z]*[0-9a-z]?'
domain = r'%s(?:\.%s)*\.[a-z][-0-9a-z]*[a-z]?' % (label, label)
urlRe = re.compile(r'(\w+://(?:%s|%s)(?::\d+)?(?:/[^\]>\s]*)?)' % (domain, ipAddr), re.I)
SCRIPT_NAME = "urlgrab"
SCRIPT_AUTHOR = "David Rubin <drubin [At] smartcube [dot] co [dot] za>"
SCRIPT_VERSION = "2.8"
SCRIPT_LICENSE = "GPL"
SCRIPT_DESC = "Url functionality Loggin, opening of browser, selectable links"
CONFIG_FILE_NAME= "urlgrab"
SCRIPT_COMMAND = "url"
def stripParens(url):
return dropChar(')', url.count(')') - url.count('('), url[::-1])[::-1]
def dropChar(c, n, xs):
if n == 0 or xs == []:
return xs
elif xs[0] == c:
return dropChar(c, n-1, xs[1:])
else:
return xs
def urlGrabPrint(message):
bufferd=weechat.current_buffer()
if urlGrabSettings['output_main_buffer'] == 1 :
weechat.prnt("","[%s] %s" % ( SCRIPT_NAME, message ) )
else :
weechat.prnt(bufferd,"[%s] %s" % ( SCRIPT_NAME, message ) )
def hashBufferName(bufferp):
if not weechat.buffer_get_string(bufferp, "short_name"):
bufferd = weechat.buffer_get_string(bufferp, "name")
else:
bufferd = weechat.buffer_get_string(bufferp, "short_name")
return bufferd
def ug_config_reload_cb(data, config_file):
""" Reload configuration file. """
return weechat.config_reload(config_file)
class UrlGrabSettings(UserDict):
def __init__(self):
UserDict.__init__(self)
self.data = {}
self.config_file = weechat.config_new(CONFIG_FILE_NAME,
"ug_config_reload_cb", "")
if not self.config_file:
return
section_color = weechat.config_new_section(
self.config_file, "color", 0, 0, "", "", "", "", "", "",
"", "", "", "")
section_default = weechat.config_new_section(
self.config_file, "default", 0, 0, "", "", "", "", "", "",
"", "", "", "")
self.data['color_buffer']=weechat.config_new_option(
self.config_file, section_color,
"color_buffer", "color", "Color to display buffer name", "", 0, 0,
"red", "red", 0, "", "", "", "", "", "")
self.data['color_url']=weechat.config_new_option(
self.config_file, section_color,
"color_url", "color", "Color to display urls", "", 0, 0,
"blue", "blue", 0, "", "", "", "", "", "")
self.data['color_time']=weechat.config_new_option(
self.config_file, section_color,
"color_time", "color", "Color to display time", "", 0, 0,
"cyan", "cyan", 0, "", "", "", "", "", "")
self.data['color_buffer_selected']=weechat.config_new_option(
self.config_file, section_color,
"color_buffer_selected", "color",
"Color to display buffer selected name", "", 0, 0, "red", "red",
0, "", "", "", "", "", "")
self.data['color_url_selected']=weechat.config_new_option(
self.config_file, section_color,
"color_url_selected", "color", "Color to display url selected",
"", 0, 0, "blue", "blue", 0, "", "", "", "", "", "")
self.data['color_time_selected']=weechat.config_new_option(
self.config_file, section_color,
"color_time_selected", "color", "Color to display tim selected",
"", 0, 0, "cyan", "cyan", 0, "", "", "", "", "", "")
self.data['color_bg_selected']=weechat.config_new_option(
self.config_file, section_color,
"color_bg_selected", "color", "Background for selected row", "", 0, 0,
"green", "green", 0, "", "", "", "", "", "")
self.data['historysize']=weechat.config_new_option(
self.config_file, section_default,
"historysize", "integer", "Max number of urls to store per buffer",
"", 0, 999, "10", "10", 0, "", "", "", "", "", "")
self.data['method']=weechat.config_new_option(
self.config_file, section_default,
"method", "string", """Where to launch URLs
If 'local', runs %localcmd%.
If 'remote' runs the following command:
'%remodecmd%'""", "", 0, 0,
"local", "local", 0, "", "", "", "", "", "")
self.data['copycmd']=weechat.config_new_option(
self.config_file, section_default,
"copycmd", "string",
"Command to pipe into for 'url copy'. "
"E.g. to copy into the CLIPBOARD buffer "
"instead of PRIMARY, you can use 'xsel -b "
"-i' here.", "", 0, 0,
"xsel -i", "xsel -i", 0, "", "", "", "", "", "")
self.data['localcmd']=weechat.config_new_option(
self.config_file, section_default,
"localcmd", "string", """Local command to execute""", "", 0, 0,
"firefox '%s'", "firefox '%s'", 0, "", "", "", "", "", "")
remotecmd="ssh -x localhost -i ~/.ssh/id_rsa -C \"export DISPLAY=\":0.0\" && firefox '%s'\""
self.data['remotecmd']=weechat.config_new_option(
self.config_file, section_default,
"remotecmd", "string", remotecmd, "", 0, 0,
remotecmd, remotecmd, 0, "", "", "", "", "", "")
self.data['url_log']=weechat.config_new_option(
self.config_file, section_default,
"url_log", "string", """log location""", "", 0, 0,
"~/.weechat/urls.log", "~/.weechat/urls.log", 0, "", "", "", "", "", "")
self.data['time_format']=weechat.config_new_option(
self.config_file, section_default,
"time_format", "string", """TIme format""", "", 0, 0,
"%H:%M:%S", "%H:%M:%S", 0, "", "", "", "", "", "")
self.data['output_main_buffer']=weechat.config_new_option(
self.config_file, section_default,
"output_main_buffer", "boolean",
"""Print text to main buffer or current one""", "", 0, 0, "1", "1",
0, "", "", "", "", "", "")
weechat.config_read(self.config_file)
def __getitem__(self, key):
if key == "historysize":
return weechat.config_integer(self.data[key])
elif key == 'output_main_buffer':
return weechat.config_boolean(self.data[key])
#elif key.startswith('color'):
# return weechat.config_color(self.data[key])
else:
return weechat.config_string(self.data[key])
def prnt(self, name, verbose = True):
weechat.prnt( ""," %s = %s" % (name.ljust(11), self.data[name]) )
def prntall(self):
for key in self.names():
self.prnt(key, verbose = False)
def createCmd(self, url):
str =""
if self['method'] == 'remote':
str = self['remotecmd'] % url
else:
str = self['localcmd'] % url
return str
class UrlGrabber:
def __init__(self, historysize):
# init
self.urls = {}
self.globalUrls = []
self.historysize = 5
# control
self.setHistorysize(historysize)
def setHistorysize(self, count):
if count > 1:
self.historysize = count
def getHistorysize(self):
return self.historysize
def addUrl(self, bufferp,url ):
global urlGrabSettings
self.globalUrls.insert(0,{"buffer":bufferp,
"url":url, "time":time.strftime(urlGrabSettings["time_format"])})
#Log urls only if we have set a log path.
if urlGrabSettings['url_log']:
try :
index = self.globalUrls[0]
logfile = os.path.expanduser(urlGrabSettings['url_log'])
dout = open(logfile, "a")
dout.write("%s %s %s\n" % (index['time'],
index['buffer'], index['url']))
dout.close()
except :
print "failed to log url check that %s is valid path" % urlGrabSettings['url_log']
pass
# check for buffer
if not bufferp in self.urls:
self.urls[bufferp] = []
# add url
if url in self.urls[bufferp]:
self.urls[bufferp].remove(url)
self.urls[bufferp].insert(0, url)
# removing old urls
while len(self.urls[bufferp]) > self.historysize:
self.urls[bufferp].pop()
def hasIndex( self, bufferp, index ):
return bufferp in self.urls and \
len(self.url[bufferp]) >= index
def hasBuffer( self, bufferp ):
return bufferp in self.urls
def getUrl(self, bufferp, index):
url = ""
if bufferp in self.urls:
if len(self.urls[bufferp]) >= index:
url = self.urls[bufferp][index-1]
return url
def prnt(self, buff):
found = True
if self.urls.has_key(buff):
if len(self.urls[buff]) > 0:
i = 1
for url in self.urls[buff]:
urlGrabPrint("--> " + str(i) + " : " + url)
i += 1
else:
found = False
elif buff == "*":
for b in self.urls.keys():
self.prnt(b)
else:
found = False
if not found:
urlGrabPrint(buff + ": no entries")
def urlGrabCheckMsgline(bufferp, message, isdisplayed):
global urlGrab, max_buffer_length
if not message or isdisplayed == 0:
return
# Ignore output from 'tinyurl.py' and our selfs
if ( message.startswith( "[AKA] http://tinyurl.com" ) or
message.startswith("[urlgrab]") ):
return
# Check for URLs
for url in urlRe.findall(message):
urlGrab.addUrl(bufferp,stripParens(url))
if max_buffer_length < len(bufferp):
max_buffer_length = len(bufferp)
if urlgrab_buffer:
refresh()
def urlGrabCheck(data, bufferp, uber_empty, tagsn, isdisplayed, ishilight, prefix, message):
urlGrabCheckMsgline(hashBufferName(bufferp), message, isdisplayed)
return weechat.WEECHAT_RC_OK
def urlGrabCopy(bufferd, index):
global urlGrab
if bufferd == "":
urlGrabPrint( "No current channel, you must activate one" )
elif not urlGrab.hasBuffer(bufferd):
urlGrabPrint("No URL found - Invalid channel")
else:
if index <= 0:
urlGrabPrint("No URL found - Invalid index")
return
url = urlGrab.getUrl(bufferd,index)
if url == "":
urlGrabPrint("No URL found - Invalid index")
else:
try:
pipe = os.popen(urlGrabSettings['copycmd'],"w")
pipe.write(url)
pipe.close()
urlGrabPrint("Url: %s gone to clipboard." % url)
except:
urlGrabPrint("Url: %s failed to copy to clipboard." % url)
def urlGrabOpenUrl(url):
global urlGrab, urlGrabSettings
argl = urlGrabSettings.createCmd( urllib.quote(url, '/:#%?&+=') )
weechat.hook_process(argl,60000, "ug_open_cb", "")
def ug_open_cb(data, command, code, out, err):
#print out
#print err
return weechat.WEECHAT_RC_OK
def urlGrabOpen(bufferd, index):
global urlGrab, urlGrabSettings
if bufferd == "":
urlGrabPrint( "No current channel, you must specify one" )
elif not urlGrab.hasBuffer(bufferd) :
urlGrabPrint("No URL found - Invalid channel")
else:
if index <= 0:
urlGrabPrint("No URL found - Invalid index")
return
url = urlGrab.getUrl(bufferd,index)
if url == "":
urlGrabPrint("No URL found - Invalid index")
else:
urlGrabPrint("loading %s %sly" % (url, urlGrabSettings["method"]))
urlGrabOpenUrl (url)
def urlGrabList( args ):
global urlGrab
if len(args) == 0:
buf = hashBufferName(weechat.current_buffer())
else:
buf = args[0]
if buf == "" or buf == "all":
buf = "*"
urlGrab.prnt(buf)
def urlGrabMain(data, bufferp, args):
if args[0:2] == "**":
keyEvent(data, bufferp, args[2:])
return weechat.WEECHAT_RC_OK
bufferd = hashBufferName(bufferp)
largs = args.split(" ")
#strip spaces
while '' in largs:
largs.remove('')
while ' ' in largs:
largs.remove(' ')
if len(largs) == 0 or largs[0] == "show":
if not urlgrab_buffer:
init()
refresh()
weechat.buffer_set(urlgrab_buffer, "display", "1")
elif largs[0] == 'open' and len(largs) == 2:
urlGrabOpenUrl(largs[1])
elif largs[0] == 'list':
urlGrabList( largs[1:] )
elif largs[0] == 'copy':
if len(largs) > 1:
no = int(largs[1])
urlGrabCopy(bufferd, no)
else:
urlGrabCopy(bufferd,1)
else:
try:
no = int(largs[0])
if len(largs) > 1:
urlGrabOpen(largs[1], no)
else:
urlGrabOpen(bufferd, no)
except ValueError:
#not a valid number so try opening it as a url..
for url in urlRe.findall(largs[0]):
urlGrabOpenUrl(stripParens(url))
urlGrabPrint( "Unknown command '%s'. Try '/help url' for usage" % largs[0])
return weechat.WEECHAT_RC_OK
def buffer_input(*kwargs):
return weechat.WEECHAT_RC_OK
def buffer_close(*kwargs):
global urlgrab_buffer
urlgrab_buffer = None
return weechat.WEECHAT_RC_OK
def keyEvent (data, bufferp, args):
global urlGrab , urlGrabSettings, urlgrab_buffer, current_line
if args == "refresh":
refresh()
elif args == "up":
if current_line > 0:
current_line = current_line -1
refresh_line (current_line + 1)
refresh_line (current_line)
ugCheckLineOutsideWindow()
elif args == "down":
if current_line < len(urlGrab.globalUrls) - 1:
current_line = current_line +1
refresh_line (current_line - 1)
refresh_line (current_line)
ugCheckLineOutsideWindow()
elif args == "scroll_top":
temp_current = current_line
current_line = 0
refresh_line (temp_current)
refresh_line (current_line)
weechat.command(urlgrab_buffer, "/window scroll_top")
pass
elif args == "scroll_bottom":
temp_current = current_line
current_line = len(urlGrab.globalUrls)
refresh_line (temp_current)
refresh_line (current_line)
weechat.command(urlgrab_buffer, "/window scroll_bottom")
elif args == "enter":
if urlGrab.globalUrls[current_line]:
urlGrabOpenUrl (urlGrab.globalUrls[current_line]['url'])
def refresh_line (y):
global urlGrab , urlGrabSettings, urlgrab_buffer, current_line, max_buffer_length
#Print format Time(space)buffer(max4 spaces, but lined up)url
format = "%%s%%s %%s%%-%ds%%s%%s" % (max_buffer_length+4)
#non selected colors
color_buffer = urlGrabSettings["color_buffer"]
color_url = urlGrabSettings["color_url"]
color_time =urlGrabSettings["color_time"]
#selected colors
color_buffer_selected = urlGrabSettings["color_buffer_selected"]
color_url_selected = urlGrabSettings["color_url_selected"]
color_time_selected = urlGrabSettings["color_time_selected"]
color_bg_selected = urlGrabSettings["color_bg_selected"]
color1 = color_time
color2 = color_buffer
color3 = color_url
#If this line is selected we change the colors.
if y == current_line:
color1 = "%s,%s" % (color_time_selected, color_bg_selected)
color2 = "%s,%s" % (color_buffer_selected, color_bg_selected)
color3 = "%s,%s" % (color_url_selected, color_bg_selected)
color1 = weechat.color(color1)
color2 = weechat.color(color2)
color3 = weechat.color(color3)
text = format % (color1,
urlGrab.globalUrls[y]['time'],
color2,
urlGrab.globalUrls[y]['buffer'],
color3,
urlGrab.globalUrls[y]['url'] )
weechat.prnt_y(urlgrab_buffer,y,text)
def ugCheckLineOutsideWindow():
global urlGrab , urlGrabSettings, urlgrab_buffer, current_line, max_buffer_length
if (urlgrab_buffer):
infolist = weechat.infolist_get("window", "", "current")
if (weechat.infolist_next(infolist)):
start_line_y = weechat.infolist_integer(infolist, "start_line_y")
chat_height = weechat.infolist_integer(infolist, "chat_height")
if(start_line_y > current_line):
weechat.command(urlgrab_buffer, "/window scroll -%i" %(start_line_y - current_line))
elif(start_line_y <= current_line - chat_height):
weechat.command(urlgrab_buffer, "/window scroll +%i"%(current_line - start_line_y - chat_height + 1))
weechat.infolist_free(infolist)
def refresh():
global urlGrab
y=0
for x in urlGrab.globalUrls:
refresh_line (y)
y += 1
def init():
global urlGrab , urlGrabSettings, urlgrab_buffer
if not urlgrab_buffer:
urlgrab_buffer = weechat.buffer_new("urlgrab", "buffer_input", "", "buffer_close", "")
if urlgrab_buffer:
weechat.buffer_set(urlgrab_buffer, "type", "free")
weechat.buffer_set(urlgrab_buffer, "key_bind_ctrl-R", "/url **refresh")
weechat.buffer_set(urlgrab_buffer, "key_bind_meta2-A", "/url **up")
weechat.buffer_set(urlgrab_buffer, "key_bind_meta2-B", "/url **down")
weechat.buffer_set(urlgrab_buffer, "key_bind_meta-ctrl-J", "/url **enter")
weechat.buffer_set(urlgrab_buffer, "key_bind_meta-ctrl-M", "/url **enter")
weechat.buffer_set(urlgrab_buffer, "key_bind_meta-meta2-1./~", "/url **scroll_top")
weechat.buffer_set(urlgrab_buffer, "key_bind_meta-meta2-4~", "/url **scroll_bottom")
weechat.buffer_set(urlgrab_buffer, "title","Lists the urls in the applications")
weechat.buffer_set(urlgrab_buffer, "display", "1")
def completion_urls_cb(data, completion_item, bufferp, completion):
""" Complete with URLS, for command '/url'. """
global urlGrab
bufferd = hashBufferName( bufferp)
for url in urlGrab.globalUrls :
if url['buffer'] == bufferd:
weechat.hook_completion_list_add(completion, url['url'], 0, weechat.WEECHAT_LIST_POS_SORT)
return weechat.WEECHAT_RC_OK
def ug_unload_script():
""" Function called when script is unloaded. """
global urlGrabSettings
weechat.config_write(urlGrabSettings.config_file)
return weechat.WEECHAT_RC_OK
#Main stuff
if ( import_ok and
weechat.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION,
SCRIPT_LICENSE,SCRIPT_DESC, "ug_unload_script", "") ):
urlgrab_buffer = None
current_line = 0
max_buffer_length = 0
urlGrabSettings = UrlGrabSettings()
urlGrab = UrlGrabber( urlGrabSettings['historysize'])
weechat.hook_print("", "", "", 1, "urlGrabCheck", "")
weechat.hook_command(SCRIPT_COMMAND,
"Url Grabber",
"[open <url> | <url> | show | copy [n] | [n] | list]",
"open or <url>: opens the url\n"
"show: Opens the select buffer to allow for url selection\n"
"copy: Copies the nth url to the system clipboard\n"
"list: Lists the urls in the current buffer\n",
"open %(urlgrab_urls) || %(urlgrab_urls) || "
"copy || show || list",
"urlGrabMain", "")
weechat.hook_completion("urlgrab_urls", "list of URLs",
"completion_urls_cb", "")
else:
print "failed to load weechat"

View File

@ -0,0 +1,48 @@
#
# weechat -- relay.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[look]
auto_open_buffer = on
raw_messages = 256
[color]
client = cyan
status_active = lightblue
status_auth_failed = lightred
status_connecting = yellow
status_disconnected = lightred
status_waiting_auth = brown
text = default
text_bg = default
text_selected = white
[network]
allow_empty_password = off
allowed_ips = ""
bind_address = ""
clients_purge_delay = 0
compression_level = 6
ipv6 = on
max_clients = 5
password = ""
ssl_cert_key = "%h/ssl/relay.pem"
ssl_priorities = "NORMAL:-VERS-SSL3.0"
websocket_allowed_origins = ""
[irc]
backlog_max_minutes = 1440
backlog_max_number = 256
backlog_since_last_disconnect = on
backlog_since_last_message = off
backlog_tags = "irc_privmsg"
backlog_time_format = "[%H:%M] "
[port]

View File

@ -0,0 +1,57 @@
#
# weechat -- script.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[look]
columns = "%s %n %V %v %u | %d | %t"
diff_color = on
diff_command = "auto"
display_source = on
quiet_actions = on
sort = "p,n"
translate_description = on
use_keys = on
[color]
status_autoloaded = cyan
status_held = white
status_installed = lightcyan
status_obsolete = lightmagenta
status_popular = yellow
status_running = lightgreen
status_unknown = lightred
text = default
text_bg = default
text_bg_selected = red
text_date = default
text_date_selected = white
text_delimiters = default
text_description = default
text_description_selected = white
text_extension = default
text_extension_selected = white
text_name = cyan
text_name_selected = lightcyan
text_selected = white
text_tags = brown
text_tags_selected = yellow
text_version = magenta
text_version_loaded = default
text_version_loaded_selected = white
text_version_selected = lightmagenta
[scripts]
autoload = on
cache_expire = 1440
download_timeout = 30
hold = ""
path = "%h/script"
url = "http://weechat.org/files/plugins.xml.gz"
url_force_https = on

18
weechat/.weechat/sec.conf Normal file
View File

@ -0,0 +1,18 @@
#
# weechat -- sec.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[crypt]
cipher = aes256
hash_algo = sha256
passphrase_file = ""
salt = on
[data]

View File

@ -0,0 +1,67 @@
#
# weechat -- trigger.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[look]
enabled = on
monitor_strip_colors = off
[color]
flag_command = lightgreen
flag_conditions = yellow
flag_post_action = lightblue
flag_regex = lightcyan
flag_return_code = lightmagenta
regex = white
replace = cyan
trigger = green
trigger_disabled = red
[trigger]
beep.arguments = ""
beep.command = "/print -beep"
beep.conditions = "${tg_displayed} && (${tg_highlight} || ${tg_msg_pv})"
beep.enabled = on
beep.hook = print
beep.post_action = none
beep.regex = ""
beep.return_code = ok
cmd_pass.arguments = "5000|input_text_display;5000|history_add;5000|irc_command_auth"
cmd_pass.command = ""
cmd_pass.conditions = ""
cmd_pass.enabled = on
cmd_pass.hook = modifier
cmd_pass.post_action = none
cmd_pass.regex = "==^((/(msg|m|quote) +nickserv +(id|identify|ghost +[^ ]+|release +[^ ]+|regain +[^ ]+|recover +[^ ]+) +)|/oper +[^ ]+ +|/quote +pass +|/set +[^ ]*password[^ ]* +|/secure +(passphrase|decrypt|set +[^ ]+) +)(.*)==${re:1}${hide:*,${re:+}}"
cmd_pass.return_code = ok
cmd_pass_register.arguments = "5000|input_text_display;5000|history_add;5000|irc_command_auth"
cmd_pass_register.command = ""
cmd_pass_register.conditions = ""
cmd_pass_register.enabled = on
cmd_pass_register.hook = modifier
cmd_pass_register.post_action = none
cmd_pass_register.regex = "==^(/(msg|m|quote) +nickserv +register +)([^ ]+)(.*)==${re:1}${hide:*,${re:3}}${re:4}"
cmd_pass_register.return_code = ok
msg_auth.arguments = "5000|irc_message_auth"
msg_auth.command = ""
msg_auth.conditions = ""
msg_auth.enabled = on
msg_auth.hook = modifier
msg_auth.post_action = none
msg_auth.regex = "==^(.*(id|identify|register|ghost +[^ ]+|release +[^ ]+|regain +[^ ]+|recover +[^ ]+) +)(.*)==${re:1}${hide:*,${re:+}}"
msg_auth.return_code = ok
server_pass.arguments = "5000|input_text_display;5000|history_add"
server_pass.command = ""
server_pass.conditions = ""
server_pass.enabled = on
server_pass.hook = modifier
server_pass.post_action = none
server_pass.regex = "==^(/(server|connect) .*-(sasl_)?password=)([^ ]+)(.*)==${re:1}${hide:*,${re:4}}${re:5}"
server_pass.return_code = ok

View File

@ -0,0 +1,29 @@
#
# weechat -- urlgrab.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[color]
color_bg_selected = green
color_buffer = red
color_buffer_selected = red
color_time = cyan
color_time_selected = cyan
color_url = blue
color_url_selected = blue
[default]
copycmd = "xsel -i"
historysize = 10
localcmd = "qutebrowser '%s'"
method = "local"
output_main_buffer = on
remotecmd = "ssh -x localhost -i ~/.ssh/id_rsa -C "export DISPLAY=":0.0" && firefox '%s'""
time_format = "%H:%M:%S"
url_log = "~/.weechat/urls.log"

343
weechat/.weechat/urls.log Normal file
View File

@ -0,0 +1,343 @@
23:33:02 #linuxmasterrace https://redd.it/3tiy3m
23:34:07 #linuxmasterrace https://pta2002.com/pastes/blob/c06d69d5-1c58-471f-a34b-20921861347a
23:34:39 #linuxmasterrace https://www.reddit.com/r/Stepmania/
23:35:58 #linuxmasterrace https://u.teknik.io/zDGHH.png
23:46:23 #linuxmasterrace http://redd.it/6an8gb
23:47:47 #linuxmasterrace http://redd.it/6an8sh
11:13:19 snoonet http://www.snoonet.org/rules
11:13:19 snoonet http://www.snoonet.org/rules
11:13:19 snoonet http://www.snoonet.org/rules
11:13:20 #linuxmasterrace http://redd.it/6aq5ny
11:17:41 #linuxmasterrace https://i.imgur.com/Dht7g3z.png
11:37:49 ##Gupshup https://twitter.com/hassimer/status/859479073147543552
11:38:11 #linuxmasterrace https://www.youtube.com/watch?v=rg3Mr6e1KMo
11:38:46 #linuxmasterrace http://redd.it/6aqb99
11:43:52 #linuxmasterrace http://imgur.com/HODoX3x
11:47:23 #Islam https://www.facebook.com/AnimationClub/videos/1348723505213803/
11:55:23 #linuxmasterrace https://ocharles.org.uk/blog/posts/2013-12-06-24-days-of-hackage-persistent-esqueleto.html
11:55:44 #Islam http://www.mibbit.com
11:59:56 #linuxmasterrace http://redd.it/6aqdul
12:39:52 #linuxmasterrace http://redd.it/6aqj1a
12:40:26 ##Gupshup http://hearthstone.gamepedia.com/Murloc_Warleader
12:47:59 #linuxmasterrace http://youtu.be/B3h2Rw1mHew
12:51:20 #linuxmasterrace https://justcause3mods.com/wp-content/uploads/cmdm/165054/1456341811_Monster-Plane-1600x836.png
12:56:10 #linuxmasterrace http://redd.it/6aql7b
13:00:13 #linuxmasterrace https://en.wikipedia.org/wiki/MG_08
13:00:25 #linuxmasterrace https://en.wikipedia.org/wiki/08/15_%28film_series%29
13:00:54 #linuxmasterrace http://redd.it/6aqlpu
13:30:39 #linuxmasterrace http://edition.cnn.com/2017/05/11/politics/oval-office-photos-donald-trump-russians/
13:34:19 #linuxmasterrace http://www.abc.net.au/news/2017-03-04/white-house-defends-pences-use-of-private-email/8324608
13:34:29 #linuxmasterrace http://imgur.com/a/pLckP
13:41:57 #linuxmasterrace http://rrrather.com/view/3462
13:42:06 #linuxmasterrace http://rrrather.com/view/139
13:42:14 #linuxmasterrace https://www.washingtonpost.com/business/economy/trump-sold-all-shares-in-companies-in-june-spokesman-says/2016/12/06/55419d44-bbcf-11e6-94ac-3d324840106c_story.html?utm_term=.8d134eed0033
13:43:37 #linuxmasterrace http://rrrather.com/view/5044
13:47:57 #linuxmasterrace http://www.cnn.com/2017/04/06/politics/hillary-clinton-syria-assad/
13:50:25 #linuxmasterrace https://www.washingtonpost.com/blogs/fact-checker/post/hillary-clintons-uncredible-statement-on-syria/2011/04/01/AFWPEYaC_blog.html
14:08:33 #linuxmasterrace https://en.wikipedia.org/wiki/List_of_Chancellors_of_Germany_by_time_in_office
14:24:17 #linuxmasterrace http://i2.kym-cdn.com/photos/images/newsfeed/000/106/292/Furrychart.jpg
14:25:06 #Islam https://is.gd/1JYVa2
14:35:57 #linuxmasterrace http://redd.it/6ar0og
14:41:33 #linuxmasterrace http://redd.it/6ar1p3
14:42:47 #Islam http://tasfiyah.com/ibn-al-qayyim-three-causes-of-hearts-feeling-open-or-tight-and-the-effect-of-that-in-the-grave/
14:53:47 #linuxmasterrace https://redquasar.xyz/stuff/neon-useredition-20170504-1018-amd64.iso
14:54:42 ##Gupshup http://rrrather.com/view/16152
15:14:10 #linuxmasterrace https://weechat.org/files/scripts/unofficial/greentext.py
15:28:10 #Islam http://imgur.com/a/7rnSJ
15:28:21 #linuxmasterrace https://hastebin.com/cemibawivi.tex
15:30:29 #linuxmasterrace https://pta2002.com/pastes/paste/bd67f311-79d6-4d27-b614-4d5e8ef258fa
15:31:43 #Islam https://my.mixtape.moe/dclnzp.png
15:32:55 #linuxmasterrace https://rubygems.org/gems/haste/versions/0.2.1
15:37:45 ##Gupshup https://www.nytimes.com/2017/05/12/world/asia/china-south-korea-thaad-rap-video.html?emc=edit_tnt_20170512&nlid=15404638&tntemail0=y&utm_content=buffer7cdec&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer
15:37:49 ##Gupshup https://www.youtube.com/watch?v=9p0nQdvHOOo
15:42:31 #linuxmasterrace http://redd.it/6ard5f
15:42:41 #linuxmasterrace https://www.quora.com/What-is-the-difference-between-Wi-Fi-and-WLAN
15:42:56 #linuxmasterrace https://twitter.com/jacobrossi/status/851992646151278592
15:42:57 #linuxmasterrace https://t.co/uUduqKF1Zg
15:46:37 #linuxmasterrace http://www.sndio.org/
15:49:30 #linuxmasterrace http://youtu.be/9sJUDx7iEJw
15:49:46 #linuxmasterrace http://www.microkernel.info/
15:52:51 #linuxmasterrace https://en.m.wikipedia.org/wiki/Redox
15:52:57 #linuxmasterrace https://www.redoxengine.com/
15:53:03 #linuxmasterrace https://github.com/redox-os/kernel
15:53:18 #linuxmasterrace https://www.redox-os.org/
15:56:27 #Islam https://www.albalagh.net/bookstore/?action=view&item=1006
15:59:58 #Islam https://www.albalagh.net/bookstore/sample_pages/1006Sample.pdf
16:05:22 #linuxmasterrace https://twitter.com/jacobrossi/status/851992646151278592
16:05:22 #linuxmasterrace https://t.co/uUduqKF1Zg
16:08:27 #linuxmasterrace https://matrix.org/_matrix/media/v1/download/matrix.org/LjwZZkZeFovTLmKLNmVSQIPP
16:10:19 #linuxmasterrace https://ih1.redbubble.net/image.320603864.9552/st%2Csmall%2C215x235-pad%2C210x230%2Cf8f8f8.lite-1u1.jpg
16:19:09 #linuxmasterrace https://matrix.org/_matrix/media/v1/download/matrix.org/ZrASXQZZvKzZaFRUDujEDyYv
16:33:46 #linuxmasterrace http://redd.it/6arnpt
16:46:37 #linuxmasterrace http://redd.it/6arqdv
17:03:03 #linuxmasterrace https://i.imgur.com/QQ1onY0.png
17:03:37 #linuxmasterrace https://en.wikipedia.org/wiki/Annealing_(metallurgy)
17:04:01 #linuxmasterrace https://en.wikipedia.org/wiki/Simulated_annealing
17:05:25 #linuxmasterrace http://www.kiwiirc.com/
17:32:19 #linuxmasterrace https://en.wikipedia.org/wiki/MediaGoblin
17:36:12 #linuxmasterrace https://en.wikipedia.org/wiki/Passive_house
17:38:02 #linuxmasterrace https://i.redditmedia.com/5URnoOZST6AvudAJRTUsJMoTz_NkwGmqNnlftmO6Ivg.jpg?w=320&s=a53278006fa80c8a9875c5804a314b03
17:59:12 #linuxmasterrace https://www.youtube.com/watch?v=GaUi8Dv73hA
18:04:19 #linuxmasterrace https://www.theverge.com/2017/5/8/15577340/pepe-the-frog-is-dead-matt-furie
02:12:04 snoonet http://www.snoonet.org/rules
02:12:04 snoonet http://www.snoonet.org/rules
02:12:04 snoonet http://www.snoonet.org/rules
02:12:04 ##Gupshup https://m.facebook.com/pages/Black-Tea-Party/162935357076298
02:12:04 #Islam https://islamhouse.com
02:12:04 #linuxmasterrace http://youtu.be/qeMFqkcPYcg
02:12:04 #linuxmasterrace https://ichef.bbci.co.uk/news/800/cpsprodpb/13A4F/production/_96036408_compo.jpg
02:12:04 #linuxmasterrace http://i.imgur.com/6xybZcg.png
02:12:04 #linuxmasterrace http://redd.it/6aul0g
02:12:04 #linuxmasterrace http://redd.it/6ausvp
02:12:04 #linuxmasterrace https://matrix.org/_matrix/media/v1/download/matrix.org/smRFSifQYLgcsXcSogUYwnvg
02:12:04 #linuxmasterrace https://intel.malwaretech.com/botnet/wcrypt
02:16:12 #linuxmasterrace https://dspinellis.github.io/unix-architecture/arch.pdf
02:19:19 #linuxmasterrace http://redd.it/6av036
02:21:10 ##Gupshup https://is.gd/F28cXX
02:26:03 #linuxmasterrace https://twitter.com/dodicin/status/862991818904002565
02:26:03 #linuxmasterrace https://t.co/8dROVXXkQv
02:34:26 ##Gupshup http://imgur.com/atS0qTv
02:35:10 #linuxmasterrace https://www.reddit.com/r/Android/comments/6at05a/here_comes_treble_a_modular_base_for_android/
02:38:39 ##Gupshup http://youtu.be/09wdQP1FFR0
02:54:59 #linuxmasterrace https://fuchsia.googlesource.com/
03:02:49 #linuxmasterrace http://redd.it/6av7ge
03:02:49 #linuxmasterrace http://redd.it/6av7jm
03:12:28 ##Gupshup http://imgur.com/atS0qTv
03:13:12 #linuxmasterrace http://redd.it/6av93h
03:14:03 #linuxmasterrace https://stallman.org/apple.html
03:17:59 #linuxmasterrace https://plasma-mobile.org/
22:23:26 snoonet http://www.snoonet.org/rules
22:23:26 snoonet http://www.snoonet.org/rules
22:23:26 snoonet http://www.snoonet.org/rules
22:23:26 #Islam http://www.haaretz.com/middle-east-news/palestinians/1.788853
22:23:26 #linuxmasterrace http://redd.it/6aztfr
22:32:14 #linuxmasterrace http://redd.it/6b0026
22:36:25 ##Gupshup https://soundcloud.com/bahyan-qr/4mjnfctfj1wx
22:38:01 #linuxmasterrace https://alpha.wallhaven.cc/search?q=linux
22:39:29 freenode http://www.freenode.net
22:39:29 snoonet http://www.snoonet.org/rules
22:39:29 freenode http://www.fosscon.org
22:39:29 snoonet http://www.snoonet.org/rules
22:39:29 freenode https://www.privateinternetaccess.com/
22:39:29 snoonet http://www.snoonet.org/rules
22:39:29 #emberjs https://ember-community-slackin.herokuapp.com
22:39:29 #emberjs https://ember-community-slackin.herokuapp.com
22:39:29 #symfony http://symfony.com/doc/current/testing/http_authentication.html
22:39:29 #symfony https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html
22:39:29 #zeronet https://git.io/v9SVh
22:44:17 ##Gupshup http://www.kiwiirc.com/
22:46:03 #linuxmasterrace http://www.netlib.org/linpack/
22:46:42 ##Gupshup https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTJKoPBwG7kxHGT7ded39ouBT5rYIiRUYSs1yNt8EQocw4RnuOLpvO_xoA
22:50:24 #linuxmasterrace https://wiki.archlinux.org/index.php/Stress_Test#Linpack
22:54:36 #linuxmasterrace https://pta2002.com/pastes/blob/117492c7-9ad8-43e6-88df-50e6d4c263c6
22:56:25 ##Gupshup https://tools.ietf.org/html/rfc2812
23:03:31 #linuxmasterrace https://arstechnica.com/information-technology/2017/02/microsoft-hosts-the-windows-source-in-a-monstrous-300gb-git-repository/
23:04:10 #linuxmasterrace https://arstechnica.com/information-technology/2017/02/microsoft-hosts-the-windows-source-in-a-monstrous-300gb-git-repository/
23:05:39 #linuxmasterrace https://en.wikipedia.org/wiki/Space-cadet_keyboard
23:21:57 #linuxmasterrace https://puri.sm/posts/reverse-engineering-the-intel-management-engine-romp-module/
23:22:52 ##Gupshup https://www.reddit.com/r/SuicideWatch/
23:25:35 #linuxmasterrace https://eurovision.tv/
23:26:38 #linuxmasterrace http://redd.it/6b0a46
23:32:03 #linuxmasterrace https://concordiaabchao.wordpress.com/2016/05/13/occult-symbolism-in-eurovision-2016/
23:37:39 #linuxmasterrace https://en.wikipedia.org/wiki/European_Broadcasting_Union
23:44:25 #linuxmasterrace http://youtu.be/Sj_9CiNkkn4
23:45:41 ##Gupshup http://www.kiwiirc.com/
23:47:14 #linuxmasterrace https://youtu.be/3FsVeMz1F5c?t=58
23:48:32 #linuxmasterrace https://twitter.com/ChrisPalacefc/status/863509765896499206
23:48:32 #linuxmasterrace https://t.co/liniTBzCBG
23:52:46 #linuxmasterrace http://redd.it/6b0eui
23:56:24 ##Gupshup http://islamlecture.com/book.php?subject_id=34
23:57:17 #Islam http://islamlecture.com/book.php?subject_id=34
00:02:41 #linuxmasterrace http://i.imgur.com/Yhk6pIS.png
00:06:44 #linuxmasterrace https://en.m.wikipedia.org/wiki/Verka_Serduchka
00:11:57 ##Gupshup https://twitter.com/JOE_co_uk/status/863516621884751872
00:11:58 ##Gupshup https://t.co/SP5Weywrop
21:08:27 snoonet http://www.snoonet.org/rules
21:08:27 freenode http://www.freenode.net
21:08:27 snoonet http://www.snoonet.org/rules
21:08:27 freenode http://www.fosscon.org
21:08:27 freenode https://www.privateinternetaccess.com/
21:08:27 snoonet http://www.snoonet.org/rules
21:08:27 #symfony https://notey.it/n/MTJuZg
21:08:27 #Islam http://islamiclectures.net/ahle-hadees-ka-manhaj/
21:08:27 #linuxmasterrace https://i.imgur.com/KcFqHw3.png
21:08:27 #linuxmasterrace https://webcache.googleusercontent.com/search?q=cache:cQOpZWYen_UJ:https://www.sophos.com/en-us/lp/nhs.aspx
21:08:27 #linuxmasterrace https://web.archive.org/web/20170102055713/https://www.sophos.com/en-us/lp/nhs.aspx
21:08:27 #linuxmasterrace https://nhsbuntu.org/
21:12:12 freenode http://www.freenode.net
21:12:12 snoonet http://www.snoonet.org/rules
21:12:12 freenode http://www.fosscon.org
21:12:12 snoonet http://www.snoonet.org/rules
21:12:12 freenode https://www.privateinternetaccess.com/
21:12:12 snoonet http://www.snoonet.org/rules
21:17:43 ##Gupshup http://www.fatwaislam.com/fis/index.cfm?scn=fd&ID=563
21:20:55 snoonet http://www.snoonet.org/rules
21:20:55 freenode http://www.freenode.net
21:20:55 snoonet http://www.snoonet.org/rules
21:20:55 freenode http://www.fosscon.org
21:20:55 freenode https://www.privateinternetaccess.com/
21:20:55 snoonet http://www.snoonet.org/rules
21:24:33 weechat http://weechat.org/files/plugins.xml.gz"
21:25:07 ##Gupshup https://en.m.wikipedia.org/wiki/Shalwar_Kameez
21:25:11 ##Gupshup http://images.plus613.net/images/f/3/9/3/www_plus613_net_d1.jpg
21:25:13 ##Gupshup http://www.fashiontrends.pk/wp-content/uploads/2012/02/Shalwar-Kameez-For-Men-05.jpg
21:25:54 ##Gupshup http://www.storesdirect.co.uk/media/catalog/product/cache/5/image/9df78eab33525d08d6e5fb8d27136e95/F/F/FFA014_1_banana_hammock.jpg
21:26:35 ##Gupshup http://friends.urbanup.com/1774853
21:26:56 ##Gupshup http://images4.fanpop.com/image/photos/17500000/Hibari-and-Dino-yaoi-17501325-1000-882.jpg
21:31:57 ##Gupshup https://is.gd/gQ4hNX
21:32:17 ##Gupshup https://is.gd/b8zARe
21:32:37 ##Gupshup https://is.gd/9hZpr9
21:34:38 ##Gupshup https://www.schulich.uwo.ca/bmsc/
21:37:47 ##Gupshup http://youtu.be/U61yzVVlUoE
01:12:05 snoonet http://www.snoonet.org/rules
01:12:05 freenode http://www.freenode.net
01:12:05 snoonet http://www.snoonet.org/rules
01:12:05 freenode http://www.fosscon.org
01:12:05 freenode https://www.privateinternetaccess.com/
01:12:05 snoonet http://www.snoonet.org/rules
01:12:05 #symfony https://notey.it/n/MTJuZw
01:12:06 #Islam https://islamqa.info/en/59905
01:12:06 #linuxmasterrace https://addons.mozilla.org/de/firefox/addon/chrome-store-foxified/
01:12:06 #linuxmasterrace https://xkcd.com/927/
01:12:20 freenode http://www.freenode.net
01:12:20 snoonet http://www.snoonet.org/rules
01:12:20 freenode http://www.fosscon.org
01:12:20 snoonet http://www.snoonet.org/rules
01:12:20 freenode https://www.privateinternetaccess.com/
01:12:20 snoonet http://www.snoonet.org/rules
01:14:13 snoonet http://www.snoonet.org/rules
01:14:13 freenode http://www.freenode.net
01:14:13 snoonet http://www.snoonet.org/rules
01:14:13 freenode http://www.fosscon.org
01:14:13 freenode https://www.privateinternetaccess.com/
01:14:13 snoonet http://www.snoonet.org/rules
01:14:30 freenode http://www.freenode.net
01:14:30 snoonet http://www.snoonet.org/rules
01:14:30 freenode http://www.fosscon.org
01:14:30 snoonet http://www.snoonet.org/rules
01:14:30 freenode https://www.privateinternetaccess.com/
01:14:30 snoonet http://www.snoonet.org/rules
01:16:32 snoonet http://www.snoonet.org/rules
01:16:32 freenode http://www.freenode.net
01:16:32 snoonet http://www.snoonet.org/rules
01:16:32 freenode http://www.fosscon.org
01:16:32 freenode https://www.privateinternetaccess.com/
01:16:32 snoonet http://www.snoonet.org/rules
01:16:54 freenode http://www.freenode.net
01:16:54 snoonet http://www.snoonet.org/rules
01:16:54 freenode http://www.fosscon.org
01:16:54 snoonet http://www.snoonet.org/rules
01:16:54 freenode https://www.privateinternetaccess.com/
01:16:54 snoonet http://www.snoonet.org/rules
01:17:12 freenode http://www.freenode.net
01:17:12 snoonet http://www.snoonet.org/rules
01:17:12 freenode http://www.fosscon.org
01:17:12 snoonet http://www.snoonet.org/rules
01:17:12 freenode https://www.privateinternetaccess.com/
01:17:12 snoonet http://www.snoonet.org/rules
01:17:28 snoonet http://www.snoonet.org/rules
01:17:28 freenode http://www.freenode.net
01:17:28 snoonet http://www.snoonet.org/rules
01:17:28 freenode http://www.fosscon.org
01:17:28 freenode https://www.privateinternetaccess.com/
01:17:29 snoonet http://www.snoonet.org/rules
01:20:22 snoonet http://www.snoonet.org/rules
01:20:22 freenode http://www.freenode.net
01:20:22 snoonet http://www.snoonet.org/rules
01:20:22 freenode http://www.fosscon.org
01:20:22 freenode https://www.privateinternetaccess.com/
01:20:22 snoonet http://www.snoonet.org/rules
01:20:22 ##Gupshup http://www.gym-talk.com/arnold-schwarzeneggers-golden-six-routine/
01:20:48 snoonet http://www.snoonet.org/rules
01:20:48 freenode http://www.freenode.net
01:20:48 snoonet http://www.snoonet.org/rules
01:20:48 freenode http://www.fosscon.org
01:20:48 freenode https://www.privateinternetaccess.com/
01:20:49 snoonet http://www.snoonet.org/rules
01:21:07 freenode http://www.freenode.net
01:21:07 snoonet http://www.snoonet.org/rules
01:21:07 freenode http://www.fosscon.org
01:21:07 snoonet http://www.snoonet.org/rules
01:21:07 freenode https://www.privateinternetaccess.com/
01:21:07 snoonet http://www.snoonet.org/rules
01:21:30 snoonet http://www.snoonet.org/rules
01:21:30 freenode http://www.freenode.net
01:21:30 snoonet http://www.snoonet.org/rules
01:21:30 freenode http://www.fosscon.org
01:21:30 freenode https://www.privateinternetaccess.com/
01:21:30 snoonet http://www.snoonet.org/rules
01:23:20 #linuxmasterrace https://www.youtube.com/watch?v=lbJ51AJuR7E&list=PLSMETuURtTXCzW7Q_ZIy4QzEnyUG8totf
01:23:30 snoonet http://www.snoonet.org/rules
01:23:30 freenode http://www.freenode.net
01:23:30 snoonet http://www.snoonet.org/rules
01:23:30 freenode http://www.fosscon.org
01:23:30 freenode https://www.privateinternetaccess.com/
01:23:30 snoonet http://www.snoonet.org/rules
01:23:43 #linuxmasterrace https://www.youtube.com/watch?v=lbJ51AJuR7E&index=1&list=PLSMETuURtTXCzW7Q_ZIy4QzEnyUG8totf
01:28:28 #linuxmasterrace http://i.imgur.com/hd3uT1g.jpg
01:29:22 #linuxmasterrace https://is.gd/rSuanT
01:29:53 #linuxmasterrace https://is.gd/GUp5Xz
01:29:59 #linuxmasterrace https://is.gd/DBIChI
01:30:30 #linuxmasterrace https://is.gd/ohbuYN
01:30:40 #linuxmasterrace https://is.gd/ev0FgR
01:33:55 #linuxmasterrace https://youtu.be/DNRTfhmDJ7g
01:39:21 freenode http://www.freenode.net
01:39:21 snoonet http://www.snoonet.org/rules
01:39:21 freenode http://www.fosscon.org
01:39:21 snoonet http://www.snoonet.org/rules
01:39:21 freenode https://www.privateinternetaccess.com/
01:39:21 snoonet http://www.snoonet.org/rules
01:57:54 #linuxmasterrace https://u.teknik.io/RKtbI.png
02:09:21 #linuxmasterrace http://www.youtube.com
02:09:55 #linuxmasterrace http://www.btnet.com.tr/wp-content/uploads/2017/05/wannacry_05-1024x774.png
02:22:43 #linuxmasterrace https://lutris.net/
10:07:15 freenode http://www.freenode.net
10:07:15 freenode http://www.fosscon.org
10:07:15 freenode https://www.privateinternetaccess.com/
10:07:15 snoonet http://www.snoonet.org/rules
10:07:15 snoonet http://www.snoonet.org/rules
10:07:15 snoonet http://www.snoonet.org/rules
10:07:15 #symfony https://github.com/symfony/symfony/blob/fb532bfc172a531bce4219e4f21db124eb972bbc/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/RequestAttributeValueResolver.php#L38
10:07:15 ##Gupshup https://www.youtube.com/watch?v=VkfMVVDDBM0
10:07:15 #Islam https://www.youtube.com/c/FreeQuranEducation
10:07:15 #Islam https://www.launchgood.com/project/this_ramadan_help_revolutionize_access_to_islamic_education_using_visual_learning
10:07:15 #linuxmasterrace https://i.imgur.com/2SoEP5O.gifv
10:31:19 #linuxmasterrace http://imgur.com/a/a3YRj
11:01:04 #Islam https://pbs.twimg.com/media/C_re58BXgAA8fzx.jpg
11:11:39 #linuxmasterrace https://www.youtube.com/watch?v=Zy4G30kSPnY
11:11:46 #Islam https://www.youtube.com/watch?v=37BRBd5ns6M
11:22:27 #Islam http://productivemuslim.com/8-simple-steps-to-help-you-prepare-for-ramadan/
11:23:22 #Islam https://twitter.com/SpreadPeacee/status/863045217355788288
11:23:22 #Islam https://t.co/2ZywS2HDPE
11:26:45 #Islam http://thekidshouldseethis.com/post/84448815852
11:30:28 #linuxmasterrace https://www.youtube.com/watch?v=TcqWok8AubE
11:43:47 #Islam http://tasfiyah.com/ibn-al-qayyim-three-causes-of-hearts-feeling-open-or-tight-and-the-effect-of-that-in-the-grave/
12:03:20 #Islam http://www.mibbit.com
12:06:01 #symfony https://knpuniversity.com/screencast/alice-fixtures/processors
12:45:41 ##Gupshup http://www.kiwiirc.com/
12:45:41 #Islam http://www.kiwiirc.com/
12:51:56 #linuxmasterrace https://matrix.org/_matrix/media/v1/download/matrix.org/XcTZgDcFmwCrZwMXDZMHDrHK
13:01:07 #symfony http://rndnext.blogspot.com/2009/08/mutually-exclusive-html-select-elements.html
13:03:35 #linuxmasterrace https://is.gd/BlDGPc
13:11:29 #linuxmasterrace http://roll-dice-online.com/
13:24:34 snoonet http://www.snoonet.org/rules
13:24:34 freenode http://www.freenode.net
13:24:35 snoonet http://www.snoonet.org/rules
13:24:35 freenode http://www.fosscon.org
13:24:35 freenode https://www.privateinternetaccess.com/
13:24:35 snoonet http://www.snoonet.org/rules
14:06:26 #linuxmasterrace https://www.youtube.com/watch?v=fr0Wyom3pOg
14:09:18 #linuxmasterrace https://www.independent.co.uk/arts-entertainment/tv/news/mr-robot-season-3-premiere-date-rami-malek-bobby-cannavale-bd-wong-a7625501.html
14:14:04 #Islam https://pbs.twimg.com/media/C_re58BXgAA8fzx.jpg
14:17:03 #linuxmasterrace https://play.google.com/store/apps/details?id=com.zeapo.pwdstore
14:17:21 #linuxmasterrace https://www.passwordstore.org/
14:20:49 #Islam https://www.google.com.au/amp/s/abdurrahman.org/2013/07/18/dua-for-increase-in-knowledge-compiled-and-translated-by-abbas-abu-yahya/amp/
14:35:37 #linuxmasterrace https://www.youtube.com/watch?v=Syjp9lsWBhc
14:49:08 #linuxmasterrace https://www.youtube.com/watch?v=9UtRsGU6pVs
14:49:09 #linuxmasterrace https://u.teknik.io/xVTu8.png
14:50:12 #symfony http://paste.ubuntu.com/24580702/
14:50:32 #linuxmasterrace https://u.teknik.io/AW71V.png
14:53:48 #linuxmasterrace https://u.teknik.io/AW71V.png
14:53:48 #linuxmasterrace https://u.teknik.io/xVTu8.png
15:04:03 #linuxmasterrace https://www.youtube.com/watch?v=rF9bacBwaXM
15:09:21 #linuxmasterrace https://www.youtube.com/watch?v=t6u6n0Y_5Cw

View File

@ -0,0 +1,46 @@
#
# weechat -- xfer.conf
#
# WARNING: It is NOT recommended to edit this file by hand,
# especially if WeeChat is running.
#
# Use /set or similar command to change settings in WeeChat.
#
# For more info, see: https://weechat.org/doc/quickstart
#
[look]
auto_open_buffer = on
progress_bar_size = 20
pv_tags = "notify_private"
[color]
status_aborted = lightred
status_active = lightblue
status_connecting = yellow
status_done = lightgreen
status_failed = lightred
status_waiting = lightcyan
text = default
text_bg = default
text_selected = white
[network]
blocksize = 65536
fast_send = on
own_ip = ""
port_range = ""
speed_limit = 0
timeout = 300
[file]
auto_accept_chats = off
auto_accept_files = off
auto_accept_nicks = ""
auto_check_crc32 = off
auto_rename = on
auto_resume = on
convert_spaces = on
download_path = "%h/xfer"
upload_path = "~"
use_nick_in_filename = on