diff options
Diffstat (limited to 'src/message.c')
-rw-r--r-- | src/message.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/message.c b/src/message.c index 954152850..72cd79ea6 100644 --- 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; } } |