# HG changeset patch # User Bram Moolenaar # Date 1361375256 -3600 # Node ID 646cb6b6ff2372c26cb9dc9ef1a0f8d562204950 # Parent 102ec4ce5f688686df16b3ceda236cf3352868b0 updated for version 7.3.826 Problem: List of features in :version output is hard to read. Solution: Make columns. (Nazri Ramliy) diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -34,6 +34,9 @@ static char *mediumVersion = VIM_VERSION # if (defined(VMS) && defined(VAXC)) || defined(PROTO) char longVersion[sizeof(VIM_VERSION_LONG_DATE) + sizeof(__DATE__) + sizeof(__TIME__) + 3]; + +static void list_features __ARGS((void)); + void make_version() { @@ -726,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 826, +/**/ 825, /**/ 824, @@ -2435,6 +2440,74 @@ ex_version(eap) } } +/* + * List all features aligned in columns, dictionary style. + */ + static void +list_features() +{ + int i; + int ncol; + int nrow; + int nfeat = 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) + { + int l = STRLEN(features[i]); + + if (l > width) + width = l; + ++nfeat; + } + width += 1; + + if (Columns < width) + { + /* Not enough screen columns - show one per line */ + for (i = 0; features[i] != NULL; ++i) + { + version_msg(features[i]); + if (msg_col > 0) + msg_putchar('\n'); + } + return; + } + + ncol = (int) Columns / width; + /* The rightmost column doesn't need a separator. + * Sacrifice it to fit in one more column if possible. */ + if (Columns % width == width - 1) + ncol++; + + nrow = nfeat / ncol + (nfeat % ncol ? 1 : 0); + + for (i = 0; !got_int && i < nrow * ncol; ++i) + { + int idx = (i / ncol) + (i % ncol) * nrow; + + if (idx < nfeat) + { + int last_col = (i + 1) % ncol == 0; + + msg_puts((char_u *)features[idx]); + if (last_col) + { + if (msg_col > 0) + msg_putchar('\n'); + } + else + { + while (msg_col % width) + msg_putchar(' '); + } + } + else + msg_putchar('\n'); + } +} void list_version() { @@ -2632,15 +2705,8 @@ list_version() #endif version_msg(_(" Features included (+) or not (-):\n")); - /* print all the features */ - for (i = 0; features[i] != NULL; ++i) - { - version_msg(features[i]); - if (msg_col > 0) - version_msg(" "); - } + list_features(); - version_msg("\n"); #ifdef SYS_VIMRC_FILE version_msg(_(" system vimrc file: \"")); version_msg(SYS_VIMRC_FILE);