From 26cd927cb0716bd43ac5c4f81b8ae5f38c772808 Mon Sep 17 00:00:00 2001 From: Travis Cross Date: Thu, 27 Oct 2011 15:08:40 +0000 Subject: [PATCH] fs_cli: only enable new features on supported terminals This is a workaround to an issue where editline counts non-printable control characters. See issue FS-3606. --- libs/esl/fs_cli.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/libs/esl/fs_cli.c b/libs/esl/fs_cli.c index 84047c62cf..4d63f40d63 100644 --- a/libs/esl/fs_cli.c +++ b/libs/esl/fs_cli.c @@ -71,6 +71,7 @@ static char prompt_str[512] = ""; static char prompt_color[12] = {ESL_SEQ_DEFAULT_COLOR}; static char input_text_color[12] = {ESL_SEQ_DEFAULT_COLOR}; static char output_text_color[12] = {ESL_SEQ_DEFAULT_COLOR}; +static int feature_level = 0; static cli_profile_t profiles[128] = {{{0}}}; static cli_profile_t internal_profile = {{ 0 }}; static int pcount = 0; @@ -679,9 +680,10 @@ static void *msg_thread_run(esl_thread_t *me, void *obj) } #ifndef WIN32 if (aok) { - clear_line(); + if (feature_level) clear_line(); printf("%s%s", colors[level], handle->last_event->body); - redisplay(); + if (!feature_level) printf("%s", ESL_SEQ_DEFAULT_COLOR); + if (feature_level) redisplay(); } #else if (aok) { @@ -1122,6 +1124,7 @@ int main(int argc, char *argv[]) char dft_cfile[512] = "fs_cli.conf"; #endif char *home = getenv("HOME"); + char *term = getenv("TERM"); /* Vars for optargs */ int opt; static struct option options[] = { @@ -1156,6 +1159,17 @@ int main(int argc, char *argv[]) int argv_quiet = 0; int loops = 2, reconnect = 0, timeout = 0; + if (!strncasecmp("screen", term, 6) || + !strncasecmp("vt100", term, 5)) { + feature_level = 1; + } else { + feature_level = 0; + } + +#ifdef WIN32 + feature_level = 0; +#endif + strncpy(internal_profile.host, "127.0.0.1", sizeof(internal_profile.host)); strncpy(internal_profile.pass, "ClueCon", sizeof(internal_profile.pass)); strncpy(internal_profile.name, "internal", sizeof(internal_profile.name)); @@ -1289,11 +1303,11 @@ int main(int argc, char *argv[]) snprintf(bare_prompt_str, sizeof(bare_prompt_str), "freeswitch@%s> ", profile->name); } bare_prompt_str_len = (int)strlen(bare_prompt_str); -#ifdef WIN32 - snprintf(prompt_str, sizeof(prompt_str), "%s", bare_prompt_str); /* Not supporting this for now */ -#else - snprintf(prompt_str, sizeof(prompt_str), "%s%s%s", prompt_color, bare_prompt_str, input_text_color); -#endif + if (feature_level) { + snprintf(prompt_str, sizeof(prompt_str), "%s%s%s", prompt_color, bare_prompt_str, input_text_color); + } else { + snprintf(prompt_str, sizeof(prompt_str), "%s", bare_prompt_str); + } connect: connected = 0; while (--loops > 0) {