mirror of
https://github.com/neovim/neovim.git
synced 2025-09-19 09:48:19 +00:00
Move shorten_fname{,1,s} and shorten_filenames from fileio.c
This commit is contained in:

committed by
Thiago de Arruda

parent
7464b07c22
commit
d31e598895
123
src/fileio.c
123
src/fileio.c
@@ -4702,129 +4702,6 @@ static int make_bom(char_u *buf, char_u *name)
|
|||||||
return (int)(p - buf);
|
return (int)(p - buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(FEAT_VIMINFO) || defined(FEAT_BROWSE) || \
|
|
||||||
defined(FEAT_QUICKFIX) || defined(FEAT_AUTOCMD) || defined(PROTO)
|
|
||||||
/*
|
|
||||||
* Try to find a shortname by comparing the fullname with the current
|
|
||||||
* directory.
|
|
||||||
* Returns "full_path" or pointer into "full_path" if shortened.
|
|
||||||
*/
|
|
||||||
char_u *shorten_fname1(char_u *full_path)
|
|
||||||
{
|
|
||||||
char_u *dirname;
|
|
||||||
char_u *p = full_path;
|
|
||||||
|
|
||||||
dirname = alloc(MAXPATHL);
|
|
||||||
if (dirname == NULL)
|
|
||||||
return full_path;
|
|
||||||
if (os_dirname(dirname, MAXPATHL) == OK) {
|
|
||||||
p = shorten_fname(full_path, dirname);
|
|
||||||
if (p == NULL || *p == NUL)
|
|
||||||
p = full_path;
|
|
||||||
}
|
|
||||||
vim_free(dirname);
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Try to find a shortname by comparing the fullname with the current
|
|
||||||
* directory.
|
|
||||||
* Returns NULL if not shorter name possible, pointer into "full_path"
|
|
||||||
* otherwise.
|
|
||||||
*/
|
|
||||||
char_u *shorten_fname(char_u *full_path, char_u *dir_name)
|
|
||||||
{
|
|
||||||
int len;
|
|
||||||
char_u *p;
|
|
||||||
|
|
||||||
if (full_path == NULL)
|
|
||||||
return NULL;
|
|
||||||
len = (int)STRLEN(dir_name);
|
|
||||||
if (fnamencmp(dir_name, full_path, len) == 0) {
|
|
||||||
p = full_path + len;
|
|
||||||
{
|
|
||||||
if (vim_ispathsep(*p))
|
|
||||||
++p;
|
|
||||||
else
|
|
||||||
p = NULL;
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
p = NULL;
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Shorten filenames for all buffers.
|
|
||||||
* When "force" is TRUE: Use full path from now on for files currently being
|
|
||||||
* edited, both for file name and swap file name. Try to shorten the file
|
|
||||||
* names a bit, if safe to do so.
|
|
||||||
* When "force" is FALSE: Only try to shorten absolute file names.
|
|
||||||
* For buffers that have buftype "nofile" or "scratch": never change the file
|
|
||||||
* name.
|
|
||||||
*/
|
|
||||||
void shorten_fnames(int force)
|
|
||||||
{
|
|
||||||
char_u dirname[MAXPATHL];
|
|
||||||
buf_T *buf;
|
|
||||||
char_u *p;
|
|
||||||
|
|
||||||
os_dirname(dirname, MAXPATHL);
|
|
||||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next) {
|
|
||||||
if (buf->b_fname != NULL
|
|
||||||
&& !bt_nofile(buf)
|
|
||||||
&& !path_with_url(buf->b_fname)
|
|
||||||
&& (force
|
|
||||||
|| buf->b_sfname == NULL
|
|
||||||
|| os_is_absolute_path(buf->b_sfname))) {
|
|
||||||
vim_free(buf->b_sfname);
|
|
||||||
buf->b_sfname = NULL;
|
|
||||||
p = shorten_fname(buf->b_ffname, dirname);
|
|
||||||
if (p != NULL) {
|
|
||||||
buf->b_sfname = vim_strsave(p);
|
|
||||||
buf->b_fname = buf->b_sfname;
|
|
||||||
}
|
|
||||||
if (p == NULL || buf->b_fname == NULL)
|
|
||||||
buf->b_fname = buf->b_ffname;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Always make the swap file name a full path, a "nofile" buffer may
|
|
||||||
* also have a swap file. */
|
|
||||||
mf_fullname(buf->b_ml.ml_mfp);
|
|
||||||
}
|
|
||||||
status_redraw_all();
|
|
||||||
redraw_tabline = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if (defined(FEAT_DND) && defined(FEAT_GUI_GTK)) \
|
|
||||||
|| defined(FEAT_GUI_MSWIN) \
|
|
||||||
|| defined(FEAT_GUI_MAC) \
|
|
||||||
|| defined(PROTO)
|
|
||||||
/*
|
|
||||||
* Shorten all filenames in "fnames[count]" by current directory.
|
|
||||||
*/
|
|
||||||
void shorten_filenames(char_u **fnames, int count)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
char_u dirname[MAXPATHL];
|
|
||||||
char_u *p;
|
|
||||||
|
|
||||||
if (fnames == NULL || count < 1)
|
|
||||||
return;
|
|
||||||
os_dirname(dirname, sizeof(dirname));
|
|
||||||
for (i = 0; i < count; ++i) {
|
|
||||||
if ((p = shorten_fname(fnames[i], dirname)) != NULL) {
|
|
||||||
/* shorten_fname() returns pointer in given "fnames[i]". If free
|
|
||||||
* "fnames[i]" first, "p" becomes invalid. So we need to copy
|
|
||||||
* "p" first then free fnames[i]. */
|
|
||||||
p = vim_strsave(p);
|
|
||||||
vim_free(fnames[i]);
|
|
||||||
fnames[i] = p;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* add extension to file name - change path/fo.o.h to path/fo.o.h.ext or
|
* add extension to file name - change path/fo.o.h to path/fo.o.h.ext or
|
||||||
* fo_o_h.ext for MSDOS or when shortname option set.
|
* fo_o_h.ext for MSDOS or when shortname option set.
|
||||||
|
@@ -33,10 +33,6 @@ int buf_write(buf_T *buf, char_u *fname, char_u *sfname, linenr_T start,
|
|||||||
int filtering);
|
int filtering);
|
||||||
void msg_add_fname(buf_T *buf, char_u *fname);
|
void msg_add_fname(buf_T *buf, char_u *fname);
|
||||||
void msg_add_lines(int insert_space, long lnum, off_t nchars);
|
void msg_add_lines(int insert_space, long lnum, off_t nchars);
|
||||||
char_u *shorten_fname1(char_u *full_path);
|
|
||||||
char_u *shorten_fname(char_u *full_path, char_u *dir_name);
|
|
||||||
void shorten_fnames(int force);
|
|
||||||
void shorten_filenames(char_u **fnames, int count);
|
|
||||||
char_u *modname(char_u *fname, char_u *ext, int prepend_dot);
|
char_u *modname(char_u *fname, char_u *ext, int prepend_dot);
|
||||||
char_u *buf_modname(int shortname, char_u *fname, char_u *ext,
|
char_u *buf_modname(int shortname, char_u *fname, char_u *ext,
|
||||||
int prepend_dot);
|
int prepend_dot);
|
||||||
|
126
src/path.c
126
src/path.c
@@ -8,6 +8,7 @@
|
|||||||
#include "fileio.h"
|
#include "fileio.h"
|
||||||
#include "file_search.h"
|
#include "file_search.h"
|
||||||
#include "garray.h"
|
#include "garray.h"
|
||||||
|
#include "memfile.h"
|
||||||
#include "memline.h"
|
#include "memline.h"
|
||||||
#include "message.h"
|
#include "message.h"
|
||||||
#include "misc1.h"
|
#include "misc1.h"
|
||||||
@@ -16,7 +17,9 @@
|
|||||||
#include "os/os.h"
|
#include "os/os.h"
|
||||||
#include "os/shell.h"
|
#include "os/shell.h"
|
||||||
#include "os_unix.h"
|
#include "os_unix.h"
|
||||||
|
#include "quickfix.h"
|
||||||
#include "regexp.h"
|
#include "regexp.h"
|
||||||
|
#include "screen.h"
|
||||||
#include "tag.h"
|
#include "tag.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "ui.h"
|
#include "ui.h"
|
||||||
@@ -1777,3 +1780,126 @@ int flags; /* EW_* flags */
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(FEAT_VIMINFO) || defined(FEAT_BROWSE) || \
|
||||||
|
defined(FEAT_QUICKFIX) || defined(FEAT_AUTOCMD) || defined(PROTO)
|
||||||
|
/*
|
||||||
|
* Try to find a shortname by comparing the fullname with the current
|
||||||
|
* directory.
|
||||||
|
* Returns "full_path" or pointer into "full_path" if shortened.
|
||||||
|
*/
|
||||||
|
char_u *shorten_fname1(char_u *full_path)
|
||||||
|
{
|
||||||
|
char_u *dirname;
|
||||||
|
char_u *p = full_path;
|
||||||
|
|
||||||
|
dirname = alloc(MAXPATHL);
|
||||||
|
if (dirname == NULL)
|
||||||
|
return full_path;
|
||||||
|
if (os_dirname(dirname, MAXPATHL) == OK) {
|
||||||
|
p = shorten_fname(full_path, dirname);
|
||||||
|
if (p == NULL || *p == NUL)
|
||||||
|
p = full_path;
|
||||||
|
}
|
||||||
|
vim_free(dirname);
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Try to find a shortname by comparing the fullname with the current
|
||||||
|
* directory.
|
||||||
|
* Returns NULL if not shorter name possible, pointer into "full_path"
|
||||||
|
* otherwise.
|
||||||
|
*/
|
||||||
|
char_u *shorten_fname(char_u *full_path, char_u *dir_name)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
char_u *p;
|
||||||
|
|
||||||
|
if (full_path == NULL)
|
||||||
|
return NULL;
|
||||||
|
len = (int)STRLEN(dir_name);
|
||||||
|
if (fnamencmp(dir_name, full_path, len) == 0) {
|
||||||
|
p = full_path + len;
|
||||||
|
{
|
||||||
|
if (vim_ispathsep(*p))
|
||||||
|
++p;
|
||||||
|
else
|
||||||
|
p = NULL;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
p = NULL;
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Shorten filenames for all buffers.
|
||||||
|
* When "force" is TRUE: Use full path from now on for files currently being
|
||||||
|
* edited, both for file name and swap file name. Try to shorten the file
|
||||||
|
* names a bit, if safe to do so.
|
||||||
|
* When "force" is FALSE: Only try to shorten absolute file names.
|
||||||
|
* For buffers that have buftype "nofile" or "scratch": never change the file
|
||||||
|
* name.
|
||||||
|
*/
|
||||||
|
void shorten_fnames(int force)
|
||||||
|
{
|
||||||
|
char_u dirname[MAXPATHL];
|
||||||
|
buf_T *buf;
|
||||||
|
char_u *p;
|
||||||
|
|
||||||
|
os_dirname(dirname, MAXPATHL);
|
||||||
|
for (buf = firstbuf; buf != NULL; buf = buf->b_next) {
|
||||||
|
if (buf->b_fname != NULL
|
||||||
|
&& !bt_nofile(buf)
|
||||||
|
&& !path_with_url(buf->b_fname)
|
||||||
|
&& (force
|
||||||
|
|| buf->b_sfname == NULL
|
||||||
|
|| os_is_absolute_path(buf->b_sfname))) {
|
||||||
|
vim_free(buf->b_sfname);
|
||||||
|
buf->b_sfname = NULL;
|
||||||
|
p = shorten_fname(buf->b_ffname, dirname);
|
||||||
|
if (p != NULL) {
|
||||||
|
buf->b_sfname = vim_strsave(p);
|
||||||
|
buf->b_fname = buf->b_sfname;
|
||||||
|
}
|
||||||
|
if (p == NULL || buf->b_fname == NULL)
|
||||||
|
buf->b_fname = buf->b_ffname;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Always make the swap file name a full path, a "nofile" buffer may
|
||||||
|
* also have a swap file. */
|
||||||
|
mf_fullname(buf->b_ml.ml_mfp);
|
||||||
|
}
|
||||||
|
status_redraw_all();
|
||||||
|
redraw_tabline = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if (defined(FEAT_DND) && defined(FEAT_GUI_GTK)) \
|
||||||
|
|| defined(FEAT_GUI_MSWIN) \
|
||||||
|
|| defined(FEAT_GUI_MAC) \
|
||||||
|
|| defined(PROTO)
|
||||||
|
/*
|
||||||
|
* Shorten all filenames in "fnames[count]" by current directory.
|
||||||
|
*/
|
||||||
|
void shorten_filenames(char_u **fnames, int count)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
char_u dirname[MAXPATHL];
|
||||||
|
char_u *p;
|
||||||
|
|
||||||
|
if (fnames == NULL || count < 1)
|
||||||
|
return;
|
||||||
|
os_dirname(dirname, sizeof(dirname));
|
||||||
|
for (i = 0; i < count; ++i) {
|
||||||
|
if ((p = shorten_fname(fnames[i], dirname)) != NULL) {
|
||||||
|
/* shorten_fname() returns pointer in given "fnames[i]". If free
|
||||||
|
* "fnames[i]" first, "p" becomes invalid. So we need to copy
|
||||||
|
* "p" first then free fnames[i]. */
|
||||||
|
p = vim_strsave(p);
|
||||||
|
vim_free(fnames[i]);
|
||||||
|
fnames[i] = p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@@ -35,4 +35,8 @@ int after_pathsep(char_u *b, char_u *p);
|
|||||||
int same_directory(char_u *f1, char_u *f2);
|
int same_directory(char_u *f1, char_u *f2);
|
||||||
int pathcmp(const char *p, const char *q, int maxlen);
|
int pathcmp(const char *p, const char *q, int maxlen);
|
||||||
int mch_expandpath(garray_T *gap, char_u *path, int flags);
|
int mch_expandpath(garray_T *gap, char_u *path, int flags);
|
||||||
|
char_u *shorten_fname1(char_u *full_path);
|
||||||
|
char_u *shorten_fname(char_u *full_path, char_u *dir_name);
|
||||||
|
void shorten_fnames(int force);
|
||||||
|
void shorten_filenames(char_u **fnames, int count);
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user