Изменение цветов в консоли/виртуальном терминале

Изменение цветов в консоли/виртуальном терминале

Есть ли способ изменить все доступные цвета в консоли / виртуальном терминале?
Под консолью я подразумеваю то, что вы получаете после нажатия CTRL + ALT + F1, а не что-то вроде xterm или urxvt. Так что, я думаю, это будет означать изменить

Я могу изменить 8 цветов, используя escape-последовательности, например:

echo -en "\e]PY######"

где Y — числовой идентификатор цвета (от 0 до 7), а ###### — шестнадцатеричное значение цвета.

Моя конечная цель — перенести цветовую схему Solarized на консоль, потому что я хочу, чтобы Vim выглядел одинаково, независимо от того, играю ли я на консоли или на X.

Есть ли какие-нибудь предложения по этому поводу?

htop в xterm:
htop в xterm, соляризованные цвета

htop в консоли, после применения 8 цветов:
htop в консоли, после применения 8 цветов я мог

решение1

Консоль буфера кадра TTY не может поддерживать более 8–16 цветов без взлома ядра, см. эту цитату: «Хотя буфер кадра Linux поддерживает 256 (или более) цветов, драйвер консоли Linux этого не делает; поэтому консольные приложения по-прежнему ограничены 16 цветами на консоли Linux, независимо от наличия буфера кадра».

Таким образом, у вас может быть не более 16 или 8 цветов. Существует руководство по изменению цветов для терминала фреймбуфера (он же ctrl+alt+1) с помощью тех же команд, которые вы описали в ~/.bashrc:цвета в учебнике TTY

решение2

Попробуйте эту функцию bash в консоли. Как ни странно, она не работает в X-терминале (я думаю, из-за вкладок). Особенно обратите внимание на три последних использованных файла, а именно

/sys/module/vt/parameters/default_red
/sys/module/vt/parameters/default_grn
/sys/module/vt/parameters/default_blu

clr () {
    clear # GFX bug otherwise
    setterm -regtabs 4
    Color_names="bla red gre yel blu mag cya whi"
    Color_arr=($Color_names)

    tput setaf 4
    tput setab 7
    echo -n "            normal             "
    tput sgr0

    echo -n " "

    tput setaf 7
    tput setab 4   
    echo "            bright             "

    tput sgr0
    for cmd in sgr0 bold
    do
        tput $cmd
        for m in 0 1 2 3 4 5 6 7
        do
            tput setaf $m
            echo -n ${Color_arr[$m]}" "
        done
    done
    echo

    tput sgr0
    cat /sys/module/vt/parameters/default_red \
        /sys/module/vt/parameters/default_grn \
        /sys/module/vt/parameters/default_blu | sed s/,0/", "/g | \
                                                sed s/^0/" "/g | \
                                                tr "," "\t"
}

Редактировать в ответ на комментарий

Например, измените вторую цифру в зеленом файле ( sys/module/vt/parameters/default_grn) на 170- это даст второму цвету (с индексом 1) столько же зеленого, сколько и красного, и никакого синего (по крайней мере, в моем случае, потому что у меня есть соответствующая цифра в default_red 170, и 0в default_blu).

Теперь введите tput setaf 1; echo hi. Здесь вы устанавливаете цвет переднего плана на цвет с индексом 1 (тот, который вы изменили), затем печатаете его. (Обратите внимание на однострочник с двоеточием для разделения команд, иначе ваша подсказка может сбросить промежуток tput.)

Если он выглядит так же, как всегда, попробуйте echo -n '\033]R'и затем tputлинию снова. Теперь,оба«привет» должен быть желтоватым.

Дайте мне знать, если у вас это получится (или нет).

Связанный контент