从 bash 脚本设置 gnome 终端背景/文本颜色

从 bash 脚本设置 gnome 终端背景/文本颜色

我想#002b36使用 bash 脚本在 ubuntu 13 中设置 gnome 终端的背景()和前景色。

我尝试过gconftool但没有成功。

GCONFTOOL-2(1)                  User Commands                                                    GCONFTOOL-2(1)

NAME
       gconftool-2 - GNOME configuration tool

我的gnome terminal版本是

$ gnome-terminal --version
GNOME Terminal 3.6.1

在此输入图像描述

目前我正在使用 ubuntu 终端首选项 UI 来实现此目的。

在此输入图像描述

答案1

方法#1 - 使用 dconf

背景

您可以使用该dconf工具来完成此操作,但这是一个多步骤的过程。

DESCRIPTION
       The dconf program can perform various operations on a dconf database, 
       such as reading or writing individual values or entire directories.
       This tool operates directly on the dconf database and does not read 
       gsettings schema information.Therefore, it cannot perform type and 
       consistency checks on values. The gsettings(1) utility is an 
       alternative if such checks are needed.

用法

$ dconf
error: no command specified

Usage:
  dconf COMMAND [ARGS...]

Commands:
  help              Show this information
  read              Read the value of a key
  list              List the contents of a dir
  write             Change the value of a key
  reset             Reset the value of a key or dir
  update            Update the system databases
  watch             Watch a path for changes
  dump              Dump an entire subpath to stdout
  load              Populate a subpath from stdin

Use 'dconf help COMMAND' to get detailed help.

一般的做法

  1. 首先,您需要获取您的gnome-terminal个人资料列表。

    $ dconf list /org/gnome/terminal/legacy/profiles:/
    <profile id>
    
  2. 使用它<profile id>,您可以获得可配置设置的列表

    $ dconf list /org/gnome/terminal/legacy/profiles:/<profile id>
    background-color
    default-size-columns
    use-theme-colors
    use-custom-default-size
    foreground-color
    use-system-font
    font
    
  3. 然后您可以读取前景或背景的当前颜色

    前景

    $ dconf read /org/gnome/terminal/legacy/profiles:/<profile id>/foreground-color
    'rgb(255,255,255)'
    

    背景

    $ dconf read /org/gnome/terminal/legacy/profiles:/<profile id>/background-color
    'rgb(0,0,0)'
    
  4. 您也可以更改颜色

    前景

    $ dconf write /org/gnome/terminal/legacy/profiles:/<profile id>/foreground-color "'rgb(255,255,255)'"
    

    背景

    $ dconf write /org/gnome/terminal/legacy/profiles:/<profile id>/background-color "'rgb(0,0,0)'"
    

例子

  1. 获取我的个人资料 ID

    $ dconf list /org/gnome/terminal/legacy/profiles:/
    :b1dcc9dd-5262-4d8d-a863-c897e6d979b9/
    
  2. 使用配置文件 ID 获取设置列表

    $ dconf list /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/
    background-color
    default-size-columns
    use-theme-colors
    use-custom-default-size
    foreground-color
    use-system-font
    font
    
  3. 将背景更改为蓝色

    $ dconf write /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/background-color "'rgb(0,0,255)'"
    

              SS #1

关于颜色的注释

rgb(R,G,B)您可以使用指定颜色时的表示法或散列表示法#RRGGBB。在这两种符号中,参数都是红色、绿色和蓝色。第一种表示法中的值是 0-255 范围内的整数(代表 R、G 或 B)。在第二种表示法中,这些值是十六进制,范围是从 00 到 FF(代表 RR、GG 或 BB)。

当提供其中任何一个时,dconf您需要将其正确地用双引号括起来,并在其中嵌套单引号。不然dconf会投诉。

  • "'rgb(0,0,0)'"
  • "'#FFFFFF'"
  • ETC。

方法 #2 - 使用 gconftool-2

在我的 Ubuntu 12.04 系统上,我可以通过命令行更改颜色,如下所示。

笔记:这些选项最终存储在该文件中$HOME/.gconf/apps/gnome-terminal/profiles/Default/%gconf.xml

一般的做法

  1. 首先,您需要获取 的gnome-terminal个人资料树。

    $ gconftool-2 --get /apps/gnome-terminal/global/profile_list
    [Default]
    
  2. 使用生成的树,我们可以找出哪些属性是可配置的。

    $ gconftool-2 -a "/apps/gnome-terminal/profiles/Default" | grep color
     bold_color_same_as_fg = true
     bold_color = #000000000000
     background_color = #FFFFFFFFFFFF
     foreground_color = #000000000000
     use_theme_colors = false
    
  3. 获取/设置background_color&foreground_color属性

    $ gconftool-2 --get "/apps/gnome-terminal/profiles/Default/foreground_color"
    #000000000000
    
    $ gconftool-2 --set "/apps/gnome-terminal/profiles/Default/background_color" --type string "#000000FFFFFF"    
    
  4. 确认

    $ gconftool-2 -R /apps/gnome-terminal/profiles/Default | grep color
     bold_color_same_as_fg = true
     bold_color = #000000000000
     background_color = #000000FFFFFF
     foreground_color = #000000000000
     use_theme_colors = true
    

参考

答案2

我基于其他线程的 Github 代码创建了一些函数。您可以将这些函数放入您的~/.bashrc文件中。如您所见,如果您致电create_random_profile

  1. 它将检查并删除您之前创建的任何随机配置文件。
  2. 它将在 gnome 终端中创建一个随机名称配置文件。
  3. 它将在环境变量中设置该名称,您可以使用该环境变量来更改预定义函数中的颜色。请参阅最后一个函数setcolord.

这应该很有用,可以让许多终端具有不同的颜色。此外,通过预定义的函数,您可以即时更改这些颜色。

function create_random_profile() {
    #delete previous profiles in case there were something
    #delete_one_random_profile
    prof="`mktemp -u HACK_PROFILE_XXXXXXXXXX`"
    gconftool-2 --set "/apps/gnome-terminal/profiles/$prof/use_theme_colors" --type bool false
    gconftool-2 --type list --list-type string --set $prof_list "`gconftool-2 --get $prof_list | sed "s/]/,$prof]/"`"
    file="`mktemp`"
    gconftool-2 --dump "/apps/gnome-terminal/profiles/Default" | sed "s,profiles/$2,profiles/$prof,g" > "$file"
    gconftool-2 --load "$file"
    gconftool-2 --type string --set "/apps/gnome-terminal/profiles/$prof/visible_name" "$prof"
    rm -f -- "$file"
    export __TERM_PROF=$prof
}

function delete_one_random_profile() {
    regular="HACK_PROFILE_"
    prof=$(gconftool-2 --get /apps/gnome-terminal/global/profile_list | sed -n "s/.*\(HACK_PROFILE_..........\).*/\1/p")
    if [ ! -z "$prof"]; then
        echo "size ${#prof}"
        echo "size of regular ${#regular}"
        echo "DO DELETE of $prof"
        #if not empty
        gconftool-2 --type list --list-type string --set $prof_list "`gconftool-2 --get $prof_list | sed "s/$prof//;s/\[,/[/;s/,,/,/;s/,]/]/"`"
        gconftool-2 --unset "/apps/gnome-terminal/profiles/$prof"
    else
        echo "NOTHING TO DELETE"
    fi
}

function setcolord() {
    echo "Dont forget to change to Profile0 in the menu of your terminal->Change Profile->Profile_0"
    gconftool-2 --set "/apps/gnome-terminal/profiles/$__TERM_PROF/background_color" --type string white
    gconftool-2 --set "/apps/gnome-terminal/profiles/$__TERM_PROF/foreground_color" --type string black
}

function setcolor_cyan() {
    echo "Dont forget to change to $__TERM_PROF in the menu of your terminal->Change Profile->Profile_0"
    gconftool-2 --set "/apps/gnome-terminal/profiles/$__TERM_PROF/background_color" --type string "#8DCBCC"
    gconftool-2 --set "/apps/gnome-terminal/profiles/$__TERM_PROF/foreground_color" --type string black
}

答案3

Gogh 主题选择器有很多脚本可以将主题添加到 Gnome 终端首选项中。最简单的就是看我对另一个问题的回答使用Gogh。

但是,如果您想查看原始脚本,这大致就是它的工作原理。

您可以看到它用于颜色的基本 bash 变量,例如https://github.com/Gogh-Co/Gogh/blob/master/themes/solarized-light.sh:

export COLOR_01="#073642"           # HOST
export COLOR_02="#DC322F"           # SYNTAX_STRING
export COLOR_03="#859900"           # COMMAND
export COLOR_04="#B58900"           # COMMAND_COLOR2
export COLOR_05="#268BD2"           # PATH
export COLOR_06="#D33682"           # SYNTAX_VAR
export COLOR_07="#2AA198"           # PROMP
export COLOR_08="#EEE8D5"           #

export COLOR_09="#002B36"           #
export COLOR_10="#CB4B16"           # COMMAND_ERROR
export COLOR_11="#586E75"           # EXEC
export COLOR_12="#657B83"           #
export COLOR_13="#839496"           # FOLDER
export COLOR_14="#6C71C4"           #
export COLOR_15="#93A1A1"           #
export COLOR_16="#FDF6E3"           #

export BACKGROUND_COLOR="#FDF6E3"   # Background Color
export FOREGROUND_COLOR="#657B83"   # Text
BOLD_COLOR="#586E75"         # Bold
export CURSOR_COLOR="$FOREGROUND_COLOR" # Cursor
export PROFILE_NAME="Solarized Light"

然后使用这些参数https://github.com/Gogh-Co/Gogh/blob/master/apply-colors.sh。这似乎是它的核心:

set_theme() {
  dset visible-name                    "'${PROFILE_NAME}'"
  dset background-color                "'${BACKGROUND_COLOR}'"
  dset foreground-color                "'${FOREGROUND_COLOR}'"
  dset cursor-colors-set               "true"
  dset cursor-background-color         "'${CURSOR_COLOR}'"
  dset cursor-foreground-color         "'${BACKGROUND_COLOR}'"

  if [[ -n "${HIGHLIGHT_BG_COLOR:-}" ]]; then
    dset   highlight-colors-set        "true"
    dset   highlight-background-color  "'${HIGHLIGHT_BG_COLOR}'"
    if [[ -n "${HIGHLIGHT_FG_COLOR:-}" ]]; then
      dset   highlight-foreground-color  "'${HIGHLIGHT_FG_COLOR}'"
    fi
  fi

  if [[ -n "${BOLD_COLOR:-}" ]]; then
    dset   bold-color                  "'${BOLD_COLOR}'"
    dset   bold-color-same-as-fg       "false"
  else
    dset   bold-color                  "'${FOREGROUND_COLOR}'"
    dset   bold-color-same-as-fg       "true"
  fi
  dset     use-theme-colors            "false"
  dset     use-theme-background        "false"
  dset     use-theme-transparency      "${USE_SYS_TRANSPARENCY:-false}"
}

相关内容