mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 8.1.1766: code for writing session file is spread out
Problem: Code for writing session file is spread out. Solution: Put it in one file. (Yegappan Lakshmanan, closes #4728)
This commit is contained in:
87
src/eval.c
87
src/eval.c
@@ -9319,93 +9319,6 @@ script_autoload(
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if defined(FEAT_VIMINFO) || defined(FEAT_SESSION)
|
||||
var_flavour_T
|
||||
var_flavour(char_u *varname)
|
||||
{
|
||||
char_u *p = varname;
|
||||
|
||||
if (ASCII_ISUPPER(*p))
|
||||
{
|
||||
while (*(++p))
|
||||
if (ASCII_ISLOWER(*p))
|
||||
return VAR_FLAVOUR_SESSION;
|
||||
return VAR_FLAVOUR_VIMINFO;
|
||||
}
|
||||
else
|
||||
return VAR_FLAVOUR_DEFAULT;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_SESSION) || defined(PROTO)
|
||||
int
|
||||
store_session_globals(FILE *fd)
|
||||
{
|
||||
hashitem_T *hi;
|
||||
dictitem_T *this_var;
|
||||
int todo;
|
||||
char_u *p, *t;
|
||||
|
||||
todo = (int)globvarht.ht_used;
|
||||
for (hi = globvarht.ht_array; todo > 0; ++hi)
|
||||
{
|
||||
if (!HASHITEM_EMPTY(hi))
|
||||
{
|
||||
--todo;
|
||||
this_var = HI2DI(hi);
|
||||
if ((this_var->di_tv.v_type == VAR_NUMBER
|
||||
|| this_var->di_tv.v_type == VAR_STRING)
|
||||
&& var_flavour(this_var->di_key) == VAR_FLAVOUR_SESSION)
|
||||
{
|
||||
/* Escape special characters with a backslash. Turn a LF and
|
||||
* CR into \n and \r. */
|
||||
p = vim_strsave_escaped(tv_get_string(&this_var->di_tv),
|
||||
(char_u *)"\\\"\n\r");
|
||||
if (p == NULL) /* out of memory */
|
||||
break;
|
||||
for (t = p; *t != NUL; ++t)
|
||||
if (*t == '\n')
|
||||
*t = 'n';
|
||||
else if (*t == '\r')
|
||||
*t = 'r';
|
||||
if ((fprintf(fd, "let %s = %c%s%c",
|
||||
this_var->di_key,
|
||||
(this_var->di_tv.v_type == VAR_STRING) ? '"'
|
||||
: ' ',
|
||||
p,
|
||||
(this_var->di_tv.v_type == VAR_STRING) ? '"'
|
||||
: ' ') < 0)
|
||||
|| put_eol(fd) == FAIL)
|
||||
{
|
||||
vim_free(p);
|
||||
return FAIL;
|
||||
}
|
||||
vim_free(p);
|
||||
}
|
||||
#ifdef FEAT_FLOAT
|
||||
else if (this_var->di_tv.v_type == VAR_FLOAT
|
||||
&& var_flavour(this_var->di_key) == VAR_FLAVOUR_SESSION)
|
||||
{
|
||||
float_T f = this_var->di_tv.vval.v_float;
|
||||
int sign = ' ';
|
||||
|
||||
if (f < 0)
|
||||
{
|
||||
f = -f;
|
||||
sign = '-';
|
||||
}
|
||||
if ((fprintf(fd, "let %s = %c%f",
|
||||
this_var->di_key, sign, f) < 0)
|
||||
|| put_eol(fd) == FAIL)
|
||||
return FAIL;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Display script name where an item was last set.
|
||||
* Should only be invoked when 'verbose' is non-zero.
|
||||
|
Reference in New Issue
Block a user