Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 02 Feb 2020 16:42:07 +0000
From:      bugzilla-noreply@freebsd.org
To:        bugs@FreeBSD.org
Subject:   [Bug 243807] CURRENT libedit breaks emacs tramp-mode
Message-ID:  <bug-243807-227@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D243807

            Bug ID: 243807
           Summary: CURRENT libedit breaks emacs tramp-mode
           Product: Base System
           Version: CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: misc
          Assignee: bugs@FreeBSD.org
          Reporter: jfc@mit.edu

Emacs tramp-mode uses ssh to move data and commands back and forth to use a
local emacs to edit remote files.  It no longer works when the remote syste=
m is
running FreeBSD CURRENT.  The problem is apparently caused by the new versi=
on
of libedit.  Running 12.1 in a jail on CURRENT works, but copying in the
CURRENT version of libedit reintroduced the problem.

I suspect this will turn out to be undesirable behavior that is not strictly
speaking a bug, but the current behavior is suboptimal for reasons other th=
an
breaking tramp mode.

Emacs tramp mode opens an ssh connection to a remote machine.  It doesn't w=
ant
to see input echoed back so it runs

stty -inlcr -onlcr -echo kill '^U' erase '^H'

This doesn't do anything useful if a shell is running in line editing mode
(raw) instead of using the tty (cooked).  So tramp falls back to a hack to
detect echoed input.  It sends "_echo" followed by a string of backspace
characters.  "_echo" is unlikely to appear in program output.

Here is the next command after the initial stty:

_echo^H^H^H^H^Hstty icanon erase ^H cols 32767_echo^H^H^H^H^H

The groups of 5 ^H represent 5 backspace characters and the lone ^H in the
middle is a two character sequence for stty.

The terminal output from a 12.1 system is

_echo^H ^H^H ^H^H ^H^H ^H^H ^Hstty icanon erase ^H cols 32767_echo^H ^H^H ^=
H^H
^H^H ^H^H ^H
#$=20

where again the middle ^H is a two character sequence and the others are
control characters. There is a carriage return between the two lines.  "#$ =
" is
the shell prompt set by tramp.

The terminal output from a CURRENT system is

_echo
#$ _ech ^H
#$ _ec ^H
#$ _e ^H
#$ _ ^H
#$  ^Hstty icanon erase ^H cols 32767_echo
#$ stty icanon erase ^H cols 32767_ech ^H
#$ stty icanon erase ^H cols 32767_ec ^H
#$ stty icanon erase ^H cols 32767_e ^H
#$ stty icanon erase ^H cols 32767_ ^H
#$ stty icanon erase ^H cols 32767 ^H
#$=20

with carriage returns between lines.  This does not make sense to emacs.  (=
And
it is the suboptimial behavior I mentioned above, doing much more terminal
output than necessary.)

I tried both /bin/sh and /bin/csh as shells and tramp didn't work with eith=
er.=20
I put set +V and set +E in my .profile thinking that would turn off line
editing but there was no change.  Probably the shell still takes raw input
through libedit even if vi and emacs style editing are off.

I browsed the large diff between 12 and head versions of libedit and didn't=
 see
anything obvious.  I don't have a NetBSD system to test on.  (NetBSD is the
source of libedit.)

To reproduce run the emacs command
M-x load-library tramp
and try to open a file like
/ssh:user@host:/path

This should work when the remote host is 12.1 and hang if the remote host is
CURRENT.

--=20
You are receiving this mail because:
You are the assignee for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-243807-227>