标签: ncurses

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
查看次数

使用Eclipse CDT调试ncurses

我正在使用Eclipse CDT中的ncurses编写C++应用程序但是我无法在eclipse中运行/调试我的应用程序,因为eclipse中的控制台不能与curses一起使用.如果我从终端运行它,我的应用程序运行正常,但我刚刚添加了一些新代码,现在我遇到了分段错误,所以我想在eclipse中使用调试器来帮助我解决问题.有没有办法让eclipse运行/调试我的应用程序,但使用不同的终端输出,就像你在gdb中执行"tty/dev/pts/1"一样?或者在eclipse中调试ncures应用程序的任何其他方法?

Thx提前!

c++ debugging terminal eclipse-cdt ncurses

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

使用D编程语言来修复api

我试图用神经网络教自己AI.简而言之,我想创建一个简单的图形,使用ncurses显示我的程序中发生的事情.我正在使用的教程可以在这里找到.

我的印象是D与C兼容,理论上我可以相对容易地调用C函数.

我发现事实并非如此.我是一个相对新手的程序员,所以即使是简单的解释也有点高于我的头脑.我在这里找到了这个.

D旨在与目标系统的C编译器舒适地配合.D通过依赖目标环境的C运行时库来弥补没有自己的VM.尝试移植到D或为大量可用的C API编写D包装器将是毫无意义的.直接调用它们要容易多少.

这是通过匹配C编译器的数据类型,布局和函数调用/返回序列来完成的.

听起来很棒.有点过头了.我测试了一个简单的C程序:

#include <curses.h>

int main(void) {
    int ch;

    initscr();
    noecho();
    cbreak();
    printw("Hit Ctrl+C to exit ...\n\n");
    for (;;) {
      ch = getch();
      printw("Value of char: %d (%02x)\n", ch, ch);
    }
    endwin();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

从SO上的另一个问题无耻地复制和粘贴.至少我做了我的作业.

我从一个简单的D程序尝试了基本相同的东西.我收到了这个错误:

Error: module curses is in file 'curses.d' which cannot be read
Run Code Online (Sandbox Code Playgroud)

我绝对肯定我正在尝试一些非常愚蠢的事情.

有一种简单的方法在D程序中使用ncurses吗?

我正在零睡眠和咖啡因,所以请温柔!即使是链接到网站也将非常感谢!

我可能没有包括我应该拥有的所有东西,所以AMA.

随意侮辱我的智慧.

c linker d ncurses gdc

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

使用ncurses和ruby的最佳宝石

我有兴趣使用ruby创建一个命令行应用程序,这需要与用户进行适度复杂的交互.我想用ncurses来做这件事.

使用ruby和ncurses的最佳gem是什么,或者我应该在ruby中使用stdlib实用程序?

ruby ncurses

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

使用ncurses捕获控制台应用程序上的鼠标单击

我正在为unix平台制作一个控制台应用程序,我正在使用curses(或ncurses)库来处理键盘和鼠标输入.问题是我发现很少有关于如何使用它的文档,从这个页面开始,这个没有非常详细的例子.我已设法捕获左键单击,但我无法让它为右键单击工作,因为终端模拟器的选项菜单出现在光标位置,但该事件未由应用程序处理.如何避免这种情况并在应用程序中捕获事件?

我有以下行来配置鼠标事件:

// Set up mouse event throwing
mousemask(BUTTON1_PRESSED | BUTTON2_PRESSED, NULL);
Run Code Online (Sandbox Code Playgroud)

在处理输入的方法中,我有以下内容:

int c = getch();
MEVENT event;
switch(c)
{
    case KEY_UP:
        ... do stuff
        break;
    case KEY_DOWN:
        ... do stuff
        break;
    case KEY_MOUSE:
        if(getmouse(&event) == OK)
        {
            if(event.bstate & BUTTON1_PRESSED) // This works for left-click
            {
                ... do stuff
            }
            else if(event.bstate & BUTTON2_PRESSED) // This doesn't capture right-click
            {
                ... do other stuff
            }
            else
                fprintf(stderr, "Event: %i", event.bstate); // Doesn't print anything …
Run Code Online (Sandbox Code Playgroud)

c++ unix curses ncurses mouseevent

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

ncurses - 调整小故障

我正在写一个ncurses程序,并试图让它正确响应终端调整大小.虽然我可以在程序中正确读取终端尺寸,ncurses但似乎没有正确处理新尺寸.这是一个(有点冗长)示例程序:

#include <ncurses.h>
#include <string.h>
#include <signal.h>
#include <sys/ioctl.h>

void handle_winch(int sig){

    struct winsize w;
    ioctl(0, TIOCGWINSZ, &w);
    COLS = w.ws_col;
    LINES = w.ws_row;

    wresize(stdscr, LINES, COLS);
    clear();

    mvprintw(0, 0, "COLS = %d, LINES = %d", COLS, LINES);
    for (int i = 0; i < COLS; i++)
        mvaddch(1, i, '*');

    refresh();
}

int main(int argc, char *argv[]){

    initscr();

    struct sigaction sa;
    memset(&sa, 0, sizeof(struct sigaction));
    sa.sa_handler = handle_winch;
    sigaction(SIGWINCH, &sa, NULL);

    while(getch() != 27) {}

    endwin(); …
Run Code Online (Sandbox Code Playgroud)

c ncurses

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

cmake做非链接ncurses

我是一个关于cmake的总菜鸟.我的CMakeLists非常基础:

cmake_minimum_required(VERSION 2.4.6)
#set the default path for built executables to the "bin" directory
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#set the default path for built libraries to the "lib" directory
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

#For the Curses library to load:
SET(CURSES_USE_NCURSES TRUE)

include_directories(
     "src/"
)
add_subdirectory(src)
Run Code Online (Sandbox Code Playgroud)

当我使链接器找不到ncurses命令时,在make的详细模式下,我看到编译器没有添加-lncurses.我有什么要添加到CMakeLists以使其工作?

ncurses cmake

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

什么机制允许ViM临时覆盖整个控制台?

当你输入vim时,它会"清除"屏幕.退出时,它"恢复"原始内容.

我理解可以\x1b[2J用来清除控制台并重置光标位置,但这会覆盖终端内容.

我假设Vim 在引擎盖下使用ncurses,在这种情况下我想更好的问题是ncurses如何做到这一点,但它是如何完成的?

vim ncurses tty

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

在右下角调用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 ×3

c++ ×2

cmake ×1

command-line ×1

curses ×1

d ×1

debugging ×1

eclipse-cdt ×1

gdc ×1

linker ×1

mouseevent ×1

pdcurses ×1

php ×1

python ×1

python-curses ×1

ruby ×1

terminal ×1

tty ×1

unix ×1

vim ×1

windows ×1