unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Emacs difficulties in linux console with ncurses-6.3 caused by kcbt=\E^I.
@ 2022-05-05 18:18 Alan Mackenzie
  2022-05-06  0:01 ` Thomas Dickey
  0 siblings, 1 reply; 14+ messages in thread
From: Alan Mackenzie @ 2022-05-05 18:18 UTC (permalink / raw)
  To: bug-ncurses; +Cc: emacs-devel

Hello, ncurses!

I'm writing as a member of the Emacs development team.

In the recent change from ncurses-6.2 to ncurses-6.3, the following
change was make in the linux console terminfo:

--- Infocmp-linux-6.2   2022-05-04 20:16:01.609557894 +0000
+++ infocmp-linux-6.3   2022-05-04 20:09:02.046581014 +0000
@@ -14,7 +14,7 @@
        home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@,
        ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\n,
        initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x,
-       kb2=\E[G, kbs=^?, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B,
+       kb2=\E[G, kbs=^?, kcbt=\E^I, kcub1=\E[D, kcud1=\E[B,
        kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\E[[A,
        kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
        kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,

We now have kcbt=\E^I.

In Emacs on the Linux console, our use of terminfo now has the effect of
replacing the M-tab keysequence with backtab.  This make several
important key-bindings unusable.  (The backtab binding is also used, but
is perhaps a little less important.)

Also, this would seem to be a difficult problem for a normal user to
diagnose, and difficult also to fix.

May I ask why this change was made to the linux terminal?  Is there any
possibiliy it might be reverted?

Is there perhaps some strategy we could use in Emacs (C code) which would
work around this problem with using ugly ad-hoc code?

Thanks in advance!

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Emacs difficulties in linux console with ncurses-6.3 caused by kcbt=\E^I.
  2022-05-05 18:18 Emacs difficulties in linux console with ncurses-6.3 caused by kcbt=\E^I Alan Mackenzie
@ 2022-05-06  0:01 ` Thomas Dickey
  2022-05-06 11:26   ` Stefan Monnier
                     ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Thomas Dickey @ 2022-05-06  0:01 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: bug-ncurses, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 4117 bytes --]

On Thu, May 05, 2022 at 06:18:00PM +0000, Alan Mackenzie wrote:
> Hello, ncurses!
> 
> I'm writing as a member of the Emacs development team.
> 
> In the recent change from ncurses-6.2 to ncurses-6.3, the following
> change was make in the linux console terminfo:
> 
> --- Infocmp-linux-6.2   2022-05-04 20:16:01.609557894 +0000
> +++ infocmp-linux-6.3   2022-05-04 20:09:02.046581014 +0000
> @@ -14,7 +14,7 @@
>         home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@,
>         ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\n,
>         initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x,
> -       kb2=\E[G, kbs=^?, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B,
> +       kb2=\E[G, kbs=^?, kcbt=\E^I, kcub1=\E[D, kcud1=\E[B,
>         kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\E[[A,
>         kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
>         kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
> 
> We now have kcbt=\E^I.

A bug report got me to verify this, and
shift-tab on the console appeared to send that sequence,
so I documented it in the terminal description.

Tracing changes to default keyboard configuration in Linux isn't
as "simple" as control-sequences, but see below (it's "kbd").

I don't see any that send \E[Z.  Having the terminal description
list a key definition that no one uses isn't very useful.
(I'll allow for some keyboard differences -- who has a "clear" key? --
but shift-tab has been used for a long time).

Just to check:
	Debian, Fedora, Mageia, OpenSUSE do this (send \E^I)
	Arch, Slackware don't do this (I get just ^I)

I have a few others that I could check, but (CentOS and Scientific Linux)
those are either obsolete or derived from the ones that I listed.

I'm aware that there are (down in the 1% range) still other Linux-based
systems, but generally speaking few/none of those have contributed
in this area, so I don't have a machine to verify bug reports.

fwiw, I noticed some comment in the usual source of misinformation
recently stating that \E[Z originated with Linux in 1995.
That was incorrect (the terminal database shows this for several
AT&T entries and an Ann Arbor Ambassador entry - roughly ten
years earlier).
 
> In Emacs on the Linux console, our use of terminfo now has the effect of
> replacing the M-tab keysequence with backtab.  This make several
> important key-bindings unusable.  (The backtab binding is also used, but
> is perhaps a little less important.)

Perhaps that original kcbt was changed to allow the \E^I to work
with Emacs.  If that's the case, then it should be something that
I can document in the terminal description.

All that I have so far is the commit message, which gives no useful
information regarding the intent of the change:

	commit 0baa7f071e79bb700b62b1f8507630387cbc4bbb
	Author: Alexey Gladkov <legion@altlinux.org>
	Date:   Tue May 8 22:55:07 2007 +0400

	    Apply patchkbd-1.12-Meta-Tab.diff from SUSE
	    
	    Convert Shift Tab to Meta_Tab
	    
	    Signed-off-by: Alexey Gladkov <legion@altlinux.org>

and this equally non-informative mailing list thread:

https://lists.opensuse.org/archives/list/commit@lists.opensuse.org/message/P3DQHCZB7IWQ7F6VZD3LGXHVOIN6OFE6/

(which for example doesn't mention Emacs).

> Also, this would seem to be a difficult problem for a normal user to
> diagnose, and difficult also to fix.
> 
> May I ask why this change was made to the linux terminal?  Is there any
> possibiliy it might be reverted?

It was a bug report:

# 2021-09-04
#	+ modify linux3.0 entry to reflect default mapping of shift-tab by
#	  kbd 1.14 (report by Jan Engelhardt) -TD
 
> Is there perhaps some strategy we could use in Emacs (C code) which would
> work around this problem with using ugly ad-hoc code?

I suppose you could tell Emacs to ignore kcbt (termcap kB) for Linux.

non-Emacs users probably would like to use the key.

-- 
Thomas E. Dickey <dickey@invisible-island.net>
https://invisible-island.net
ftp://ftp.invisible-island.net

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Emacs difficulties in linux console with ncurses-6.3 caused by kcbt=\E^I.
  2022-05-06  0:01 ` Thomas Dickey
@ 2022-05-06 11:26   ` Stefan Monnier
  2022-05-06 18:49   ` Alan Mackenzie
  2022-05-08 12:09   ` Alan Mackenzie
  2 siblings, 0 replies; 14+ messages in thread
From: Stefan Monnier @ 2022-05-06 11:26 UTC (permalink / raw)
  To: Thomas Dickey; +Cc: Alan Mackenzie, bug-ncurses, emacs-devel

> A bug report got me to verify this, and
> shift-tab on the console appeared to send that sequence,
> so I documented it in the terminal description.

The problem is that both Alt-TAB and Shift-TAB send that same byte
sequence, so claiming that ESC TAB is `backtab` is not really correct.
It may be `backtab` but it may be Meta-TAB as well.

> 	commit 0baa7f071e79bb700b62b1f8507630387cbc4bbb
> 	Author: Alexey Gladkov <legion@altlinux.org>
> 	Date:   Tue May 8 22:55:07 2007 +0400
>
> 	    Apply patchkbd-1.12-Meta-Tab.diff from SUSE
> 	    
> 	    Convert Shift Tab to Meta_Tab
> 	    
> 	    Signed-off-by: Alexey Gladkov <legion@altlinux.org>

Interesting.  So it looks like the intent of the change was to make
Shift-TAB behave as another Meta-TAB, whereas with the ncurses change
the end result is that Shift-TAB was changed to `backtab` (rather than
Meta-TAB) and Meta-TAB was made "impossible" to input.


        Stefan




^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Emacs difficulties in linux console with ncurses-6.3 caused by kcbt=\E^I.
  2022-05-06  0:01 ` Thomas Dickey
  2022-05-06 11:26   ` Stefan Monnier
@ 2022-05-06 18:49   ` Alan Mackenzie
  2022-05-06 19:14     ` Eli Zaretskii
  2022-05-08 23:37     ` Richard Stallman
  2022-05-08 12:09   ` Alan Mackenzie
  2 siblings, 2 replies; 14+ messages in thread
From: Alan Mackenzie @ 2022-05-06 18:49 UTC (permalink / raw)
  To: Thomas Dickey; +Cc: bug-ncurses, emacs-devel

Hello, Thomas,

thanks for the rapid reply.

On Thu, May 05, 2022 at 20:01:02 -0400, Thomas Dickey wrote:
> On Thu, May 05, 2022 at 06:18:00PM +0000, Alan Mackenzie wrote:
> > Hello, ncurses!

> > I'm writing as a member of the Emacs development team.

> > In the recent change from ncurses-6.2 to ncurses-6.3, the following
> > change was make in the linux console terminfo:

> > --- Infocmp-linux-6.2   2022-05-04 20:16:01.609557894 +0000
> > +++ infocmp-linux-6.3   2022-05-04 20:09:02.046581014 +0000
> > @@ -14,7 +14,7 @@
> >         home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@,
> >         ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\n,
> >         initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x,
> > -       kb2=\E[G, kbs=^?, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B,
> > +       kb2=\E[G, kbs=^?, kcbt=\E^I, kcub1=\E[D, kcud1=\E[B,
> >         kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\E[[A,
> >         kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
> >         kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,

> > We now have kcbt=\E^I.

> A bug report got me to verify this, and
> shift-tab on the console appeared to send that sequence,
> so I documented it in the terminal description.

There are many different keyboard layouts used on the linux console.  I
can't say at the moment how many of these use ESC-TAB on the
<shift>-<tab> key combination, how many on <alt>-<tab>, and indeed, how
many on both.  There are around 233 maps in /usr/share/keymaps on my system.

> Tracing changes to default keyboard configuration in Linux isn't
> as "simple" as control-sequences, but see below (it's "kbd").

> I don't see any that send \E[Z.  Having the terminal description
> list a key definition that no one uses isn't very useful.

No, but it's harmless.  Why does the linux console have an entry for kcbt
at all?

> (I'll allow for some keyboard differences -- who has a "clear" key? --
> but shift-tab has been used for a long time).

The point is <shift>-<tab> has stolen the key code for <alt>-<tab>.

> Just to check:
> 	Debian, Fedora, Mageia, OpenSUSE do this (send \E^I)
> 	Arch, Slackware don't do this (I get just ^I)

> I have a few others that I could check, but (CentOS and Scientific Linux)
> those are either obsolete or derived from the ones that I listed.

There will be people (like me) who set up their own keyboard map files,
and these likely have different codes for <tab> together with all the
modifier keys.

It is highly likely that typeing <esc> produces the code 0x19, and typing
<tab> produces 0x09.  It is not clear that the user will necessarily want
the two-key combination to be transated into <backtab>.

Might it be that terminfo has two different categories of information -
that intrinsic to the terminal (like there being 8 colours), and variable
information determined by the keyboard layout?

> I'm aware that there are (down in the 1% range) still other Linux-based
> systems, but generally speaking few/none of those have contributed
> in this area, so I don't have a machine to verify bug reports.

> fwiw, I noticed some comment in the usual source of misinformation
> recently stating that \E[Z originated with Linux in 1995.
> That was incorrect (the terminal database shows this for several
> AT&T entries and an Ann Arbor Ambassador entry - roughly ten
> years earlier).
 
> > In Emacs on the Linux console, our use of terminfo now has the effect of
> > replacing the M-tab keysequence with backtab.  This make several
> > important key-bindings unusable.  (The backtab binding is also used, but
> > is perhaps a little less important.)

> Perhaps that original kcbt was changed to allow the \E^I to work
> with Emacs.  If that's the case, then it should be something that
> I can document in the terminal description.

In Emacs typing <esc> followed by an "ascii character" must produce the
Meta-Char.

What I don't see at the moment is why there is a kcbt capability at all.
Is there an application which depends on it, and would not work properly
without kcbt=\E^I?

> All that I have so far is the commit message, which gives no useful
> information regarding the intent of the change:

> 	commit 0baa7f071e79bb700b62b1f8507630387cbc4bbb
> 	Author: Alexey Gladkov <legion@altlinux.org>
> 	Date:   Tue May 8 22:55:07 2007 +0400

> 	    Apply patchkbd-1.12-Meta-Tab.diff from SUSE
	    
> 	    Convert Shift Tab to Meta_Tab
	    
> 	    Signed-off-by: Alexey Gladkov <legion@altlinux.org>

> and this equally non-informative mailing list thread:

> https://lists.opensuse.org/archives/list/commit@lists.opensuse.org/message/P3DQHCZB7IWQ7F6VZD3LGXHVOIN6OFE6/

> (which for example doesn't mention Emacs).

As you say, it merely records that there has been a change, not why.

> > Also, this would seem to be a difficult problem for a normal user to
> > diagnose, and difficult also to fix.

> > May I ask why this change was made to the linux terminal?  Is there any
> > possibiliy it might be reverted?

> It was a bug report:

> # 2021-09-04
> #	+ modify linux3.0 entry to reflect default mapping of shift-tab by
> #	  kbd 1.14 (report by Jan Engelhardt) -TD
 
> > Is there perhaps some strategy we could use in Emacs (C code) which would
> > work around this problem with using ugly ad-hoc code?

> I suppose you could tell Emacs to ignore kcbt (termcap kB) for Linux.

Sorry, I mistyped there.  I meant to write "withOUT using ugly ... code".
Eli Zaretskii, the maintainer of Emacs, is against putting in special
handling for the linux console's kcbt.

For example, is there any facility to modify a terminfo entry for a
particular application, or something like that?

> non-Emacs users probably would like to use the key.

> -- 
> Thomas E. Dickey <dickey@invisible-island.net>
> https://invisible-island.net
> ftp://ftp.invisible-island.net

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Emacs difficulties in linux console with ncurses-6.3 caused by kcbt=\E^I.
  2022-05-06 18:49   ` Alan Mackenzie
@ 2022-05-06 19:14     ` Eli Zaretskii
  2022-05-07 10:41       ` Alan Mackenzie
  2022-05-08 23:37     ` Richard Stallman
  1 sibling, 1 reply; 14+ messages in thread
From: Eli Zaretskii @ 2022-05-06 19:14 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: dickey, bug-ncurses, emacs-devel

> Date: Fri, 6 May 2022 18:49:39 +0000
> Cc: bug-ncurses@gnu.org, emacs-devel@gnu.org
> From: Alan Mackenzie <acm@muc.de>
> 
> > > Is there perhaps some strategy we could use in Emacs (C code) which would
> > > work around this problem with using ugly ad-hoc code?
> 
> > I suppose you could tell Emacs to ignore kcbt (termcap kB) for Linux.
> 
> Sorry, I mistyped there.  I meant to write "withOUT using ugly ... code".
> Eli Zaretskii, the maintainer of Emacs, is against putting in special
> handling for the linux console's kcbt.

I'm not against that, I'm against doing that in term.c for all the
text-mode terminals.  You could, for example, modify input-decode-map
in lisp/term/linux.el, and that would be OK with me, if there's no
better solution for this.  Doing that will cause users of Emacs on the
Linux console to lose Backtab and gain M-TAB instead.  Personally, I'm
not sure which one is more important, but then I don't use the Linux
console.



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Emacs difficulties in linux console with ncurses-6.3 caused by kcbt=\E^I.
  2022-05-06 19:14     ` Eli Zaretskii
@ 2022-05-07 10:41       ` Alan Mackenzie
  2022-05-07 10:45         ` Eli Zaretskii
  0 siblings, 1 reply; 14+ messages in thread
From: Alan Mackenzie @ 2022-05-07 10:41 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: dickey, bug-ncurses, emacs-devel

Hello, Eli.

On Fri, May 06, 2022 at 22:14:04 +0300, Eli Zaretskii wrote:
> > Date: Fri, 6 May 2022 18:49:39 +0000
> > Cc: bug-ncurses@gnu.org, emacs-devel@gnu.org
> > From: Alan Mackenzie <acm@muc.de>

> > > > Is there perhaps some strategy we could use in Emacs (C code) which would
> > > > work around this problem with using ugly ad-hoc code?

> > > I suppose you could tell Emacs to ignore kcbt (termcap kB) for Linux.

> > Sorry, I mistyped there.  I meant to write "withOUT using ugly ... code".
> > Eli Zaretskii, the maintainer of Emacs, is against putting in special
> > handling for the linux console's kcbt.

> I'm not against that, I'm against doing that in term.c for all the
> text-mode terminals.

I misunderstood you, there, sorry.  I'd misunderstood the code, and I
thought (without thinking) that the translation functionality for
terminfo settings would be buried deep in the C code, somewhere.

> You could, for example, modify input-decode-map in lisp/term/linux.el,
> and that would be OK with me, if there's no better solution for this.

That's the bit I missed - that the pertinent translation into 'backtab
is done by the input-decode-map.  So, as you say, all that is needed is
to remove the <esc><tab> binding from that keymap.  I'll take back what
I said about the problem being difficult to fix.

Maybe we can write an entry in PROBLEMS and leave it to the user to fix
in her .emacs.  Or maybe we can put code in lisp/term/linux.el
ourselves.

> Doing that will cause users of Emacs on the Linux console to lose
> Backtab and gain M-TAB instead.  Personally, I'm not sure which one is
> more important, but then I don't use the Linux console.

I don't know how typical I am of Linux console users, but I have my
keymap set up to send a different code for <shift><tab> - namely
"\033[4}\011".  This is according to a scheme developed by Kalle
Niemitalo over twenty years ago, which enables one to add bindings for
any key with any modifier combination.  There are matching bindings in
input-decode-map to interpret these prefixes.

What was so painful was that typing <esc> and <tab> separately failed to
combine into M-tab, and I couldn't see a way of getting around that.

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Emacs difficulties in linux console with ncurses-6.3 caused by kcbt=\E^I.
  2022-05-07 10:41       ` Alan Mackenzie
@ 2022-05-07 10:45         ` Eli Zaretskii
  2022-05-07 14:35           ` Alan Mackenzie
  0 siblings, 1 reply; 14+ messages in thread
From: Eli Zaretskii @ 2022-05-07 10:45 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: dickey, bug-ncurses, emacs-devel

> Date: Sat, 7 May 2022 10:41:46 +0000
> Cc: dickey@his.com, bug-ncurses@gnu.org, emacs-devel@gnu.org
> From: Alan Mackenzie <acm@muc.de>
> 
> > I'm not against that, I'm against doing that in term.c for all the
> > text-mode terminals.
> 
> I misunderstood you, there, sorry.  I'd misunderstood the code, and I
> thought (without thinking) that the translation functionality for
> terminfo settings would be buried deep in the C code, somewhere.

Some of it is, actually.  But users can countermand at least some of
that code in their customizations.

> > You could, for example, modify input-decode-map in lisp/term/linux.el,
> > and that would be OK with me, if there's no better solution for this.
> 
> That's the bit I missed - that the pertinent translation into 'backtab
> is done by the input-decode-map.  So, as you say, all that is needed is
> to remove the <esc><tab> binding from that keymap.  I'll take back what
> I said about the problem being difficult to fix.
> 
> Maybe we can write an entry in PROBLEMS and leave it to the user to fix
> in her .emacs.  Or maybe we can put code in lisp/term/linux.el
> ourselves.

I'm okay with both alternatives, since I have no opinion on what is
more important to users of Emacs on the Linux console.

> I don't know how typical I am of Linux console users, but I have my
> keymap set up to send a different code for <shift><tab> - namely
> "\033[4}\011".

Perhaps that PROBLEMS entry could suggest that as well, so that users
could have the cake and eat it, too.

Thanks.



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Emacs difficulties in linux console with ncurses-6.3 caused by kcbt=\E^I.
  2022-05-07 10:45         ` Eli Zaretskii
@ 2022-05-07 14:35           ` Alan Mackenzie
  2022-05-07 15:03             ` Eli Zaretskii
  0 siblings, 1 reply; 14+ messages in thread
From: Alan Mackenzie @ 2022-05-07 14:35 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: dickey, bug-ncurses, emacs-devel

Hello, Eli.

On Sat, May 07, 2022 at 13:45:44 +0300, Eli Zaretskii wrote:
> > Date: Sat, 7 May 2022 10:41:46 +0000
> > Cc: dickey@his.com, bug-ncurses@gnu.org, emacs-devel@gnu.org
> > From: Alan Mackenzie <acm@muc.de>

> > > I'm not against that, I'm against doing that in term.c for all the
> > > text-mode terminals.

> > I misunderstood you, there, sorry.  I'd misunderstood the code, and I
> > thought (without thinking) that the translation functionality for
> > terminfo settings would be buried deep in the C code, somewhere.

> Some of it is, actually.  But users can countermand at least some of
> that code in their customizations.

Which is most helpful, here.

> > > You could, for example, modify input-decode-map in lisp/term/linux.el,
> > > and that would be OK with me, if there's no better solution for this.

> > That's the bit I missed - that the pertinent translation into 'backtab
> > is done by the input-decode-map.  So, as you say, all that is needed is
> > to remove the <esc><tab> binding from that keymap.  I'll take back what
> > I said about the problem being difficult to fix.

> > Maybe we can write an entry in PROBLEMS and leave it to the user to fix
> > in her .emacs.  Or maybe we can put code in lisp/term/linux.el
> > ourselves.

> I'm okay with both alternatives, since I have no opinion on what is
> more important to users of Emacs on the Linux console.

Having thought about it, I think putting

    (define-key input-decode-map "\e\t" nil)

into lisp/term/linux.el would be the best thing.  It will restore Emacs
on the Linux console to what it was before the recent ncurses release.

> > I don't know how typical I am of Linux console users, but I have my
> > keymap set up to send a different code for <shift><tab> - namely
> > "\033[4}\011".

> Perhaps that PROBLEMS entry could suggest that as well, so that users
> could have the cake and eat it, too.

Here's a first stab at the PROBLEMS entry, under * Runtime problems on
character terminals>:


** The shift tab key combination works as meta tab on a Linux console.

This happens because on your keyboard layout, S-Tab produces the same
keycodes as typing Esc Tab individually.  The best way to solve this
is to modify your keyboard layout to produce different codes, and tell
Emacs what these new codes mean.

The current keyboard layout will probably be a .map.gz file somewhere
under /usr/share/keymaps.  Identify this file, possibly from a system
initialization file such as /etc/conf.d/keymaps.  Run gunzip on it to
decompress it, and amend the entries for keycode 15 to look something
like this:

keycode  15 = Tab
        alt     keycode  15 = Meta_Tab
        shift keycode 15 = F219
string F219 = "\033[4}\011"      # Shift+<tab>

After possibly saving this file under a different name, compress it
again using gzip.  Amend /etc/conf.d/keyamps, etc., if needed.
Further details can be found in the man page for loadkeys.

Then add the following line near the start of your site-start.el or
..emacs or init.el file:

(define-key input-decode-map "\e[4}\t" 'backtab)


> Thanks.

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Emacs difficulties in linux console with ncurses-6.3 caused by kcbt=\E^I.
  2022-05-07 14:35           ` Alan Mackenzie
@ 2022-05-07 15:03             ` Eli Zaretskii
  2022-05-07 17:37               ` Alan Mackenzie
  0 siblings, 1 reply; 14+ messages in thread
From: Eli Zaretskii @ 2022-05-07 15:03 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: dickey, bug-ncurses, emacs-devel

> Date: Sat, 7 May 2022 14:35:06 +0000
> Cc: dickey@his.com, bug-ncurses@gnu.org, emacs-devel@gnu.org
> From: Alan Mackenzie <acm@muc.de>
> 
> > > Maybe we can write an entry in PROBLEMS and leave it to the user to fix
> > > in her .emacs.  Or maybe we can put code in lisp/term/linux.el
> > > ourselves.
> 
> > I'm okay with both alternatives, since I have no opinion on what is
> > more important to users of Emacs on the Linux console.
> 
> Having thought about it, I think putting
> 
>     (define-key input-decode-map "\e\t" nil)
> 
> into lisp/term/linux.el would be the best thing.  It will restore Emacs
> on the Linux console to what it was before the recent ncurses release.

Fine with me.

> > > I don't know how typical I am of Linux console users, but I have my
> > > keymap set up to send a different code for <shift><tab> - namely
> > > "\033[4}\011".
> 
> > Perhaps that PROBLEMS entry could suggest that as well, so that users
> > could have the cake and eat it, too.
> 
> Here's a first stab at the PROBLEMS entry, under * Runtime problems on
> character terminals>:

Also fine, thanks.  But please capitalize "TAB" and "ESC" in the text,
to make them consistent with our notation elsewhere.



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Emacs difficulties in linux console with ncurses-6.3 caused by kcbt=\E^I.
  2022-05-07 15:03             ` Eli Zaretskii
@ 2022-05-07 17:37               ` Alan Mackenzie
  2022-05-07 17:55                 ` Eli Zaretskii
  0 siblings, 1 reply; 14+ messages in thread
From: Alan Mackenzie @ 2022-05-07 17:37 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: dickey, bug-ncurses, emacs-devel

Hello, Eli.

On Sat, May 07, 2022 at 18:03:45 +0300, Eli Zaretskii wrote:
> > Date: Sat, 7 May 2022 14:35:06 +0000
> > Cc: dickey@his.com, bug-ncurses@gnu.org, emacs-devel@gnu.org
> > From: Alan Mackenzie <acm@muc.de>

> > > > Maybe we can write an entry in PROBLEMS and leave it to the user to fix
> > > > in her .emacs.  Or maybe we can put code in lisp/term/linux.el
> > > > ourselves.

> > > I'm okay with both alternatives, since I have no opinion on what is
> > > more important to users of Emacs on the Linux console.

> > Having thought about it, I think putting

> >     (define-key input-decode-map "\e\t" nil)

> > into lisp/term/linux.el would be the best thing.  It will restore Emacs
> > on the Linux console to what it was before the recent ncurses release.

> Fine with me.

OK, DONE, it works.  :-)

> > > > I don't know how typical I am of Linux console users, but I have my
> > > > keymap set up to send a different code for <shift><tab> - namely
> > > > "\033[4}\011".

> > > Perhaps that PROBLEMS entry could suggest that as well, so that users
> > > could have the cake and eat it, too.

> > Here's a first stab at the PROBLEMS entry, under * Runtime problems on
> > character terminals>:

> Also fine, thanks.  But please capitalize "TAB" and "ESC" in the text,
> to make them consistent with our notation elsewhere.

One other little thing: I think this problem counts as "major" or "safe",
so the fix should go onto the release branch, shouldn't it, despite the
upcoming release being nn.2?

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Emacs difficulties in linux console with ncurses-6.3 caused by kcbt=\E^I.
  2022-05-07 17:37               ` Alan Mackenzie
@ 2022-05-07 17:55                 ` Eli Zaretskii
  0 siblings, 0 replies; 14+ messages in thread
From: Eli Zaretskii @ 2022-05-07 17:55 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: dickey, bug-ncurses, emacs-devel

> Date: Sat, 7 May 2022 17:37:10 +0000
> Cc: dickey@his.com, bug-ncurses@gnu.org, emacs-devel@gnu.org
> From: Alan Mackenzie <acm@muc.de>
> 
> One other little thing: I think this problem counts as "major" or "safe",
> so the fix should go onto the release branch, shouldn't it, despite the
> upcoming release being nn.2?

Probably.



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Emacs difficulties in linux console with ncurses-6.3 caused by kcbt=\E^I.
  2022-05-06  0:01 ` Thomas Dickey
  2022-05-06 11:26   ` Stefan Monnier
  2022-05-06 18:49   ` Alan Mackenzie
@ 2022-05-08 12:09   ` Alan Mackenzie
  2022-05-08 16:05     ` Thomas Dickey
  2 siblings, 1 reply; 14+ messages in thread
From: Alan Mackenzie @ 2022-05-08 12:09 UTC (permalink / raw)
  To: Thomas Dickey; +Cc: bug-ncurses, emacs-devel

Hello again, Thomas.

On Thu, May 05, 2022 at 20:01:02 -0400, Thomas Dickey wrote:
> On Thu, May 05, 2022 at 06:18:00PM +0000, Alan Mackenzie wrote:
> > Hello, ncurses!

> > I'm writing as a member of the Emacs development team.

> > In the recent change from ncurses-6.2 to ncurses-6.3, the following
> > change was make in the linux console terminfo:

> > --- Infocmp-linux-6.2   2022-05-04 20:16:01.609557894 +0000
> > +++ infocmp-linux-6.3   2022-05-04 20:09:02.046581014 +0000
> > @@ -14,7 +14,7 @@
> >         home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@,
> >         ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\n,
> >         initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x,
> > -       kb2=\E[G, kbs=^?, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B,
> > +       kb2=\E[G, kbs=^?, kcbt=\E^I, kcub1=\E[D, kcud1=\E[B,
> >         kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\E[[A,
> >         kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
> >         kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,

> > We now have kcbt=\E^I.

> A bug report got me to verify this, and
> shift-tab on the console appeared to send that sequence,
> so I documented it in the terminal description.

> Tracing changes to default keyboard configuration in Linux isn't
> as "simple" as control-sequences, but see below (it's "kbd").

> I don't see any that send \E[Z.  Having the terminal description
> list a key definition that no one uses isn't very useful.
> (I'll allow for some keyboard differences -- who has a "clear" key? --
> but shift-tab has been used for a long time).

> Just to check:
> 	Debian, Fedora, Mageia, OpenSUSE do this (send \E^I)
> 	Arch, Slackware don't do this (I get just ^I)

> I have a few others that I could check, but (CentOS and Scientific Linux)
> those are either obsolete or derived from the ones that I listed.

Just to say that fixing Emacs to work with kcbt=\E^I wasn't actually very
difficult at all, and I've committed a patch to the Emacs repository with
this fix.

I think it's a shame that there has been this confusion between
<shift>TAB and <alt>TAB over the decades.  This has made things difficult
for applications like Emacs, which use both of these.

So my position now is that I no longer have a view on what the best
setting for kcbt in the linux console terminfo entry is.

[ .... ]

> I suppose you could tell Emacs to ignore kcbt (termcap kB) for Linux.

This is in effect what has been done.

> non-Emacs users probably would like to use the key.

Yes.  ;-(

Thank you very much for your time, and the additional background
information, over the last few days.

> -- 
> Thomas E. Dickey <dickey@invisible-island.net>
> https://invisible-island.net
> ftp://ftp.invisible-island.net

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Emacs difficulties in linux console with ncurses-6.3 caused by kcbt=\E^I.
  2022-05-08 12:09   ` Alan Mackenzie
@ 2022-05-08 16:05     ` Thomas Dickey
  0 siblings, 0 replies; 14+ messages in thread
From: Thomas Dickey @ 2022-05-08 16:05 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Thomas Dickey, bug-ncurses, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 3118 bytes --]

On Sun, May 08, 2022 at 12:09:53PM +0000, Alan Mackenzie wrote:
> Hello again, Thomas.
> 
> On Thu, May 05, 2022 at 20:01:02 -0400, Thomas Dickey wrote:
> > On Thu, May 05, 2022 at 06:18:00PM +0000, Alan Mackenzie wrote:
> > > Hello, ncurses!
> 
> > > I'm writing as a member of the Emacs development team.
> 
> > > In the recent change from ncurses-6.2 to ncurses-6.3, the following
> > > change was make in the linux console terminfo:
> 
> > > --- Infocmp-linux-6.2   2022-05-04 20:16:01.609557894 +0000
> > > +++ infocmp-linux-6.3   2022-05-04 20:09:02.046581014 +0000
> > > @@ -14,7 +14,7 @@
> > >         home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@,
> > >         ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\n,
> > >         initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x,
> > > -       kb2=\E[G, kbs=^?, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B,
> > > +       kb2=\E[G, kbs=^?, kcbt=\E^I, kcub1=\E[D, kcud1=\E[B,
> > >         kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\E[[A,
> > >         kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
> > >         kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
> 
> > > We now have kcbt=\E^I.
> 
> > A bug report got me to verify this, and
> > shift-tab on the console appeared to send that sequence,
> > so I documented it in the terminal description.
> 
> > Tracing changes to default keyboard configuration in Linux isn't
> > as "simple" as control-sequences, but see below (it's "kbd").
> 
> > I don't see any that send \E[Z.  Having the terminal description
> > list a key definition that no one uses isn't very useful.
> > (I'll allow for some keyboard differences -- who has a "clear" key? --
> > but shift-tab has been used for a long time).
> 
> > Just to check:
> > 	Debian, Fedora, Mageia, OpenSUSE do this (send \E^I)
> > 	Arch, Slackware don't do this (I get just ^I)
> 
> > I have a few others that I could check, but (CentOS and Scientific Linux)
> > those are either obsolete or derived from the ones that I listed.
> 
> Just to say that fixing Emacs to work with kcbt=\E^I wasn't actually very
> difficult at all, and I've committed a patch to the Emacs repository with
> this fix.
> 
> I think it's a shame that there has been this confusion between
> <shift>TAB and <alt>TAB over the decades.  This has made things difficult
> for applications like Emacs, which use both of these.
> 
> So my position now is that I no longer have a view on what the best
> setting for kcbt in the linux console terminfo entry is.
> 
> [ .... ]
> 
> > I suppose you could tell Emacs to ignore kcbt (termcap kB) for Linux.
> 
> This is in effect what has been done.

sounds good - no better solution came to mind
 
> > non-Emacs users probably would like to use the key.
> 
> Yes.  ;-(
> 
> Thank you very much for your time, and the additional background
> information, over the last few days.

no problem (report bugs)

-- 
Thomas E. Dickey <dickey@invisible-island.net>
https://invisible-island.net
ftp://ftp.invisible-island.net

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Emacs difficulties in linux console with ncurses-6.3 caused by kcbt=\E^I.
  2022-05-06 18:49   ` Alan Mackenzie
  2022-05-06 19:14     ` Eli Zaretskii
@ 2022-05-08 23:37     ` Richard Stallman
  1 sibling, 0 replies; 14+ messages in thread
From: Richard Stallman @ 2022-05-08 23:37 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: dickey, bug-ncurses, emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

I am getting the feeling that Emacs should do nothing special about M-TAB,
and that we should talk with maintainers of free distros about the change
made to the terminfo database.  It looks like we don't know enough
about the pros and cons of the terminfo change to be able to judge it.

Maybe we should talk with the maintainers of free distros about that.

Is it possible for Emacs to notice that the terminfo database includes
that change, and if so, display a notice whenever the Backtab key arrives
as input?  This could tell users (1) how to revert that terminfo change,
(2) a guide to raising the issue with distro maintainers.


-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2022-05-08 23:37 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-05 18:18 Emacs difficulties in linux console with ncurses-6.3 caused by kcbt=\E^I Alan Mackenzie
2022-05-06  0:01 ` Thomas Dickey
2022-05-06 11:26   ` Stefan Monnier
2022-05-06 18:49   ` Alan Mackenzie
2022-05-06 19:14     ` Eli Zaretskii
2022-05-07 10:41       ` Alan Mackenzie
2022-05-07 10:45         ` Eli Zaretskii
2022-05-07 14:35           ` Alan Mackenzie
2022-05-07 15:03             ` Eli Zaretskii
2022-05-07 17:37               ` Alan Mackenzie
2022-05-07 17:55                 ` Eli Zaretskii
2022-05-08 23:37     ` Richard Stallman
2022-05-08 12:09   ` Alan Mackenzie
2022-05-08 16:05     ` Thomas Dickey

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).