all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Paul Pogonyshev <pogonyshev@gmail.com>
To: Juri Linkov <juri@linkov.net>
Cc: 43830@debbugs.gnu.org
Subject: bug#43830: keyboard layout handling incompatible with rest of the OS
Date: Sun, 1 Nov 2020 17:51:00 +0100	[thread overview]
Message-ID: <CAG7Bpaq7PF8AmEwxHhec2J+uzj9GVq9NwHoU90aLWym9Fe3miw@mail.gmail.com> (raw)
In-Reply-To: <87blghbjpn.fsf@mail.linkov.net>

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

> Could you please give an example how you bind such key sequences as
> 'C-.' and 'C-ч й' in Emacs input modes?  How they do translation
> to physical keys without using xkb?

I don't and that's the whole point. I want that when _any_ keymap
defines `M-q', this keybinding can be activated by typing M-q or M-й,
because this is the same physical key. Automatically.

`reverse-im' achieves this but _only_ for keys that type letters in
the second layout. E.g. M-/ (which I often use) won't work in Russian
layout because that physical letter types '.' in this layout.

> > What about functions like `read-event'? It returns integers if I press
> > M-[letter] or C-[letter].
>
> read-event is also implemented in C.  But maybe I don't understand
> your question.

I mean, what about the cases where it is called from Elisp?  It is
implemented in C, but also is publicly available.

I have come up with two ideas:

1. `read-event' and its internal C implementation grow an optional
parameter that says whether to return character as if being typed (as
now) or for keybinding use (i.e. from physical keys).

2. Alternatively, if this cannot be determined in advance (i.e. before
calling `read-event' etc.), these functions could set variable named sth.
like `last-keybinding-keycode'. Then the caller would use either the
return value (as now) or, if it wants, the value of the variable instead.

Paul

On Sun, 1 Nov 2020 at 09:01, Juri Linkov <juri@linkov.net> wrote:

> >> Why would you need that?  If we decide to use XkbTranslateKeyCode, we
> >> could translate the keycode in C, according to some logic that took
> >> into account the modifiers and perhaps also some user options, and
> >> returned the resulting translated character.
> >
> > The point is that the character is not enough, you need to know both
> > the character and the physical key (you cannot reconstruct the key
> > from the character alone). E.g. suppose I type 'й' in Russian layout.
> > If it is a self-inserting command, character 'й' should be added to the
> > active buffer. But if I'm typing a multikey binding, it should be
> > interpreted as 'q' (it's the same physical key), so that e.g. 'C-ч й' is
> > translated to 'C-x q'.
>
> What is worse is that in a writable buffer, typing 'й' should insert
> this character untranslated, but in the same buffer when it's in
> read-only view mode, typing the same 'й' should translate it to 'q'
> and quit the buffer with the View-quit command.  When using reverse-im
> with local-function-key-map, the Help buffer says:
>
>   q (translated from й) runs the command View-quit.
>
> So the question is whether it's possible to do the same using
> XkbTranslateKeyCode?  The local-function-key-map is smart enough
> to not translate self-inserting keys.  Can code for XkbTranslateKeyCode
> use the same condition to detect self-inserting keys?
>

[-- Attachment #2: Type: text/html, Size: 3833 bytes --]

  parent reply	other threads:[~2020-11-01 16:51 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-06 15:34 bug#43830: keyboard layout handling incompatible with rest of the OS Paul Pogonyshev
2020-10-06 17:26 ` Eli Zaretskii
2020-10-06 17:48   ` Paul Pogonyshev
2020-10-06 18:00     ` Eli Zaretskii
2020-10-06 18:46 ` Juri Linkov
2020-10-06 18:59   ` Paul Pogonyshev
2020-10-06 20:34     ` Juri Linkov
2020-10-06 21:05       ` Paul Pogonyshev
2020-10-07  8:16         ` Juri Linkov
2020-10-07  8:51           ` Eli Zaretskii
2020-10-07 19:01             ` Juri Linkov
2020-10-08  8:50               ` Eli Zaretskii
2020-10-08 13:58                 ` Paul Pogonyshev
2020-10-28  0:43                   ` Paul Pogonyshev
2020-10-28 15:06                     ` Eli Zaretskii
2020-10-28 16:16                       ` Paul Pogonyshev
2020-10-28 16:31                         ` Eli Zaretskii
2020-11-01  0:19                           ` Paul Pogonyshev
2020-11-01 15:09                             ` Eli Zaretskii
2020-11-01  7:53                         ` Juri Linkov
2020-11-01 15:11                           ` Eli Zaretskii
2020-11-01 18:27                             ` Juri Linkov
2020-11-01 18:49                               ` Eli Zaretskii
2020-11-01 16:51                           ` Paul Pogonyshev [this message]
2020-11-01 17:24                             ` Eli Zaretskii
2020-11-01 18:56                               ` Paul Pogonyshev
2020-11-01 19:32                                 ` Eli Zaretskii
2020-11-01 20:06                                   ` Paul Pogonyshev
2020-11-02  4:41                                   ` Arthur Miller
2020-11-02 15:38                                     ` Eli Zaretskii
2020-11-01  7:48                   ` Juri Linkov
2020-10-07 10:37           ` Paul Pogonyshev
2020-10-07 19:04             ` Juri Linkov
2020-10-07 20:08               ` Paul Pogonyshev
2020-10-07 20:25                 ` Juri Linkov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAG7Bpaq7PF8AmEwxHhec2J+uzj9GVq9NwHoU90aLWym9Fe3miw@mail.gmail.com \
    --to=pogonyshev@gmail.com \
    --cc=43830@debbugs.gnu.org \
    --cc=juri@linkov.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.