Mercurial > emacs
changeset 22977:8682bf30d667
(Fwrite_region): Reflect the eol conversion
specification of default value of buffer-file-coding-system if is
is undefined.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Mon, 10 Aug 1998 06:29:02 +0000 |
parents | f1457fc159c9 |
children | 6535413fa872 |
files | src/fileio.c |
diffstat | 1 files changed, 41 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/fileio.c Mon Aug 10 02:41:44 1998 +0000 +++ b/src/fileio.c Mon Aug 10 06:29:02 1998 +0000 @@ -4303,19 +4303,18 @@ If it is not set locally, we anyway have to convert EOL format if the default value of `buffer-file-coding-system' tells that it is not Unix-like (LF only) format. */ + int using_default_coding = 0; + int force_raw_text = 0; + val = current_buffer->buffer_file_coding_system; if (NILP (val) || NILP (Flocal_variable_p (Qbuffer_file_coding_system, Qnil))) { + val = Qnil; if (NILP (current_buffer->enable_multibyte_characters)) - { - setup_coding_system (Fcheck_coding_system (val), &coding); - setup_raw_text_coding_system (&coding); - goto done_setup_coding; - } - val = Qnil; + force_raw_text = 1; } - + if (NILP (val)) { /* Check file-coding-system-alist. */ @@ -4329,16 +4328,46 @@ val = XCONS (coding_systems)->cdr; } - if (NILP (val)) - /* If we still have not decided a coding system, use the - default value of buffer-file-coding-system. */ - val = current_buffer->buffer_file_coding_system; + if (NILP (val) + && !NILP (current_buffer->buffer_file_coding_system)) + { + /* If we still have not decided a coding system, use the + default value of buffer-file-coding-system. */ + val = current_buffer->buffer_file_coding_system; + using_default_coding = 1; + } - if (! NILP (val) + if (!force_raw_text && !NILP (Ffboundp (Vselect_safe_coding_system_function))) /* Confirm that VAL can surely encode the current region. */ val = call3 (Vselect_safe_coding_system_function, start, end, val); + + setup_coding_system (Fcheck_coding_system (val), &coding); + if (coding.eol_type == CODING_EOL_UNDECIDED + && !using_default_coding) + { + if (! EQ (default_buffer_file_coding.symbol, + buffer_defaults.buffer_file_coding_system)) + setup_coding_system (buffer_defaults.buffer_file_coding_system, + &default_buffer_file_coding); + if (default_buffer_file_coding.eol_type != CODING_EOL_UNDECIDED) + { + Lisp_Object subsidiaries; + + coding.eol_type = default_buffer_file_coding.eol_type; + subsidiaries = Fget (coding.symbol, Qeol_type); + if (VECTORP (subsidiaries) + && XVECTOR (subsidiaries)->size == 3) + coding.symbol + = XVECTOR (subsidiaries)->contents[coding.eol_type]; + } + } + + if (force_raw_text) + setup_raw_text_coding_system (&coding); + goto done_setup_coding; } + setup_coding_system (Fcheck_coding_system (val), &coding); done_setup_coding: