mirror of
https://https.git.savannah.gnu.org/git/bash.git
synced 2026-07-14 15:40:51 +02:00
size_t changes for multibyte characters; fix for running debug trap in asynchronous pipeline; remove support for precomputed cache files for cross-compiling; more size_t and ssize_t changes to avoid overflow
This commit is contained in:
@@ -19,7 +19,7 @@ My example shows how, using the alternate interface, you can
|
||||
interactively change the prompt (which is very nice imo). Also, I
|
||||
point out that you must roll your own terminal setting when using the
|
||||
alternate interface because readline depreps (using your parlance) the
|
||||
terminal while in the user callback. I try to demostrate what I mean
|
||||
terminal while in the user callback. I try to demonstrate what I mean
|
||||
with an example. I've included the program below.
|
||||
|
||||
To compile, I just put the program in the examples directory and made
|
||||
@@ -72,7 +72,7 @@ Copyright (C) 1999 Jeff Solomon
|
||||
* alternate interface. The first is the ability to interactively change the
|
||||
* prompt, which can't be done using the regular interface since rl_prompt is
|
||||
* read-only.
|
||||
*
|
||||
*
|
||||
* The second feature really highlights a subtle point when using the alternate
|
||||
* interface. That is, readline will not alter the terminal when inside your
|
||||
* callback handler. So let's so, your callback executes a user command that
|
||||
|
||||
@@ -110,7 +110,7 @@ main (int argc, char **argv)
|
||||
int which;
|
||||
if ((sscanf (line + 6, "%d", &which)) == 1)
|
||||
{
|
||||
HIST_ENTRY *entry = remove_history (which);
|
||||
HIST_ENTRY *entry = remove_history (which - history_base);
|
||||
if (!entry)
|
||||
fprintf (stderr, "No such entry %d\n", which);
|
||||
else
|
||||
|
||||
@@ -94,16 +94,8 @@ invert_case_line (int count, int key)
|
||||
|
||||
start = rl_point;
|
||||
|
||||
if (count < 0)
|
||||
{
|
||||
direction = -1;
|
||||
count = -count;
|
||||
}
|
||||
else
|
||||
direction = 1;
|
||||
|
||||
/* Find the end of the range to modify. */
|
||||
end = start + (count * direction);
|
||||
end = start + count;
|
||||
|
||||
/* Force it to be within range. */
|
||||
if (end > rl_end)
|
||||
@@ -111,6 +103,14 @@ invert_case_line (int count, int key)
|
||||
else if (end < 0)
|
||||
end = -1;
|
||||
|
||||
if (start == end)
|
||||
return 0;
|
||||
|
||||
/* For positive arguments, put point after the last changed character. For
|
||||
negative arguments, put point before the last changed character. */
|
||||
rl_point = end;
|
||||
|
||||
/* Swap start and end if we are moving backwards */
|
||||
if (start > end)
|
||||
{
|
||||
int temp = start;
|
||||
@@ -118,14 +118,11 @@ invert_case_line (int count, int key)
|
||||
end = temp;
|
||||
}
|
||||
|
||||
if (start == end)
|
||||
return 0;
|
||||
|
||||
/* Tell readline that we are modifying the line, so save the undo
|
||||
information. */
|
||||
rl_modifying (start, end);
|
||||
|
||||
for (; start != end; start += direction)
|
||||
for (; start != end; start++)
|
||||
{
|
||||
if (_rl_uppercase_p (rl_line_buffer[start]))
|
||||
rl_line_buffer[start] = _rl_to_lower (rl_line_buffer[start]);
|
||||
@@ -133,7 +130,5 @@ invert_case_line (int count, int key)
|
||||
rl_line_buffer[start] = _rl_to_upper (rl_line_buffer[start]);
|
||||
}
|
||||
|
||||
/* Move point to on top of the last character changed. */
|
||||
rl_point = end - direction;
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user