mirror of
https://github.com/irssi/irssi.git
synced 2024-12-04 14:46:39 -05:00
added format_get_length() for getting length of text part in a format
string. gui_printtext() now works like printtext_string() so %s won't accidentally crash it. /SET prompt can now have %formats. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1273 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
parent
c8893c61ee
commit
4718edf055
@ -216,6 +216,34 @@ void format_create_dest(TEXT_DEST_REC *dest,
|
|||||||
dest->hilight_bg_color = 0;
|
dest->hilight_bg_color = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int format_get_length(const char *str)
|
||||||
|
{
|
||||||
|
GString *tmp;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
tmp = g_string_new(NULL);
|
||||||
|
len = 0;
|
||||||
|
while (*str != '\0') {
|
||||||
|
if (*str == '%' && str[1] != '\0') {
|
||||||
|
str++;
|
||||||
|
if (*str != '%' && format_expand_styles(tmp, *str)) {
|
||||||
|
str++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* %% or unknown %code, written as-is */
|
||||||
|
if (*str != '%')
|
||||||
|
len++;
|
||||||
|
}
|
||||||
|
|
||||||
|
len++;
|
||||||
|
str++;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_string_free(tmp, TRUE);
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
static char *format_get_text_args(TEXT_DEST_REC *dest,
|
static char *format_get_text_args(TEXT_DEST_REC *dest,
|
||||||
const char *text, char **arglist)
|
const char *text, char **arglist)
|
||||||
{
|
{
|
||||||
|
@ -43,6 +43,9 @@ typedef struct {
|
|||||||
|
|
||||||
int format_find_tag(const char *module, const char *tag);
|
int format_find_tag(const char *module, const char *tag);
|
||||||
|
|
||||||
|
/* Return length of text part in string (ie. without % codes) */
|
||||||
|
int format_get_length(const char *str);
|
||||||
|
|
||||||
char *format_get_text(const char *module, WINDOW_REC *window,
|
char *format_get_text(const char *module, WINDOW_REC *window,
|
||||||
void *server, const char *target,
|
void *server, const char *target,
|
||||||
int formatnum, ...);
|
int formatnum, ...);
|
||||||
|
@ -348,7 +348,7 @@ void printtext_window(WINDOW_REC *window, int level, const char *text, ...)
|
|||||||
va_end(va);
|
va_end(va);
|
||||||
}
|
}
|
||||||
|
|
||||||
void printtext_gui_args(const char *text, va_list va)
|
void printtext_gui(const char *text)
|
||||||
{
|
{
|
||||||
TEXT_DEST_REC dest;
|
TEXT_DEST_REC dest;
|
||||||
char *str;
|
char *str;
|
||||||
@ -357,20 +357,11 @@ void printtext_gui_args(const char *text, va_list va)
|
|||||||
|
|
||||||
memset(&dest, 0, sizeof(dest));
|
memset(&dest, 0, sizeof(dest));
|
||||||
|
|
||||||
str = printtext_get_args(&dest, text, va);
|
str = printtext_expand_formats(text);
|
||||||
format_send_to_gui(&dest, str);
|
format_send_to_gui(&dest, str);
|
||||||
g_free(str);
|
g_free(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
void printtext_gui(const char *text, ...)
|
|
||||||
{
|
|
||||||
va_list va;
|
|
||||||
|
|
||||||
va_start(va, text);
|
|
||||||
printtext_gui_args(text, va);
|
|
||||||
va_end(va);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void msg_beep_check(SERVER_REC *server, int level)
|
static void msg_beep_check(SERVER_REC *server, int level)
|
||||||
{
|
{
|
||||||
if (level != 0 && (level & MSGLEVEL_NOHILIGHT) == 0 &&
|
if (level != 0 && (level & MSGLEVEL_NOHILIGHT) == 0 &&
|
||||||
|
@ -17,8 +17,7 @@ void printbeep(void);
|
|||||||
|
|
||||||
/* only GUI should call these - used for printing text to somewhere else
|
/* only GUI should call these - used for printing text to somewhere else
|
||||||
than windows */
|
than windows */
|
||||||
void printtext_gui(const char *text, ...);
|
void printtext_gui(const char *text);
|
||||||
void printtext_gui_args(const char *text, va_list va);
|
|
||||||
void printformat_module_gui(const char *module, int formatnum, ...);
|
void printformat_module_gui(const char *module, int formatnum, ...);
|
||||||
void printformat_module_gui_args(const char *module, int formatnum, va_list va);
|
void printformat_module_gui_args(const char *module, int formatnum, va_list va);
|
||||||
|
|
||||||
|
@ -19,7 +19,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "module.h"
|
#include "module.h"
|
||||||
|
#include "formats.h"
|
||||||
|
|
||||||
|
#include "gui-printtext.h"
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
|
|
||||||
static GString *entry;
|
static GString *entry;
|
||||||
@ -78,11 +80,11 @@ void gui_entry_set_prompt(const char *str)
|
|||||||
|
|
||||||
g_free_not_null(prompt);
|
g_free_not_null(prompt);
|
||||||
prompt = g_strdup(str);
|
prompt = g_strdup(str);
|
||||||
promptlen = strlen(prompt);
|
promptlen = format_get_length(prompt);
|
||||||
}
|
}
|
||||||
|
|
||||||
set_color(stdscr, 0);
|
if (prompt != NULL)
|
||||||
mvaddstr(LINES-1, 0, prompt);
|
gui_printtext(0, LINES-1, prompt);
|
||||||
|
|
||||||
entry_screenpos();
|
entry_screenpos();
|
||||||
entry_update();
|
entry_update();
|
||||||
@ -94,7 +96,7 @@ void gui_entry_set_perm_prompt(const char *str)
|
|||||||
|
|
||||||
g_free_not_null(prompt);
|
g_free_not_null(prompt);
|
||||||
prompt = g_strdup(str);
|
prompt = g_strdup(str);
|
||||||
promptlen = strlen(prompt);
|
promptlen = format_get_length(prompt);
|
||||||
|
|
||||||
permanent_prompt = TRUE;
|
permanent_prompt = TRUE;
|
||||||
gui_entry_set_prompt(NULL);
|
gui_entry_set_prompt(NULL);
|
||||||
|
@ -239,16 +239,12 @@ void gui_window_line_remove(WINDOW_REC *window, LINE_REC *line, int redraw)
|
|||||||
gui_window_redraw(window);
|
gui_window_redraw(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
void gui_printtext(int xpos, int ypos, const char *str, ...)
|
void gui_printtext(int xpos, int ypos, const char *str)
|
||||||
{
|
{
|
||||||
va_list va;
|
|
||||||
|
|
||||||
next_xpos = xpos;
|
next_xpos = xpos;
|
||||||
next_ypos = ypos;
|
next_ypos = ypos;
|
||||||
|
|
||||||
va_start(va, str);
|
printtext_gui(str);
|
||||||
printtext_gui_args(str, va);
|
|
||||||
va_end(va);
|
|
||||||
|
|
||||||
next_xpos = next_ypos = -1;
|
next_xpos = next_ypos = -1;
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,6 @@ void gui_window_line_append(GUI_WINDOW_REC *gui, const char *str, int len);
|
|||||||
void gui_window_line_remove(WINDOW_REC *window, LINE_REC *line, int redraw);
|
void gui_window_line_remove(WINDOW_REC *window, LINE_REC *line, int redraw);
|
||||||
void gui_window_line_text_free(GUI_WINDOW_REC *gui, LINE_REC *line);
|
void gui_window_line_text_free(GUI_WINDOW_REC *gui, LINE_REC *line);
|
||||||
|
|
||||||
void gui_printtext(int xpos, int ypos, const char *str, ...);
|
void gui_printtext(int xpos, int ypos, const char *str);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -517,9 +517,7 @@ static void sig_statusbar_more_check_remove(WINDOW_REC *window)
|
|||||||
|
|
||||||
static void sig_statusbar_more_check(WINDOW_REC *window)
|
static void sig_statusbar_more_check(WINDOW_REC *window)
|
||||||
{
|
{
|
||||||
g_return_if_fail(window != NULL);
|
if (window == NULL || !is_window_visible(window))
|
||||||
|
|
||||||
if (!is_window_visible(window))
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!WINDOW_GUI(window)->bottom) {
|
if (!WINDOW_GUI(window)->bottom) {
|
||||||
|
Loading…
Reference in New Issue
Block a user