#define _XOPEN_SOURCE 700 /* for wcswidth and 700 is for mbsnrtowcs */
#include<wchar.h>
#include<ncurses.h> /* ncurses.h includes stdio.h */
#include<stdlib.h>
#include<string.h>
#include<readline/readline.h>
#include<locale.h>
int mygetstr(char *str, int y, int x){
WINDOW *win;
int size, col;
int ok = 0;
int width;
wchar_t wstr[80];
char *p;
getmaxyx(stdscr, size, col);
void getaline(char *s){
str = s;
rl_callback_handler_remove();
ok = 1;
}
rl_callback_handler_install("", getaline);
win = newwin(1, col-x, y, x);
while(1){
rl_callback_read_char();
if(ok)
break;
werase(win);
strncpy(str, rl_line_buffer, 80);
p = str;
size = mbsnrtowcs(wstr, (const char**)&p, rl_point, 80, NULL);
width = wcswidth(wstr, size);
mvwprintw(win, 0, 0, "%s", str);
wmove(win, 0, width);
wrefresh(win);
}
delwin(win);
return 0;
}
int main(){
char mesg[] = "Enter a string: ";
char str[80];
int row, col;
setlocale(LC_ALL, "");
initscr();
getmaxyx(stdscr, row, col);
mvprintw(row / 2, (col - strlen(mesg)) / 2, "%s", mesg);
refresh();
mygetstr(str, row / 2, (col + strlen(mesg)) / 2);
mvprintw(LINES - 2, 0, "You Entered: %s", str);
getch();
endwin();
return 0;
}
评论
发表评论