我需要使用Perurs的NCurses.我发现了一些非常短的文本,但没有任何例子.
有没有人知道在线有任何现有指南?
谢谢!
我正在使用ncurses绘制TUI.麻烦的是,每当我的程序出现seg-fault时,我的终端就会一团糟.我看不出我在打字.因为我在ssh工作,这很痛苦.我通过使用屏幕减轻了一些效果.
我想知道是否有一个命令会在ncurses中的seg-fault之后刷新我的终端,以便我的终端开始正常运行.
我有一个小的ncurse程序我正在运行,但输出似乎没有显示,除非我坚持wrefresh()在while循环.
是否有一些缓冲正在进行?我试过其他refresh功能在图书馆和fflush与stddout(我不认为是有道理的,但值得一试),但似乎没有任何工作.
第二个小问题:要进行getch()非阻塞,我们需要打电话nodelay(win,TRUE),对吧?
void main()
{
initscr();
start_color();
init_pair(1,COLOR_YELLOW,COLOR_CYAN);
WINDOW *win = newwin(10,10,1,1);
wbkgd(win,COLOR_PAIR(1));
wprintw(win,"Hello, World.");
wrefresh(win);
getch();
delwin(win);
endwin();
}
我正在尝试将wchar_t Unicode字符添加到C中的ncurses显示中.
我有一个数组:
wchar_t characters[]={L'\uE030', L'\uE029'}; // containing 2 thai letters, for example
Run Code Online (Sandbox Code Playgroud)
然后我尝试将数组中的wchar_t添加到ncurses显示中:
add_wch(characters[0]);
Run Code Online (Sandbox Code Playgroud)
要提供更多信息,使用ASCII执行此操作正常,使用:
char characters[]={'A', 'B'};
// and later...
addch(characters[0]);
Run Code Online (Sandbox Code Playgroud)
要设置区域设置,我添加包含...
#include <locale.h>
// in main()
setlocale(LC_CTYPE,"C-UTF-8");
Run Code Online (Sandbox Code Playgroud)
ncurses包括:
#include <ncurses.h>
Run Code Online (Sandbox Code Playgroud)
编译:
(编辑:添加了c99标准,用于支持通用字符名称.)
gcc -o ncursesutf8 ncursesutf8.c -lm -lncurses -Wall -std=c99
Run Code Online (Sandbox Code Playgroud)
我得到以下编译警告(当然可执行文件将失败):
ncursesutf8.c:48: warning: implicit declaration of function ‘add_wch’
Run Code Online (Sandbox Code Playgroud)
我已经尝试过使用addch看起来像宏来使用wchar_t,但是当我这样做时,Unicode字符不显示,而是显示为ASCII字符而不是.
有什么想法吗?
我正在使用OS X Snow Leopard,10.6.6
编辑:删除wchar_t []分配时使用的错误L'\u0E30'而不是L"\u0E30"等.我还更新了编译器设置以使用C99(添加通用字符名称支持).这两个变化都无法解决问题.
仍然没有答案,有谁知道如何做Unicode ncurses addchar(add_wchar?)?! 救命!
我有一个问题ncurses的 ...我需要处理像所有的按键Esc,Alt+ F等问题是代码相似...即:
Esc - 27
Alt+ A- 27 65
作为一个例子,只有一个双码Alt+ [key]组合有什么相似,以Esc重点... ...任何想法如何处理这个问题?
我正在编写一个需要UI的程序.该计划在haskell.对于UI,我想到使用ncurses库.我应该为haskell使用hscurses库并在haskell中编写UI,还是应该使用ncurses库并在C中编写UI并从C调用haskell函数?
哪种方式最受欢迎?
以下程序引发错误:
import curses
def test(scr):
top = curses.newwin(1, 10, 0, 0)
top.addstr(0, 9, "X")
curses.wrapper(test)
Run Code Online (Sandbox Code Playgroud)
看起来每当我尝试使用addstr()在窗口的最后一行的最后一列中写入一个字符时(即使它小于屏幕),它会引发错误.我不想滚动,我不关心光标的位置.我想要的只是能够在窗口的每个位置写字符.有可能吗?我怎样才能做到这一点?
我想知道NCurses中是否存在鼠标移动事件这样的事情,以及是否有办法捕获它们.在与鼠标接口之后(来自NCurses编程HOWTO),似乎通过启用REPORT_MOUSE_POSITION调用中的位mousemask,可以确实捕获鼠标移动事件.
所以,我试过了,它似乎没有用.我有这样的事情:
int ch, count=0;
mmask_t old;
initscr ();
noecho ();
cbreak ();
mousemask (ALL_MOUSE_EVENTS | REPORT_MOUSE_POSITION, &old);
keypad (stdscr, TRUE);
while ((ch = getchar ()) != 'q')
{
count++;
if (ch == KEY_MOUSE)
{
MEVENT event;
assert (getmouse (&event) == OK);
mvprintw (0, 0, "Mouse Event!\n");
}
mvprintw (1, 1, "Event number %4d",count);
}
...
Run Code Online (Sandbox Code Playgroud)
我预计,当我移动鼠标光标时,我会看到事件计数器增加.但事实并非如此.我也尝试在鼠标按钮1关闭时移动它以查看是否生成"拖动"事件,它也没有做任何事情.问题是,如果它只是我的终端模拟器的问题?或者我可能误解了NCurses认为的鼠标移动事件?收到了所有其他鼠标事件(我可以在控制台中使用鼠标操作程序).
我尝试过gnome-terminal,xterm和其他一些东西.我还尝试了一个文本环境(没有X),转到我的linux机器的tty(Fedora 15,Ctrl + Alt + F2),但是没有用.
最后,假设我确实做到了这一点并且应该报告那些事件,那么鼠标运动evenet 的bstate领域是什么MEVENT?
提前谢谢了!
我试图在Ubuntu 11.10中编译我的代码并得到这些错误和更多.所以通过谷歌搜索它我认为这是一个链接错误.具体来说,有建议确保您拥有正确的标头并链接-lncurses库.我已经这样做了.我仍然收到这个错误.我还读到可能是我应该安装libncurses,但我已经安装了它.
My MakeFile:
CPP = g++
CPPFLAGS = -c -Wall -g
LINK = g++
LDFLAGS_LINUX = -lpthread -lncurses
LDFLAGS = $(LDFLAGS_LINUX)
RM = rm
.SUFFIXES:
.SUFFIXES: .o .cpp
.cpp.o:
$(CPP) $(CPPFLAGS) $*.cpp -o $(SRC_DIR)$*.o
all: skygrid
skygrid: skygrid.o commServer.o pose.o robot.o
$(LINK) $(LDFLAGS) -o $@ $^
clean:
$(RM) -rf *.o skygrid
skygrid.o: skygrid.cpp definitions.h commServer.h pose.h robot.h
commServer.o: commServer.cpp commServer.h
pose.o: pose.cpp pose.h
robot.o: robot.cpp robot.h pose.h
Run Code Online (Sandbox Code Playgroud)
我的错误:
/home/fari/Desktop/FarahSkygrid/skygrid/src/skygrid.cpp:1094: undefined reference to `stdscr'
/home/fari/Desktop/FarahSkygrid/skygrid/src/skygrid.cpp:1094: undefined reference to `stdscr'
/home/fari/Desktop/FarahSkygrid/skygrid/src/skygrid.cpp:1094: …Run Code Online (Sandbox Code Playgroud)