Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
ycfung
V2EX  ›  Linux

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

  •  
  •   ycfung ·
    ycfung · May 16, 2018 via Android · 6158 views
    This topic created in 2911 days ago, the information mentioned may be changed or developed.

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

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

    所以说 Win32 的 conhost 大法好,CUI 是亲儿子 shell 环境才是后娘养的(逃
    owt5008137
        20
    owt5008137  
       May 17, 2018 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;
    shilyx
        21
    shilyx  
       May 17, 2018
    看起来是没办法实现的。

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

    windows 就不一样了,cmd 是操作系统的原生组件,只此一家,通过 system 函数调用命令“ color f0 ”即可实现效果了。
    linux40
        22
    linux40  
       May 17, 2018 via Android
    @shilyx 一般来说,支持 xterm 就行了。
    linux40
        23
    linux40  
       May 17, 2018 via Android
    @shilyx 说漏了一个,全命令行的话,还要支持 linux。。。
    ycfung
        24
    ycfung  
    OP
       May 17, 2018 via Android
    @jssyxzy 是整个背景喔。。。
    ycfung
        25
    ycfung  
    OP
       May 17, 2018 via Android
    @mengyaoss77 我也不太会 shell 命令耶…
    ycfung
        26
    ycfung  
    OP
       May 17, 2018 via Android
    @shilyx 如果是命令行模式呢…不进图形桌面
    iwtbauh
        27
    iwtbauh  
       May 20, 2018
    正确的做法是使用 terminfo 数据库
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5732 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 65ms · UTC 08:08 · PVG 16:08 · LAX 01:08 · JFK 04:08
    ♥ Do have faith in what you're doing.