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
Этот коммит содержится в:
родитель
fef3c8679d
Коммит
85ffaeeefc
@ -26,6 +26,8 @@ CVS code -
|
|||||||
truncated, and where file sizes could be too long. (DLR)
|
truncated, and where file sizes could be too long. (DLR)
|
||||||
- For the ".." entry, display "(parent dir)" instead of "(dir)",
|
- For the ".." entry, display "(parent dir)" instead of "(dir)",
|
||||||
as Pico does. (DLR)
|
as Pico does. (DLR)
|
||||||
|
- If a filename is too long, truncate and display an ellipsis
|
||||||
|
before it, as titlebar() does. (DLR)
|
||||||
browser_select_filename()
|
browser_select_filename()
|
||||||
- New function, used to select a specific filename in the list.
|
- New function, used to select a specific filename in the list.
|
||||||
(DLR)
|
(DLR)
|
||||||
|
@ -35,7 +35,7 @@ static char **filelist = NULL;
|
|||||||
static size_t filelist_len = 0;
|
static size_t filelist_len = 0;
|
||||||
/* The number of files in the list. */
|
/* The number of files in the list. */
|
||||||
static int width = 0;
|
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;
|
static int longest = 0;
|
||||||
/* The number of columns in the longest filename in the list. */
|
/* The number of columns in the longest filename in the list. */
|
||||||
static size_t selected = 0;
|
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 to the list of files contained in the directory path,
|
||||||
* set filelist_len to the number of files in that list, and set longest
|
* 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
|
* 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)
|
void browser_init(const char *path, DIR *dir)
|
||||||
{
|
{
|
||||||
const struct dirent *nextdir;
|
const struct dirent *nextdir;
|
||||||
@ -472,7 +472,7 @@ void browser_init(const char *path, DIR *dir)
|
|||||||
|
|
||||||
filelist_len = i;
|
filelist_len = i;
|
||||||
rewinddir(dir);
|
rewinddir(dir);
|
||||||
longest += 10;
|
longest += 11;
|
||||||
|
|
||||||
filelist = (char **)nmalloc(filelist_len * sizeof(char *));
|
filelist = (char **)nmalloc(filelist_len * sizeof(char *));
|
||||||
|
|
||||||
@ -498,8 +498,8 @@ void browser_init(const char *path, DIR *dir)
|
|||||||
|
|
||||||
if (longest > COLS)
|
if (longest > COLS)
|
||||||
longest = COLS;
|
longest = COLS;
|
||||||
if (longest < 15)
|
if (longest < 16)
|
||||||
longest = 15;
|
longest = 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Determine the shortcut key corresponding to the values of kbinput
|
/* 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++) {
|
for (; i < filelist_len && line < editwinrows; i++) {
|
||||||
struct stat st;
|
struct stat st;
|
||||||
const char *filetail = tail(filelist[i]);
|
const char *filetail = tail(filelist[i]);
|
||||||
char *disp = display_string(filetail, 0, longest, FALSE);
|
size_t filetaillen = strlenpt(filetail), foo_col;
|
||||||
size_t 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. */
|
/* Highlight the currently selected file or directory. */
|
||||||
if (i == selected)
|
if (i == selected)
|
||||||
wattron(edit, reverse_attr);
|
wattron(edit, reverse_attr);
|
||||||
|
|
||||||
blank_line(edit, line, col, longest);
|
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);
|
free(disp);
|
||||||
|
|
||||||
col += longest;
|
col += longest;
|
||||||
@ -621,7 +630,7 @@ void browser_refresh(void)
|
|||||||
foo_col = col - strlenpt(foo);
|
foo_col = col - strlenpt(foo);
|
||||||
|
|
||||||
mvwaddnstr(edit, line, foo_col, foo, actual_x(foo, longest -
|
mvwaddnstr(edit, line, foo_col, foo, actual_x(foo, longest -
|
||||||
foo_col) + 1);
|
foo_col));
|
||||||
|
|
||||||
if (i == selected)
|
if (i == selected)
|
||||||
wattroff(edit, reverse_attr);
|
wattroff(edit, reverse_attr);
|
||||||
|
26
src/winio.c
26
src/winio.c
@ -1975,6 +1975,7 @@ void titlebar(const char *path)
|
|||||||
assert(path != NULL || openfile->filename != NULL);
|
assert(path != NULL || openfile->filename != NULL);
|
||||||
|
|
||||||
wattron(topwin, reverse_attr);
|
wattron(topwin, reverse_attr);
|
||||||
|
|
||||||
blank_titlebar();
|
blank_titlebar();
|
||||||
|
|
||||||
/* space has to be at least 4: two spaces before the version message,
|
/* 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);
|
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);
|
size_t exppathlen = newfie ? 0 : strlenpt(exppath);
|
||||||
/* The length of the expanded filename. */
|
/* The length of the expanded filename. */
|
||||||
|
|
||||||
@ -2072,17 +2085,6 @@ void titlebar(const char *path)
|
|||||||
waddch(topwin, ' ');
|
waddch(topwin, ' ');
|
||||||
waddstr(topwin, exppath);
|
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:
|
the_end:
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user