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
Beispiel #8
0
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 ""
Beispiel #9
0
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
Beispiel #10
0
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
Beispiel #11
0
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)
Beispiel #12
0
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
Beispiel #13
0
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
Beispiel #14
0
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
Beispiel #16
0
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 ''
Beispiel #17
0
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 ""
Beispiel #18
0
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 ''
Beispiel #19
0
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 ""
Beispiel #20
0
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
Beispiel #21
0
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 ""
Beispiel #22
0
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
Beispiel #23
0
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
Beispiel #25
0
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
Beispiel #26
0
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
Beispiel #27
0
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
Beispiel #28
0
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
Beispiel #29
0
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
Beispiel #30
0
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
Beispiel #32
0
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 ""
Beispiel #33
0
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
Beispiel #34
0
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
Beispiel #35
0
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
Beispiel #36
0
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
Beispiel #38
0
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)
Beispiel #39
0
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
Beispiel #40
0
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 ""
Beispiel #41
0
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
Beispiel #42
0
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"
Beispiel #43
0
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 ""
Beispiel #44
0
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"
Beispiel #45
0
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"
Beispiel #46
0
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
Beispiel #49
0
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
Beispiel #50
0
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
Beispiel #51
0
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
Beispiel #52
0
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
Beispiel #53
0
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
Beispiel #57
0
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)