标签: ncurses

NCurses和ESC,ALT键

我有一个问题ncurses的 ...我需要处理像所有的按键Esc,Alt+ F等问题是代码相似...即:


Esc - 27


Alt+ A- 27 65


作为一个例子,只有一个双码Alt+ [key]组合有什么相似,以Esc重点... ...任何想法如何处理这个问题?

key ncurses

11
推荐指数
2
解决办法
2万
查看次数

在linux上使用ncurses时未定义的引用

我正在尝试在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.hncurses.h.

到底是怎么回事?

c linux ncurses

10
推荐指数
3
解决办法
2万
查看次数

如何在同时做其他事情的同时从键盘输入?

我正在使用C(gcc)和ncurses来制作一个程序来监控来自串口的数据.该程序有一个很大的while,它读取来自端口的数据,同时,它在屏幕上打印该信息...

但问题出在这里:

它如何从键盘读取输入(因为getch()冻结程序直到它获得输入)并同时读取来自端口的信息?

也许我必须使用另一种方式(不是大的while),所以欢迎这些想法!

c ncurses

10
推荐指数
1
解决办法
5760
查看次数

在窗口内打印,而不是在边框上打印

我正在尝试在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)

c ncurses

10
推荐指数
1
解决办法
5216
查看次数

Python诅咒困境

我正在玩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),它都不会弄乱终端?

python curses ncurses

10
推荐指数
2
解决办法
1万
查看次数

解释和编译的Haskell之间的ncurses的区别?

函数timeoutgetchHaskell中使用的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运行时的某个地方.

haskell ncurses ghc ghci runhaskell

10
推荐指数
1
解决办法
502
查看次数

标头 ncurses.h 和curses.h 之间的区别

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? 没有解决我的担忧,因为他们更专注于在调用编译器时添加相应的标志,并且不解释一般的差异。

c c++ curses ncurses difference

10
推荐指数
1
解决办法
7165
查看次数

NCurses初始化而不清除屏幕

我正在编写一个类似于shell的程序.启动后,会出现提示并输入一些特定于应用程序的命令.

到目前为止这个工作正常.但是,我想在Bash中添加对命令历史记录的支持,因此用户可以点击向上或向下箭头并查看以前输入的命令.

我已经包含了ncurses库,我用getch()做了一个简单的hello world测试,以确保正确报告向上和向下箭头.

困扰我的是,似乎要求我调用initscr()来清除屏幕以便我使用getch().

好的,问题是:

有没有人知道如何使用ncurses getch()函数而不先调用initscr()?如果没有,我可以让它不清楚屏幕吗?基本上,我希望getch()的行为与getchar()相同,如果这有意义的话.

提前致谢!

编辑:我认为最好的例子是Python如何在交互模式下运行.

c ncurses

9
推荐指数
3
解决办法
4826
查看次数

在Windows上诅咒PHP

是否有Windows等效的PHP ncurses?

我已经创建了一个CLI脚本,并希望以一种很好的方式显示各种统计信息(当前处理的记录,完成百分比等),而无需将负载和大量文本输出到cmd.exe窗口.

ncurses扩展在Windows上不起作用.

php windows command-line ncurses pdcurses

9
推荐指数
1
解决办法
1549
查看次数

在右下角调用addch时,curses失败了

我开始学习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)

我有一种感觉,我错过了一些明显的东西,但我不知道是什么.

python ncurses python-curses

9
推荐指数
2
解决办法
1445
查看次数

标签 统计

ncurses ×10

c ×5

curses ×2

python ×2

c++ ×1

command-line ×1

difference ×1

ghc ×1

ghci ×1

haskell ×1

key ×1

linux ×1

pdcurses ×1

php ×1

python-curses ×1

runhaskell ×1

windows ×1