An alternate interface is available to plain readline(). Some
applications need to interleave keyboard I/O with file, device, or
window system I/O, typically by using a main loop to select()
on various file descriptors. To accomodate this need, readline can
also be invoked as a `callback' function from an event loop. There
are functions available to make this easy.
rl_callback_read_char(), which will read the next
character from the current input source. If that character completes the
line, rl_callback_read_char will invoke the lhandler
function saved by rl_callback_handler_install to process the
line. EOF is indicated by calling lhandler with a
NULL line.
Here is a function which changes lowercase characters to their uppercase
equivalents, and uppercase characters to lowercase. If
this function was bound to `M-c', then typing `M-c' would
change the case of the character under point. Typing `M-1 0 M-c'
would change the case of the following 10 characters, leaving the cursor on
the last character changed.
/* Invert the case of the COUNT following characters. */
int
invert_case_line (count, key)
int count, key;
{
register int start, end, i;
start = rl_point;
if (rl_point >= rl_end)
return (0);
if (count < 0)
{
direction = -1;
count = -count;
}
else
direction = 1;
/* Find the end of the range to modify. */
end = start + (count * direction);
/* Force it to be within range. */
if (end > rl_end)
end = rl_end;
else if (end < 0)
end = 0;
if (start == end)
return (0);
if (start > end)
{
int temp = start;
start = end;
end = temp;
}
/* Tell readline that we are modifying the line, so it will save
the undo information. */
rl_modifying (start, end);
for (i = start; i != end; i++)
{
if (uppercase_p (rl_line_buffer[i]))
rl_line_buffer[i] = to_lower (rl_line_buffer[i]);
else if (lowercase_p (rl_line_buffer[i]))
rl_line_buffer[i] = to_upper (rl_line_buffer[i]);
}
/* Move point to on top of the last character changed. */
rl_point = (direction == 1) ? end - 1 : start;
return (0);
}
Packaging copyright © 1988-2000 OAR Corporation Context copyright by each document's author. See Free Software Foundation for information.