GNU bug report logs -
#49253
27.2; Emacs non-responsive when pasting into terminal-mode
Previous Next
Reported by: Matt Bisson <bisson.m <at> gmail.com>
Date: Mon, 28 Jun 2021 15:23:02 UTC
Severity: normal
Found in version 27.2
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
I definitely want to give the feedback here that this was an
outstanding explanation of what's going on inside Emacs, and thanks
very much for taking the time to write it. I didn't even know of the
existence of some of these maps, and I now know not only that, but
their intended purpose. Again, thanks a lot for this!
On Mon, Dec 11, 2023 at 5:13 PM Jared Finder <jared <at> finder.org> wrote:
>
> On 2023-12-11 08:10, Matt Bisson wrote:
> > TL;DR: It works!
>
> Thank you for the testing!
>
> Eli, I think the fully correct definition for term--xterm-paste is the
> following, which has additional error checking:
>
> (defun term--xterm-paste (event)
> "Insert the text pasted in an XTerm bracketed paste operation."
> (interactive "e")
> (unless (eq (car-safe event) 'xterm-paste)
> (error "term--xterm-paste must be found to xterm-paste event"))
> (let ((str (nth 1 event)))
> (unless (stringp str)
> (error "term--xterm-paste provided event does not contain paste
> text"))
> (term-send-raw-string str)))
>
> >> I don't think this is the right approach.
> >
> > Totally! :) The patch was definitely not a serious suggestion of what
> > should be submitted, but just a demonstration that the interplay
> > between the two functions is causing the issue, and it can be solved
> > by touching only that. I haven't built up the knowledge of how these
> > events function like you have, and was hoping you'd teach me a bit in
> > response, and you did!
>
> No worries! I hope I didn't come across as judgemental here. :) If you
> want a bit more detail around the architecture here, read on (Eli,
> please correct if I get anything wrong):
>
> In Emacs, in addition to the local and global keymaps, there are also
> translation keymaps.
> (https://www.gnu.org/software/emacs/manual/html_node/elisp/Translation-Keymaps.html)
> The docs are accurate but a bit hard to understand without concrete
> examples. So let me provide an example for each of the translation
> keymaps. There are three of them:
>
> 1. input-decode-map. This exists to translate terminal escape sequences
> into the their proper events. That can be for keys (like the PF1 key
> mentioned in the docs) but it also an be for mouse clicks or the xterm
> paste operation.
>
> EXAMPLE:
> This bug! In this bug, input-decode-map is what translates the
> character sequence "ESC [ 2 0 0 ~ PASTED TEXT HERE ESC [ 2 0 1 ~" into
> a single <xterm-paste> event, (xterm-paste "PASTED TEXT HERE"). It does
> this by mapping "ESC [ 2 0 0 ~" to a function that reads until
> encountering the "ESC [ 2 0 1 ~" sequence and returns that new event.
>
> 2. (local-)function-key-map. This exists to rename keys to more
> preferred names that allow keybindings to be shared. The docs say "the
> remapping only applies if the original key sequence would otherwise not
> have any binding", this is to allow you to use the native keynames on
> your keyboard if you do want to distinguish.
>
> EXAMPLE:
> Many keyboards have a separate keypad number area. These keys get their
> own events, e.g. "<kp-0>" for the zero character on the keypad. Emacs
> uses function-key-map to translate "<kp-0>" into "0", so pressing the
> keypad 0 acts the same as the number row 0. If you wanted to map the
> keypad numbers to a different set of commands, you can still do so with
> the original "<kp-0>" key. If you do so, that also implicitly overrides
> this translation.
>
> 3. key-translation-map. I've never actually used this directly so I'm
> not entirely clear on its intent. The docs make it sound like it is
> intended for changing keyboard layouts. Which explains why I have never
> used it -- I generally use OSes that allow keyboard layout translating
> natively.
>
> EXAMPLE:
> Based on my guess above, key-translation-map would let me map between
> QWERTY and Dvorak inside Emacs. This would be nice if I was running
> directly in a Linux terminal and did not have permission to run "sudo
> loadkeys".
>
> As a final note, notice that all three of these examples involve
> changing a key into a different key. None of them are for binding
> commands. Commands being bound to a key always is the job of the local
> and global keymaps.
>
> I hope these examples help you understand the setup here!
>
> -- MJF
This bug report was last modified 1 year and 152 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.