^L showing up in Emacs M-x shell-mode, with ksh but not bash

7 views
Skip to first unread message

Nicholas Papadonis

unread,
Nov 4, 2019, 7:19:29 PM11/4/19
to Korn Shell, help-gn...@gnu.org
When Emacs is invoked in an X-session and when I resize a M-x shell-mode *shell* window by more then a single line of text, $PS2 is being output in the shell mode window.  When I type <return> then a number of "^L"s are also output in the shell mode window.

I'm using /bin/ksh93 in Debian.

This behavior does not occur with bash.

Does anyone know why this is happening?  Also, more ways to debug it?

Thank you

Nicholas Papadonis

unread,
Nov 4, 2019, 7:31:07 PM11/4/19
to Korn Shell, help-gn...@gnu.org
I added a video showing the issue at:

Nicholas Papadonis

unread,
Nov 4, 2019, 8:01:06 PM11/4/19
to Korn Shell, help-gn...@gnu.org
I confirmed this behavior is still present without any special init scripts.  I created a new account to check it.

Kurtis Rader

unread,
Nov 4, 2019, 8:57:08 PM11/4/19
to Nicholas Papadonis, Korn Shell, help-gn...@gnu.org
No idea what's happening, but I wouldn't leap to the conclusion that $PS2 is being displayed. Given the presence of the [ctrl-L] chars it's just as likely that both chars are being sent to the shell. Possibly bracketed-paste mode is enabled by the emacs shell mode. If you start the shell, then in a different window strace it what appears in the trace when you resize the window? Also, you might want to try the current development version that you'll find at https://github.com/att/ast/. It's easy to build if you're willing to install Meson.

P.S., You might want to take a look at https://asciinema.org for capturing terminal sessions for playback.

--
Kurtis Rader
Caretaker of the exceptional canines Junior and Hank

Nicholas Papadonis

unread,
Nov 5, 2019, 11:59:10 AM11/5/19
to Kurtis Rader, Korn Shell, help-gn...@gnu.org
This is what the child ksh M-x shell process is doing when I resize the window.  As you can see the write of ">  " near the end.  Hopefully some folks have more insight into this.

select(1, [0], NULL, NULL, NULL)        = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} ---
rt_sigaction(SIGWINCH, {sa_handler=0x55e35c5a23b0, sa_mask=[], sa_flags=SA_RESTORER|SA_INTERRUPT, sa_restorer=0x7ffb3cb91060}, {sa_handler=0x55e35c5a23b0, sa_mask=[], sa_flags=SA_RESTORER|SA_INTERRUPT, sa_restorer=0x7ffb3cb91060}, 8) = 0
ioctl(2, TIOCGWINSZ, {ws_row=9, ws_col=102, ws_xpixel=0, ws_ypixel=0}) = 0
rt_sigprocmask(SIG_UNBLOCK, [WINCH], NULL, 8) = 0
rt_sigreturn({mask=[]})                 = -1 EINTR (Interrupted system call)
ioctl(2, TIOCGWINSZ, {ws_row=9, ws_col=102, ws_xpixel=0, ws_ypixel=0}) = 0
poll([], 0, 50)                         = 0 (Timeout)
ioctl(2, TIOCGWINSZ, {ws_row=9, ws_col=102, ws_xpixel=0, ws_ypixel=0}) = 0
lseek(3, 0, SEEK_END)                   = 2
lseek(3, 0, SEEK_CUR)                   = 2
lseek(3, 2, SEEK_SET)                   = 2
read(3, "", 65536)                      = 0
lseek(3, 2, SEEK_SET)                   = 2
read(3, "", 65536)                      = 0
select(1, [0], NULL, NULL, {tv_sec=0, tv_usec=0}) = 0 (Timeout)
write(2, ">  ", 3)                      = 3
select(1, [0], NULL, NULL, NULL

Nicholas Papadonis

unread,
Nov 5, 2019, 12:04:02 PM11/5/19
to Kurtis Rader, Korn Shell, help-gn...@gnu.org
The "^L"s are coming from this trace.

Is anyone running ksh93 in Emacs shell-mode?

)        = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} ---
rt_sigaction(SIGWINCH, {sa_handler=0x55e35c5a23b0, sa_mask=[], sa_flags=SA_RESTORER|SA_INTERRUPT, sa_restorer=0x7ffb3cb91060}, {sa_handler=0x55e35c5a23b0, sa_mask=[], sa_flags=SA_RESTORER|SA_INTERRUPT, sa_restorer=0x7ffb3cb91060}, 8) = 0
ioctl(2, TIOCGWINSZ, {ws_row=10, ws_col=102, ws_xpixel=0, ws_ypixel=0}) = 0
rt_sigprocmask(SIG_UNBLOCK, [WINCH], NULL, 8) = 0
rt_sigreturn({mask=[]})                 = -1 EINTR (Interrupted system call)
ioctl(2, TIOCGWINSZ, {ws_row=10, ws_col=102, ws_xpixel=0, ws_ypixel=0}) = 0
poll([], 0, 50)                         = 0 (Timeout)
ioctl(2, TIOCGWINSZ, {ws_row=10, ws_col=102, ws_xpixel=0, ws_ypixel=0}) = 0
lseek(3, 0, SEEK_END)                   = 2
lseek(3, 0, SEEK_CUR)                   = 2
lseek(3, 2, SEEK_SET)                   = 2
read(3, "", 65536)                      = 0
lseek(3, 2, SEEK_SET)                   = 2
read(3, "", 65536)                      = 0
select(1, [0], NULL, NULL, {tv_sec=0, tv_usec=0}) = 0 (Timeout)
write(2, ">  ", 3)                      = 3
select(1, [0], NULL, NULL, NULL)        = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} ---
rt_sigaction(SIGWINCH, {sa_handler=0x55e35c5a23b0, sa_mask=[], sa_flags=SA_RESTORER|SA_INTERRUPT, sa_restorer=0x7ffb3cb91060}, {sa_handler=0x55e35c5a23b0, sa_mask=[], sa_flags=SA_RESTORER|SA_INTERRUPT, sa_restorer=0x7ffb3cb91060}, 8) = 0
ioctl(2, TIOCGWINSZ, {ws_row=10, ws_col=103, ws_xpixel=0, ws_ypixel=0}) = 0
rt_sigprocmask(SIG_UNBLOCK, [WINCH], NULL, 8) = 0
rt_sigreturn({mask=[]})                 = -1 EINTR (Interrupted system call)
ioctl(2, TIOCGWINSZ, {ws_row=10, ws_col=103, ws_xpixel=0, ws_ypixel=0}) = 0
poll([], 0, 50)                         = 0 (Timeout)
ioctl(2, TIOCGWINSZ, {ws_row=10, ws_col=103, ws_xpixel=0, ws_ypixel=0}) = 0
select(1, [0], NULL, NULL, {tv_sec=0, tv_usec=0}) = 0 (Timeout)
write(2, ">  ", 3)                      = 3
select(1, [0], NULL, NULL, NULL)        = ? ERESTARTNOHAND (To be restarted if no handler)
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} ---
rt_sigaction(SIGWINCH, {sa_handler=0x55e35c5a23b0, sa_mask=[], sa_flags=SA_RESTORER|SA_INTERRUPT, sa_restorer=0x7ffb3cb91060}, {sa_handler=0x55e35c5a23b0, sa_mask=[], sa_flags=SA_RESTORER|SA_INTERRUPT, sa_restorer=0x7ffb3cb91060}, 8) = 0
ioctl(2, TIOCGWINSZ, {ws_row=10, ws_col=104, ws_xpixel=0, ws_ypixel=0}) = 0
rt_sigprocmask(SIG_UNBLOCK, [WINCH], NULL, 8) = 0
rt_sigreturn({mask=[]})                 = -1 EINTR (Interrupted system call)
ioctl(2, TIOCGWINSZ, {ws_row=10, ws_col=104, ws_xpixel=0, ws_ypixel=0}) = 0
poll([], 0, 50)                         = 0 (Timeout)
ioctl(2, TIOCGWINSZ, {ws_row=10, ws_col=104, ws_xpixel=0, ws_ypixel=0}) = 0
select(1, [0], NULL, NULL, {tv_sec=0, tv_usec=0}) = 0 (Timeout)
write(2, ">  ", 3)                      = 3
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
recvfrom(0, 0x7ffb3d814320, 65536, MSG_PEEK, NULL, NULL) = -1 ENOTSOCK (Socket operation on non-socket)
read(0, "\n", 1)                        = 1
lseek(3, 0, SEEK_END)                   = 2
lseek(3, 0, SEEK_END)                   = 2
lseek(3, 0, SEEK_CUR)                   = 2
stat("/usr/bin/\f\f\f", 0x7ffc17e88250) = -1 ENOENT (No such file or directory)
stat("/usr/sbin/\f\f\f", 0x7ffc17e88250) = -1 ENOENT (No such file or directory)
stat("/bin/\f\f\f", 0x7ffc17e88250)     = -1 ENOENT (No such file or directory)
stat("/sbin/\f\f\f", 0x7ffc17e88250)    = -1 ENOENT (No such file or directory)
stat("/usr/local/bin/\f\f\f", 0x7ffc17e88250) = -1 ENOENT (No such file or directory)
stat("/usr/local/sbin/\f\f\f", 0x7ffc17e88250) = -1 ENOENT (No such file or directory)
stat("/usr/bin/\f\f\f", 0x7ffc17e88170) = -1 ENOENT (No such file or directory)
stat("/usr/sbin/\f\f\f", 0x7ffc17e88170) = -1 ENOENT (No such file or directory)
stat("/bin/\f\f\f", 0x7ffc17e88170)     = -1 ENOENT (No such file or directory)
stat("/sbin/\f\f\f", 0x7ffc17e88170)    = -1 ENOENT (No such file or directory)
stat("/usr/local/bin/\f\f\f", 0x7ffc17e88170) = -1 ENOENT (No such file or directory)
stat("/usr/local/sbin/\f\f\f", 0x7ffc17e88170) = -1 ENOENT (No such file or directory)
write(2, "\f\f: not found [No such file or d"..., 42) = 42
lseek(3, 0, SEEK_END)                   = 2
lseek(3, 2, SEEK_SET)                   = 2
lseek(3, 2, SEEK_SET)                   = 2
read(3, "", 65536)                      = 0
write(2, "[debian:~]$ ", 12)            = 12
select(1, [0], NULL, NULL, NULL

Nicholas Papadonis

unread,
Nov 5, 2019, 12:18:40 PM11/5/19
to Perry Smith, Kurtis Rader, help-gn...@gnu.org, Korn Shell
It's on Debian 9.  

On Tue, Nov 5, 2019 at 12:13 PM Perry Smith <pe...@easesoftware.com> wrote:
I think you said that you created a new user and this still happens?

My guess is that this is something to do with your .profile, .kshrc, etc.  Don’t
forget about the profile and rc files in /etc.  I don’t recall which ones ksh93 loads.

What OS is this on?
>>> <https://github.com/att/ast/pull/1427>. It's easy to build if you're

Nicholas Papadonis

unread,
Nov 5, 2019, 12:34:44 PM11/5/19
to Kurtis Rader, Korn Shell
I tried Meson on Debian 9.  Is this expected output?

[debian:~/src/ast]$ meson build
The Meson build system
Version: 0.37.1
Source dir: /home/np/src/ast
Build dir: /home/np/src/ast/build
Build type: native build
Project name: ksh93
Native c compiler: cc (gcc 6.3.0)
Build machine cpu family: x86_64
Build machine cpu: x86_64
Compiler for c supports argument -Wno-cast-function-type: YES

Meson encountered an error in file meson.build, line 131, column 0:
Unknown function "add_test_setup".

On Mon, Nov 4, 2019 at 8:57 PM Kurtis Rader <kra...@skepticism.us> wrote:

Kurtis Rader

unread,
Nov 5, 2019, 1:51:15 PM11/5/19
to Nicholas Papadonis, Korn Shell
That's because your Meson version, 0.37, is too old. The current Meson release is 0.51. I thought we had documented the minimum acceptable Meson version but apparently not. I believe we use features first introduced by version 0.44.

Kurtis Rader

unread,
Nov 5, 2019, 2:19:10 PM11/5/19
to Nicholas Papadonis, Korn Shell, help-gn...@gnu.org
I can't reproduce this. And I don't see anything in the strace output that would account for the \f chars. Which strongly suggests something like a use-after-free bug or using an uninitialized var. We've fixed a huge number of such bugs in the past two years thanks to updating the project so that we can employ tools like libc's debug malloc and ASAN. Honestly, I don't think there is much point in further debugging until you are able to reproduce this problem using the current source; or at least the 2020.0.0 stable release we recently announced. If you can't build from source you should be able to use a binary built for a comparable Linux distro such as Ubuntu or Fedora. Happy to give you a current binary from one of my Linux VMs I use for testing.

--
You received this message because you are subscribed to the Google Groups "Korn Shell" group.
To unsubscribe from this group and stop receiving emails from it, send an email to korn-shell+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/korn-shell/CAKD0t1%2BRdniqNExU0oXShbybZtAq7HSjoEFJdcL25Due4QEB6g%40mail.gmail.com.

Nicholas Papadonis

unread,
Nov 5, 2019, 9:17:17 PM11/5/19
to Korn Shell, help-gn...@gnu.org
I also note using "set -o vi" only a single "> " is printed when resizing the window.  I wonder why "PS2" which is for a long line that must be broken up is printed.

In the meantime, I will install Debian 10 and try there.

Kurtis Rader

unread,
Nov 5, 2019, 9:55:51 PM11/5/19
to Nicholas Papadonis, Korn Shell
On Tue, Nov 5, 2019 at 5:56 PM Nicholas Papadonis <nick.pap...@gmail.com> wrote:
I used latest ksh2020 bits and experience the same issue as reported before.  I'm using Emacs 25.1.1 on Debian 9.  Invoking 'bash' inside M-x shell works correctly.  Isn't ^L form feed or to redraw the screen?  Also, why would PS2 be output as well?

Have you confirmed the PS2 hypothesis by changing it to a different string? It's not that I think it is something other than PS2 being displayed but such assumptions are risky. Also, did you confirm you're really running the new binary; e.g., by doing `echo ${.sh.version}`? Again, I have no reason to think you're not but I spent a couple of decades doing UNIX (then Linux) customer support and have learned to never assume facts without confirming evidence.

It seems unlikely but perhaps there is a critical difference in the stty settings. So seeing what `stty -a` reports inside emacs and in a normal terminal might be useful.
 
What is your testing configuration?

I'm just running ksh, both ksh93u+ and the current source, inside a terminal emulator and resizing the terminal. Both macOS and various Linux and BSD distros. I'm a Vim user so I'm not testing ksh inside emacs shell-mode. Using Vim's `:terminal` mode to run ksh inside a Vim window I don't see your behavior; i.e., it works as expected. I also use tmux and don't see the problem with ksh inside a tmux session.
Reply all
Reply to author
Forward
0 new messages