reassign 477455 vte
retitle 477455 vte: backspace-autodetect mode uses c_cc[VERASE] even when 
ICANON|ECHOE unset
thankyou

Hi,

> With some terminals, such as xfce4-terminal (Debian package) and
> osso-xterm (not in Debian), screen views the Backspace key as the
> nul character (^@), so that it is not possible to erase characters
> with it.

this is not screen's fault. screen disables most control code translations
on its "outer" fd (the one inherited from the invoking shell, which is
directly fed by the X terminal emulator) by calling tcsetattr():

] ioctl(3, TCGETS, {c_iflags=0x500, c_oflags=0x5, c_cflags=0xbf, 
c_lflags=0x8a3b, c_line=0, c_cc...})
] ioctl(3, TCSETSW, {c_iflags=0x400, c_oflags=0x1, c_cflags=0xbf, 
c_lflags=0xa30, c_line=0, c_cc...})
] ioctl(3, TCGETS, {c_iflags=0x400, c_oflags=0x1, c_cflags=0xbf, 
c_lflags=0xa30, c_line=0, c_cc...})

The new c_lflags value expands to {ECHOE|ECHOK|ECHOCTL|ECHOKE}.
ECHOE,ECHOK and ECHOPRT depend on ICANON (which is unset), ECHOCTL depends on 
ECHO
(which is also unset), so these bits (ought to) have no effect. Yet libvte
unconditionally uses c_cc[VERASE] for backspace:

] vte:src/vte.c:4330 ff.
]  case VTE_ERASE_AUTO:
]  default:
]          if (terminal->pvt->pty_master != -1) {
]                  if (tcgetattr(terminal->pvt->pty_master,
]                                &tio) != -1) {
]                          normal = g_strdup_printf("%c",
]                                                   tio.c_cc[VERASE]);
]                          normal_length = 1;
]                  }
]          }
]          suppress_meta_esc = FALSE;
]          break;
]  }
]  handled = TRUE;

But screen sets that member to ascii NUL (because it shouldn't be used
anyway).


Regards,

Jan

Attachment: signature.asc
Description: Digital signature

Reply via email to