我有一个问题ncurses的 ...我需要处理像所有的按键Esc,Alt+ F等问题是代码相似...即:
Esc - 27
Alt+ A- 27 65
作为一个例子,只有一个双码Alt+ [key]组合有什么相似,以Esc重点... ...任何想法如何处理这个问题?
我正在尝试在Linux上使用ncurses开始开发程序.我甚至无法编译Hello World示例.这是代码:
#include <curses.h>
int main()
{
initscr();
printw("Hello, world.");
refresh();
getch();
endwin();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译时,我得到:
hello.c:(.text+0x12): undefined reference to `initscr'
Run Code Online (Sandbox Code Playgroud)
对于那些被称为函数的每一个.
我通过apt-get安装了ncurses,还通过下载源代码并编译,安装等.
我已经试过#include这两个curses.h和ncurses.h.
到底是怎么回事?
我正在使用C(gcc)和ncurses来制作一个程序来监控来自串口的数据.该程序有一个很大的while,它读取来自端口的数据,同时,它在屏幕上打印该信息...
但问题出在这里:
它如何从键盘读取输入(因为getch()冻结程序直到它获得输入)并同时读取来自端口的信息?
也许我必须使用另一种方式(不是大的while),所以欢迎这些想法!
我正在尝试在curses窗口中写一些东西,但它似乎也写在边框上.我该如何修复下面的代码?
win_self = newwin(LINES / 2, COLS, 0, 0);
box(win_self, 0, 0);
wrefresh(win_self);
wprintw(win_self, "foobar");
Run Code Online (Sandbox Code Playgroud) 我正在玩Python和诅咒.
我跑的时候
import time
import curses
def main():
curses.initscr()
curses.cbreak()
for i in range(3):
time.sleep(1)
curses.flash()
pass
print( "Hello World" )
curses.endwin()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
如果我一直等待,curses.endwin()就会被调用,所以一切正常.但是,如果我用Ctrl-C剪短它,curses.endwin()永远不会被调用,所以它搞砸了我的终端会话.
处理这种情况的正确方法是什么?我怎样才能确保无论我如何尝试结束/中断程序(例如Ctrl-C,Ctrl-Z),它都不会弄乱终端?
函数timeout和getchHaskell中使用的ncurses库有一个奇怪的问题.当我从GHCi或runhaskell使用它们时,它们按预期工作 - getch等待给定的毫秒数timeout然后返回,即使没有给出输入.但是当我使用GHC 编译同一个文件时,getch立即返回.
我为Haskell尝试了两个ncurses绑定; hscurses:
import UI.HSCurses.Curses
main = do
initCurses
timeout 1000
c <- getch
endWin
print c
Run Code Online (Sandbox Code Playgroud)
并且ncurses:
import UI.NCurses
main = do
e <- runCurses $ do
win <- defaultWindow
getEvent win $ Just 1000
print e
Run Code Online (Sandbox Code Playgroud)
两者都表现出与之前描述的相同的奇怪方式.
我也试过C中的等价程序:
#include <ncurses.h>
int main()
{
initscr();
wtimeout(stdscr,1000);
int c = getch();
endwin();
printf("%d\n", c);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这个按预期工作.
所以我的问题是:当使用解释后的终端和编译的Haskell时,有什么能够产生差异?runhaskell和ghci修改了一些微妙的终端设置吗?或者编译后的代码是否以不同的方式加载库?
添加:
我试图使用FFI从编译的Haskell调用C程序,它立即返回(这是不正确的).我认为这意味着问题不在库中,而是在GHC运行时的某个地方.
curses 库的标头<ncurses.h>和变体之间有什么区别?<curses.h>
为什么我应该更喜欢
#include <ncurses.h>
代替
#include <curses.h>?
我已经在我的 Linux 发行版中搜索了差异。在我的实现(Linux Ubuntu Pengolin)中,<ncurses.h>是<curses.h>. 所以没有区别。
但为什么两个名字却分开了呢?
不幸的是,这个问题的答案What's the Difference between -lcurses and -lncurses when compiling C using ncurses lib? 没有解决我的担忧,因为他们更专注于在调用编译器时添加相应的标志,并且不解释一般的差异。
我正在编写一个类似于shell的程序.启动后,会出现提示并输入一些特定于应用程序的命令.
到目前为止这个工作正常.但是,我想在Bash中添加对命令历史记录的支持,因此用户可以点击向上或向下箭头并查看以前输入的命令.
我已经包含了ncurses库,我用getch()做了一个简单的hello world测试,以确保正确报告向上和向下箭头.
困扰我的是,似乎要求我调用initscr()来清除屏幕以便我使用getch().
好的,问题是:
有没有人知道如何使用ncurses getch()函数而不先调用initscr()?如果没有,我可以让它不清楚屏幕吗?基本上,我希望getch()的行为与getchar()相同,如果这有意义的话.
提前致谢!
编辑:我认为最好的例子是Python如何在交互模式下运行.
是否有Windows等效的PHP ncurses?
我已经创建了一个CLI脚本,并希望以一种很好的方式显示各种统计信息(当前处理的记录,完成百分比等),而无需将负载和大量文本输出到cmd.exe窗口.
ncurses扩展在Windows上不起作用.
我开始学习Python中的curses.我在Mac OS X上使用Python 3.5.当我尝试在右下角写入时,程序崩溃并出现以下错误:
$ python ex_curses.py
[...]
File "ex_curses.py", line 19, in do_curses
screen.addch(mlines, mcols, 'c')
_curses.error: add_wch() returned ERR
Run Code Online (Sandbox Code Playgroud)
示例程序是:
import curses
def do_curses(screen):
curses.noecho()
curses.curs_set(0)
screen.keypad(1)
(line, col) = 12, 0
screen.addstr(line, col, "Hello world!")
line += 1
screen.addstr(line, col, "Hello world!", curses.A_REVERSE)
screen.addch(0, 0, "c")
(mlines, mcols) = screen.getmaxyx()
mlines -= 1
mcols -= 1
screen.addch(mlines, mcols, 'c')
while True:
event = screen.getch()
if event == ord("q"):
break
curses.endwin()
if __name__ == "__main__":
curses.wrapper(do_curses)
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,我错过了一些明显的东西,但我不知道是什么.