def buffer_switch_cb(data, signal, signal_data): global look_server look_server = "" look_server = weechat.config_string( weechat.config_get("irc.look.server_buffer")) if look_server == "independent": # server buffer independent? return weechat.WEECHAT_RC_OK # better remove script, you don't need it. if weechat.buffer_get_string( signal_data, 'name') != 'weechat': # not weechat core buffer if (weechat.buffer_get_string(signal_data, 'localvar_type') == '') or (weechat.buffer_get_string( signal_data, 'localvar_type') == 'server'): return weechat.WEECHAT_RC_OK elif weechat.buffer_get_string(signal_data, 'name') == 'weechat': return weechat.WEECHAT_RC_OK # buffer is channel or private? if (weechat.buffer_get_string(signal_data, 'localvar_type') == 'channel') or (weechat.buffer_get_string( signal_data, 'localvar_type') == 'private'): bufpointer = weechat.window_get_pointer(weechat.current_window(), "buffer") servername_from_current_buffer = weechat.buffer_get_string( bufpointer, 'localvar_server') name = weechat.buffer_get_string(bufpointer, 'name') server_switch(signal_data, servername_from_current_buffer, name) return weechat.WEECHAT_RC_OK
def substitute_colors(text,window): if int(version) >= 0x00040200: bufpointer = weechat.window_get_pointer(window,"buffer") return weechat.string_eval_expression(text, {"buffer": bufpointer}, {}, {}) # return weechat.string_eval_expression(text,{},{},{}) # substitute colors in output return re.sub(regex_color, lambda match: weechat.color(match.group(1)), text)
def show_item(data, item, window): bufpointer = weechat.window_get_pointer(window, "buffer") if bufpointer == "": return "" if weechat.buffer_get_string(bufpointer, "name") != "weechat": # not weechat core buffer if weechat.buffer_get_string(bufpointer, "localvar_type") == "": # buffer with free content? return "" lines_after, lines_count, percent, current_line = count_lines(window, bufpointer) if lines_count == 0: # buffer empty? return "" tags = {"%C": str(current_line), "%A": str(lines_after), "%L": str(lines_count), "%P": str(percent) + "%"} bufsize_item = substitute_colors(OPTIONS["format"]) # replace mandatory tags for tag in list(tags.keys()): # for tag in tags.keys(): bufsize_item = bufsize_item.replace(tag, tags[tag]) # replace optional tags # %{…} only if lines after (e.g. %A > 0) if lines_after > 0: for regex_tag in regex_optional_tags.findall(bufsize_item): bufsize_item = bufsize_item.replace(regex_tag, regex_tag.lstrip("%{").rstrip("}")) else: bufsize_item = regex_optional_tags.sub("", bufsize_item) return bufsize_item
def show_spell_suggestion_item_cb (data, item, window): buffer = weechat.window_get_pointer(window,"buffer") if buffer == '': return '' if OPTIONS['replace_mode'].lower() == "on": if not weechat.buffer_get_string(buffer,'localvar_inline_suggestions'): return '' tab_complete,position,aspell_suggest_items = weechat.buffer_get_string(buffer,'localvar_inline_suggestions').split(':',2) return aspell_suggest_items tab_complete,position,aspell_suggest_item = get_position_and_suggest_item(buffer) localvar_aspell_suggest = get_localvar_aspell_suggest(buffer) # localvar_aspell_suggest = word,word2/wort,wort2 if localvar_aspell_suggest: misspelled_word,aspell_suggestions = localvar_aspell_suggest.split(':') aspell_suggestions_orig = aspell_suggestions aspell_suggestions = aspell_suggestions.replace('/',',') aspell_suggestion_list = aspell_suggestions.split(',') if not position: return '' if int(position) < len(aspell_suggestion_list): reset_color = weechat.color('reset') color = weechat.color("red") new_word = aspell_suggestion_list[int(position)].replace(aspell_suggestion_list[int(position)],'%s%s%s' % (color, aspell_suggestion_list[int(position)], reset_color)) else: return '' return aspell_suggestions_orig
def show_spell_suggestion_item_cb(data, item, window): buffer = weechat.window_get_pointer(window, "buffer") if buffer == "": return "" tab_complete, position, aspell_suggest_item = get_position_and_suggest_item(buffer) localvar_aspell_suggest = get_localvar_aspell_suggest(buffer) # localvar_aspell_suggest = word,word2/wort,wort2 if localvar_aspell_suggest: misspelled_word, aspell_suggestions = localvar_aspell_suggest.split(":") aspell_suggestions_orig = aspell_suggestions aspell_suggestions = aspell_suggestions.replace("/", ",") aspell_suggestion_list = aspell_suggestions.split(",") if not position: return "" if int(position) < len(aspell_suggestion_list): reset_color = weechat.color("reset") color = weechat.color("red") new_word = aspell_suggestion_list[int(position)].replace( aspell_suggestion_list[int(position)], "%s%s%s" % (color, aspell_suggestion_list[int(position)], reset_color), ) # weechat.prnt("",new_word) else: return "" return aspell_suggestions_orig
def check_buffer_type(window, data, value): bufpointer = weechat.window_get_pointer(window,"buffer") if bufpointer == "": return "" value = value.split(' ', 1) if len(value) <= 1: return "" # format is : buffer_type (channel,server,private,all) | signal (e.g: buffer_switch) channel_type_and_signal = value[0] if channel_type_and_signal.find('|') >= 0: channel_type = channel_type_and_signal[0:channel_type_and_signal.find("|")] signal_type = channel_type_and_signal[channel_type_and_signal.find("|")+1:] unhook(data) add_hook(signal_type, data) else: channel_type = value[0] value = value[1] if channel_type == 'all' or weechat.buffer_get_string(bufpointer,'localvar_type') == channel_type: return value if channel_type == '!all': a = ["channel","server","private"] if weechat.buffer_get_string(bufpointer,'localvar_type') in a: return value return ""
def buffer_switch_cb(data, signal, signal_data): global OPTIONS, version # when you /join a buffer and irc.look.buffer_switch_join is ON, the new buffer pointer is not useable at this time server = weechat.buffer_get_string(signal_data, 'localvar_server') # get internal servername buffer_ptr = weechat.buffer_search('irc', 'server.%s' % server) if OPTIONS['activity'].lower() == 'no' or OPTIONS['activity'].lower() == 'off' or OPTIONS['activity'].lower() == '0': # hide all channel but use -exclude weechat.command('','/allchan -exclude=%s /buffer hide' % OPTIONS['channel_exclude']) if server == 'irc_raw': # buffer is /server raw weechat.command('','/allchan /buffer unhide') weechat.command('','/allchan -exclude=%s /buffer hide' % OPTIONS['channel_exclude']) elif server != '': # a buffer with server weechat.command(buffer_ptr,'/allchan -current /buffer unhide') # use buffer pointer from server exclude_server('') single_channel_exclude() else: if int(version) <= 0x02040000: # workaround weechat.command(signal_data,'/allchan -current /buffer hide') bufpointer = weechat.window_get_pointer(weechat.current_window(), 'buffer') # get current channel pointer weechat.command('','/allchan /buffer hide') weechat.command(bufpointer,'/buffer unhide') # unhide current channel exclude_hotlist() return weechat.WEECHAT_RC_OK
def check_buffer_type(window, data, value): bufpointer = weechat.window_get_pointer(window, "buffer") if bufpointer == "": return "" value = value.split(' ', 1) if len(value) <= 1: return "" # format is : buffer_type (channel,server,private,all) | signal (e.g: buffer_switch) channel_type_and_signal = value[0] if channel_type_and_signal.find('|') >= 0: channel_type = channel_type_and_signal[0:channel_type_and_signal. find("|")] signal_type = channel_type_and_signal[channel_type_and_signal. find("|") + 1:] unhook(data) add_hook(signal_type, data) else: channel_type = value[0] value = value[1] if channel_type == 'all' or weechat.buffer_get_string( bufpointer, 'localvar_type') == channel_type: return value return ""
def buffer_switch_cb(data, signal, signal_data): global OPTIONS, version # when you /join a buffer and irc.look.buffer_switch_join is ON, the new buffer pointer is not useable at this time server = weechat.buffer_get_string( signal_data, 'localvar_server') # get internal servername buffer_ptr = weechat.buffer_search('irc', 'server.%s' % server) if OPTIONS['activity'].lower() == 'no' or OPTIONS['activity'].lower( ) == 'off' or OPTIONS['activity'].lower() == '0': # hide all channel but use -exclude weechat.command( '', '/allchan -exclude=%s /buffer hide' % OPTIONS['channel_exclude']) if server == 'irc_raw': # buffer is /server raw weechat.command('', '/allchan /buffer unhide') weechat.command( '', '/allchan -exclude=%s /buffer hide' % OPTIONS['channel_exclude']) elif server != '': # a buffer with server weechat.command(buffer_ptr, '/allchan -current /buffer unhide' ) # use buffer pointer from server exclude_server() single_channel_exclude() else: if int(version) <= 0x02040000: # workaround weechat.command(signal_data, '/allchan -current /buffer hide') bufpointer = weechat.window_get_pointer( weechat.current_window(), 'buffer') # get current channel pointer weechat.command('', '/allchan /buffer hide') weechat.command(bufpointer, '/buffer unhide') # unhide current channel exclude_hotlist() return weechat.WEECHAT_RC_OK
def buffer_switch_cb(data, buffer, command): if command == '': return weechat.WEECHAT_RC_OK args = command.strip().split(' ',)[1:] if len(args) != 1: return weechat.WEECHAT_RC_OK destination_buffer = get_destination_buffer_number(args[0]) if not destination_buffer: return weechat.WEECHAT_RC_OK if destination_buffer < 1: destination_buffer = 1 buffer_name, ptr_buffer = infolist_get_buffer_name_and_ptr(destination_buffer) if not ptr_buffer: return weechat.WEECHAT_RC_OK if ptr_buffer == weechat.window_get_pointer(weechat.current_window(), 'buffer'): return weechat.WEECHAT_RC_OK window_number = weechat.buffer_get_string(ptr_buffer, 'localvar_stick_buffer_to_window') if not window_number: window_number = get_default_stick_window_number() if window_number: weechat.command('', '/window %s' % window_number) return weechat.WEECHAT_RC_OK
def buffer_switch_cb(data, buffer, command): if command == '': return weechat.WEECHAT_RC_OK args = command.strip().split(' ', )[1:] if len(args) != 1: return weechat.WEECHAT_RC_OK destination_buffer = get_destination_buffer_number(args[0]) if not destination_buffer: return weechat.WEECHAT_RC_OK if destination_buffer < 1: destination_buffer = 1 buffer_name, ptr_buffer = infolist_get_buffer_name_and_ptr( destination_buffer) if not ptr_buffer: return weechat.WEECHAT_RC_OK if ptr_buffer == weechat.window_get_pointer(weechat.current_window(), 'buffer'): return weechat.WEECHAT_RC_OK window_number = weechat.buffer_get_string( ptr_buffer, 'localvar_stick_buffer_to_window') if not window_number: window_number = get_default_stick_window_number() if window_number: weechat.command('', '/window %s' % window_number) return weechat.WEECHAT_RC_OK
def buffer_switch_cb(data, signal, signal_data): ptr_buffer = signal_data window = weechat.current_window() ptr_buffer = weechat.window_get_pointer(window,'buffer') if ptr_buffer == '': return '' get_file_information(ptr_buffer) return weechat.WEECHAT_RC_OK
def buffer_switch_cb(data, signal, signal_data): global highlights if w.config_get_plugin('clear_visited_buffers') == 'on': buffer = w.window_get_pointer(w.current_window(), 'buffer') write(w.config_get_plugin('output_active_buffer'), bufname(buffer)) highlights = [ item for item in highlights if item['buffer'] != buffer ] write_file() return w.WEECHAT_RC_OK
def show_item_cb (data, item, window): buffer = weechat.window_get_pointer(window,"buffer") if buffer == '': return '' tab_complete,position,aspell_suggest_item = get_position_and_suggest_item(buffer) if not position or not aspell_suggest_item: return '' # config_spell_suggest_item = weechat.config_get_plugin('suggest_item') # if config_spell_suggest_item: # show_item = config_spell_suggest_item.replace('%S',aspell_suggest_item) # show_item = substitute_colors(show_item) # return '%s' % (show_item) # else: # return aspell_suggest_item # get spell dict localvar_aspell_suggest = get_localvar_aspell_suggest(buffer) dicts_found = localvar_aspell_suggest.count("/") config_spell_suggest_item = weechat.config_get_plugin('suggest_item') if dicts_found: # aspell.dict.full_name = en_GB,de_DE-neu # localvar_dict = en_GB,de_DE-neu dictionary = get_aspell_dict_for(buffer) if not dictionary: return aspell_suggest_item dictionary_list = dictionary.split(',') # more then one dict? if len(dictionary_list) > 1: undef,aspell_suggestions = localvar_aspell_suggest.split(':') dictionary = aspell_suggestions.split('/') words = 0 i = -1 for a in dictionary: i += 1 words += a.count(',')+1 if words > int(position): break if config_spell_suggest_item: show_item = config_spell_suggest_item.replace('%S',aspell_suggest_item) show_item = show_item.replace('%D',dictionary_list[i]) show_item = substitute_colors(show_item) return '%s' % (show_item) else: return aspell_suggest_item else: if config_spell_suggest_item: show_item = config_spell_suggest_item.replace('%S',aspell_suggest_item) if weechat.config_get_plugin('hide_single_dict').lower() == 'off': show_item = show_item.replace('%D',get_aspell_dict_for(buffer)) else: show_item = show_item.replace('%D','').rstrip() show_item = substitute_colors(show_item) return '%s' % (show_item) return aspell_suggest_item
def bar_item_cb(data, item, window): # check for root input bar! if not window: window = weechat.current_window() # get current buffer (for example for split windows!) ptr_buffer = weechat.window_get_pointer(window, 'buffer') if ptr_buffer == '': return ''
def encryption_statusbar(data, item, window): if window: buf = weechat.window_get_pointer(window, 'buffer') else: buf = weechat.current_buffer() if os.path.exists(weechat_dir + key_dir + "/cryptkey." + weechat.buffer_get_string(buf, "short_name")): return weechat.config_get_plugin("statusbar_indicator") else: return ""
def bar_item_cb (data, item, window): # check for root input bar! if not window: window = weechat.current_window() # get current buffer (for example for split windows!) ptr_buffer = weechat.window_get_pointer(window,"buffer") if ptr_buffer == '': return ''
def minimal_bar_item(data, item, window): if not window: window = w.current_window() ptr_buffer = w.window_get_pointer(window, "buffer") if ptr_buffer == "" or ptr_buffer == w.current_buffer(): return "" length = w.window_get_integer(window, 'win_width') - w.buffer_get_integer( ptr_buffer, 'input_length') s = length * " " return s
def bar_item_nick(data, item, window): buffer = w.window_get_pointer(window, "buffer") server = w.buffer_get_string(buffer, "localvar_server") if server: nick = w.info_get("irc_nick", server) color = w.config_string(w.config_get("irc.color.input_nick")) color = w.color(color) return f"{color}{nick}" return ""
def show_item(data, item, window): # check for root input bar! if not window: window = weechat.current_window() ptr_buffer = weechat.window_get_pointer(window, 'buffer') if ptr_buffer == '': return '' if weechat.buffer_get_string( ptr_buffer, 'name') != 'weechat': # not weechat core buffer if weechat.buffer_get_string( ptr_buffer, 'localvar_type') == '': # buffer with free content? return '' lines_after, lines_count, percent, current_line, filtered, filtered_before, filtered_after = count_lines( window, ptr_buffer) lines_after_bak = lines_after if lines_count == 0: # buffer empty? return '' if filtered == 0: filtered = '' if lines_after == 0 and (OPTIONS['show_scroll'].lower() == 'off'): lines_after = '' tags = { '%C': str(current_line), '%A': str(lines_after), '%F': str(filtered), '%L': str(lines_count), '%P': str(percent) + '%' } bufsize_item = substitute_colors(OPTIONS['format']) # replace mandatory tags for tag in list(tags.keys()): # for tag in tags.keys(): bufsize_item = bufsize_item.replace(tag, tags[tag]) # replace optional tags # %{…} only if lines after (e.g. %A > 0) if lines_after_bak > 0: for regex_tag in regex_optional_tags.findall(bufsize_item): bufsize_item = bufsize_item.replace( regex_tag, regex_tag.lstrip('%{').rstrip('}')) else: bufsize_item = regex_optional_tags.sub('', bufsize_item) return bufsize_item
def statusbar_cb(data, item, window): if window: buf = weechat.window_get_pointer(window, 'buffer') else: buf = weechat.get_current_buffer() server, channel = get_buffer_info(buf) dict_key = u'{0}.{1}'.format(server, channel) if dict_key in channel_data: return "ENC" return ""
def nick_colors_cmd_cb(data, buffer, args): global colored_nicks if args == "": # no args given. quit print_usage(buffer) return weechat.WEECHAT_RC_OK argv = args.strip().split(" ") if (len(argv) == 0) or (len(argv) >= 4): # maximum of 3 args!! print_usage(buffer) return weechat.WEECHAT_RC_OK bufpointer = weechat.window_get_pointer(buffer,'buffer') # current buffer create_list() if argv[0].lower() == 'list': # list all nicks if len(colored_nicks) == 0: weechat.prnt(buffer,'%sno nicks in \"irc.look.nick_color_force\"...' % weechat.prefix("error")) elif len(argv) == 2: if argv[1] in colored_nicks: color = colored_nicks[argv[1]] # get color from given nick weechat.prnt(buffer,"%s%s: %s" % (weechat.color(color),argv[1],color)) else: weechat.prnt(buffer,"no color set for: %s" % (argv[1])) else: weechat.prnt(buffer,"List of nicks in : nick_color_force") # for nick,color in colored_nicks.items(): for nick,color in list(colored_nicks.items()): weechat.prnt(buffer,"%s%s: %s" % (weechat.color(color),nick,color)) elif (argv[0].lower() == 'add') and (len(argv) == 3): if argv[1] in colored_nicks: weechat.prnt(buffer, "Changing nick '%s' to color %s%s" % ( argv[1], weechat.color(argv[2]), argv[2])) else: weechat.prnt(buffer, "Adding nick '%s' with color %s%s" % ( argv[1], weechat.color(argv[2]), argv[2])) colored_nicks[argv[1]] = argv[2] save_new_force_nicks() elif (argv[0].lower() == 'del') and (len(argv) == 2): if argv[1] in colored_nicks: # search if nick exists del colored_nicks[argv[1]] save_new_force_nicks() weechat.prnt(buffer, "Removed nick '%s'" % argv[1]) else: weechat.prnt(buffer, "Nick '%s' not found in nick_color_force" % argv[1]) else: print_usage(buffer) return weechat.WEECHAT_RC_OK
def unfocused_bar_item (data, item, window): '''Item constructor''' # window empty? root bar! if not window: window = w.current_window() ptr_buffer = w.window_get_pointer(window, "buffer") if ptr_buffer == "" or ptr_buffer == w.current_buffer(): return "" length = w.window_get_integer(window, 'win_width') - w.buffer_get_integer(ptr_buffer, 'input_length') s = length * inputtape_char return s
def nick_colors_cmd_cb(data, buffer, args): global colored_nicks if args == "": # no args given. quit print_usage(buffer) return weechat.WEECHAT_RC_OK argv = args.strip().split(" ") if (len(argv) == 0) or (len(argv) >= 4): # maximum of 3 args!! print_usage(buffer) return weechat.WEECHAT_RC_OK bufpointer = weechat.window_get_pointer(buffer,'buffer') # current buffer create_list() if argv[0].lower() == 'list': # list all nicks if len(colored_nicks) == 0: weechat.prnt(buffer,'%sno nicks in \"%s\"...' % (weechat.prefix("error"),nick_option)) elif len(argv) == 2: if argv[1] in colored_nicks: color = colored_nicks[argv[1]] # get color from given nick weechat.prnt(buffer,"%s%s: %s" % (weechat.color(color),argv[1],color)) else: weechat.prnt(buffer,"no color set for: %s" % (argv[1])) else: weechat.prnt(buffer,"List of nicks in : %s" % nick_option) for nick,color in list(colored_nicks.items()): weechat.prnt(buffer,"%s%s: %s" % (weechat.color(color),nick,color)) elif (argv[0].lower() == 'add') and (len(argv) == 3): if argv[1] in colored_nicks: weechat.prnt(buffer, "Changing nick '%s' to color %s%s" % (argv[1], weechat.color(argv[2]), argv[2])) else: weechat.prnt(buffer, "Adding nick '%s' with color %s%s" % (argv[1], weechat.color(argv[2]), argv[2])) colored_nicks[argv[1]] = argv[2] save_new_force_nicks() elif (argv[0].lower() == 'del') and (len(argv) == 2): if argv[1] in colored_nicks: # search if nick exists del colored_nicks[argv[1]] save_new_force_nicks() weechat.prnt(buffer, "Removed nick '%s'" % argv[1]) else: weechat.prnt(buffer, "Nick '%s' not found in nick_color_force" % argv[1]) else: print_usage(buffer) return weechat.WEECHAT_RC_OK
def nick_colors_cmd_cb(data, buffer, args): global colored_nicks if args == "": # no args given. quit return weechat.WEECHAT_RC_OK argv = args.strip().split(" ") if (len(argv) == 0) or (len(argv) >= 4): # maximum of 3 args!! return weechat.WEECHAT_RC_OK bufpointer = weechat.window_get_pointer(buffer, 'buffer') # current buffer create_list() if argv[0].lower() == 'list': # list all nicks if len(colored_nicks) == 0: weechat.prnt( buffer, '%sno nicks in \"%s\"...' % (weechat.prefix("error"), nick_option)) return weechat.WEECHAT_RC_OK if len(argv) == 2: if argv[1] in colored_nicks: color = colored_nicks[argv[1]] # get color from given nick weechat.prnt( buffer, "%s%s: %s" % (weechat.color(color), argv[1], color)) else: weechat.prnt(buffer, "no color set for: %s" % (argv[1])) return weechat.WEECHAT_RC_OK weechat.prnt(buffer, "List of nicks in : %s" % nick_option) # for nick,color in colored_nicks.items(): for nick, color in list(colored_nicks.items()): weechat.prnt(buffer, "%s%s: %s" % (weechat.color(color), nick, color)) return weechat.WEECHAT_RC_OK if (argv[0].lower() == 'add') and (len(argv) == 3): if argv[1] in colored_nicks: # search if nick exists colored_nicks[argv[1]] = argv[2] else: colored_nicks[argv[1]] = argv[2] # add [nick] = [color] save_new_force_nicks() if (argv[0].lower() == 'del') and (len(argv) == 2): if argv[1] in colored_nicks: # search if nick exists del colored_nicks[argv[1]] save_new_force_nicks() return weechat.WEECHAT_RC_OK
def show_spell_correction_item_cb(data, item, window): # check for root input bar! if not window: window = weechat.current_window() # weechat.buffer_get_string(buffer,'localvar_spell_correction_suggest_item'): buffer = weechat.window_get_pointer(window, "buffer") if buffer == '': return '' tab_complete, position, aspell_suggest_item = get_position_and_suggest_item( buffer) if not position or not aspell_suggest_item: return '' # config_spell_suggest_item = weechat.config_get_plugin('suggest_item') # if config_spell_suggest_item: # show_item = config_spell_suggest_item.replace('%S',aspell_suggest_item) # show_item = substitute_colors(show_item) # return '%s' % (show_item) # else: # return aspell_suggest_item config_spell_suggest_item = weechat.config_get_plugin('suggest_item') dict_found = search_dict(buffer, position) if dict_found: if config_spell_suggest_item: show_item = config_spell_suggest_item.replace( '%S', aspell_suggest_item) show_item = show_item.replace('%D', dict_found) show_item = substitute_colors(show_item) return '%s' % (show_item) else: return aspell_suggest_item else: if config_spell_suggest_item: show_item = config_spell_suggest_item.replace( '%S', aspell_suggest_item) if weechat.config_get_plugin('hide_single_dict').lower() == 'off': show_item = show_item.replace('%D', get_aspell_dict_for(buffer)) else: show_item = show_item.replace('%D', '').rstrip() show_item = substitute_colors(show_item) return '%s' % (show_item) return aspell_suggest_item
def unfocused_bar_item(data, item, window): '''Item constructor''' # window empty? root bar! if not window: window = w.current_window() ptr_buffer = w.window_get_pointer(window, "buffer") if ptr_buffer == "" or ptr_buffer == w.current_buffer(): return "" length = w.window_get_integer(window, 'win_width') - w.buffer_get_integer( ptr_buffer, 'input_length') s = length * inputtape_char return s
def bar_item_cmodes(data, item, window): buffer = w.window_get_pointer(window, "buffer") server = w.buffer_get_string(buffer, "localvar_server") channel = w.buffer_get_string(buffer, "localvar_channel") if w.info_get("irc_is_channel", channel): cinfo = w.infolist_get("irc_channel", '', f"{server},{channel}") w.infolist_next(cinfo) modes = w.infolist_string(cinfo, "modes") w.infolist_free(cinfo) modes, _, args = modes.lstrip("+").partition(" ") args = args.split(" ") modes = list(modes) isupport_chanmodes = w.info_get("irc_server_isupport_value", f"{server},CHANMODES").split(",", 3) modes_with_args = set("".join(isupport_chanmodes[:3])) for i, mode in enumerate(modes): if mode in modes_with_args and args: modes[i] = (mode, args.pop(0)) else: modes[i] = (mode, None) args.clear() modes.sort(key=lambda m: m[0]) if w.config_get_plugin("args-first") == "yes": modes.sort(key=lambda m: 0 if m[1] else 1) modesf = mode_setting("cmodes", server) or default_cmodes(server) for i, (mode, arg) in enumerate(modes): if mode in modesf: color = w.color(modesf[mode]) else: color = w.color( w.config_string( w.config_get("irc.color.item_channel_modes"))) mode = f"{color}{mode}" if arg: args.append(f"{color}{arg}") modes[i] = mode args = " ".join(args) if args: args = f" {args}" return "+" + "".join(modes) + args return ""
def server_switch(signal_data, servername_from_current_buffer, name): global look_server SERVER = {} bufpointer = weechat.window_get_pointer(weechat.current_window(), "buffer") servername_current_buffer = servername_from_current_buffer if look_server == "merge_with_core": # merge_with_core SERVER["weechat"] = "core.weechat" # get ALL server buffers and save them infolist = weechat.infolist_get( "buffer", "", "*server.*") # we are only interest in server-buffers while weechat.infolist_next(infolist): bufpointer = weechat.infolist_pointer(infolist, "pointer") server = weechat.infolist_string( infolist, "name") # full servername (server.<servername>) servername = weechat.infolist_string( infolist, "short_name" ) # get servername from server (without prefix "server") active = weechat.infolist_integer(infolist, "active") SERVER[servername] = server if (active == 1) and (servername_current_buffer != servername ): # buffer active but not correct server buffer? weechat.command( bufpointer, "/input switch_active_buffer") # switch server buffer weechat.infolist_free(infolist) # do not forget to free infolist! # switch though all server and stop at server from current buffer i = 0 while i <= len(SERVER): for servername, full_name in list(SERVER.items()): bufpointer = weechat.buffer_search( "irc", "%s" % full_name) # search pointer from server buffer if bufpointer == "": # core buffer if weechat.buffer_get_integer(weechat.buffer_search_main(), 'active') == 1: weechat.command(weechat.buffer_search_main(), "/input switch_active_buffer") else: # server buffer! if (servername != servername_current_buffer) and ( weechat.buffer_get_integer(bufpointer, 'active') == 1): weechat.command(bufpointer, "/input switch_active_buffer") elif (servername == servername_current_buffer) and ( weechat.buffer_get_integer(bufpointer, 'active') == 1): i = len(SERVER) break i += 1
def bar_item_prefix(data, item, window): buffer = w.window_get_pointer(window, "buffer") server = w.buffer_get_string(buffer, "localvar_server") channel = w.buffer_get_string(buffer, "localvar_channel") if w.info_get("irc_is_channel", channel): nick = w.info_get("irc_nick", server) ninfo = w.infolist_get("nicklist", buffer, f"nick_{nick}") w.infolist_next(ninfo) prefix = w.infolist_string(ninfo, "prefix") pcolor = w.infolist_string(ninfo, "prefix_color") w.infolist_free(ninfo) pcolor = w.color(pcolor) return f"{pcolor}{prefix}" return ""
def my_print_cb(data, buffer, date, tags, displayed, highlight, prefix, message): global highlights if w.config_get_plugin('clear_visited_buffers') == 'on': if buffer == w.window_get_pointer(w.current_window(), 'buffer'): return w.WEECHAT_RC_OK if highlight == "1": infos = {'buffer' : buffer, 'date' : date, 'tags' : str.split(tags, ','), 'nick' : prefix, 'message' : message, } highlights.append(infos) write_file() return w.WEECHAT_RC_OK
def show_spell_suggestion_item_cb(data, item, window): buffer = weechat.window_get_pointer(window, "buffer") if buffer == '': return '' if OPTIONS['replace_mode'].lower() == "on": if not weechat.buffer_get_string(buffer, 'localvar_inline_suggestions'): return '' tab_complete, position, aspell_suggest_items = weechat.buffer_get_string( buffer, 'localvar_inline_suggestions').split(':', 2) localvar_aspell_suggest = "dummy:%s" % aspell_suggest_items # return aspell_suggest_items else: tab_complete, position, aspell_suggest_item = get_position_and_suggest_item( buffer) localvar_aspell_suggest = get_localvar_aspell_suggest(buffer) # localvar_aspell_suggest = word,word2/wort,wort2 if localvar_aspell_suggest: misspelled_word, aspell_suggestions = localvar_aspell_suggest.split( ':') aspell_suggestions_orig = aspell_suggestions aspell_suggestions = aspell_suggestions.replace('/', ',') aspell_suggestion_list = aspell_suggestions.split(',') if not position: return '' if position == "-1": return aspell_suggestions_orig if int(position) < len(aspell_suggestion_list): reset_color = weechat.color('reset') color = weechat.color( weechat.config_color( weechat.config_get("%s.color.misspelled" % plugin_name))) new_word = aspell_suggestion_list[int(position)].replace( aspell_suggestion_list[int(position)], '%s%s%s' % (color, aspell_suggestion_list[int(position)], reset_color)) aspell_suggestion_list[int( position)] = new_word # replace word with colored word aspell_suggestions_orig = ','.join(map(str, aspell_suggestion_list)) else: return '' return aspell_suggestions_orig
def show_item(data, item, window): bufpointer = weechat.window_get_pointer(window, "buffer") if bufpointer == "": return "" if weechat.buffer_get_string( bufpointer, 'name') != 'weechat': # not weechat core buffer if weechat.buffer_get_string( bufpointer, 'localvar_type') == '': # buffer with free content? return "" lines_after, lines_count, percent, current_line = count_lines( window, bufpointer) if lines_count == 0: # buffer empty? return "" tags = { '%C': str(current_line), '%A': str(lines_after), '%L': str(lines_count), '%P': str(percent) + "%" } bufsize_item = OPTIONS['format'] # substitute colors in output for color_tag in regex_color.findall(bufsize_item): bufsize_item = bufsize_item.replace( color_tag, weechat.color(color_tag.lstrip('${').rstrip('}'))) # replace mandatory tags for tag in tags.keys(): bufsize_item = bufsize_item.replace(tag, tags[tag]) # replace optional tags # %{…} only if lines after (e.g. %A > 0) if lines_after > 0: for regex_tag in regex_optional_tags.findall(bufsize_item): bufsize_item = bufsize_item.replace( regex_tag, regex_tag.lstrip('%{').rstrip('}')) else: bufsize_item = regex_optional_tags.sub('', bufsize_item) return bufsize_item
def show_item (data, item, window): # check for root input bar! if not window: window = weechat.current_window() ptr_buffer = weechat.window_get_pointer(window,'buffer') if ptr_buffer == '': return '' if weechat.buffer_get_string(ptr_buffer,'name') != 'weechat': # not weechat core buffer if weechat.buffer_get_string(ptr_buffer,'localvar_type') == '': # buffer with free content? return '' lines_after, lines_count, percent, current_line, filtered, filtered_before, filtered_after = count_lines(window,ptr_buffer) lines_after_bak = lines_after if lines_count == 0: # buffer empty? return '' if filtered == 0: filtered = '' if lines_after == 0 and (OPTIONS['show_scroll'].lower() == 'off'): lines_after = '' tags = {'%C': str(current_line), '%A': str(lines_after), '%F': str(filtered), '%L': str(lines_count), '%P': str(percent)+'%'} bufsize_item = substitute_colors(OPTIONS['format']) # replace mandatory tags for tag in list(tags.keys()): # for tag in tags.keys(): bufsize_item = bufsize_item.replace(tag, tags[tag]) # replace optional tags # %{…} only if lines after (e.g. %A > 0) if lines_after_bak > 0: for regex_tag in regex_optional_tags.findall(bufsize_item): bufsize_item = bufsize_item.replace(regex_tag, regex_tag.lstrip('%{').rstrip('}')) else: bufsize_item = regex_optional_tags.sub('', bufsize_item) return bufsize_item
def show_spell_correction_item_cb(data, item, window): # check for root input bar! if not window: window = weechat.current_window() # weechat.buffer_get_string(buffer,'localvar_spell_correction_suggest_item'): buffer = weechat.window_get_pointer(window, "buffer") if buffer == "": return "" tab_complete, position, aspell_suggest_item = get_position_and_suggest_item(buffer) if not position or not aspell_suggest_item: return "" # config_spell_suggest_item = weechat.config_get_plugin('suggest_item') # if config_spell_suggest_item: # show_item = config_spell_suggest_item.replace('%S',aspell_suggest_item) # show_item = substitute_colors(show_item) # return '%s' % (show_item) # else: # return aspell_suggest_item config_spell_suggest_item = weechat.config_get_plugin("suggest_item") dict_found = search_dict(buffer, position) if dict_found: if config_spell_suggest_item: show_item = config_spell_suggest_item.replace("%S", aspell_suggest_item) show_item = show_item.replace("%D", dict_found) show_item = substitute_colors(show_item) return "%s" % (show_item) else: return aspell_suggest_item else: if config_spell_suggest_item: show_item = config_spell_suggest_item.replace("%S", aspell_suggest_item) if weechat.config_get_plugin("hide_single_dict").lower() == "off": show_item = show_item.replace("%D", get_aspell_dict_for(buffer)) else: show_item = show_item.replace("%D", "").rstrip() show_item = substitute_colors(show_item) return "%s" % (show_item) return aspell_suggest_item
def get_logfile(window): current_buffer = weechat.window_get_pointer(window,"buffer") if current_buffer == "": return "" log_filename = "" log_enabled = 0 infolist = weechat.infolist_get('logger_buffer','','') while weechat.infolist_next(infolist): bpointer = weechat.infolist_pointer(infolist, 'buffer') if current_buffer == bpointer: log_filename = weechat.infolist_string(infolist, 'log_filename') log_enabled = weechat.infolist_integer(infolist, 'log_enabled') log_level = weechat.infolist_integer(infolist, 'log_level') weechat.infolist_free(infolist) # free infolist() return (log_filename,log_enabled)
def bar_item_prompt(data, item, window): buffer = w.window_get_pointer(window, "buffer") server = w.buffer_get_string(buffer, "localvar_server") prompt = "" prompt += bar_item_prefix(data, item, window) prompt += bar_item_nick(data, item, window) umodes = bar_item_umodes(data, item, window) if umodes: delim = w.config_string(w.config_get("weechat.bar.input.color_delim")) delim = w.color(delim) reset = w.color("reset") prompt += f"{delim}({reset}" prompt += umodes prompt += f"{delim})" return prompt
def check_buffer_type(window, value): bufpointer = weechat.window_get_pointer(window,"buffer") if bufpointer == "": return "" value = value.split(' ', 1) if len(value) <= 1: return "" channel_type = value[0] value = value[1] if channel_type == 'all' or weechat.buffer_get_string(bufpointer,'localvar_type') == channel_type: return value return ""
def nick_colors_cmd_cb(data, buffer, args): global colored_nicks if args == "": # no args given. quit return weechat.WEECHAT_RC_OK argv = args.strip().split(" ") if (len(argv) == 0) or (len(argv) >= 4): # maximum of 3 args!! return weechat.WEECHAT_RC_OK bufpointer = weechat.window_get_pointer(buffer,'buffer') # current buffer create_list() if argv[0].lower() == 'list': # list all nicks if len(colored_nicks) == 0: weechat.prnt(buffer,'%sno nicks in \"%s\"...' % (weechat.prefix("error"),nick_option)) return weechat.WEECHAT_RC_OK if len(argv) == 2: if argv[1] in colored_nicks: color = colored_nicks[argv[1]] # get color from given nick weechat.prnt(buffer,"%s%s: %s" % (weechat.color(color),argv[1],color)) else: weechat.prnt(buffer,"no color set for: %s" % (argv[1])) return weechat.WEECHAT_RC_OK weechat.prnt(buffer,"List of nicks in : %s" % nick_option) # for nick,color in colored_nicks.items(): for nick,color in list(colored_nicks.items()): weechat.prnt(buffer,"%s%s: %s" % (weechat.color(color),nick,color)) return weechat.WEECHAT_RC_OK if (argv[0].lower() == 'add') and (len(argv) == 3): if argv[1] in colored_nicks: # search if nick exists colored_nicks[argv[1]] = argv[2] else: colored_nicks[argv[1]] = argv[2] # add [nick] = [color] save_new_force_nicks() if (argv[0].lower() == 'del') and (len(argv) == 2): if argv[1] in colored_nicks: # search if nick exists del colored_nicks[argv[1]] save_new_force_nicks() return weechat.WEECHAT_RC_OK
def check_nicklist_cb(data, modifier, modifier_data, string): """ The callback that checks if nicklist should be displayed """ buffer = w.window_get_pointer(modifier_data, "buffer") if buffer: buffer_name = w.buffer_get_string(buffer, "plugin") + "." + w.buffer_get_string(buffer, "name") buffers_list = w.config_get_plugin("buffers") if w.config_get_plugin("action") == "show": for buffer_mask in buffers_list.split(","): if w.string_match(buffer_name, buffer_mask, 1): return "1" return "0" else: for buffer_mask in buffers_list.split(","): if w.string_match(buffer_name, buffer_mask, 1): return "0" return "1" return "1"
def check_buffer_type(window, value): bufpointer = weechat.window_get_pointer(window, "buffer") if bufpointer == "": return "" value = value.split(' ', 1) if len(value) <= 1: return "" channel_type = value[0] value = value[1] if channel_type == 'all' or weechat.buffer_get_string( bufpointer, 'localvar_type') == channel_type: return value return ""
def check_nicklist_cb(data, modifier, modifier_data, string): ''' The callback that checks if nicklist should be displayed ''' buffer = w.window_get_pointer(modifier_data, "buffer") if buffer: buffer_name = w.buffer_get_string(buffer, 'plugin') + '.' + w.buffer_get_string(buffer, 'name') buffers_list = w.config_get_plugin('buffers') if w.config_get_plugin('action') == 'show': for buffer_mask in buffers_list.split(','): if string_match(unicode(buffer_name), unicode(buffer_mask)): return "1" return "0" else: for buffer_mask in buffers_list.split(','): if string_match(unicode(buffer_name), unicode(buffer_mask)): return "0" return "1" return "1"
def check_nicklist_cb(data, modifier, modifier_data, string): ''' The callback that checks if nicklist should be displayed ''' buffer = w.window_get_pointer(modifier_data, "buffer") if buffer: buffer_name = w.buffer_get_string(buffer, 'plugin') + '.' + w.buffer_get_string(buffer, 'name') buffers_list = w.config_get_plugin('buffers') if w.config_get_plugin('action') == 'show': for buffer_mask in buffers_list.split(','): if w.string_match(buffer_name, buffer_mask, 1): return "1" return "0" else: for buffer_mask in buffers_list.split(','): if w.string_match(buffer_name, buffer_mask, 1): return "0" return "1" return "1"
def buffer_switch_cb(data, buffer, command): # weechat.prnt("","data: %s buffer: %s command: %s" % (data,buffer,command)) # command exist? if command == '': return weechat.WEECHAT_RC_OK # get command without leading command char! cmd = command[1:].strip().split(' ',)[0:1] # get number from command /buffer args = command.strip().split(' ',)[1:] ptr_buffer = '' if "input" in cmd and "jump_smart" in args: buffer_name, ptr_buffer, buffer_number = infolist_get_first_entry_from_hotlist() if "buffer" in cmd: if len(args) != 1: return weechat.WEECHAT_RC_OK # check if argument is a buffer "number" destination_buffer = get_destination_buffer_number(args[0]) if destination_buffer: if destination_buffer < 1: destination_buffer = 1 buffer_name, ptr_buffer = infolist_get_buffer_name_and_ptr_by_number(destination_buffer) else: # search for buffer name buffer_name, ptr_buffer = infolist_get_buffer_name_and_ptr_by_name(args[0]) if not ptr_buffer: return weechat.WEECHAT_RC_OK if ptr_buffer == weechat.window_get_pointer(weechat.current_window(), 'buffer'): return weechat.WEECHAT_RC_OK window_number = weechat.buffer_get_string(ptr_buffer, 'localvar_stick_buffer_to_window') if not window_number: window_number = get_default_stick_window_number() if window_number: weechat.command('', '/window %s' % window_number) weechat.command('', '/buffer %s' % buffer_name) return weechat.WEECHAT_RC_OK_EAT else: return weechat.WEECHAT_RC_OK
def buffer_switch_cb(data, signal, signal_data): global look_server look_server = "" look_server = weechat.config_string(weechat.config_get("irc.look.server_buffer")) if look_server == "independent": # server buffer independent? return weechat.WEECHAT_RC_OK # better remove script, you don't need it. if weechat.buffer_get_string(signal_data,'name') != 'weechat': # not weechat core buffer if (weechat.buffer_get_string(signal_data,'localvar_type') == '') or (weechat.buffer_get_string(signal_data,'localvar_type') == 'server'): return weechat.WEECHAT_RC_OK elif weechat.buffer_get_string(signal_data,'name') == 'weechat': return weechat.WEECHAT_RC_OK # buffer is channel or private? if (weechat.buffer_get_string(signal_data,'localvar_type') == 'channel') or (weechat.buffer_get_string(signal_data,'localvar_type') == 'private'): bufpointer = weechat.window_get_pointer(weechat.current_window(),"buffer") servername_from_current_buffer = weechat.buffer_get_string(bufpointer, 'localvar_server') name = weechat.buffer_get_string(bufpointer, 'name') server_switch(signal_data,servername_from_current_buffer,name) return weechat.WEECHAT_RC_OK
def buffer_switch_cb(signal, callback, callback_data): if callback_data == '': return weechat.WEECHAT_RC_OK argv = callback_data.strip().split(' ', )[1:] if len(argv) == 0 or len(argv) > 1: return weechat.WEECHAT_RC_OK # check out if string is a number str_buffer_number = get_buffer_number_as_string(argv[0]) if not str_buffer_number: return weechat.WEECHAT_RC_OK curren_buffer_number = get_current_buffer_number() if not curren_buffer_number: return weechat.WEECHAT_RC_OK if argv[0][0] == '-': switch_to_buffer = curren_buffer_number - int( argv[0][1:]) # [1:] don't use first sign if switch_to_buffer < 1: switch_to_buffer = 1 elif argv[0][0] == '+': switch_to_buffer = curren_buffer_number + int( argv[0][1:]) # [1:] don't use first sign else: switch_to_buffer = int(str_buffer_number[0]) buffer_name, ptr_buffer = infolist_get_buffer_name_and_ptr( switch_to_buffer) if not buffer_name or not ptr_buffer: return weechat.WEECHAT_RC_OK if ptr_buffer == weechat.window_get_pointer(weechat.current_window(), 'buffer'): return weechat.WEECHAT_RC_OK window_number = weechat.buffer_get_string( ptr_buffer, 'localvar_stick_buffer_to_window') if window_number: weechat.command('', '/window %s' % window_number) return weechat.WEECHAT_RC_OK
def show_item (data, item, window): bufpointer = weechat.window_get_pointer(window,"buffer") if bufpointer == "": return "" if weechat.buffer_get_string(bufpointer,'name') != 'weechat': # not weechat core buffer if weechat.buffer_get_string(bufpointer,'localvar_type') == '': # buffer with free content? return "" lines_after, lines_count, percent, current_line = count_lines(window,bufpointer) if lines_count == 0: # buffer empty? return "" tags = {'%C': str(current_line), '%A': str(lines_after), '%L': str(lines_count), '%P': str(percent)+"%"} bufsize_item = OPTIONS['format'] # substitute colors in output for color_tag in regex_color.findall(bufsize_item): bufsize_item = bufsize_item.replace(color_tag, weechat.color(color_tag.lstrip('${').rstrip('}'))) # replace mandatory tags for tag in tags.keys(): bufsize_item = bufsize_item.replace(tag, tags[tag]) # replace optional tags # %{…} only if lines after (e.g. %A > 0) if lines_after > 0: for regex_tag in regex_optional_tags.findall(bufsize_item): bufsize_item = bufsize_item.replace(regex_tag, regex_tag.lstrip('%{').rstrip('}')) else: bufsize_item = regex_optional_tags.sub('', bufsize_item) return bufsize_item
def timer_cb(data, remaining_calls): global indent current_time = int(time.time()) interval = int(weechat.config_get_plugin('modulo_interval')) * 60 if (current_time % interval) == 0: timestamp = clock(current_time) clocked = [] infolist = weechat.infolist_get('window', '', '') if infolist: prefix = int( weechat.string_eval_expression( "${weechat.look.prefix_align_min}", {}, {}, {})) if weechat.config_get_plugin('offset_prefix') == '0': offset = (prefix + 3) / 2 # including prefix separator else: offset = 0 while weechat.infolist_next(infolist): if weechat.config_get_plugin('center') == '0': indent = 0 else: # centering = (window width - prefix width - prefix separator - buffertape date) / 2 - offset - rounding adjustment window = weechat.infolist_pointer(infolist, 'pointer') indent = (weechat.window_get_integer(window, 'win_width') - prefix - 2 - 11) / 2 - offset - 1 buffer = weechat.window_get_pointer(window, 'buffer') if not buffer in clocked: clocked.append(buffer) weechat.prnt(buffer, ' ' * indent + timestamp) infolist = weechat.infolist_get('buffer', '', '') if infolist: while weechat.infolist_next(infolist): buffer = weechat.infolist_pointer(infolist, 'pointer') if not buffer in clocked: clocked.append(buffer) weechat.prnt(buffer, timestamp) weechat.infolist_free(infolist) del clocked return weechat.WEECHAT_RC_OK
def show_spell_suggestion_item_cb(data, item, window): buffer = weechat.window_get_pointer(window, "buffer") if buffer == '': return '' if OPTIONS['replace_mode'].lower() == "on": if not weechat.buffer_get_string(buffer, 'localvar_inline_suggestions'): return '' tab_complete, position, aspell_suggest_items = weechat.buffer_get_string( buffer, 'localvar_inline_suggestions').split(':', 2) return aspell_suggest_items tab_complete, position, aspell_suggest_item = get_position_and_suggest_item( buffer) localvar_aspell_suggest = get_localvar_aspell_suggest(buffer) # localvar_aspell_suggest = word,word2/wort,wort2 if localvar_aspell_suggest: misspelled_word, aspell_suggestions = localvar_aspell_suggest.split( ':') aspell_suggestions_orig = aspell_suggestions aspell_suggestions = aspell_suggestions.replace('/', ',') aspell_suggestion_list = aspell_suggestions.split(',') if not position: return '' if int(position) < len(aspell_suggestion_list): reset_color = weechat.color('reset') color = weechat.color("red") new_word = aspell_suggestion_list[int(position)].replace( aspell_suggestion_list[int(position)], '%s%s%s' % (color, aspell_suggestion_list[int(position)], reset_color)) else: return '' return aspell_suggestions_orig
def buffer_switch_cb(signal, callback, callback_data): if callback_data == '': return weechat.WEECHAT_RC_OK argv = callback_data.strip().split(' ',)[1:] if len(argv) == 0 or len(argv) > 1: return weechat.WEECHAT_RC_OK # check out if string is a number str_buffer_number = get_buffer_number_as_string(argv[0]) if not str_buffer_number: return weechat.WEECHAT_RC_OK curren_buffer_number = get_current_buffer_number() if not curren_buffer_number: return weechat.WEECHAT_RC_OK if argv[0][0] == '-': switch_to_buffer = curren_buffer_number - int(argv[0][1:]) # [1:] don't use first sign if switch_to_buffer < 1: switch_to_buffer = 1 elif argv[0][0] == '+': switch_to_buffer = curren_buffer_number + int(argv[0][1:]) # [1:] don't use first sign else: switch_to_buffer = int(str_buffer_number[0]) buffer_name, ptr_buffer = infolist_get_buffer_name_and_ptr(switch_to_buffer) if not buffer_name or not ptr_buffer: return weechat.WEECHAT_RC_OK if ptr_buffer == weechat.window_get_pointer(weechat.current_window(),'buffer'): return weechat.WEECHAT_RC_OK window_number = weechat.buffer_get_string(ptr_buffer,'localvar_stick_buffer_to_window') if window_number: weechat.command('','/window %s' % window_number) return weechat.WEECHAT_RC_OK
def bar_item_umodes(data, item, window): buffer = w.window_get_pointer(window, "buffer") server = w.buffer_get_string(buffer, "localvar_server") if server: uinfo = w.infolist_get("irc_server", '', server) w.infolist_next(uinfo) modes = w.infolist_string(uinfo, "nick_modes") w.infolist_free(uinfo) modes = list(sorted(modes)) modesf = mode_setting("umodes", server) or default_umodes(server) for i, mode in enumerate(modes): if mode in modesf: color = w.color(modesf[mode]) else: color = w.color( w.config_string(w.config_get("irc.color.item_nick_modes"))) modes[i] = f"{color}{mode}" return "".join(modes) else: return ""
def server_switch(signal_data,servername_from_current_buffer,name): global look_server SERVER = {} bufpointer = weechat.window_get_pointer(weechat.current_window(),"buffer") servername_current_buffer = servername_from_current_buffer if look_server == "merge_with_core": # merge_with_core SERVER["weechat"] = "core.weechat" # get ALL server buffers and save them infolist = weechat.infolist_get("buffer","","*server.*") # we are only interest in server-buffers while weechat.infolist_next(infolist): bufpointer = weechat.infolist_pointer(infolist,"pointer") server = weechat.infolist_string(infolist, "name") # full servername (server.<servername>) servername = weechat.infolist_string(infolist, "short_name") # get servername from server (without prefix "server") active = weechat.infolist_integer(infolist,"active") SERVER[servername] = server if (active == 1) and (servername_current_buffer != servername): # buffer active but not correct server buffer? weechat.command(bufpointer,"/input switch_active_buffer") # switch server buffer weechat.infolist_free(infolist) # do not forget to free infolist! # switch though all server and stop at server from current buffer i = 0 while i <= len(SERVER): for servername,full_name in SERVER.items(): bufpointer = weechat.buffer_search("irc","%s" % full_name) # search pointer from server buffer if bufpointer == "": # core buffer if weechat.buffer_get_integer(weechat.buffer_search_main(),'active') == 1: weechat.command(weechat.buffer_search_main(),"/input switch_active_buffer") else: # server buffer! if (servername != servername_current_buffer) and (weechat.buffer_get_integer(bufpointer,'active') == 1): weechat.command(bufpointer,"/input switch_active_buffer") elif (servername == servername_current_buffer) and (weechat.buffer_get_integer(bufpointer,'active') == 1): i = len(SERVER) break i += 1
def show_spell_suggestion_item_cb(data, item, window): buffer = weechat.window_get_pointer(window, "buffer") if buffer == "": return "" if OPTIONS["replace_mode"].lower() == "on": if not weechat.buffer_get_string(buffer, "localvar_inline_suggestions"): return "" tab_complete, position, aspell_suggest_items = weechat.buffer_get_string( buffer, "localvar_inline_suggestions" ).split(":", 2) return aspell_suggest_items tab_complete, position, aspell_suggest_item = get_position_and_suggest_item(buffer) localvar_aspell_suggest = get_localvar_aspell_suggest(buffer) # localvar_aspell_suggest = word,word2/wort,wort2 if localvar_aspell_suggest: misspelled_word, aspell_suggestions = localvar_aspell_suggest.split(":") aspell_suggestions_orig = aspell_suggestions aspell_suggestions = aspell_suggestions.replace("/", ",") aspell_suggestion_list = aspell_suggestions.split(",") if not position: return "" if int(position) < len(aspell_suggestion_list): reset_color = weechat.color("reset") color = weechat.color("red") new_word = aspell_suggestion_list[int(position)].replace( aspell_suggestion_list[int(position)], "%s%s%s" % (color, aspell_suggestion_list[int(position)], reset_color), ) else: return "" return aspell_suggestions_orig
def show_spell_suggestion_item_cb (data, item, window): buffer = weechat.window_get_pointer(window,"buffer") if buffer == '': return '' if OPTIONS['replace_mode'].lower() == "on": if not weechat.buffer_get_string(buffer,'localvar_inline_suggestions'): return '' tab_complete,position,aspell_suggest_items = weechat.buffer_get_string(buffer,'localvar_inline_suggestions').split(':',2) localvar_aspell_suggest = "dummy:%s" % aspell_suggest_items # return aspell_suggest_items else: tab_complete,position,aspell_suggest_item = get_position_and_suggest_item(buffer) localvar_aspell_suggest = get_localvar_aspell_suggest(buffer) # localvar_aspell_suggest = word,word2/wort,wort2 if localvar_aspell_suggest: misspelled_word,aspell_suggestions = localvar_aspell_suggest.split(':') aspell_suggestions_orig = aspell_suggestions aspell_suggestions = aspell_suggestions.replace('/',',') aspell_suggestion_list = aspell_suggestions.split(',') if not position: return '' if position == "-1": return aspell_suggestions_orig if int(position) < len(aspell_suggestion_list): reset_color = weechat.color('reset') color = weechat.color(weechat.config_color(weechat.config_get("%s.color.misspelled" % plugin_name))) new_word = aspell_suggestion_list[int(position)].replace(aspell_suggestion_list[int(position)],'%s%s%s' % (color, aspell_suggestion_list[int(position)], reset_color)) aspell_suggestion_list[int(position)] = new_word # replace word with colored word aspell_suggestions_orig = ','.join(map(str, aspell_suggestion_list)) else: return '' return aspell_suggestions_orig
def tc_bar_item (data, item, window): '''Item constructor''' # window empty? root bar! if not window: window = w.current_window() global length, cursor_pos, tc_input_text, count_over,tc_options count_over = '0' sms = '' tweet = '' reverse_chars = 0 ptr_buffer = w.window_get_pointer(window,"buffer") if ptr_buffer == "": return "" length = w.buffer_get_integer(ptr_buffer,'input_length') start_pos = int(tc_options['start_cursor_pos_at_zero'].lower() == 'off') cursor_pos = w.buffer_get_integer(ptr_buffer,'input_pos') + start_pos plugin = w.buffer_get_string(ptr_buffer, 'plugin') host = '' if plugin == 'irc': servername = w.buffer_get_string(ptr_buffer, 'localvar_server') channelname = w.buffer_get_string(ptr_buffer, 'localvar_channel') channel_type = w.buffer_get_string(ptr_buffer, 'localvar_type') name = w.buffer_get_string(ptr_buffer, 'localvar_name') input_line = w.buffer_get_string(ptr_buffer, 'input') mynick = w.info_get('irc_nick', servername) nick_ptr = w.nicklist_search_nick(ptr_buffer, '', mynick) # check for a sms message if channel_type == 'private' and name in tc_options['sms_buffer'].split(","): # 160 chars for a sms # 'sms:name:text' get_sms_text = re.match(r'(s|sms):(.*?:)(.*)', input_line) if get_sms_text: # if get_sms_text.group(2): sms_len = len(get_sms_text.group(3)) # input_length = len(input_line) # sms_prefix = input_length - sms_len sms = 160-sms_len reverse_chars = sms else: get_sms_text = re.match(r'(r|reply):(.*)', input_line) if get_sms_text: sms_len = len(get_sms_text.group(2)) sms = 160-sms_len reverse_chars = sms # check for a tweet buffer elif name in tc_options['tweet_buffer'].split(","): # 140 chars for a tweet! prefix "post " = 5 chars # check out if length >= 5 and matches "post " if length >= 5 and re.match(r'post (.*)', input_line): tweet = 145 - length reverse_chars = tweet # get host and length from host elif servername != channelname: infolist = w.infolist_get('irc_nick', '', '%s,%s,%s' % (servername,channelname,mynick)) # w.prnt("","%s.%s.%s.%s" % (servername,channelname,mynick,nick_ptr)) while w.infolist_next(infolist): host = w.infolist_string(infolist, 'host') w.infolist_free(infolist) if host != '': host = ':%s!%s PRIVMSG %s :' % (mynick,host,channelname) host_length = len(host) # w.prnt("","%d" % host_length) reverse_chars = (475 - int(host_length) - length -1) # -1 = return else: reverse_chars = (int(tc_options['max_chars']) - length) else: reverse_chars = (int(tc_options['max_chars']) - length) else: # reverse check for max_chars reverse_chars = (int(tc_options['max_chars']) - length) if reverse_chars == 0: reverse_chars = "%s" % ("0") else: if reverse_chars < 0: count_over = "%s%s%s" % (w.color(tc_options['warn_colour']),str(reverse_chars*-1), w.color('default')) reverse_chars = "%s" % ("0") tc_action_cb() else: reverse_chars = str(reverse_chars) out_format = tc_options['format'] if tc_options['warn']: if length >= int(tc_options['warn']): length_warn = "%s%s%s" % (w.color(tc_options['warn_colour']), str(length), w.color('default')) out_format = out_format.replace('%L', length_warn) else: out_format = out_format.replace('%L', str(length)) else: out_format = out_format.replace('%L', str(length)) out_format = out_format.replace('%P', str(cursor_pos)) if sms: out_format = out_format.replace('%R', "s:" + reverse_chars) elif tweet: out_format = out_format.replace('%R', "t:" + reverse_chars) else: out_format = out_format.replace('%R', reverse_chars) out_format = out_format.replace('%C', count_over) # out_format = out_format.replace('%T', str(tweet)) # out_format = out_format.replace('%S', str(sms)) tc_input_text = out_format return substitute_colors(tc_input_text)