[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
read and readline
From: |
Jack Pavlovsky |
Subject: |
read and readline |
Date: |
Fri, 26 Sep 2003 09:58:48 +0400 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030819 |
Hello
I've found a lack of very important feature in bash read.
Bash's read, with "-e" option, can use readline. But it lacks
one important (and IMAO, often necessary) feature: to provide
starting value for the argument to edit. E.g., I have this code:
some_variable="long and meaningful line"
read -e -p "edit some_variable: " some_variable
I want to have some option to have this read to start editing
from the current value of some_variable, not from scratch. The
readline library itself allows such things (a very small C program
is attached). Bash's read should use readline to it full extent
(readline is written mainly for bash, isn't it?), so this feature
should be implemented. I guess it'd be best to have it as an option
to read.
#include <stdlib.h>
#include <stdio.h>
#include <readline/readline.h>
char *my_rl_default;
int set_rl_default(void) {
rl_insert_text(my_rl_default);
return 0;
}
int main(int argc, char **argv)
{
char *str;
if (argc < 3) {
printf("Usage: %s prompt default\n", argv[0]);
printf("\nDisplay a prompt, edit a variable with the initial value
DEFAULT,\n");
printf("and output the result on stderr.\n");
exit(2);
}
/* klugey way to swap stdout and stderr places (to output all the
** interactive stuff to stderr) */
FILE *temp = stdout;
stdout = stderr;
stderr = temp;
rl_startup_hook = (Function*)set_rl_default;
my_rl_default = argv[2];
if (str = readline(argv[1])) {
fprintf(stderr, "%s\n", str);
exit(0);
}
else
exit(1);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- read and readline,
Jack Pavlovsky <=