Bạn chắc chắn có thể.
Bạn có thể xác định các tùy chọn cho các giá trị '\ n' '\ r' và với
rl_bind_key('\r', return_func);
return_func của bạn bây giờ có thể quyết định phải làm gì với những phím.
int return_func(int cnt, int key) { ... }
Nếu bạn làm điều này bên trong thiết bị đầu cuối UNIX, bạn sẽ cần tìm hiểu về mã đầu cuối ANSI nếu bạn muốn di chuyển con trỏ. Có một số starting reference trên wikipedia.
Dưới đây là một số mã mẫu sử dụng readline để đọc nhiều dòng và sẽ ngừng chỉnh sửa khi bạn nhập vào dấu chấm phẩy (tôi đã đặt đó là EOQ hoặc kết thúc hoặc truy vấn). Readline cực kỳ mạnh mẽ, có rất nhiều thứ để học.
#include <stdio.h>
#include <unistd.h>
#include <readline/readline.h>
#include <readline/history.h>
int my_startup(void);
int my_bind_cr(int, int);
int my_bind_eoq(int, int);
char *my_readline(void);
int my_eoq;
int
main(int argc, char *argv[])
{
if (isatty(STDIN_FILENO)) {
rl_readline_name = "my";
rl_startup_hook = my_startup;
my_readline();
}
}
int
my_startup(void)
{
my_eoq = 0;
rl_bind_key('\n', my_bind_cr);
rl_bind_key('\r', my_bind_cr);
rl_bind_key(';', my_bind_eoq);
}
int
my_bind_cr(int count, int key) {
if (my_eoq == 1) {
rl_done = 1;
}
printf("\n");
}
int
my_bind_eoq(int count, int key) {
my_eoq = 1;
printf(";");
}
char *
my_readline(void)
{
char *line;
if ((line = readline("")) == NULL) {
return NULL;
}
printf("LINE : %s\n", line);
}
Nguồn
2008-10-02 09:56:11