Измените цветовую схему для терминала xfce4 вручную

Я хочу связать ярлык, чтобы изменить мои соляризованные цветовые схемы (темные и светлые). Для этого мне нужно знать команду для терминала, чтобы изменить его цветовую схему, но я не нашел такой, и мне нужно время от времени переходить в меню настроек и переключать предустановленные схемы. Есть ли способ сделать такой вид переключателя для цветовых схем терминала?

3 ответа

Решение

Терминал XFCE4 сохраняет пользовательские настройки в $XDG_CONFIG_HOME/xfce4/terminal/terminalrc (Как правило, ~/.config/xfce4/terminal/terminalrc - может не существовать, если вы не изменили какие-либо настройки). Я обнаружил, что XFCE4 Terminal следит за этим файлом и перезагружает настройки при его изменении, поэтому вы можете записать в этот файл изменения настроек.

Тем не менее, нет единой записи, которую можно редактировать, чтобы изменить цвета. Различные палитры на самом деле представляют собой набор настроек. Например:

$ cat /usr/share/xfce4/terminal/colorschemes/solarized-dark.theme 
[Scheme]
Name=Solarized (dark)
Name[bg]=Златисто (тъмно)
Name[fr]=Solarisé (foncé)
Name[nl]=Overbelicht (donker)
Name[th]=ในแสงแดด (มืด)
Name[uk]=Золотистий (темний)
ColorForeground=#839496
ColorBackground=#002b36
ColorCursor=#93a1a1
TabActivityColor=#dc322f
ColorPalette=#073642;#dc322f;#859900;#b58900;#268bd2;#d33682;#2aa198;#eee8d5;#002b36;#cb4b16;#586e75;#657b83;#839496;#6c71c4;#93a1a1;#fdf6e3
ColorBold=#93a1a1
ColorBoldUseDefault=FALSE

А также terminalrc будет выглядеть так:

$ cat .config/xfce4/terminal/terminalrc                           
[Configuration]
ColorForeground=#839496
FontName=Ubuntu Mono 12
ColorBackground=#002b36
ColorCursor=#93a1a1
ColorBold=#93a1a1
ColorBoldUseDefault=FALSE
ColorPalette=#073642;#dc322f;#859900;#b58900;#268bd2;#d33682;#2aa198;#eee8d5;#002b36;#cb4b16;#586e75;#657b83;#839496;#6c71c4;#93a1a1;#fdf6e3
TabActivityColor=#dc322f
TabActivityColor=#dc322f

Как видно, нет никакого способа легко определить, из какой палитры пришли цвета.

Сценарии этого не кажутся безопасными, но вот неэффективная попытка:

#! /bin/bash
if ! [[ -f /usr/share/xfce4/terminal/colorschemes/$1.theme ]]
then
    echo "No such colorscheme: $1"
    exit 1
fi
cd ~/.config/xfce4/terminal
# strip settings from any themes
grep -Fxvf <(cat /usr/share/xfce4/terminal/colorschemes/*.theme) terminalrc > .terminalrc.tmp
grep -v -e Name -e Scheme "/usr/share/xfce4/terminal/colorschemes/$1.theme" >> .terminalrc.tmp
cp terminalrc terminalrc.bak
mv .terminalrc.tmp terminalrc

Скопируйте это где-нибудь в вашем PATH (например, ~/bin/xfce-color-switch). Затем:

$ xfce4-color-switch dark-pastels

$ xfce4-color-switch solarized   
No such colorscheme: solarized
$ xfce4-color-switch solarized-dark

Вы должны будете помнить имена цветов схемы, но я добавлю инструкции о том, как добавить завершение табуляции, как только я их выясню.

Лучшим подходом было бы: создать свою собственную цветовую схему и позволить себе выбрать одну из множества.

Для этого создайте каталог:

mkdir -p ~/.local/share/xfce4/terminal/colorschemes

И поместите такие файлы внутри:

[Scheme]
Name=my good profile
ColorForeground=#4ccd4ccd4ccd
ColorBackground=#f851f465ebe7
TabActivityColor=#d8d8a9a97f7f
ColorCursor=#f0f0b6b66666
ColorSelection=#16163b3b5959
ColorPalette=rgb(0,0,0);rgb(170,0,0);rgb(0,170,0);rgb(170,85,0);rgb(0,0,170);rgb(170,0,170);rgb(0,138,138);rgb(170,170,170);rgb(85,85,85);rgb(255,85,85);rgb(85,255,85);rgb(196,160,0);rgb(85,85,255);rgb(255,85,255);rgb(68,204,204);rgb(255,255,255)

Если у вас есть уже настроенный файл Terminalrc в вашем ~/.config/xfce4/terminal каталог, вы можете просто скопировать соответствующие строки.

После этого ваша новая цветовая схема появится в основном списке. Таким образом, вы можете, например, иметь как собственную тему белого цвета, так и собственную черную.

От Gogh применяются цветовые темы для xfce4-терминала (https://github.com/Gogh-Co/Gogh/blob/master/apply-colors.sh#L809):

      # XFCE4 terminal has no profiles, instead it uses color presets
SCHEMEDIR="${HOME}/.local/share/xfce4/terminal/colorschemes"
CONFFILE="${HOME}/.config/xfce4/terminal/terminalrc"

if [[ ! (-w "${CONFFILE}") ]]; then
    if [[ -r "${XDG_CONFIG_DIRS%%:*}/Terminal/terminalrc" ]]; then
        cp "${XDG_CONFIG_DIRS%%:*}/Terminal/terminalrc" ${CONFFILE}
    else
        echo "ERROR: config file not present or not writable!"
        exit 1
    fi
fi

[[ -d "${SCHEMEDIR}" ]] || mkdir -p "${SCHEMEDIR}"

F_NAME=${PROFILE_NAME// /-}
F_NAME=$(echo ${F_NAME} | tr -d ":()")
F_NAME=$(echo "${F_NAME}" | awk '{print tolower($0)}')

FF_NAME="${SCHEMEDIR}/${F_NAME}.theme"

touch "${FF_NAME}"

L_COLORCURSOR="ColorCursor=${CURSOR_COLOR}"
L_COLORPALETTE="ColorPalette=${COLOR_01};${COLOR_02};${COLOR_03};${COLOR_04};${COLOR_05};${COLOR_06};${COLOR_07};${COLOR_08};${COLOR_09};${COLOR_10};${COLOR_11};${COLOR_12};${COLOR_13};${COLOR_14};${COLOR_15};${COLOR_16}"

printf '%s\n' \
    "; Generated by Gogh" \
    "; https://Gogh-Co.github.io/Gogh" \
    "[Scheme]" \
    "Name=${PROFILE_NAME}" \
    "ColorForeground=${FOREGROUND_COLOR}" \
    "ColorBackground=${BACKGROUND_COLOR}" \
    "${L_COLORCURSOR}" \
    "${L_COLORPALETTE}" \
    "ColorCursorUseDefault=FALSE" > ${FF_NAME}

# apply last theme in queue
# xfce4-terminal monitors its rc file and doesn't reference
# any of the themes in there. The color settings need to
# be written there directly.
if ((LOOP == OPTLENGTH)); then
    read -r -p "All done - apply new theme? [y/N] " -n 1 XFCE4_APPLY_CURR_THEME
    if [[ ${XFCE4_APPLY_CURR_THEME::1} =~ ^(y|Y)$ ]]; then
        if grep -q "^ColorPalette=" "${CONFFILE}"; then
            sed -i -r -e "s/^ColorPalette=.*/${L_COLORPALETTE}/" "${CONFFILE}"
        else
            echo "${L_COLORPALETTE}" >> "${CONFFILE}"
        fi

        if grep -q "^ColorCursor=" "${CONFFILE}"; then
            sed -i -r -e "s/^ColorCursor=.*/${L_COLORCURSOR}/" "${CONFFILE}"
        else
            echo "${L_COLORCURSOR}" >> "${CONFFILE}"
        fi

        if grep -q "^ColorForeground=" "${CONFFILE}"; then
            sed -i -r -e "s/^ColorForeground=.*/ColorForeground=${FOREGROUND_COLOR}/" "${CONFFILE}"
        else
            echo "ColorForeground=${FOREGROUND_COLOR}" >> "${CONFFILE}"
        fi

        if grep -q "^ColorBackground=" "${CONFFILE}"; then
            sed -i -r -e "s/^ColorBackground=.*/ColorBackground=${BACKGROUND_COLOR}/" "${CONFFILE}"
        else
            echo "ColorBackground=${BACKGROUND_COLOR}" >> "${CONFFILE}"
        fi

        if grep -q "^ColorCursorUseDefault=FALSE" "${CONFFILE}"; then
            true
        else
            echo "ColorCursorUseDefault=FALSE" >> "${CONFFILE}"
        fi
    fi
fi

unset SCHEMEDIR
unset CONFFILE
unset PROFILE_NAME
unset F_NAME
unset FF_NAME
unset L_COLORCURSOR
unset L_COLORPALETTE
exit 0

Это не полный код, но может быть полезен.

Другие вопросы по тегам