mirror of
https://github.com/irssi/irssi.git
synced 2024-11-03 04:27:19 -05:00
Merge branch 'master' into selfunload-fix
This commit is contained in:
commit
12685f8074
@ -246,7 +246,7 @@ FE common
|
||||
"gui print text", WINDOW_REC, int fg, int bg, int flags, char *text, TEXT_DEST_REC
|
||||
|
||||
(Can be used to determine when all "gui print text"s are sent (not required))
|
||||
"gui print text finished", WINDOW_REC
|
||||
"gui print text finished", WINDOW_REC, TEXT_DEST_REC
|
||||
|
||||
* Provides signals:
|
||||
|
||||
@ -353,7 +353,7 @@ gui-readline.c:
|
||||
|
||||
gui-printtext.c:
|
||||
"beep"
|
||||
"gui print text after finished", WINDOW_REC, LINE_REC *line, LINE_REC *prev_line
|
||||
"gui print text after finished", WINDOW_REC, LINE_REC *line, LINE_REC *prev_line, TEXT_DEST_REC
|
||||
|
||||
textbuffer-view.c
|
||||
"gui textbuffer line removed", TEXTBUFFER_VIEW_REC *view, LINE_REC *line, LINE_REC *prev_line
|
||||
|
@ -117,7 +117,8 @@ static void cmd_version(char *data)
|
||||
/* SYNTAX: CAT [-window] <file> [<seek position>] */
|
||||
static void cmd_cat(const char *data, SERVER_REC *server, WI_ITEM_REC *item)
|
||||
{
|
||||
char *fname, *fposstr, *target;
|
||||
char *fname, *fposstr;
|
||||
gboolean target;
|
||||
GHashTable *optlist;
|
||||
void *free_arg;
|
||||
int fpos;
|
||||
@ -155,15 +156,18 @@ static void cmd_cat(const char *data, SERVER_REC *server, WI_ITEM_REC *item)
|
||||
return;
|
||||
}
|
||||
|
||||
target = g_hash_table_lookup(optlist, "window") != NULL ? item->name : NULL;
|
||||
target = g_hash_table_lookup(optlist, "window") != NULL;
|
||||
|
||||
g_io_channel_set_encoding(handle, NULL, NULL);
|
||||
g_io_channel_seek_position(handle, fpos, G_SEEK_SET, NULL);
|
||||
buf = g_string_sized_new(512);
|
||||
while (g_io_channel_read_line_string(handle, buf, &tpos, NULL) == G_IO_STATUS_NORMAL) {
|
||||
buf->str[tpos] = '\0';
|
||||
printtext(target != NULL ? server : NULL, target, MSGLEVEL_CLIENTCRAP |
|
||||
MSGLEVEL_NEVER, "%s", buf->str);
|
||||
if (target)
|
||||
printtext_window(active_win, MSGLEVEL_CLIENTCRAP | MSGLEVEL_NEVER, "%s",
|
||||
buf->str);
|
||||
else
|
||||
printtext(NULL, NULL, MSGLEVEL_CLIENTCRAP | MSGLEVEL_NEVER, "%s", buf->str);
|
||||
}
|
||||
g_string_free(buf, TRUE);
|
||||
cmd_params_free(free_arg);
|
||||
|
@ -442,7 +442,7 @@ static void sig_print_text(TEXT_DEST_REC *dest, const char *text)
|
||||
format_send_to_gui(dest, str);
|
||||
g_free(str);
|
||||
|
||||
signal_emit_id(signal_gui_print_text_finished, 1, dest->window);
|
||||
signal_emit_id(signal_gui_print_text_finished, 2, dest->window, dest);
|
||||
}
|
||||
|
||||
static void sig_print_format(THEME_REC *theme, const char *module, TEXT_DEST_REC *dest,
|
||||
|
@ -158,7 +158,8 @@ void gui_printtext_after_time(TEXT_DEST_REC *dest, LINE_REC *prev, const char *s
|
||||
gui->insert_after_time = time;
|
||||
format_send_to_gui(dest, str);
|
||||
gui->use_insert_after = FALSE;
|
||||
signal_emit("gui print text after finished", 3, dest->window, gui->insert_after, prev);
|
||||
signal_emit("gui print text after finished", 4, dest->window, gui->insert_after, prev,
|
||||
dest);
|
||||
}
|
||||
|
||||
void gui_printtext_after(TEXT_DEST_REC *dest, LINE_REC *prev, const char *str)
|
||||
@ -376,7 +377,7 @@ static void sig_gui_print_text(WINDOW_REC *window, void *fgcolor,
|
||||
gui->insert_after = insert_after;
|
||||
}
|
||||
|
||||
static void sig_gui_printtext_finished(WINDOW_REC *window)
|
||||
static void sig_gui_printtext_finished(WINDOW_REC *window, TEXT_DEST_REC *dest)
|
||||
{
|
||||
TEXT_BUFFER_VIEW_REC *view;
|
||||
LINE_REC *insert_after;
|
||||
|
@ -672,7 +672,11 @@ void term_stop(void)
|
||||
|
||||
static int input_utf8(const unsigned char *buffer, int size, unichar *result)
|
||||
{
|
||||
unichar c = g_utf8_get_char_validated((char *)buffer, size);
|
||||
unichar c = g_utf8_get_char_validated((char *) buffer, size);
|
||||
|
||||
/* GLib >= 2.63 do not accept Unicode NUL anymore */
|
||||
if (c == (unichar) -2 && *buffer == 0 && size > 0)
|
||||
c = 0;
|
||||
|
||||
switch (c) {
|
||||
case (unichar)-1:
|
||||
|
@ -42,6 +42,7 @@ void textbuffer_format_rec_free(TEXT_BUFFER_FORMAT_REC *rec)
|
||||
i_refstr_release(rec->server_tag);
|
||||
i_refstr_release(rec->target);
|
||||
i_refstr_release(rec->nick);
|
||||
i_refstr_release(rec->address);
|
||||
if (rec->nargs >= 1) {
|
||||
i_refstr_release(rec->args[0]);
|
||||
}
|
||||
@ -54,17 +55,13 @@ void textbuffer_format_rec_free(TEXT_BUFFER_FORMAT_REC *rec)
|
||||
g_slice_free(TEXT_BUFFER_FORMAT_REC, rec);
|
||||
}
|
||||
|
||||
static TEXT_BUFFER_FORMAT_REC *format_rec_new(const char *module, const char *format_tag,
|
||||
const char *server_tag, const char *target,
|
||||
const char *nick, int nargs, const char **args)
|
||||
static TEXT_BUFFER_FORMAT_REC *format_rec_new(const char *module, const char *format_tag, int nargs,
|
||||
const char **args)
|
||||
{
|
||||
int n;
|
||||
TEXT_BUFFER_FORMAT_REC *ret = g_slice_new0(TEXT_BUFFER_FORMAT_REC);
|
||||
ret->module = i_refstr_intern(module);
|
||||
ret->format = i_refstr_intern(format_tag);
|
||||
ret->server_tag = i_refstr_intern(server_tag);
|
||||
ret->target = i_refstr_intern(target);
|
||||
ret->nick = i_refstr_intern(nick);
|
||||
ret->nargs = nargs;
|
||||
ret->args = g_new0(char *, nargs);
|
||||
if (nargs >= 1) {
|
||||
@ -76,6 +73,19 @@ static TEXT_BUFFER_FORMAT_REC *format_rec_new(const char *module, const char *fo
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void format_rec_set_dest(TEXT_BUFFER_FORMAT_REC *rec, const TEXT_DEST_REC *dest)
|
||||
{
|
||||
i_refstr_release(rec->server_tag);
|
||||
i_refstr_release(rec->target);
|
||||
i_refstr_release(rec->nick);
|
||||
i_refstr_release(rec->address);
|
||||
rec->server_tag = i_refstr_intern(dest->server_tag);
|
||||
rec->target = i_refstr_intern(dest->target);
|
||||
rec->nick = i_refstr_intern(dest->nick);
|
||||
rec->address = i_refstr_intern(dest->address);
|
||||
rec->flags = dest->flags & ~PRINT_FLAG_FORMAT;
|
||||
}
|
||||
|
||||
static LINE_INFO_REC *store_lineinfo_tmp(TEXT_DEST_REC *dest)
|
||||
{
|
||||
GUI_WINDOW_REC *gui;
|
||||
@ -132,11 +142,10 @@ static void sig_print_format(THEME_REC *theme, const char *module, TEXT_DEST_REC
|
||||
formatnum = GPOINTER_TO_INT(formatnump);
|
||||
formats = g_hash_table_lookup(default_formats, module);
|
||||
|
||||
info->format = format_rec_new(module, formats[formatnum].tag, dest->server_tag,
|
||||
dest->target, dest->nick, formats[formatnum].params, args);
|
||||
info->format =
|
||||
format_rec_new(module, formats[formatnum].tag, formats[formatnum].params, args);
|
||||
special_push_collector(&info->format->expando_cache);
|
||||
|
||||
info->format->flags = dest->flags;
|
||||
dest->flags |= PRINT_FLAG_FORMAT;
|
||||
|
||||
signal_continue(5, theme, module, dest, formatnump, args);
|
||||
@ -155,11 +164,9 @@ static void sig_print_noformat(TEXT_DEST_REC *dest, const char *text)
|
||||
special_push_collector(NULL);
|
||||
info = store_lineinfo_tmp(dest);
|
||||
|
||||
info->format = format_rec_new(NULL, NULL, dest->server_tag, dest->target, dest->nick, 2,
|
||||
(const char *[]){ NULL, text });
|
||||
info->format = format_rec_new(NULL, NULL, 2, (const char *[]){ NULL, text });
|
||||
special_push_collector(&info->format->expando_cache);
|
||||
|
||||
info->format->flags = dest->flags;
|
||||
dest->flags |= PRINT_FLAG_FORMAT;
|
||||
|
||||
signal_continue(2, dest, text);
|
||||
@ -182,7 +189,7 @@ static GSList *reverse_collector(GSList *a1)
|
||||
return c1;
|
||||
}
|
||||
|
||||
static void sig_gui_print_text_finished(WINDOW_REC *window)
|
||||
static void sig_gui_print_text_finished(WINDOW_REC *window, TEXT_DEST_REC *dest)
|
||||
{
|
||||
GUI_WINDOW_REC *gui;
|
||||
LINE_REC *insert_after;
|
||||
@ -202,6 +209,7 @@ static void sig_gui_print_text_finished(WINDOW_REC *window)
|
||||
return;
|
||||
|
||||
info->format->expando_cache = reverse_collector(info->format->expando_cache);
|
||||
format_rec_set_dest(info->format, dest);
|
||||
|
||||
info->level |= MSGLEVEL_FORMAT;
|
||||
|
||||
@ -290,12 +298,16 @@ char *textbuffer_line_get_text(TEXT_BUFFER_REC *buffer, LINE_REC *line)
|
||||
|
||||
curr = line;
|
||||
line = NULL;
|
||||
format_rec = curr->info.format;
|
||||
|
||||
format_create_dest(
|
||||
format_rec = curr->info.format;
|
||||
format_create_dest_tag(
|
||||
&dest,
|
||||
format_rec->server_tag != NULL ? server_find_tag(format_rec->server_tag) : NULL,
|
||||
format_rec->target, curr->info.level & ~MSGLEVEL_FORMAT, buffer->window);
|
||||
format_rec->server_tag, format_rec->target, curr->info.level & ~MSGLEVEL_FORMAT,
|
||||
buffer->window);
|
||||
dest.nick = format_rec->nick;
|
||||
dest.address = format_rec->address;
|
||||
dest.flags = format_rec->flags;
|
||||
|
||||
theme = window_get_theme(dest.window);
|
||||
|
||||
|
@ -9,6 +9,7 @@ typedef struct _TEXT_BUFFER_FORMAT_REC {
|
||||
char *server_tag;
|
||||
char *target;
|
||||
char *nick;
|
||||
char *address;
|
||||
char **args;
|
||||
int nargs;
|
||||
GSList *expando_cache;
|
||||
|
@ -189,30 +189,32 @@ static inline void unformat(const unsigned char **ptr, int *color, unsigned int
|
||||
break;
|
||||
case FORMAT_STYLE_CLRTOEOL:
|
||||
break;
|
||||
#define SET_COLOR_EXT_FG_BITS(base, pc) \
|
||||
*color &= ~ATTR_FGCOLOR24; \
|
||||
*color = (*color & BGATTR) | (base + *pc - FORMAT_COLOR_NOCHANGE)
|
||||
#define SET_COLOR_EXT_BG_BITS(base, pc) \
|
||||
*color &= ~ATTR_BGCOLOR24; \
|
||||
*color = (*color & FGATTR) | ((base + *pc - FORMAT_COLOR_NOCHANGE) << BG_SHIFT)
|
||||
case FORMAT_COLOR_EXT1:
|
||||
*color &= ~ATTR_FGCOLOR24;
|
||||
*color = (*color & BGATTR) | (0x10 + *++*ptr - FORMAT_COLOR_NOCHANGE);
|
||||
SET_COLOR_EXT_FG_BITS(0x10, ++*ptr);
|
||||
break;
|
||||
case FORMAT_COLOR_EXT1_BG:
|
||||
*color &= ~ATTR_BGCOLOR24;
|
||||
*color = (*color & FGATTR) | (0x10 + *++*ptr - FORMAT_COLOR_NOCHANGE);
|
||||
SET_COLOR_EXT_BG_BITS(0x10, ++*ptr);
|
||||
break;
|
||||
case FORMAT_COLOR_EXT2:
|
||||
*color &= ~ATTR_FGCOLOR24;
|
||||
*color = (*color & BGATTR) | (0x60 + *++*ptr - FORMAT_COLOR_NOCHANGE);
|
||||
SET_COLOR_EXT_FG_BITS(0x60, ++*ptr);
|
||||
break;
|
||||
case FORMAT_COLOR_EXT2_BG:
|
||||
*color &= ~ATTR_BGCOLOR24;
|
||||
*color = (*color & FGATTR) | (0x60 + *++*ptr - FORMAT_COLOR_NOCHANGE);
|
||||
SET_COLOR_EXT_BG_BITS(0x60, ++*ptr);
|
||||
break;
|
||||
case FORMAT_COLOR_EXT3:
|
||||
*color &= ~ATTR_FGCOLOR24;
|
||||
*color = (*color & BGATTR) | (0xb0 + *++*ptr - FORMAT_COLOR_NOCHANGE);
|
||||
SET_COLOR_EXT_FG_BITS(0xb0, ++*ptr);
|
||||
break;
|
||||
case FORMAT_COLOR_EXT3_BG:
|
||||
*color &= ~ATTR_BGCOLOR24;
|
||||
*color = (*color & FGATTR) | (0xb0 + *++*ptr - FORMAT_COLOR_NOCHANGE);
|
||||
SET_COLOR_EXT_BG_BITS(0xb0, ++*ptr);
|
||||
break;
|
||||
#undef SET_COLOR_EXT_BG_BITS
|
||||
#undef SET_COLOR_EXT_FG_BITS
|
||||
#ifdef TERM_TRUECOLOR
|
||||
case FORMAT_COLOR_24:
|
||||
unformat_24bit_line_color(ptr, 1, color, fg24, bg24);
|
||||
|
Loading…
Reference in New Issue
Block a user