首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
V2EX  ›  Linux

Linux 下 C/C++ 程序如何更改终端背景色?

  •  
  •   nevilleyung · 8 天前用 Android 发布 · 1739 次点击

    我用的是 Ubuntu 17.10 ,想在 C/C++程序运行时更改终端的背景色(不是字体),有没有相关库或者系统函数,该如何操作?

    27 回复  |  直到 2018-05-20 10:13:08 +08:00
        1
    ysc3839   8 天前 via Android   ♥ 1
    ANSI escape sequences
        2
    shijingshijing   8 天前
    Ubuntu 不知道,Debian 里面是在 Terminal 的 Edit -> Editing Profile -> Colors 下面改的。
        3
    jmc891205   8 天前 via iPhone
    是只在运行 c++程度的时候变色?其他时候保持原来颜色吗?
        4
    FrankHB   8 天前
    当年被各种终端的文明用语 API 搞得一怒之下强行 tput ……这画风酸爽得……(和隔壁 Win32 对比一下看看?)一直到现在都没下决心填坑……
    https://github.com/FrankHB/YSLib/blob/master/YFramework/source/YCLib/Host.cpp#L434
    好吧比 ANSI escape sequence 大概高明那么点?
        5
    FrankHB   8 天前
    嘛上面坑了所以只用了 setaf ……因为背景色相对前景色在 Win32 上的可移植性更不靠谱所以懒得搞了。
    要背景色的话 tput setb/setab。
        6
    nevilleyung   8 天前 via Android
    @jmc891205 是的只在运行程序时变色…其他时候我也会手动调啦…
        7
    nevilleyung   8 天前 via Android
    @ysc3839 😂😂有听说过但是没有找到整个背景变色的,只有输出字体的
        8
    nevilleyung   8 天前 via Android
    @shijingshijing 是运行程序的时候啦
        9
    nevilleyung   8 天前 via Android
    @FrankHB 我好好研究研究。。。
        10
    ysc3839   8 天前
    @nevilleyung 改颜色后空格清屏?
        11
    lcdtyph   8 天前 via iPhone
    ncurses
        12
    nevilleyung   8 天前 via Android
    @lcdtyph 这个我也看过一下…不知道怎么用耶…能指导一下嘛
        13
    nevilleyung   8 天前 via Android
    @ysc3839 好像实现不了…
        14
    lcdtyph   8 天前
    @nevilleyung #12 你自己搜一下吧,我只知道这个库可以搞定你的需求,但是我也不会用= =||
        15
    jssyxzy   8 天前
    是运行的结果整个背景显示一种颜色, 还是根据语义不同, 错误, warning 显示不同颜色.
        16
    mengyaoss77   8 天前 via Android
    exec 系统调用 执行一个 shell 命令试试? 虽然我不知道有没有什么命令能改颜色的
        17
    ysc3839   8 天前 via Android
    @nevilleyung 不会吧?那有的控制台游戏怎么改背景色的?
        18
    sammo   8 天前
    再安一个终端程序,然后特意拿它来干啥
        19
    gnaggnoyil   8 天前
    PDCurses?这需求本质上等价于写一个 CUI 而 POSIX 上的 shell 环境可不保证一定能跑 CUI.

    所以说 Win32 的 conhost 大法好,CUI 是亲儿子 shell 环境才是后娘养的(逃
        20
    owt5008137   7 天前 via Android
    https://github.com/atframework/atframe_utils/blob/master/include/cli/shell_font.h
    https://github.com/atframework/atframe_utils/blob/master/src/cli/shell_font.cpp

    sample:
    util::cli::shell_stream ss(std::cout);
    ss() << util::cli::shell_font_style::SHELL_FONT_COLOR_GREEN << util::cli::shell_font_style::SHELL_FONT_SPEC_BOLD << "绿色粗体" << std::endl;
        21
    shilyx   7 天前
    看起来是没办法实现的。

    linux 上的终端这个程序是谁都可以写的,不同的发行版有不同的配套,连桌面系统都不是原生的,何况桌面系统上的一个终端程序?
    所以你要找的不是通用的改变终端颜色的方案,你要找到你的目标终端,找到他的代码,修改代码留个接口,重编译生成后安装到操作系统上就可以为所欲为了。

    windows 就不一样了,cmd 是操作系统的原生组件,只此一家,通过 system 函数调用命令“ color f0 ”即可实现效果了。
        22
    linux40   7 天前 via Android
    @shilyx 一般来说,支持 xterm 就行了。
        23
    linux40   7 天前 via Android
    @shilyx 说漏了一个,全命令行的话,还要支持 linux。。。
        24
    nevilleyung   7 天前 via Android
    @jssyxzy 是整个背景喔。。。
        25
    nevilleyung   7 天前 via Android
    @mengyaoss77 我也不太会 shell 命令耶…
        26
    nevilleyung   7 天前 via Android
    @shilyx 如果是命令行模式呢…不进图形桌面
        27
    iwtbauh   4 天前
    正确的做法是使用 terminfo 数据库
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   802 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 19ms · UTC 23:01 · PVG 07:01 · LAX 16:01 · JFK 19:01
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1