Файловая система в оперативной памяти для Windows

В обоих ответах здесь не упоминается поддержка Truecolor ANSI для цвета 8 бит / с. Это даст цвет RGB, который первоначально запрашивал OP.

Вместо ;5 используйте ;2 и укажите значения R , G и B (0-255) в следующих три контрольных сегмента.

\x1b[38;2;40;177;249m

Чтобы проверить , поддерживает ли ваш терминал Truecolor :

printf "\x1b[38;2;40;177;249mTRUECOLOR\x1b[0m\n"

На моей машине XTerm успешно вывел правильный цвет; хотя терминалы, которые смоделированы после терминалов, которые предшествуют современному цвету RGB, обычно не будут поддерживать truecolor - убедитесь, что вы знаете свою цель, прежде чем использовать этот конкретный вариант escape-кода.


Я также хотел бы отметить 38 и ;5 / ;2 - Blue Ice упомянул , что 38 направляет, а затем 5 меняет цвет , Это немного неверно.

38 - расширенный код цвета переднего плана xterm-256; 30 - 37 - это просто 16-цветовые коды переднего плана (с яркостью, управляемой escape-кодом 1 в некоторых системах, и, возможно, поддерживаемые 90 - 97 нестандартные «яркие» коды), которые поддерживается всеми цветными терминалами, совместимыми с vt100 / xterm.

;2 и ;5 указывают формат цвета, в конечном итоге сообщая терминалу, сколько еще последовательностей нужно извлечь: ;5 задает 8-битный формат (как упомянуто Blue Ice), требующий только еще 1 управляющего сегмента и ;2 указание полного 24-битного формата RGB, требующего 3 управляющих сегмента.

Эти расширенные режимы технически «недокументированы» и полностью определены реализацией. Насколько я знаю и могу исследовать, они не управляются комитетом ANSI.


Для такого наклонного формата 5; (256 цветов) начинается с 16 исходных цветов (темных / светлых, т. е. 30-37 и 90-97) в качестве цветов 0-15.

Исходящие 216 цветов (16-231) образованы смещением значения RGB на 3 бит / с на 16, упакованным в одно значение.

Последние 24 цвета (232-256) имеют оттенки серого, начиная с оттенка, слегка светлее черного, вплоть до оттенка, немного темнее белого. Некоторые эмуляторы интерпретируют эти шаги как линейные приращения от (256 / 24) на всех трех каналах, хотя я встречал некоторые эмуляторы, которые явно определяют эти значения.

Вот функция Javascript, которая выполняет такое преобразование, принимая во внимание все серые.

function rgbToAnsi256(r, g, b) {
    // we use the extended greyscale palette here, with the exception of
    // black and white. normal palette only has 4 greyscale shades.
    if (r === g && g === b) {
        if (r < 8) {
            return 16;
        }

        if (r > 248) {
            return 231;
        }

        return Math.round(((r - 8) / 247) * 24) + 232;
    }

    var ansi = 16
        + (36 * Math.round(r / 255 * 5))
        + (6 * Math.round(g / 255 * 5))
        + Math.round(b / 255 * 5);

    return ansi;
}

Таким образом, вы можете вычислить 256 цветов ANSI из начальных значений RGB, уменьшив их с 8 до 3 бит, чтобы сформировать 256 закодированное значение в событии, которое вы хотите программно сделайте это на терминалах, которые не поддерживают Truecolor.

5
задан skaffman 13 December 2010 в 11:28
поделиться

2 ответа

Вам также следует подумать, действительно ли вам это нужно (преждевременная оптимизация, ядда, ядда). Во всех современных операционных системах ввод-вывод файловой системы в любом случае кэшируется, поэтому часто используемые файлы работают практически так же быстро, как RAM-диск.

Связанный вопрос (с множеством хороших ответов): RAM-диск для компиляции - существует ли такая вещь?

7
ответ дан 13 December 2019 в 19:34
поделиться

Commons VFS предоставляет удобные интерфейсы для виртуальных файловых систем, включая файловую систему в памяти.

4
ответ дан 13 December 2019 в 19:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: