def format_option(match): """Replace ${xxx} by its value in option format.""" global cmdhelp_settings, cmdhelp_option_infolist, cmdhelp_option_infolist_fields string = match.group() end = string.find('}') if end < 0: return string field = string[2:end] color1 = '' color2 = '' pos = field.find(':') if pos: color1 = field[0:pos] field = field[pos + 1:] if color1: color1 = weechat.color(color1) color2 = weechat.color(cmdhelp_settings['color_option_help']) fieldtype = cmdhelp_option_infolist_fields.get(field, '') if fieldtype == 'i': string = str(weechat.infolist_integer(cmdhelp_option_infolist, field)) elif fieldtype == 's': string = weechat.infolist_string(cmdhelp_option_infolist, field) elif fieldtype == 'p': string = weechat.infolist_pointer(cmdhelp_option_infolist, field) elif fieldtype == 't': string = weechat.infolist_time(cmdhelp_option_infolist, field) return '%s%s%s' % (color1, string, color2)
def format_option(match): """Replace ${xxx} by its value in option format.""" global cmdhelp_settings, cmdhelp_option_infolist global cmdhelp_option_infolist_fields string = match.group() end = string.find('}') if end < 0: return string field = string[2:end] color1 = '' color2 = '' pos = field.find(':') if pos: color1 = field[0:pos] field = field[pos + 1:] if color1: color1 = weechat.color(color1) color2 = weechat.color(cmdhelp_settings['color_option_help']) fieldtype = cmdhelp_option_infolist_fields.get(field, '') if fieldtype == 'i': string = str(weechat.infolist_integer(cmdhelp_option_infolist, field)) elif fieldtype == 's': string = weechat.infolist_string(cmdhelp_option_infolist, field) elif fieldtype == 'p': string = weechat.infolist_pointer(cmdhelp_option_infolist, field) elif fieldtype == 't': date = weechat.infolist_time(cmdhelp_option_infolist, field) # since WeeChat 2.2, infolist_time returns a long integer instead of # a string if not isinstance(date, str): date = time.strftime('%F %T', time.localtime(int(date))) string = date return '%s%s%s' % (color1, string, color2)
def format_option(match): """Replace ${xxx} by its value in option format.""" global cmdhelp_settings, cmdhelp_option_infolist global cmdhelp_option_infolist_fields string = match.group() end = string.find('}') if end < 0: return string field = string[2:end] color1 = '' color2 = '' pos = field.find(':') if pos: color1 = field[0:pos] field = field[pos+1:] if color1: color1 = weechat.color(color1) color2 = weechat.color(cmdhelp_settings['color_option_help']) fieldtype = cmdhelp_option_infolist_fields.get(field, '') if fieldtype == 'i': string = str(weechat.infolist_integer(cmdhelp_option_infolist, field)) elif fieldtype == 's': string = weechat.infolist_string(cmdhelp_option_infolist, field) elif fieldtype == 'p': string = weechat.infolist_pointer(cmdhelp_option_infolist, field) elif fieldtype == 't': date = weechat.infolist_time(cmdhelp_option_infolist, field) # since WeeChat 2.2, infolist_time returns a long integer instead of # a string if not isinstance(date, str): date = time.strftime('%F %T', time.localtime(int(date))) string = date return '%s%s%s' % (color1, string, color2)
def bufsave_cmd(data, buffer, args): ''' Callback for /bufsave command ''' filename = args if not filename: w.command('', '/help %s' %SCRIPT_COMMAND) return w.WEECHAT_RC_OK if exists(filename): w.prnt('', "Error: target file already exists!") return w.WEECHAT_RC_OK infolist = w.infolist_get('buffer_lines', buffer, '') channel = w.buffer_get_string(buffer, 'name') try: fp = file(filename, 'w') except: w.prnt('', "Error writing to target file!") return w.WEECHAT_RC_OK while w.infolist_next(infolist): fp.write('%s %s %s\n' %(\ w.infolist_time(infolist, 'date'), cstrip(w.infolist_string(infolist, 'prefix')), cstrip(w.infolist_string(infolist, 'message')), )) w.infolist_free(infolist) return w.WEECHAT_RC_OK
def format_option(match): """Replace ${xxx} by its value in option format.""" global cmdhelp_settings, cmdhelp_option_infolist, cmdhelp_option_infolist_fields string = match.group() end = string.find('}') if end < 0: return string field = string[2:end] color1 = '' color2 = '' pos = field.find(':') if pos: color1 = field[0:pos] field = field[pos+1:] if color1: color1 = weechat.color(color1) color2 = weechat.color(cmdhelp_settings['color_option_help']) fieldtype = cmdhelp_option_infolist_fields.get(field, '') if fieldtype == 'i': string = str(weechat.infolist_integer(cmdhelp_option_infolist, field)) elif fieldtype == 's': string = weechat.infolist_string(cmdhelp_option_infolist, field) elif fieldtype == 'p': string = weechat.infolist_pointer(cmdhelp_option_infolist, field) elif fieldtype == 't': string = weechat.infolist_time(cmdhelp_option_infolist, field) return '%s%s%s' % (color1, string, color2)
def bufsave_cmd(data, buffer, args): ''' Callback for /bufsave command ''' filename_raw = args if not filename_raw: w.command('', '/help %s' % SCRIPT_COMMAND) return w.WEECHAT_RC_OK filename = w.string_eval_path_home(filename_raw, {}, {}, {}) if exists(filename): w.prnt('', 'Error: target file already exists!') return w.WEECHAT_RC_OK try: fp = open(filename, 'w') except: w.prnt('', 'Error writing to target file!') return w.WEECHAT_RC_OK version = w.info_get('version_number', '') or 0 if int(version) >= 0x00030600: # use hdata with WeeChat >= 0.3.6 (direct access to data, very fast) own_lines = w.hdata_pointer(w.hdata_get('buffer'), buffer, 'own_lines') if own_lines: line = w.hdata_pointer(w.hdata_get('lines'), own_lines, 'first_line') hdata_line = w.hdata_get('line') hdata_line_data = w.hdata_get('line_data') while line: data = w.hdata_pointer(hdata_line, line, 'data') if data: date = w.hdata_time(hdata_line_data, data, 'date') # since WeeChat 0.3.9, hdata_time returns long instead of string if not isinstance(date, str): date = time.strftime('%F %T', time.localtime(int(date))) fp.write('%s %s %s\n' %(\ date, cstrip(w.hdata_string(hdata_line_data, data, 'prefix')), cstrip(w.hdata_string(hdata_line_data, data, 'message')), )) line = w.hdata_move(hdata_line, line, 1) else: # use infolist with WeeChat <= 0.3.5 (full duplication of lines, slow and uses memory) infolist = w.infolist_get('buffer_lines', buffer, '') while w.infolist_next(infolist): fp.write('%s %s %s\n' %(\ w.infolist_time(infolist, 'date'), cstrip(w.infolist_string(infolist, 'prefix')), cstrip(w.infolist_string(infolist, 'message')), )) w.infolist_free(infolist) fp.close() return w.WEECHAT_RC_OK
def bufsave_cmd(data, buffer, args): ''' Callback for /bufsave command ''' filename_raw = args if not filename_raw: w.command('', '/help %s' %SCRIPT_COMMAND) return w.WEECHAT_RC_OK filename = w.string_eval_path_home(filename_raw, {}, {}, {}) if exists(filename): w.prnt('', 'Error: target file already exists!') return w.WEECHAT_RC_OK try: fp = open(filename, 'w') except: w.prnt('', 'Error writing to target file!') return w.WEECHAT_RC_OK version = w.info_get('version_number', '') or 0 if int(version) >= 0x00030600: # use hdata with WeeChat >= 0.3.6 (direct access to data, very fast) own_lines = w.hdata_pointer(w.hdata_get('buffer'), buffer, 'own_lines') if own_lines: line = w.hdata_pointer(w.hdata_get('lines'), own_lines, 'first_line') hdata_line = w.hdata_get('line') hdata_line_data = w.hdata_get('line_data') while line: data = w.hdata_pointer(hdata_line, line, 'data') if data: date = w.hdata_time(hdata_line_data, data, 'date') # since WeeChat 0.3.9, hdata_time returns long instead of string if not isinstance(date, str): date = time.strftime('%F %T', time.localtime(int(date))) fp.write('%s %s %s\n' %(\ date, cstrip(w.hdata_string(hdata_line_data, data, 'prefix')), cstrip(w.hdata_string(hdata_line_data, data, 'message')), )) line = w.hdata_move(hdata_line, line, 1) else: # use infolist with WeeChat <= 0.3.5 (full duplication of lines, slow and uses memory) infolist = w.infolist_get('buffer_lines', buffer, '') while w.infolist_next(infolist): fp.write('%s %s %s\n' %(\ w.infolist_time(infolist, 'date'), cstrip(w.infolist_string(infolist, 'prefix')), cstrip(w.infolist_string(infolist, 'message')), )) w.infolist_free(infolist) fp.close() return w.WEECHAT_RC_OK
def get_last_line_date(buffer): date = "1970-01-01 01:00:00" infolist = w.infolist_get("buffer_lines", buffer, "") while w.infolist_prev(infolist): date = w.infolist_time(infolist, "date") if date != "1970-01-01 01:00:00": # Some lines like "Day changed to" message doesn't have date # set so loop until we find a message that does break w.infolist_free(infolist) return date
def get_last_line_date(buffer): date = '1970-01-01 01:00:00' infolist = w.infolist_get('buffer_lines', buffer, '') while w.infolist_prev(infolist): date = w.infolist_time(infolist, 'date') if date != '1970-01-01 01:00:00': # Some lines like "Day changed to" message doesn't have date # set so loop until we find a message that does break w.infolist_free(infolist) return date
def get_last_line_date(buffer): date = '1970-01-01 01:00:00' infolist = w.infolist_get('buffer_lines', buffer, '') while w.infolist_prev(infolist): date = w.infolist_time(infolist, 'date') # since WeeChat 2.2, infolist_time returns a long integer instead of # a string if not isinstance(date, str): date = time.strftime('%F %T', time.localtime(int(date))) if date != '1970-01-01 01:00:00': # Some lines like "Day changed to" message doesn't have date # set so loop until we find a message that does break w.infolist_free(infolist) return date
def test_infolist(): """Test infolist functions.""" hook_infolist = weechat.hook_infolist('infolist_test_script', 'description', '', '', 'infolist_cb', '') check(weechat.infolist_get('infolist_does_not_exist', '', '') == '') ptr_infolist = weechat.infolist_get('infolist_test_script', '', '') check(ptr_infolist != '') check(weechat.infolist_next(ptr_infolist) == 1) check(weechat.infolist_integer(ptr_infolist, 'integer') == 123) check(weechat.infolist_string(ptr_infolist, 'string') == 'test string') check(weechat.infolist_pointer(ptr_infolist, 'pointer') == '0xabcdef') check(weechat.infolist_time(ptr_infolist, 'time') == 1231231230) check(weechat.infolist_fields(ptr_infolist) == 'i:integer,s:string,p:pointer,t:time') check(weechat.infolist_next(ptr_infolist) == 0) weechat.infolist_free(ptr_infolist) weechat.unhook(hook_infolist)
def paste(data, buffer, args): text = '' infolist = weechat.infolist_get('buffer_lines', buffer, '') while weechat.infolist_next(infolist): text = text + ('%s <%s> %s\n' %(\ weechat.infolist_time(infolist, 'date'), uncolor(weechat.infolist_string(infolist, 'prefix')), uncolor(weechat.infolist_string(infolist, 'message')), )) weechat.infolist_free(infolist) data = {'sprunge': text} response = requests.post('http://sprunge.us', data) weechat.prnt('', response.content) return weechat.WEECHAT_RC_OK
def infolist_display(buffer, args): global infolist_var_type items = args.split(" ", 1) infolist_args = "" infolist_pointer = "" if len(items) >= 2: infolist_args = items[1] if infolist_args[:2] == "0x": infolist_pointer, sep, infolist_args = infolist_args.partition(" ") elif infolist_args[:3] == "\"\" ": infolist_args = infolist_args[3:] infolist = weechat.infolist_get(items[0], infolist_pointer, infolist_args) if infolist == "": weechat.prnt_date_tags(buffer, 0, "no_filter", "%sInfolist '%s' not found." % (weechat.prefix("error"), items[0])) return weechat.WEECHAT_RC_OK item_count = 0 weechat.buffer_clear(buffer) weechat.prnt_date_tags(buffer, 0, "no_filter", "Infolist '%s', with pointer '%s' and arguments '%s':" % (items[0], infolist_pointer, infolist_args)) weechat.prnt(buffer, "") count = 0 while weechat.infolist_next(infolist): item_count += 1 if item_count > 1: weechat.prnt(buffer, "") fields = weechat.infolist_fields(infolist).split(",") prefix = "%s[%s%d%s]\t" % (weechat.color("chat_delimiters"), weechat.color("chat_buffer"), item_count, weechat.color("chat_delimiters")) for field in fields: (type, name) = field.split(":", 1) value = "" quote = "" if type == "i": value = weechat.infolist_integer(infolist, name) elif type == "s": value = weechat.infolist_string(infolist, name) quote = "'" elif type == "p": value = weechat.infolist_pointer(infolist, name) elif type == "t": value = weechat.infolist_time(infolist, name) name_end = "." * (30 - len(name)) weechat.prnt_date_tags(buffer, 0, "no_filter", "%s%s%s: %s%s%s %s%s%s%s%s%s" % (prefix, name, name_end, weechat.color("brown"), infolist_var_type[type], weechat.color("chat"), weechat.color("chat"), quote, weechat.color("cyan"), value, weechat.color("chat"), quote)) prefix = "" count += 1 if count == 0: weechat.prnt_date_tags(buffer, 0, "no_filter", "Empty infolist.") weechat.infolist_free(infolist) return weechat.WEECHAT_RC_OK
def get_time(self, name): "Get a time value from an InfoList" self.assert_open() return infolist_time(self._infolist, name)
def infolist_display(buffer, args): global infolist_var_type items = args.split(" ", 1) infolist_args = "" infolist_pointer = "" if len(items) >= 2: infolist_args = items[1] if infolist_args[:2] == "0x": infolist_pointer, sep, infolist_args = infolist_args.partition(" ") elif infolist_args[:3] == "\"\" ": infolist_args = infolist_args[3:] infolist = weechat.infolist_get(items[0], infolist_pointer, infolist_args) if infolist == "": weechat.prnt_date_tags( buffer, 0, "no_filter", "%sInfolist '%s' not found." % (weechat.prefix("error"), items[0])) return weechat.WEECHAT_RC_OK item_count = 0 weechat.buffer_clear(buffer) weechat.prnt_date_tags( buffer, 0, "no_filter", "Infolist '%s', with pointer '%s' and arguments '%s':" % (items[0], infolist_pointer, infolist_args)) weechat.prnt(buffer, "") count = 0 while weechat.infolist_next(infolist): item_count += 1 if item_count > 1: weechat.prnt(buffer, "") fields = weechat.infolist_fields(infolist).split(",") prefix = "%s[%s%d%s]\t" % (weechat.color("chat_delimiters"), weechat.color("chat_buffer"), item_count, weechat.color("chat_delimiters")) for field in fields: (type, name) = field.split(":", 1) value = "" quote = "" if type == "i": value = weechat.infolist_integer(infolist, name) elif type == "s": value = weechat.infolist_string(infolist, name) quote = "'" elif type == "p": value = weechat.infolist_pointer(infolist, name) elif type == "t": value = weechat.infolist_time(infolist, name) # since WeeChat 2.2, infolist_time returns a long integer # instead of a string if not isinstance(value, str): str_date = time.strftime('%F %T', time.localtime(int(value))) value = '%d (%s)' % (value, str_date) name_end = "." * (30 - len(name)) weechat.prnt_date_tags( buffer, 0, "no_filter", "%s%s%s: %s%s%s %s%s%s%s%s%s" % (prefix, name, name_end, weechat.color("brown"), infolist_var_type[type], weechat.color("chat"), weechat.color("chat"), quote, weechat.color("cyan"), value, weechat.color("chat"), quote)) prefix = "" count += 1 if count == 0: weechat.prnt_date_tags(buffer, 0, "no_filter", "Empty infolist.") weechat.infolist_free(infolist) return weechat.WEECHAT_RC_OK