我在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;
}
}
在删除中,我想删除终端中先前打印的字符并插入空格并将光标移回前一个字符的位置。但这不起作用。
在避免不可打印的字符中,我想避免打印不可打印的字符,只打印可打印的字符。但这似乎也不起作用。
如果有人指出我错在哪里并纠正我,那将是非常有帮助的。如果有人能告诉我ncurses库中是否有任何特定的功能,也会有所帮助。我对ncurses很新。
答案 0 :(得分:0)
诅咒中最简单的方法来检测&#34; nonprintable&#34;字符是检查unctrl
的结果。如果字符是可打印的,则结果为单字符。否则它是两个或更多字符:
null
(manual page详细介绍。)
顺便说一下,addch
比char *check = unctrl(ch);
int safe = (check != 0 && strlen(check) == 1);
更适合打印字符(但请记住,其参数为 printw
,适合 chtype
,而非 int
)。同样,手册页对于准备程序非常有用。