From 85ffaeeefc1a4111fc44cbb709bc52c5005f9e94 Mon Sep 17 00:00:00 2001 From: David Lawrence Ramsey Date: Sun, 2 Jul 2006 18:29:49 +0000 Subject: [PATCH] in browser_refresh(), if a filename is too long, truncate and display an ellipsis before it, as titlebar() does; also add various miscellaneous minor fixes git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3719 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 2 ++ src/browser.c | 27 ++++++++++++++++++--------- src/winio.c | 26 ++++++++++++++------------ 3 files changed, 34 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5bda5842..66b7d646 100644 --- a/ChangeLog +++ b/ChangeLog @@ -26,6 +26,8 @@ CVS code - truncated, and where file sizes could be too long. (DLR) - For the ".." entry, display "(parent dir)" instead of "(dir)", as Pico does. (DLR) + - If a filename is too long, truncate and display an ellipsis + before it, as titlebar() does. (DLR) browser_select_filename() - New function, used to select a specific filename in the list. (DLR) diff --git a/src/browser.c b/src/browser.c index 1aac475e..02b4f097 100644 --- a/src/browser.c +++ b/src/browser.c @@ -35,7 +35,7 @@ static char **filelist = NULL; static size_t filelist_len = 0; /* The number of files in the list. */ static int width = 0; - /* The number of columns to display the list in. */ + /* The number of columns to display per filename. */ static int longest = 0; /* The number of columns in the longest filename in the list. */ static size_t selected = 0; @@ -446,7 +446,7 @@ char *do_browse_from(const char *inpath) /* Set filelist to the list of files contained in the directory path, * set filelist_len to the number of files in that list, and set longest * to the width in columns of the longest filename in that list, up to - * COLS (but at least 15). Assume path exists and is a directory. */ + * COLS (but at least 16). Assume path exists and is a directory. */ void browser_init(const char *path, DIR *dir) { const struct dirent *nextdir; @@ -472,7 +472,7 @@ void browser_init(const char *path, DIR *dir) filelist_len = i; rewinddir(dir); - longest += 10; + longest += 11; filelist = (char **)nmalloc(filelist_len * sizeof(char *)); @@ -498,8 +498,8 @@ void browser_init(const char *path, DIR *dir) if (longest > COLS) longest = COLS; - if (longest < 15) - longest = 15; + if (longest < 16) + longest = 16; } /* Determine the shortcut key corresponding to the values of kbinput @@ -568,15 +568,24 @@ void browser_refresh(void) for (; i < filelist_len && line < editwinrows; i++) { struct stat st; const char *filetail = tail(filelist[i]); - char *disp = display_string(filetail, 0, longest, FALSE); - size_t foo_col; + size_t filetaillen = strlenpt(filetail), foo_col; + bool dots = (filetaillen > longest); + /* Do we put an ellipsis before the filename? */ + char *disp = display_string(filetail, dots ? filetaillen - + longest + 11 : 0, longest, FALSE); /* Highlight the currently selected file or directory. */ if (i == selected) wattron(edit, reverse_attr); blank_line(edit, line, col, longest); - mvwaddstr(edit, line, col, disp); + + /* If dots is TRUE, we will display something like + * "...ename". */ + if (dots) + mvwaddstr(edit, line, col, "..."); + mvwaddstr(edit, line, dots ? col + 3 : col, disp); + free(disp); col += longest; @@ -621,7 +630,7 @@ void browser_refresh(void) foo_col = col - strlenpt(foo); mvwaddnstr(edit, line, foo_col, foo, actual_x(foo, longest - - foo_col) + 1); + foo_col)); if (i == selected) wattroff(edit, reverse_attr); diff --git a/src/winio.c b/src/winio.c index 15d61331..bc6186b4 100644 --- a/src/winio.c +++ b/src/winio.c @@ -1975,6 +1975,7 @@ void titlebar(const char *path) assert(path != NULL || openfile->filename != NULL); wattron(topwin, reverse_attr); + blank_titlebar(); /* space has to be at least 4: two spaces before the version message, @@ -2061,7 +2062,19 @@ void titlebar(const char *path) exppath = display_string(path, start_col, space, FALSE); } - if (!dots) { + /* If dots is TRUE, we will display something like "File: + * ...ename". */ + if (dots) { + mvwaddnstr(topwin, 0, verlen - 1, prefix, actual_x(prefix, + prefixlen)); + if (space <= -3 || newfie) + goto the_end; + waddch(topwin, ' '); + waddnstr(topwin, "...", space + 3); + if (space <= 0) + goto the_end; + waddstr(topwin, exppath); + } else { size_t exppathlen = newfie ? 0 : strlenpt(exppath); /* The length of the expanded filename. */ @@ -2072,17 +2085,6 @@ void titlebar(const char *path) waddch(topwin, ' '); waddstr(topwin, exppath); } - } else { - /* We will say something like "File: ...ename". */ - mvwaddnstr(topwin, 0, verlen - 1, prefix, actual_x(prefix, - prefixlen)); - if (space <= -3 || newfie) - goto the_end; - waddch(topwin, ' '); - waddnstr(topwin, "...", space + 3); - if (space <= 0) - goto the_end; - waddstr(topwin, exppath); } the_end: