我想制作一个带有ncurses.h多种颜色的菜单.我的意思是这样的:
??????????????????????
?????????????????????? <- color 1
?????????????????????? <- color 2
??????????????????????
Run Code Online (Sandbox Code Playgroud)
但是,如果使用init_pair(),attron()并且attroff()整个屏幕的颜色是一样的,并没有像我所预料.
initscr();
init_pair(0, COLOR_BLACK, COLOR_RED);
init_pair(1, COLOR_BLACK, COLOR_GREEN);
attron(0);
printw("This should be printed in black with a red background!\n");
refresh();
attron(1);
printw("And this in a green background!\n");
refresh()
sleep(2);
endwin();
Run Code Online (Sandbox Code Playgroud)
这段代码出了什么问题?
谢谢你的每一个答案!
有没有类似于Ncurses的C++库,但对于Windows?似乎没有Ncurses的端口,我需要一个非常好的显示系统.
有什么建议?跨平台是一个加号.
在彩色模式下,我似乎无法在诅咒中工作.如果我不打电话start_color,我就会变黑了.我打电话的时候start_color,事情开始以黑灰色输出.
如果您运行此脚本:
import sys
for i in xrange(30, 38):
print '\x1b[0;' + str(i) + 'm' + str(i) + ': Shiny colors \x1b[1m(bright)'
print '\x1b[0m...and this is normal.'
Run Code Online (Sandbox Code Playgroud)
......你可能会看到很多漂亮的颜色.我想要但不能得到的是最后一句话:"......这是正常的." 要求颜色对0或要求COLOR_WHITE,COLOR_BLACK从脚本中获取非亮#37.
作为参考,这是我在Gnome终端中看到的:
http://rpi.edu/~wellir/random/colors.png
我用Python编程(使用curses库),所以我的代码是这样的:
import curses
screen = curses.initscr()
curses.start_color()
curses.init_pair(1, curses.COLOR_WHITE, curses.COLOR_BLACK)
screen.clear()
screen.attrset(0)
screen.addstr('Hello')
screen.attrset(curses.A_BOLD)
screen.addstr('Hello')
screen.attrset(curses.color_pair(1))
screen.addstr('Hello')
screen.refresh()
curses.napms(5000)
curses.endwin()
Run Code Online (Sandbox Code Playgroud)
......让我37,37-亮,37.
这是我发布堆栈溢出的第一篇文章.多年来我一直潜伏在这个网站上获取信息,它总是有用的,所以我想我会发布我的第一个问题.
我一直在寻找一些类似的例子,但似乎找不到任何东西.
最后,我正在尝试编写一个简单的文本ui,用于在文本提取程序中查找误报和漏报.误报模块是一个简单的是/否选择,显示彩色文本和使用getch()很容易.然而,假阴性部分变得困难.
所以这就是我想要做的:
有什么想法甚至开始吗?我正在尝试简单的事情,比如在屏幕上保留文字并移动光标,但无济于事.
我知道curses.textpad.TextBox()模块,但它执行编辑,如插入和删除,我不想这样做.也许有一种方法可以禁用它.
我还有其他问题,但我现在还会详细说明.
谢谢!!
尼尔
编辑:更具体地说,我不是在寻找编写整个程序的帮助,只是帮助将光标移动到显示的文本上,突出显示它,然后选择它并在变量中保存它.
我正在尝试构建5.6.4-labs-innodb-memcached,但遇到此问题:
# cmake ./
-- MySQL 5.6.4-labs-innodb-memcached
-- Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH)
CMake Error at cmake/readline.cmake:83 (MESSAGE):
Curses library not found. Please install appropriate package,
remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5- dev, on Redhat and derivates it is ncurses-devel.
Call Stack (most recent call first):
cmake/readline.cmake:127 (FIND_CURSES)
cmake/readline.cmake:217 (MYSQL_USE_BUNDLED_LIBEDIT)
CMakeLists.txt:263 (MYSQL_CHECK_READLINE)
-- Configuring incomplete, errors occurred!
Run Code Online (Sandbox Code Playgroud)
安装了libncurses5-dev并设置了CURSES_USE_NCURSES = true,但它没有帮助.有任何想法吗?我已经编译了这个包,但它是在另一台机器上...
编辑:
/var/cache/apt/archives/libncurses5-dev_5.7+20101128-1_i386.deb
/var/lib/dpkg/info/libncurses5.postinst
/var/lib/dpkg/info/libncursesw5.list
/var/lib/dpkg/info/ncurses-base.preinst
/var/lib/dpkg/info/libncursesw5.postrm
/var/lib/dpkg/info/libncursesw5.shlibs
/var/lib/dpkg/info/libncursesw5.md5sums
/var/lib/dpkg/info/libncurses5.symbols
/var/lib/dpkg/info/ncurses-bin.preinst
/var/lib/dpkg/info/ncurses-bin.list
/var/lib/dpkg/info/libncurses5-dev.list
/var/lib/dpkg/info/libncursesw5.symbols
/var/lib/dpkg/info/libncursesw5.postinst …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Ncurses应用程序,它使用自己的调色板init_color()(假设can_change_colors()返回非零).如果COLORS小于256,我只修改前8种颜色(假设COLORS至少为8).否则,我修改到前256.
该ncurses文件称,呼吁endwin()对stdscr将重置调色板.然而,在Gnome-terminal中,我没有看到Ncurses恢复的调色板.相反,我上次使用的任何调色板都超出了我的应用范围.那么,我的第一个问题是为什么调色板没有被正确恢复(其他一切 - 光标位置,屏幕文本等).
通过在启动时获取调色板并手动恢复,我可以解决这个问题(我知道这已经有问题了).我试图color_content()通过成功调用后的循环来执行此操作start_color().不幸的是,这似乎返回默认的ncurses调色板,而不是实际使用的调色板(使用Gnome-terminal的默认调色板和配置的Solarized调色板进行测试).我通过检查ncurses/base/lib_color.c来自Debian的ncurses-5.9来源的值来验证这一点.
所以:
为什么通过成功调用恢复调色板endwin(stdscr)?
如何在启动时获得"真正的"调色板?Ncurses是首选,但Unix或甚至Linux特定的ioctl()s等现在就足够了.
相关代码可以在Github上找到.目前的情况可能与我上面描述的完全不符,因为我一直在尝试各种技术而没有成功.
我一直在努力教自己ncurses,到目前为止我很喜欢它.但是,我正在尝试编写一个像pico或nano这样的小文本编辑器.到目前为止,我已经把它设置得相当好.我创建了一个映射键的函数.无论我做什么,我都无法得到KEY_ENTER的回复.每当我按下它时,它就会到达我所在的当前行的开头.我尝试过使用raw(); 并使用13而不是"KEY_ENTER"没有运气.所有其他键都按预期响应.我很感激任何建议.我一直盯着这个试图让它永远有效.谢谢!
void keymaps(){
int ch;
keypad(stdscr,TRUE);
case KEY_UP:
addstr("Up\n");
break;
case KEY_LEFT:
addstr("Left\n");
break;
case KEY_RIGHT:
addstr("Right\n");
break;
case KEY_BACKSPACE:
delch();
break;
case Key_Enter:
addstr("You pressed Enter\n");
default:
break;
}
refresh();
} while(ch != KEY_HOME);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下代码检索VT100终端中光标的坐标:
void getCursor(int* x, int* y) {
printf("\033[6n");
scanf("\033[%d;%dR", x, y);
}
Run Code Online (Sandbox Code Playgroud)
我正在使用以下ANSI转义序列:
设备状态报告 - ESC [6n
将光标位置报告给应用程序(就像键入键盘一样)ESC [n; mR,其中n是行,m是列.
代码编译并发送ANSI序列,但是,在接收到它之后,终端将^[[x;yR字符串打印到stdout而不是stdin使我无法从程序中检索它:

显然,字符串是为程序指定的,所以我必须做错误的事情.有人知道它是什么吗?
我正在开发终端应用程序.我想知道如何测试使用ncurses创建的终端用户界面.有没有人有这种测试的经验?
到目前为止,我最好的方法是测试应用程序捕获标准输出并将其与应有的进行比较.但是我担心我永远无法为每个终端大小创建可比较的案例,文本颜色代码为(256bit,24bit)等...
一种测试方法是模拟键盘,但我如何测试视觉行为?
我对此问题一无所知......
我正在尝试使用Swift Package Manager在库中使用ncurses,我想使用ncurses的特定版本,而不是OS X中包含的版本。为此,我使用Homebrew安装了最新版本(6.1)。这是我的Package.swift样子:
// swift-tools-version:5.0
import PackageDescription
let package = Package(
name: "NcursesExample",
products: [
.executable(name: "NcursesExample", targets: ["NcursesExample"]),
],
dependencies: [
],
targets: [
.systemLibrary(name: "Cncurses"),
.target(name: "NcursesExample", dependencies: ["Cncurses"]),
]
)
Run Code Online (Sandbox Code Playgroud)
在Sources目录下,我有一个Cncurses的子目录,其中包含module.modulemap和shim.h文件:
module.modulemap
module Cncurses {
header "shim.h"
link "ncurses"
export *
}
Run Code Online (Sandbox Code Playgroud)
希姆
#include "/usr/local/Cellar/ncurses/6.1/include/ncurses.h"
Run Code Online (Sandbox Code Playgroud)
但是,在编译时,我遇到几个错误,抱怨类型冲突,这显然是因为macOS SDK还提供了ncurses:
shim.h:1:10: note: in file included from shim.h:1:
#include "/usr/local/Cellar/ncurses/6.1/include/ncurses.h"
^
/usr/local/Cellar/ncurses/6.1/include/ncurses.h:60:10: error: 'ncursesw/ncurses_dll.h' file not found with <angled> include; use "quotes" instead
#include …Run Code Online (Sandbox Code Playgroud)