[Bug: 21.4.19] RET doesn't copy command line to current prompt

Jerry James james at xemacs.org
Wed Jul 5 18:13:13 EDT 2006


Hi Mike,

Mike Kupfer <m.kupfer at acm.org> wrote:
> Here's the second of the two annoying behavior changes that I'm seeing,
> going from xemacs-base 2.03 to xemacs-2.06.

I must have missed the first one.  Can you point me to it?

> Suppose I run a command briefly in a shell buffer and then interrupt
> out.
>
>   kupfer at camellia:~> while true; do date; sleep 2; done
>   Mon Jul  3 12:15:20 PDT 2006
>   Mon Jul  3 12:15:22 PDT 2006
>     C-c C-c
>   kupfer at camellia:~> 
>
> If I move point back up to the "w" in "while" and hit RET, I expect the
> "while true; do date; sleep 2; done" to be copied to the bottom of the
> buffer.  Thus, if I hit RET again, the command will be run again.  This
> is the behavior I get with xemacs-base 2.03.
>
> With xemacs-base 2.06, I just get another prompt:
>
>   kupfer at camellia:~> while true; do date; sleep 2; done
>   Mon Jul  3 12:15:20 PDT 2006
>   Mon Jul  3 12:15:22 PDT 2006
>     C-c C-c
>   kupfer at camellia:~> 
>   kupfer at camellia:~> 
>
> If I move the mouse over the "while true..." command, it is highlighted,
> and I can middle-click to have it copied to the current shell prompt.
> But that's often less convenient that the old behavior, because it
> requires moving the hand between the keyboard and the mouse.

The trouble is that we moved to a field-based implementation, and there
is a bug in find-field.  If point is on the boundary between two fields
with different values, then find-field is identifying the one before
point, rather than the one after point like it is supposed to.  I had
problems with before/after being reversed between Emacs and XEmacs while
developing field.el, as the comments at the top of that file imply.

If, in the body of find-field, we change the second let-form to this:

      (let* ((ext (extent-at pos nil 'field))
           (field (if ext (extent-property ext 'field))))

that fixes the problem for me.  Now find-field identifies the correct
field.  However, there has been another recent change that I suspect
will annoy you.  We synced comint.el with Emacs, and they changed
comint-send-input to take an optional argument, no-newline.  If
no-newline is nil, then you get a newline inserted after the copy is
made.  For shell mode, this means that C-m copies the old input and
immediately sends it to the shell, without giving you a chance to edit
it.  Suggestions on how to fix this, and just how much Emacs
compatibility we should strive for, are welcome.
-- 
Jerry James, Assistant Professor        james at xemacs.org
Computer Science Department             http://www.cs.usu.edu/~jerry/
Utah State University




More information about the XEmacs-Beta mailing list