Mercurial > hg > xemacs-beta
diff lisp/simple.el @ 5803:b79e1e02bf01
Preserve extent information in the command builder code.
src/ChangeLog addition:
2014-07-14 Aidan Kehoe <kehoea@parhasard.net>
* event-stream.c:
* event-stream.c (mark_command_builder):
* event-stream.c (finalize_command_builder): Removed.
* event-stream.c (allocate_command_builder):
* event-stream.c (free_command_builder): Removed. Use
free_normal_lisp_object() instead.
* event-stream.c (echo_key_event):
* event-stream.c (regenerate_echo_keys_from_this_command_keys):
Detach all extents here.
* event-stream.c (maybe_echo_keys):
* event-stream.c (reset_key_echo):
* event-stream.c (execute_help_form):
* event-stream.c (Fnext_event):
* event-stream.c (command_builder_find_leaf_no_jit_binding):
* event-stream.c (command_builder_find_leaf):
* event-stream.c (lookup_command_event):
* events.h (struct command_builder):
Move the command builder's echo_buf to being a Lisp string rather
than a malloced Ibyte array. This allows passing through extent
information, which was previously dropped. It also simplifies the
allocation and release code for the command builder.
Rename echo_buf_index to echo_buf_fill_pointer, better reflecting
its function.
Don't rely on zero-termination (something not particularly
compatible with Lisp-level code) when showing a substring of
echo_buf that differs from that designated by
echo_buf_fill_pointer, keep a separate counter instead and use
that.
* minibuf.c:
* minibuf.c (echo_area_append):
Use the new START and END keyword arguments to #'append-message,
rather than consing a new string for basically every #'next-event
prompt displayed.
test/ChangeLog addition:
2014-07-14 Aidan Kehoe <kehoea@parhasard.net>
* automated/extent-tests.el:
Check that extent information is passed through to the echo area
correctly with #'next-event's PROMPT argument.
lisp/ChangeLog addition:
2014-07-14 Aidan Kehoe <kehoea@parhasard.net>
* simple.el (raw-append-message):
Use #'write-sequence in this, take its START and END keyword
arguments, so our callers don't have to cons as much.
* simple.el (append-message):
Pass through START and END here.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Mon, 14 Jul 2014 13:42:42 +0100 |
parents | 94a6b8fbd56e |
children | 9e5f3a0d4e66 |
line wrap: on
line diff
--- a/lisp/simple.el Wed Jul 02 17:45:49 2014 +0100 +++ b/lisp/simple.el Mon Jul 14 13:42:42 2014 +0100 @@ -4412,14 +4412,21 @@ (car (car log)) (cdr (car log)))) (setq log (cdr log))))) -(defun append-message (label message &optional frame stdout-p) +(defun* append-message (label message &optional frame stdout-p + &key (start 0) end) "Add MESSAGE to the message-stack, or append it to the existing text. + LABEL is the class of the message. If it is the same as that of the top of the message stack, MESSAGE is appended to the existing message, otherwise it is pushed on the stack. + FRAME determines the minibuffer window to send the message to. + STDOUT-P is ignored, except for output to stream devices. For streams, -STDOUT-P non-nil directs output to stdout, otherwise to stderr." +STDOUT-P non-nil directs output to stdout, otherwise to stderr. + +START and END, if supplied, designate a substring of MESSAGE to add. See +`write-sequence'." (or frame (setq frame (selected-frame))) ;; If outputting to the terminal, make sure output from anyone else clears ;; the left side first, but don't do it ourselves, otherwise we won't be @@ -4430,17 +4437,18 @@ (if (eq label (car top)) (setcdr top (concat (cdr top) message)) (push (cons label message) message-stack))) - (raw-append-message message frame stdout-p) + (raw-append-message message frame stdout-p :start start :end end) (if (eq 'stream (frame-type frame)) (set-device-clear-left-side (frame-device frame) t))) ;; Really append the message to the echo area. No fiddling with ;; message-stack. -(defun raw-append-message (message &optional frame stdout-p) +(defun* raw-append-message (message &optional frame stdout-p + &key (start 0) end) (unless (equal message "") (let ((inhibit-read-only t)) (with-current-buffer " *Echo Area*" - (insert-string message) + (write-sequence message (current-buffer) :start start :end end) ;; #### This needs to be conditional; cf discussion by Stefan Monnier ;; et al on emacs-devel in mid-to-late April 2007. One problem is ;; there is no known good way to guess whether the user wants to have @@ -4489,7 +4497,8 @@ ;; we ever create another non-redisplayable device type (e.g. ;; processes? printers?). (if (eq 'stream (frame-type frame)) - (send-string-to-terminal message stdout-p (frame-device frame)) + (send-string-to-terminal (subseq message start end) stdout-p + (frame-device frame)) (funcall redisplay-echo-area-function)))))) (defun display-message (label message &optional frame stdout-p)