Измените цветовую схему для терминала 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
Это не полный код, но может быть полезен.