mirror of
https://github.com/rkd77/elinks.git
synced 2025-01-03 14:57:44 -05:00
terminal doc: More comments about itrm->in.queue and bug 777.
This commit is contained in:
parent
e9216413f2
commit
671cbb48e6
@ -44,7 +44,11 @@ struct itrm_in {
|
|||||||
/* Bytes that have been received from @std but not yet
|
/* Bytes that have been received from @std but not yet
|
||||||
* converted to events. queue.data is allocated for
|
* converted to events. queue.data is allocated for
|
||||||
* ITRM_IN_QUEUE_SIZE bytes and never resized. The itrm
|
* ITRM_IN_QUEUE_SIZE bytes and never resized. The itrm
|
||||||
* layer cannot parse control sequences longer than that. */
|
* layer cannot parse control sequences longer than that.
|
||||||
|
* Anything that modifies queue.len should also call
|
||||||
|
* unhandle_itrm_stdin() if the queue becomes full, or
|
||||||
|
* handle_itrm_stdin() if the queue stops being full.
|
||||||
|
* Those functions are internal to kbd.c. */
|
||||||
struct itrm_queue queue;
|
struct itrm_queue queue;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -835,6 +835,11 @@ set_kbd_event(struct term_event *ev, int key, int modifier)
|
|||||||
|
|
||||||
/* I feeeeeel the neeeed ... to rewrite this ... --pasky */
|
/* I feeeeeel the neeeed ... to rewrite this ... --pasky */
|
||||||
/* Just Do it ! --Zas */
|
/* Just Do it ! --Zas */
|
||||||
|
/* Parse one event from itrm->in.queue and append to itrm->out.queue.
|
||||||
|
* Return the number of bytes removed from itrm->in.queue; at least 0.
|
||||||
|
* If this function leaves the queue not full, it also reenables reading
|
||||||
|
* from itrm->in.std. (Because it does not add to the queue, it never
|
||||||
|
* need disable reading.) */
|
||||||
static int
|
static int
|
||||||
process_queue(struct itrm *itrm)
|
process_queue(struct itrm *itrm)
|
||||||
{
|
{
|
||||||
@ -863,6 +868,10 @@ process_queue(struct itrm *itrm)
|
|||||||
}
|
}
|
||||||
#endif /* DEBUG_ITRM_QUEUE */
|
#endif /* DEBUG_ITRM_QUEUE */
|
||||||
|
|
||||||
|
/* ELinks should also recognize U+009B CONTROL SEQUENCE INTRODUCER
|
||||||
|
* as meaning the same as ESC 0x5B, and U+008F SINGLE SHIFT THREE as
|
||||||
|
* meaning the same as ESC 0x4F, but those cannot yet be implemented
|
||||||
|
* because of bug 777: the UTF-8 decoder is run too late. */
|
||||||
if (itrm->in.queue.data[0] == ASCII_ESC) {
|
if (itrm->in.queue.data[0] == ASCII_ESC) {
|
||||||
if (itrm->in.queue.len < 2) goto ret;
|
if (itrm->in.queue.len < 2) goto ret;
|
||||||
if (itrm->in.queue.data[1] == '[' || itrm->in.queue.data[1] == 'O') {
|
if (itrm->in.queue.data[1] == '[' || itrm->in.queue.data[1] == 'O') {
|
||||||
@ -961,6 +970,10 @@ in_kbd(struct itrm *itrm)
|
|||||||
while (process_queue(itrm));
|
while (process_queue(itrm));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Enable reading from itrm->in.std. ELinks will read any available
|
||||||
|
* bytes from the tty into itrm->in.queue and then parse them.
|
||||||
|
* Reading should be enabled whenever itrm->in.queue is not full and
|
||||||
|
* itrm->blocked is 0. */
|
||||||
static void
|
static void
|
||||||
handle_itrm_stdin(struct itrm *itrm)
|
handle_itrm_stdin(struct itrm *itrm)
|
||||||
{
|
{
|
||||||
@ -968,6 +981,9 @@ handle_itrm_stdin(struct itrm *itrm)
|
|||||||
(select_handler_T) free_itrm, itrm);
|
(select_handler_T) free_itrm, itrm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Disable reading from itrm->in.std. Reading should be disabled
|
||||||
|
* whenever itrm->in.queue is full (there is no room for the data)
|
||||||
|
* or itrm->blocked is 1 (other processes may read the data). */
|
||||||
static void
|
static void
|
||||||
unhandle_itrm_stdin(struct itrm *itrm)
|
unhandle_itrm_stdin(struct itrm *itrm)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user