emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Best way to intercept terminal escape sequences?


From: Ryan Johnson
Subject: Re: Best way to intercept terminal escape sequences?
Date: Thu, 02 Sep 2010 14:33:36 +0200
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100802 Lightning/1.0b2 Thunderbird/3.1.2

 On 9/2/2010 12:53 PM, Stefan Monnier wrote:
As mentioned, read-event did not do obey keyboard-coding-system in
earlier Emacsen, so any affected package is more likely to be fixed than
broken by making a change that reverts to this previous behavior.
Handa, could you take a look at the feasibility of moving the
decode_keyboard_code to a later stage such that read-event still returns
raw bytes for ttys?

There is a tension here, because raw events in GUIs are already decoded,
whereas raw events in ttys are just bytes.  You "fixed it" by decoding
tty input in directly in tty_read_avail_input, so that read-event now
always returns decoded input, but that in turns means that read-event
doesn't return raw events any more.  The decoding is desirable for
read-key-sequence (and maybe also for read-char, tho I don't care much
about this case since read-key is generally a better replacement) but
not for read-event, since access to raw events is important for things
like xt-mouse.el.
By the way, I noticed while working on something else [1] that read-key cannot actually replace all uses of read-event because the latter supports timeouts while the former does not. Would it be possible to add a timeout to read-key as a third (optional) parameter? I don't know whether read-key-delay would provide workarounds to some timeout uses, but it seems brittle.

If you have enabled keyboard character set decoding using
`set-keyboard-coding-system', decoding is done after the translations
listed above.  See Terminal I/O Encoding.  However, in future Emacs
versions, character set decoding may be done at an earlier stage.
This doc is out of date, indeed.

It would be really nice to have, somewhere in the emacs docs, a diagram showing what processing happens to keyboard input, starting from raw bytes and UI events, and tracing them (or their translations) through coding systems, input methods, command loop, various keymaps, etc. and showing where in that process the different read-* functions intercept that data (and where the various unread-*-events reinsert things). A similar diagram for reading and writing files would probably also be useful.

This would not only make it easier to figure out how to interface new code with emacs, it would probably expose gaps in the API which make existing code unnecessarily complex and certain features impossible (mouse.el and xt-mouse.el suffer from both of those latter problems).

Unfortunately, even after spending so long on this problem I don't think I know enough to generate that diagram...

Ryan

[1] http://www.ece.cmu.edu/~ryanjohn/sticky-control.el




reply via email to

[Prev in Thread] Current Thread [Next in Thread]