Mercurial > vim
diff src/fileio.c @ 5231:74d2f3188cd0 v7.4a.041
updated for version 7.4a.041
Problem: When using ":new ++ff=unix" and "dos" is first in 'fileformats'
then 'ff' is set to "dos" instead of "unix". (Ingo Karkat)
Solution: Create set_file_options() and invoke it from do_ecmd().
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 24 Jul 2013 15:02:03 +0200 |
parents | 93cccad6a26b |
children | 6b7ab6a4f31a |
line wrap: on
line diff
--- a/src/fileio.c +++ b/src/fileio.c @@ -474,23 +474,8 @@ readfile(fname, sfname, from, lines_to_s } #endif - /* set default 'fileformat' */ - if (set_options) - { - if (eap != NULL && eap->force_ff != 0) - set_fileformat(get_fileformat_force(curbuf, eap), OPT_LOCAL); - else if (*p_ffs != NUL) - set_fileformat(default_fileformat(), OPT_LOCAL); - } - - /* set or reset 'binary' */ - if (eap != NULL && eap->force_bin != 0) - { - int oldval = curbuf->b_p_bin; - - curbuf->b_p_bin = (eap->force_bin == FORCE_BIN); - set_options_bin(oldval, curbuf->b_p_bin, OPT_LOCAL); - } + /* Set default or forced 'fileformat' and 'binary'. */ + set_file_options(set_options, eap); /* * When opening a new file we take the readonly flag from the file. @@ -647,15 +632,9 @@ readfile(fname, sfname, from, lines_to_s check_marks_read(); #endif #ifdef FEAT_MBYTE - if (eap != NULL && eap->force_enc != 0) - { - /* set forced 'fileencoding' */ - fenc = enc_canonize(eap->cmd + eap->force_enc); - if (fenc != NULL) - set_string_option_direct((char_u *)"fenc", -1, - fenc, OPT_FREE|OPT_LOCAL, 0); - vim_free(fenc); - } + /* Set forced 'fileencoding'. */ + if (eap != NULL) + set_forced_fenc(eap); #endif #ifdef FEAT_AUTOCMD apply_autocmds_exarg(EVENT_BUFNEWFILE, sfname, sfname, @@ -2738,7 +2717,52 @@ prep_exarg(eap, buf) return OK; } -#ifdef FEAT_MBYTE +/* + * Set default or forced 'fileformat' and 'binary'. + */ + void +set_file_options(set_options, eap) + int set_options; + exarg_T *eap; +{ + /* set default 'fileformat' */ + if (set_options) + { + if (eap != NULL && eap->force_ff != 0) + set_fileformat(get_fileformat_force(curbuf, eap), OPT_LOCAL); + else if (*p_ffs != NUL) + set_fileformat(default_fileformat(), OPT_LOCAL); + } + + /* set or reset 'binary' */ + if (eap != NULL && eap->force_bin != 0) + { + int oldval = curbuf->b_p_bin; + + curbuf->b_p_bin = (eap->force_bin == FORCE_BIN); + set_options_bin(oldval, curbuf->b_p_bin, OPT_LOCAL); + } +} + +#if defined(FEAT_MBYTE) || defined(PROTO) +/* + * Set forced 'fileencoding'. + */ + void +set_forced_fenc(eap) + exarg_T *eap; +{ + if (eap->force_enc != 0) + { + char_u *fenc = enc_canonize(eap->cmd + eap->force_enc); + + if (fenc != NULL) + set_string_option_direct((char_u *)"fenc", -1, + fenc, OPT_FREE|OPT_LOCAL, 0); + vim_free(fenc); + } +} + /* * Find next fileencoding to use from 'fileencodings'. * "pp" points to fenc_next. It's advanced to the next item.