我正在编写一个类似于shell的程序.启动后,会出现提示并输入一些特定于应用程序的命令.
到目前为止这个工作正常.但是,我想在Bash中添加对命令历史记录的支持,因此用户可以点击向上或向下箭头并查看以前输入的命令.
我已经包含了ncurses库,我用getch()做了一个简单的hello world测试,以确保正确报告向上和向下箭头.
困扰我的是,似乎要求我调用initscr()来清除屏幕以便我使用getch().
好的,问题是:
有没有人知道如何使用ncurses getch()函数而不先调用initscr()?如果没有,我可以让它不清楚屏幕吗?基本上,我希望getch()的行为与getchar()相同,如果这有意义的话.
提前致谢!
编辑:我认为最好的例子是Python如何在交互模式下运行.
是否有Windows等效的PHP ncurses?
我已经创建了一个CLI脚本,并希望以一种很好的方式显示各种统计信息(当前处理的记录,完成百分比等),而无需将负载和大量文本输出到cmd.exe窗口.
ncurses扩展在Windows上不起作用.
我正在使用Eclipse CDT中的ncurses编写C++应用程序但是我无法在eclipse中运行/调试我的应用程序,因为eclipse中的控制台不能与curses一起使用.如果我从终端运行它,我的应用程序运行正常,但我刚刚添加了一些新代码,现在我遇到了分段错误,所以我想在eclipse中使用调试器来帮助我解决问题.有没有办法让eclipse运行/调试我的应用程序,但使用不同的终端输出,就像你在gdb中执行"tty/dev/pts/1"一样?或者在eclipse中调试ncures应用程序的任何其他方法?
Thx提前!
我试图用神经网络教自己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.
随意侮辱我的智慧.
我有兴趣使用ruby创建一个命令行应用程序,这需要与用户进行适度复杂的交互.我想用ncurses来做这件事.
使用ruby和ncurses的最佳gem是什么,或者我应该在ruby中使用stdlib实用程序?
我正在为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) 我正在写一个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) 我是一个关于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以使其工作?
我开始学习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)
我有一种感觉,我错过了一些明显的东西,但我不知道是什么.