summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordequis <dx@dxzone.com.ar>2017-06-23 21:53:16 -0300
committerdequis <dx@dxzone.com.ar>2018-01-06 18:04:01 -0300
commit0aafd011c0adc58ddf43783764b96fdd74578243 (patch)
treebd7952c20e642da93c45e3a3e36b8e71870e6053 /src
parentc8012b2e574c6e1e25cf20ed31182323a492a98e (diff)
downloadirssi-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.c2
-rw-r--r--src/fe-text/term-terminfo.c28
-rw-r--r--src/fe-text/term.h2
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