标签: ncurses

ncurses在屏幕上的多种颜色

我想制作一个带有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)

这段代码出了什么问题?

谢谢你的每一个答案!

c command-line window ncurses

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

适用于Windows的NCurses-Like System

有没有类似于Ncurses的C++库,但对于Windows?似乎没有Ncurses的端口,我需要一个非常好的显示系统.

有什么建议?跨平台是一个加号.

c++ ncurses

8
推荐指数
1
解决办法
9755
查看次数

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.

python curses ncurses

8
推荐指数
1
解决办法
2256
查看次数

使用Python curses突出显示和选择文本

这是我发布堆栈溢出的第一篇文章.多年来我一直潜伏在这个网站上获取信息,它总是有用的,所以我想我会发布我的第一个问题.

我一直在寻找一些类似的例子,但似乎找不到任何东西.

最后,我正在尝试编写一个简单的文本ui,用于在文本提取程序中查找误报和漏报.误报模块是一个简单的是/否选择,显示彩色文本和使用getch()很容易.然而,假阴性部分变得困难.

所以这就是我想要做的:

  1. 在屏幕上显示一个字符串(暂时忘记滚动......呃)它只是一个没有换行符的字符串.
  2. 用户看到文本,然后按"h"进入高亮模式.
  3. 然后用户可以控制光标将其移动到文本的一部分上(仍然显示),并选择"v"开始突出显示(我试图使其尽可能接近vi)
  4. 然后,用户使用控制键(箭头,hjkl)将光标从起点移动到终点,突出显示路上的文本.这个突出显示的部分应该是一个假阴性的词
  5. 用户按下某个键(可能是'y'),所选文本被着色,或保持高亮显示,突出显示的文本将保存到我稍后将处理的某个变量中.
  6. 用户退出高亮模式并继续.

有什么想法甚至开始吗?我正在尝试简单的事情,比如在屏幕上保留文字并移动光标,但无济于事.

我知道curses.textpad.TextBox()模块,但它执行编辑,如插入和删除,我不想这样做.也许有一种方法可以禁用它.

我还有其他问题,但我现在还会详细说明.

谢谢!!

尼尔

编辑:更具体地说,我不是在寻找编写整个程序的帮助,只是帮助将光标移动到显示的文本上,突出显示它,然后选择它并在变量中保存它.

python tui ncurses

8
推荐指数
1
解决办法
6457
查看次数

没找到Curses库

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

mysql linux curses ncurses cmake

8
推荐指数
5
解决办法
3万
查看次数

如何获取原始终端调色板,最好使用ncurses例程?

我正在开发一个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上找到.目前的情况可能与我上面描述的完全不符,因为我一直在尝试各种技术而没有成功.

unix user-interface ncurses

8
推荐指数
1
解决办法
523
查看次数

ncurses- KEY_ENTER失败

我一直在努力教自己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)

ncurses

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

读取设备状态报告ANSI转义序列回复

我正在尝试使用以下代码检索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使我无法从程序中检索它:

终端窗口

显然,字符串是为程序指定的,所以我必须做错误的事情.有人知道它是什么吗?

c terminal ncurses xterm ansi-escape

8
推荐指数
2
解决办法
2507
查看次数

Python测试ncurses

我正在开发终端应用程序.我想知道如何测试使用ncurses创建的终端用户界面.有没有人有这种测试的经验?

  • 到目前为止,我最好的方法是测试应用程序捕获标准输出并将其与应有的进行比较.但是我担心我永远无法为每个终端大小创建可比较的案例,文本颜色代码为(256bit,24bit)等...

  • 一种测试方法是模拟键盘,但我如何测试视觉行为?

我对此问题一无所知......

python ncurses

8
推荐指数
1
解决办法
805
查看次数

Swift软件包管理器无法编译通过Homebrew安装的ncurses

我正在尝试使用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.modulemapshim.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)

ncurses swift swift-package-manager

8
推荐指数
1
解决办法
525
查看次数