diff src/message.c @ 9538:26da1efa9e46 v7.4.2049

commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Jul 16 16:54:24 2016 +0200 patch 7.4.2049 Problem: There is no way to get a list of the error lists. Solution: Add ":chistory" and ":lhistory".
author Christian Brabandt <cb@256bit.org>
date Sat, 16 Jul 2016 17:00:06 +0200
parents d18d71ae21e5
children 00ee8d8c2e0c
line wrap: on
line diff
--- a/src/message.c
+++ b/src/message.c
@@ -313,9 +313,25 @@ trunc_string(
 	    len += n;
     }
 
-    /* Set the middle and copy the last part. */
-    if (e + 3 < buflen)
+
+    if (i <= e + 3)
     {
+	/* text fits without truncating */
+	if (s != buf)
+	{
+	    len = STRLEN(s);
+	    if (len >= buflen)
+		len = buflen - 1;
+	    len = len - e + 1;
+	    if (len < 1)
+		buf[e - 1] = NUL;
+	    else
+		mch_memmove(buf + e, s + e, len);
+	}
+    }
+    else if (e + 3 < buflen)
+    {
+	/* set the middle and copy the last part */
 	mch_memmove(buf + e, "...", (size_t)3);
 	len = (int)STRLEN(s + i) + 1;
 	if (len >= buflen - e - 3)
@@ -325,7 +341,8 @@ trunc_string(
     }
     else
     {
-	buf[e - 1] = NUL;  /* make sure it is truncated */
+	/* can't fit in the "...", just truncate it */
+	buf[e - 1] = NUL;
     }
 }