【问题标题】:Color listing in xterm terminalxterm 终端中的颜色列表
【发布时间】:2015-11-19 21:16:38
【问题描述】:

我安装了一个最小的 debian,我试图自己设置所有东西,所以我试图通过给它一些颜色来调整我的默认终端 Xterm,经过一些研究我发现这可以通过编辑来完成.Xresources 文件,因此我可以在 Hexa 代码 (#numbers) 中或通过编辑 .bashrc 文件来提供前 16 种颜色。 经过一些研究,似乎第二种解决方案更加动态,因为我可以通过扩展名指定文件的颜色,问题是网上所有的文章都使用非常奇怪的颜色代码:

.gz  01;31
.bz2 01;31
.deb 07;31
.rpm 01;31
.jar 01;31

我想知道是否有办法使用 RGB 代码颜色或六色颜色,以便我可以更灵活地使用我的目录和文件列表。

【问题讨论】:

    标签: linux bash terminal debian xterm


    【解决方案1】:

    正如@Leonardo Fontenelle 所述,开始阅读 GNU ls 着色的地方是 dir_colors 手册页。使用的数字,例如01;31 是与手册页所指的“ISO 6429 (ANSI) 颜色序列”相关的常量。实际上,手册页比应有的更晦涩:

    • 常量是在 ISO 6429 SGR设置图形再现)控制序列中使用的参数。实际标准非常详细(见ECMA-48)。
    • 01 恰好是 bold 的标准代码(手册使用以 Linux 为中心的“更亮的颜色*”来引用它)。
    • @higuaro 所述,代码 30-37 和 40-47 形成一个调色板;终端上随时显示的所有颜色都来自当前调色板。
    • 更新xterm使用的调色板的方法不止一种;这些都与ls 配置没有直接关系,因为用于引用调色板的数字本身不包含颜色信息。
    • 您可以使用 ncurses tput 实用程序(例如 tput setaf 7)显示 colorsvideo 属性
    • 一些(相对)最近的 ls 配置使用 30-37 / 40-47 调色板之外的其他颜色代码,例如,aixterm 16 色功能或 xterm 88 色或 256-颜色。 dir_colors 手册页没有提到这一点。

    【讨论】:

      【解决方案2】:

      AFAIK,没有 RGB 支持,终端仿真器仅限于显示一组有限的颜色(如果我没记错的话,一个带有 64 种前景和背景组合的调色板)。如果您关心的是易用性,您始终可以为预定义的颜色声明几个变量,例如:

      readonly BLACK_FONT_BLACK_BACKGROUND='30;40'     
      readonly BLACK_FONT_RED_BACKGROUND='30;41'       
      readonly BLACK_FONT_GREEN_BACKGROUND='30;42'     
      readonly BLACK_FONT_YELLOW_BACKGROUND='30;43'
      ...
      readonly WHITE_FONT_CYAN_BACKGROUND='37;46'
      readonly WHITE_FONT_WHITE_BACKGROUND='37;47'
      

      然后像这样使用它们:

      .gz  $BLACK_FONT_YELLOW_BACKGROUND
      

      下表是前景和背景颜色代码的表格:

        Color   Foreground   Background
        -------------------------------
        black       30           40
        red         31           41
        green       32           42
        yellow      33           43
        blue        34           44
        magenta     35           45
        cyan        36           46
        white       37           47
        -------------------------------
      

      如果手动生成所有颜色名称变量太繁琐,可以使用以下python脚本:

       colors = ['black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white']; 
       index = 0
       for x in ["{0}_FONT_{1}_BACKGROUND='{2};{3}'".format(colors[i].upper(), colors[j].upper(), i + 30, j + 40) for i in xrange(0, 8) for j in xrange(0, 8)]: 
           print x.ljust(38) + "#" + str(index) 
           index += 1
      

      【讨论】:

      • 谢谢先生!我可以结合使用 .Xresource 文件和 .bashrc 来获得一些特殊的扩展名吗?
      • 您的意思是创建一个新的特殊文件并同时包含.Xresource.bashrc 文件吗?是的,您可以通过键入 source ~/.bashrc 将它们包含在任何脚本中
      • 我的意思是我可以给我的 .Xressources 文件在 hexa 代码中的 16 种第一种颜色,对于一些特殊文件,如源文件(c++ 头文件和 cpp 文件),可以使用 .bashrc 文件不同的颜色吗?
      • 是的,是可能的,不过要注意文件的加载顺序,还要考虑到.Xresources的用法是deprecated
      • 谢谢。我使用 xrdb 按照 arch wiki 页面中的建议加载文件。
      【解决方案3】:

      很抱歉,您不能使用 RBG 颜色代码(或 HSV 或 HCL)。您可以通过以下方式找到文档:

      $ man 5 dir_colors
      

      【讨论】:

      • 那么我该如何使用特殊颜色呢?我可以使用某种表格或转换吗?
      • @Habchi、Higaro 和 Thomas Dickley 扩展了我的答案,并可能回答了此评论。如果其中任何一个解决了您的问题,您应该证明答案!
      猜你喜欢
      • 2011-11-28
      • 2010-11-09
      • 2014-07-04
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      相关资源
      最近更新 更多