diff options
author | Timo Sirainen <cras@irssi.org> | 2000-12-17 07:39:22 +0000 |
---|---|---|
committer | cras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564> | 2000-12-17 07:39:22 +0000 |
commit | bbc33bff5e4ef2acee69dd45a5581231f466b3ac (patch) | |
tree | c4171b5bd170676d881810790c49dabce303146b /src/fe-text | |
parent | aac80846b89108414a81773ad4bcdaba4401663d (diff) | |
download | irssi-bbc33bff5e4ef2acee69dd45a5581231f466b3ac.zip |
/SET prompt, /SET prompt_window - Specifies the text in prompt.
'prompt' is used when channel or query is active in window and
'prompt_window' is used with empty windows.
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1005 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src/fe-text')
-rw-r--r-- | src/fe-text/gui-readline.c | 4 | ||||
-rw-r--r-- | src/fe-text/gui-windows.c | 96 | ||||
-rw-r--r-- | src/fe-text/gui-windows.h | 2 |
3 files changed, 77 insertions, 25 deletions
diff --git a/src/fe-text/gui-readline.c b/src/fe-text/gui-readline.c index e8fc04a9..544e37d9 100644 --- a/src/fe-text/gui-readline.c +++ b/src/fe-text/gui-readline.c @@ -67,7 +67,7 @@ static void handle_key_redirect(int key) func(key, data, active_win->active_server, active_win->active); gui_entry_remove_perm_prompt(); - window_update_prompt(active_win); + window_update_prompt(); } static void handle_entry_redirect(const char *line) @@ -83,7 +83,7 @@ static void handle_entry_redirect(const char *line) func(line, data, active_win->active_server, active_win->active); gui_entry_remove_perm_prompt(); - window_update_prompt(active_win); + window_update_prompt(); } static int get_scroll_count(void) diff --git a/src/fe-text/gui-windows.c b/src/fe-text/gui-windows.c index 8ad37451..7ef33474 100644 --- a/src/fe-text/gui-windows.c +++ b/src/fe-text/gui-windows.c @@ -23,6 +23,7 @@ #include "servers.h" #include "misc.h" #include "settings.h" +#include "special-vars.h" #include "irc.h" #include "channels.h" @@ -47,6 +48,8 @@ static int linecache_tag; static int window_create_override; static int default_indent_pos; +static char *prompt, *prompt_window; + static GUI_WINDOW_REC *gui_window_init(WINDOW_REC *window, MAIN_WINDOW_REC *parent) { GUI_WINDOW_REC *gui; @@ -670,30 +673,51 @@ void gui_window_update_ypos(GUI_WINDOW_REC *gui) gui->ypos += gui_window_get_linecount(gui, tmp->data); } -void window_update_prompt(WINDOW_REC *window) +void window_update_prompt(void) { - WI_ITEM_REC *item; - char *text, *str; - - if (window != active_win) return; + const char *special; + char *prompt, *text; + int var_used; - item = window->active; - if (item != NULL) - text = item->name; - else if (window->name != NULL) - text = window->name; - else { + special = settings_get_str(active_win->active != NULL ? + "prompt" : "prompt_window"); + if (*special == '\0') { gui_entry_set_prompt(""); return; } + prompt = parse_special_string(special, active_win->active_server, + active_win->active, "", &var_used, + PARSE_FLAG_ISSET_ANY); + if (!var_used && strchr(special, '$') != NULL) { + /* none of the $vars had non-empty values, use empty prompt */ + *prompt = '\0'; + } + /* set prompt */ - text = show_lowascii(text); - str = g_strdup_printf("[%1.17s] ", text); + text = show_lowascii(prompt); + gui_entry_set_prompt(text); g_free(text); - gui_entry_set_prompt(str); - if (*str != '\0') g_free(str); + g_free(prompt); +} + +static void window_update_prompt_server(SERVER_REC *server) +{ + if (server == active_win->active_server) + window_update_prompt(); +} + +static void window_update_prompt_window(WINDOW_REC *window) +{ + if (window == active_win) + window_update_prompt(); +} + +static void window_update_prompt_window_item(WI_ITEM_REC *item) +{ + if (item == active_win->active) + window_update_prompt(); } void gui_window_reparent(WINDOW_REC *window, MAIN_WINDOW_REC *parent) @@ -727,7 +751,7 @@ static void signal_window_changed(WINDOW_REC *window) } screen_refresh_freeze(); - window_update_prompt(window); + window_update_prompt(); gui_window_redraw(window); screen_refresh_thaw(); } @@ -1060,15 +1084,45 @@ void gui_window_reformat_line(WINDOW_REC *window, LINE_REC *line) g_string_free(raw, TRUE); } +static void sig_check_window_update(WINDOW_REC *window) +{ + if (window == active_win) + window_update_prompt(); +} + static void read_settings(void) { + SIGNAL_FUNC funcs[] = { + (SIGNAL_FUNC) window_update_prompt, + (SIGNAL_FUNC) window_update_prompt_server, + (SIGNAL_FUNC) window_update_prompt_window, + (SIGNAL_FUNC) window_update_prompt_window_item + }; + default_indent_pos = settings_get_int("indent"); + + if (prompt != NULL) { + special_vars_remove_signals(prompt, 4, funcs); + special_vars_remove_signals(prompt_window, 4, funcs); + g_free(prompt); + g_free(prompt_window); + } + prompt = g_strdup(settings_get_str("prompt")); + prompt_window = g_strdup(settings_get_str("prompt_window")); + + special_vars_add_signals(prompt, 4, funcs); + special_vars_add_signals(prompt_window, 4, funcs); + + if (active_win != NULL) window_update_prompt(); } void gui_windows_init(void) { settings_add_int("lookandfeel", "indent", 10); + settings_add_str("lookandfeel", "prompt", "[$T] "); + settings_add_str("lookandfeel", "prompt_window", "[$winname] "); + prompt = NULL; prompt_window = NULL; window_create_override = -1; linecache_tag = g_timeout_add(LINE_CACHE_CHECK_TIME, (GSourceFunc) sig_check_linecache, NULL); @@ -1077,15 +1131,15 @@ void gui_windows_init(void) signal_add("window created", (SIGNAL_FUNC) gui_window_created); signal_add("window destroyed", (SIGNAL_FUNC) gui_window_destroyed); signal_add_first("window changed", (SIGNAL_FUNC) signal_window_changed); - signal_add("window item changed", (SIGNAL_FUNC) window_update_prompt); - signal_add("window name changed", (SIGNAL_FUNC) window_update_prompt); - signal_add("window item remove", (SIGNAL_FUNC) window_update_prompt); + signal_add("window item remove", (SIGNAL_FUNC) sig_check_window_update); signal_add("setup changed", (SIGNAL_FUNC) read_settings); } void gui_windows_deinit(void) { g_source_remove(linecache_tag); + g_free_not_null(prompt); + g_free_not_null(prompt_window); while (windows != NULL) window_destroy(windows->data); @@ -1094,8 +1148,6 @@ void gui_windows_deinit(void) signal_remove("window created", (SIGNAL_FUNC) gui_window_created); signal_remove("window destroyed", (SIGNAL_FUNC) gui_window_destroyed); signal_remove("window changed", (SIGNAL_FUNC) signal_window_changed); - signal_remove("window item changed", (SIGNAL_FUNC) window_update_prompt); - signal_remove("window name changed", (SIGNAL_FUNC) window_update_prompt); - signal_remove("window item remove", (SIGNAL_FUNC) window_update_prompt); + signal_remove("window item remove", (SIGNAL_FUNC) sig_check_window_update); signal_remove("setup changed", (SIGNAL_FUNC) read_settings); } diff --git a/src/fe-text/gui-windows.h b/src/fe-text/gui-windows.h index 23085b92..441f8713 100644 --- a/src/fe-text/gui-windows.h +++ b/src/fe-text/gui-windows.h @@ -113,7 +113,7 @@ void gui_window_reparent(WINDOW_REC *window, MAIN_WINDOW_REC *parent); #define is_window_bottom(gui) \ ((gui)->ypos >= -1 && (gui)->ypos <= (gui)->parent->last_line-(gui)->parent->first_line) -void window_update_prompt(WINDOW_REC *window); +void window_update_prompt(void); void gui_window_newline(GUI_WINDOW_REC *gui, int visible); void gui_window_scroll(WINDOW_REC *window, int lines); void gui_window_update_ypos(GUI_WINDOW_REC *gui); |