patch 8.0.1738: ":args" output is hard to read

Problem:    ":args" output is hard to read.
Solution:   Make columns with the names if the output is more than one line.
diff --git a/src/version.c b/src/version.c
index a7720a7..2b5bf04 100644
--- a/src/version.c
+++ b/src/version.c
@@ -57,7 +57,6 @@
 #endif
 
 static void list_features(void);
-static void version_msg(char *s);
 
 static char *(features[]) =
 {
@@ -763,6 +762,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1738,
+/**/
     1737,
 /**/
     1736,
@@ -4295,35 +4296,75 @@
 }
 
 /*
+ * Output a string for the version message.  If it's going to wrap, output a
+ * newline, unless the message is too long to fit on the screen anyway.
+ * When "wrap" is TRUE wrap the string in [].
+ */
+    static void
+version_msg_wrap(char_u *s, int wrap)
+{
+    int		len = (int)vim_strsize(s) + (wrap ? 2 : 0);
+
+    if (!got_int && len < (int)Columns && msg_col + len >= (int)Columns
+								&& *s != '\n')
+	msg_putchar('\n');
+    if (!got_int)
+    {
+	if (wrap)
+	    MSG_PUTS("[");
+	MSG_PUTS(s);
+	if (wrap)
+	    MSG_PUTS("]");
+    }
+}
+
+    static void
+version_msg(char *s)
+{
+    version_msg_wrap((char_u *)s, FALSE);
+}
+
+/*
  * List all features aligned in columns, dictionary style.
  */
     static void
 list_features(void)
 {
+    list_in_columns((char_u **)features, -1, -1);
+}
+
+/*
+ * List string items nicely aligned in columns.
+ * When "size" is < 0 then the last entry is marked with NULL.
+ * The entry with index "current" is inclosed in [].
+ */
+    void
+list_in_columns(char_u **items, int size, int current)
+{
     int		i;
     int		ncol;
     int		nrow;
-    int		nfeat = 0;
+    int		item_count = 0;
     int		width = 0;
 
-    /* Find the length of the longest feature name, use that + 1 as the column
-     * width */
-    for (i = 0; features[i] != NULL; ++i)
+    /* Find the length of the longest item, use that + 1 as the column
+     * width. */
+    for (i = 0; size < 0 ? items[i] != NULL : i < size; ++i)
     {
-	int l = (int)STRLEN(features[i]);
+	int l = (int)vim_strsize(items[i]) + (i == current ? 2 : 0);
 
 	if (l > width)
 	    width = l;
-	++nfeat;
+	++item_count;
     }
     width += 1;
 
     if (Columns < width)
     {
 	/* Not enough screen columns - show one per line */
-	for (i = 0; features[i] != NULL; ++i)
+	for (i = 0; items[i] != NULL; ++i)
 	{
-	    version_msg(features[i]);
+	    version_msg_wrap(items[i], i == current);
 	    if (msg_col > 0)
 		msg_putchar('\n');
 	}
@@ -4333,18 +4374,22 @@
     /* The rightmost column doesn't need a separator.
      * Sacrifice it to fit in one more column if possible. */
     ncol = (int) (Columns + 1) / width;
-    nrow = nfeat / ncol + (nfeat % ncol ? 1 : 0);
+    nrow = item_count / ncol + (item_count % ncol ? 1 : 0);
 
     /* i counts columns then rows.  idx counts rows then columns. */
     for (i = 0; !got_int && i < nrow * ncol; ++i)
     {
 	int idx = (i / ncol) + (i % ncol) * nrow;
 
-	if (idx < nfeat)
+	if (idx < item_count)
 	{
 	    int last_col = (i + 1) % ncol == 0;
 
-	    msg_puts((char_u *)features[idx]);
+	    if (idx == current)
+		msg_putchar('[');
+	    msg_puts(items[idx]);
+	    if (idx == current)
+		msg_putchar(']');
 	    if (last_col)
 	    {
 		if (msg_col > 0)
@@ -4636,22 +4681,6 @@
 #endif
 }
 
-/*
- * Output a string for the version message.  If it's going to wrap, output a
- * newline, unless the message is too long to fit on the screen anyway.
- */
-    static void
-version_msg(char *s)
-{
-    int		len = (int)STRLEN(s);
-
-    if (!got_int && len < (int)Columns && msg_col + len >= (int)Columns
-								&& *s != '\n')
-	msg_putchar('\n');
-    if (!got_int)
-	MSG_PUTS(s);
-}
-
 static void do_intro_line(int row, char_u *mesg, int add_version, int attr);
 
 /*