On Wed, Aug 11, 2010 at 1:58 AM, Bram Moolenaar <[email protected]> wrote:
>
> The full path names are not nice. Not only for the test but also for
> interactive use. I think we should replace the current directory with
> "./" when possible.
Thanks for pointing this out. Attached patch does the above, and test73
passes for both unix and msvc-vim with this patch.
I'm having trouble running test73 with djgpp vim because somehow it
failed at creating the "Xfind" directory.
I commented out the final ":qa!" in test73.vim, rerun the test and wait
until it stops at the end and issued
:!mkdir foo
from inside the running djgpp-vim, which failed with error message:
shell returned -1
Any idea why this could be?
Also:
:pwd
c:\src\vim\src
I was expecting it to be "c:\src\vim\src\testdir".
nazri
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
From 90e439bb7623a6108c7532fe3ab74a11d8c68f5c Mon Sep 17 00:00:00 2001
From: Nazri Ramliy <[email protected]>
Date: Wed, 11 Aug 2010 09:30:15 +0800
Subject: [PATCH] find completion: Be a bit more aggressive at shortening filenames
---
src/misc1.c | 36 +++++++++++++++++++++++++++++++++++-
1 files changed, 35 insertions(+), 1 deletions(-)
diff --git a/src/misc1.c b/src/misc1.c
index fd4e4fe..afc970a 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -9457,6 +9457,7 @@ uniquefy_paths(gap, pattern)
char_u *path = fnames[i];
int is_in_curdir;
char_u *dir_end = gettail(path);
+ char_u *short_name;
len = (int)STRLEN(path);
while (dir_end > path &&
@@ -9475,11 +9476,16 @@ uniquefy_paths(gap, pattern)
* and it is not unique,
* reduce it to ./{filename}
* FIXME ^ Is this portable?
+ *
+ * Note: If the full filename is /curdir/foo/bar/{filename}, we don't
+ * want to shorten it to ./foo/bar/{filename} yet because 'path' might
+ * contain "./ **", in which case the shortened filename could be shorter
+ * than ./foo/bar/{filename}.
*/
if (is_in_curdir)
{
char_u *rel_path;
- char_u *short_name = shorten_fname(path, curdir);
+ short_name = shorten_fname(path, curdir);
if (short_name == NULL)
short_name = path;
@@ -9533,6 +9539,34 @@ uniquefy_paths(gap, pattern)
break;
}
}
+
+ if (mch_isFullName(path))
+ {
+ /*
+ * Last resort: shorten relative to curdir if possible.
+ * 'possible' means:
+ *
+ * 1. It is under the current directory.
+ * 2. The result is actually shorter than the original.
+ *
+ * Examples:
+ *
+ * Before curdir After
+ *
+ * /foo/bar/file.txt /foo/bar ./file.txt
+ * c:\foo\bar\file.txt c:\foo\bar .\file.txt
+ *
+ * /file.txt / /file.txt
+ * c:\file.txt c:\ \file.txt
+ */
+ short_name = shorten_fname(path, curdir);
+ if (short_name != NULL && short_name > path + 1)
+ {
+ STRMOVE(path + 2, short_name);
+ path[0] = '.';
+ path[1] = PATHSEP;
+ }
+ }
}
theend:
--
1.7.2.1.6.g61bf12