Mercurial > vim
comparison src/eval.c @ 17536:e00d12c085a5 v8.1.1766
patch 8.1.1766: code for writing session file is spread out
commit https://github.com/vim/vim/commit/845380791196aec7f991987ebf7b22de3779d106
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Jul 28 14:15:42 2019 +0200
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 https://github.com/vim/vim/issues/4728)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 28 Jul 2019 14:30:07 +0200 |
parents | cfdef48743ed |
children | ff097edaae89 |
comparison
equal
deleted
inserted
replaced
17535:3015901aaaa6 | 17536:e00d12c085a5 |
---|---|
9317 | 9317 |
9318 vim_free(tofree); | 9318 vim_free(tofree); |
9319 return ret; | 9319 return ret; |
9320 } | 9320 } |
9321 | 9321 |
9322 #if defined(FEAT_VIMINFO) || defined(FEAT_SESSION) | |
9323 var_flavour_T | |
9324 var_flavour(char_u *varname) | |
9325 { | |
9326 char_u *p = varname; | |
9327 | |
9328 if (ASCII_ISUPPER(*p)) | |
9329 { | |
9330 while (*(++p)) | |
9331 if (ASCII_ISLOWER(*p)) | |
9332 return VAR_FLAVOUR_SESSION; | |
9333 return VAR_FLAVOUR_VIMINFO; | |
9334 } | |
9335 else | |
9336 return VAR_FLAVOUR_DEFAULT; | |
9337 } | |
9338 #endif | |
9339 | |
9340 #if defined(FEAT_SESSION) || defined(PROTO) | |
9341 int | |
9342 store_session_globals(FILE *fd) | |
9343 { | |
9344 hashitem_T *hi; | |
9345 dictitem_T *this_var; | |
9346 int todo; | |
9347 char_u *p, *t; | |
9348 | |
9349 todo = (int)globvarht.ht_used; | |
9350 for (hi = globvarht.ht_array; todo > 0; ++hi) | |
9351 { | |
9352 if (!HASHITEM_EMPTY(hi)) | |
9353 { | |
9354 --todo; | |
9355 this_var = HI2DI(hi); | |
9356 if ((this_var->di_tv.v_type == VAR_NUMBER | |
9357 || this_var->di_tv.v_type == VAR_STRING) | |
9358 && var_flavour(this_var->di_key) == VAR_FLAVOUR_SESSION) | |
9359 { | |
9360 /* Escape special characters with a backslash. Turn a LF and | |
9361 * CR into \n and \r. */ | |
9362 p = vim_strsave_escaped(tv_get_string(&this_var->di_tv), | |
9363 (char_u *)"\\\"\n\r"); | |
9364 if (p == NULL) /* out of memory */ | |
9365 break; | |
9366 for (t = p; *t != NUL; ++t) | |
9367 if (*t == '\n') | |
9368 *t = 'n'; | |
9369 else if (*t == '\r') | |
9370 *t = 'r'; | |
9371 if ((fprintf(fd, "let %s = %c%s%c", | |
9372 this_var->di_key, | |
9373 (this_var->di_tv.v_type == VAR_STRING) ? '"' | |
9374 : ' ', | |
9375 p, | |
9376 (this_var->di_tv.v_type == VAR_STRING) ? '"' | |
9377 : ' ') < 0) | |
9378 || put_eol(fd) == FAIL) | |
9379 { | |
9380 vim_free(p); | |
9381 return FAIL; | |
9382 } | |
9383 vim_free(p); | |
9384 } | |
9385 #ifdef FEAT_FLOAT | |
9386 else if (this_var->di_tv.v_type == VAR_FLOAT | |
9387 && var_flavour(this_var->di_key) == VAR_FLAVOUR_SESSION) | |
9388 { | |
9389 float_T f = this_var->di_tv.vval.v_float; | |
9390 int sign = ' '; | |
9391 | |
9392 if (f < 0) | |
9393 { | |
9394 f = -f; | |
9395 sign = '-'; | |
9396 } | |
9397 if ((fprintf(fd, "let %s = %c%f", | |
9398 this_var->di_key, sign, f) < 0) | |
9399 || put_eol(fd) == FAIL) | |
9400 return FAIL; | |
9401 } | |
9402 #endif | |
9403 } | |
9404 } | |
9405 return OK; | |
9406 } | |
9407 #endif | |
9408 | |
9409 /* | 9322 /* |
9410 * Display script name where an item was last set. | 9323 * Display script name where an item was last set. |
9411 * Should only be invoked when 'verbose' is non-zero. | 9324 * Should only be invoked when 'verbose' is non-zero. |
9412 */ | 9325 */ |
9413 void | 9326 void |