Mercurial > emacs
changeset 90777:c0e889bf140c
Cancel the change done by sync with HEAD.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Tue, 27 Feb 2007 11:03:46 +0000 |
parents | dd7c098af727 |
children | c5ab22abb1ec |
files | src/process.c |
diffstat | 1 files changed, 12 insertions(+), 79 deletions(-) [+] |
line wrap: on
line diff
--- a/src/process.c Mon Feb 26 23:03:45 2007 +0000 +++ b/src/process.c Tue Feb 27 11:03:46 2007 +0000 @@ -5641,83 +5641,6 @@ UNGCPRO; } -static Lisp_Object -send_process_object_unwind (buf) - Lisp_Object buf; -{ - Lisp_Object tembuf; - - if (XBUFFER (buf) == current_buffer) - return Qnil; - tembuf = Fcurrent_buffer (); - Fset_buffer (buf); - Fkill_buffer (tembuf); - return Qnil; -} - -/* Send current contents of region between START and END to PROC. - If START is a string, send it instead. - This function can evaluate Lisp code and can garbage collect. */ - -static void -send_process_object (proc, start, end) - Lisp_Object proc, start, end; -{ - int count = SPECPDL_INDEX (); - Lisp_Object object = STRINGP (start) ? start : Fcurrent_buffer (); - struct buffer *given_buffer = current_buffer; - unsigned char *buf; - int len; - - record_unwind_protect (send_process_object_unwind, Fcurrent_buffer ()); - - if (STRINGP (object) ? STRING_MULTIBYTE (object) - : ! NILP (XBUFFER (object)->enable_multibyte_characters)) - { - struct Lisp_Process *p = XPROCESS (proc); - struct coding_system *coding = proc_encode_coding_system[XINT (p->outfd)]; - - if (! EQ (coding->symbol, p->encode_coding_system)) - /* The coding system for encoding was changed to raw-text - because we sent a unibyte text previously. Now we are - sending a multibyte text, thus we must encode it by the - original coding system specified for the current process. */ - setup_coding_system (p->encode_coding_system, coding); - if (! NILP (coding->pre_write_conversion)) - { - struct gcpro gcpro1, gcpro2; - - GCPRO2 (proc, object); - call2 (coding->pre_write_conversion, start, end); - UNGCPRO; - if (given_buffer != current_buffer) - { - start = make_number (BEGV), end = make_number (ZV); - object = Fcurrent_buffer (); - } - } - } - - if (BUFFERP (object)) - { - EMACS_INT start_byte; - - if (XINT (start) < GPT && XINT (end) > GPT) - move_gap (XINT (end)); - start_byte = CHAR_TO_BYTE (XINT (start)); - buf = BYTE_POS_ADDR (start_byte); - len = CHAR_TO_BYTE (XINT (end)) - start_byte; - } - else - { - buf = SDATA (object); - len = SBYTES (object); - } - send_process (proc, buf, len, object); - - unbind_to (count, Qnil); -} - DEFUN ("process-send-region", Fprocess_send_region, Sprocess_send_region, 3, 3, 0, doc: /* Send current contents of region as input to PROCESS. @@ -5731,10 +5654,19 @@ Lisp_Object process, start, end; { Lisp_Object proc; + int start1, end1; proc = get_process (process); validate_region (&start, &end); - send_process_object (proc, start, end); + + if (XINT (start) < GPT && XINT (end) > GPT) + move_gap (XINT (start)); + + start1 = CHAR_TO_BYTE (XINT (start)); + end1 = CHAR_TO_BYTE (XINT (end)); + send_process (proc, BYTE_POS_ADDR (start1), end1 - start1, + Fcurrent_buffer ()); + return Qnil; } @@ -5752,7 +5684,8 @@ Lisp_Object proc; CHECK_STRING (string); proc = get_process (process); - send_process_object (proc, string, Qnil); + send_process (proc, SDATA (string), + SBYTES (string), string); return Qnil; }