diff options
author | dequis <dx@dxzone.com.ar> | 2017-06-23 21:53:16 -0300 |
---|---|---|
committer | dequis <dx@dxzone.com.ar> | 2018-01-06 18:04:01 -0300 |
commit | 0aafd011c0adc58ddf43783764b96fdd74578243 (patch) | |
tree | bd7952c20e642da93c45e3a3e36b8e71870e6053 /src | |
parent | c8012b2e574c6e1e25cf20ed31182323a492a98e (diff) | |
download | irssi-0aafd011c0adc58ddf43783764b96fdd74578243.zip |
Add a startup warning if the TERM var is wrong inside tmux/screen
One of the most common and confusing issues we get in #irssi,
this should help identifying and mitigating it.
Diffstat (limited to 'src')
-rw-r--r-- | src/fe-text/irssi.c | 2 | ||||
-rw-r--r-- | src/fe-text/term-terminfo.c | 28 | ||||
-rw-r--r-- | src/fe-text/term.h | 2 |
3 files changed, 32 insertions, 0 deletions
diff --git a/src/fe-text/irssi.c b/src/fe-text/irssi.c index ef443670..0288e4f1 100644 --- a/src/fe-text/irssi.c +++ b/src/fe-text/irssi.c @@ -207,6 +207,8 @@ static void textui_finish_init(void) fe_settings_set_print("nick"); if (user_settings_changed & USER_SETTINGS_HOSTNAME) fe_settings_set_print("hostname"); + + term_environment_check(); } static void textui_deinit(void) diff --git a/src/fe-text/term-terminfo.c b/src/fe-text/term-terminfo.c index 6645cfb0..d96e235d 100644 --- a/src/fe-text/term-terminfo.c +++ b/src/fe-text/term-terminfo.c @@ -733,3 +733,31 @@ void term_gets(GArray *buffer, int *line_count) } } } + +static const char* term_env_warning = + "The TERM environment variable is set to '%s' which can cause display " + "glitches when running under %s.\n" + "Consider changing TERM to 'screen' or 'screen-256color' instead."; + +void term_environment_check(void) +{ + const char *term, *sty, *tmux, *multiplexer; + + term = g_getenv("TERM"); + sty = g_getenv("STY"); + tmux = g_getenv("TMUX"); + + multiplexer = (sty && *sty) ? "screen" : + (tmux && *tmux) ? "tmux" : NULL; + + if (!multiplexer) { + return; + } + + if (term && (g_str_has_prefix(term, "screen") || + g_str_has_prefix(term, "tmux"))) { + return; + } + + g_warning(term_env_warning, term, multiplexer); +} diff --git a/src/fe-text/term.h b/src/fe-text/term.h index 0c7847f6..4b1e2874 100644 --- a/src/fe-text/term.h +++ b/src/fe-text/term.h @@ -105,4 +105,6 @@ void term_gets(GArray *buffer, int *line_count); void term_common_init(void); void term_common_deinit(void); +void term_environment_check(void); + #endif |