From 4f54f912c3e9f296d23a694bd29501b9bc5a700f Mon Sep 17 00:00:00 2001 From: Travis Cross Date: Thu, 27 Mar 2014 17:05:20 +0000 Subject: [PATCH] Add back terminal detection for old libedits Using the system libedit means that libedit will again make absolute movements on certain kinds of terminals. Older versions of libedit without EL_PROMPT_ESC miscalculate the length of the prompt. Combined, this results in the cursor ending up in the wrong place. We knew this was a possibility when we moved to system libedit, and we're OK with it. We certainly lived without this fancy prompt feature for a long time. This change puts back in place detection of the terminal type when EL_PROMPT_ESC isn't available. On these older versions of libedit, we'll only enable the fancy features when we know that libedit will only make relative movements and not tickle the bug. This partially reverts commit: b9b77bd6156b4343f8baa9ca1a0c803108dbcdb4 --- libs/esl/fs_cli.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/libs/esl/fs_cli.c b/libs/esl/fs_cli.c index 5650785398..e3e98b1837 100644 --- a/libs/esl/fs_cli.c +++ b/libs/esl/fs_cli.c @@ -1352,10 +1352,22 @@ int main(int argc, char *argv[]) int loops = 2, reconnect = 0; char *ccheck; -#ifdef WIN32 +#if HAVE_DECL_EL_PROMPT_ESC feature_level = 0; #else - feature_level = 1; + { + char *term = getenv("TERM"); + if (term && (!strncasecmp("screen", term, 6) || + !strncasecmp("vt100", term, 5))) { + feature_level = 1; + } else { + feature_level = 0; + } + } +#endif + +#ifdef WIN32 + feature_level = 0; #endif if ((ccheck = getenv("FS_CLI_COLOR"))) {