删除已在 ncurses 终端中打印的字符
Deleting a character already printed in the terminal in ncurses
我正在用 ncurses 编写一个文本编辑器。该程序以原始模式初始化。所以我需要手动做很多事情,比如删除,避免打印不可打印的字符等。
删除:
void console(ch)
{
if(ch == 8) //8 = backspace according to asciitables.com
{
printw("\b");
printw(" ");
}
else
{
addch(ch);
}
}
为了避免不可打印的字符:
void console(ch)
{
bool safe = TRUE;
int avoid[] = { 1,2,3,4,5,6,7,8};
for(int i=0;i<4;i++)
{
while(ch==avoid[i])
{
safe = false;
}
}
if(safe)
{
printw("%c",ch); //Prints the key's characters on the screen.
}
else
{
break;
}
}
在删除的时候,我想删除终端中之前打印的字符,插入一个空格space,然后将光标移回上一个字符的位置。但那是行不通的。
在avoid non-printable character中,我想避免打印不可打印的字符,只打印可打印的字符。但这似乎也行不通。
如果有人指出我错误的地方并纠正我,那将非常有帮助。如果有人能告诉我 ncurses 库中是否有任何特定功能,这也会很有帮助。我对 ncurses 很陌生。
在 curses 中检测 "nonprintable" 个字符的最简单方法是检查 unctrl
的结果。如果字符是可打印的,则结果是单个字符。否则为两个或多个字符:
char *check = unctrl(ch);
int safe = (check != 0 && strlen(check) == 1);
(manual page 有一些细节)。
顺便说一句,addch
比printw
更适合打印字符(但要记住它的参数是一个chtype
,它适合 int
,而不是 char
)。同样,手册页对于准备程序很有用。
我正在用 ncurses 编写一个文本编辑器。该程序以原始模式初始化。所以我需要手动做很多事情,比如删除,避免打印不可打印的字符等。
删除:
void console(ch)
{
if(ch == 8) //8 = backspace according to asciitables.com
{
printw("\b");
printw(" ");
}
else
{
addch(ch);
}
}
为了避免不可打印的字符:
void console(ch)
{
bool safe = TRUE;
int avoid[] = { 1,2,3,4,5,6,7,8};
for(int i=0;i<4;i++)
{
while(ch==avoid[i])
{
safe = false;
}
}
if(safe)
{
printw("%c",ch); //Prints the key's characters on the screen.
}
else
{
break;
}
}
在删除的时候,我想删除终端中之前打印的字符,插入一个空格space,然后将光标移回上一个字符的位置。但那是行不通的。
在avoid non-printable character中,我想避免打印不可打印的字符,只打印可打印的字符。但这似乎也行不通。
如果有人指出我错误的地方并纠正我,那将非常有帮助。如果有人能告诉我 ncurses 库中是否有任何特定功能,这也会很有帮助。我对 ncurses 很陌生。
在 curses 中检测 "nonprintable" 个字符的最简单方法是检查 unctrl
的结果。如果字符是可打印的,则结果是单个字符。否则为两个或多个字符:
char *check = unctrl(ch);
int safe = (check != 0 && strlen(check) == 1);
(manual page 有一些细节)。
顺便说一句,addch
比printw
更适合打印字符(但要记住它的参数是一个chtype
,它适合 int
,而不是 char
)。同样,手册页对于准备程序很有用。