Как выделить праздники цветом в команде cal

Вопрос или проблема

Я хочу выделить праздники цветом в cal или аналогичной команде.

Я использую ОС X и Ubuntu 14, есть ли простой способ включить эту функцию?

Я не думаю, что это возможно для стандартного cal, но вы можете посмотреть на gcal, GNU календарь.

Чтобы выделить текст, вам нужно передать опцию -H:

-H text
--highlighting=text
    Установить последовательность выделения / характерные пары символов явно.
    В этом смысле последовательности выделения являются управляющими последовательностями 
    символов, которые вызывают переключение цвета или интенсивности в выводимом тексте. 
    Типичные управляющие последовательности символов — это ANSI escape последовательности [...]

Там даже есть пример выделения праздников в руководстве:

Например:

-H \x20:\x20:\x1:# соответственно
--highlighting=\x20:\x20:\x1:#
отмечает текущий день как ‘\x20текущая дата\x20’6, а дату праздника как 
‘\x1дата праздника#’ с использованием заданных контрольных символов. 

-H \x1b[34;42m:\x1b[0;40m или
-H \033[34;42m:\033[0;40m или
-H \E[34;42m:\E[0;40m
определяет начальную последовательность ANSI escape для выделения ‘\x1b[34;42m’, 
используемую для текущего дня, и конечную последовательность ANSI escape для 
выделения ‘\x1b[0;40m’ без заданной последовательности выделения для праздников, 
поэтому для праздников используются последовательности выделения по умолчанию 
(незаданные записи всегда пропускаются).

Пример:

  • Для выделения текущего дня в синий цвет, а праздников в Соединенных Штатах/Аляске (US_AK) в зеленый цвет для текущего месяца:

    gcal -H '\e[34m:\e[0m:\e[32m:\e[0m' -q US_AK
    

    Примечание: 34 — это ANSI код для синего цвета переднего плана, а 32 — для зеленого

    Результаты:

    введите здесь описание изображения

  • Для отображения текущего дня в красном (31) на зеленом фоне (42), а китайских (CN) праздников в желтом (33) на мадженте (45) для всего 2014 года

    gcal -H '\e[31;42m:\e[0m:\e[33;45m:\e[0m' -q CN 2014
    

Вы найдете все коды стран в info gcal в описании опции -q.

Вы МОЖЕТЕ получить цветной вывод с помощью старой команды cal через terminal-colors.d

mkdir -p ~/.config/terminal-colors.d && \ 
echo -e 'weekend 35\ntoday 1;41\nheader yellow' > $HOME/.config/terminal-colors.d/cal.scheme

введите здесь описание изображения

Ответ или решение

Для того, чтобы выделить праздники цветом при использовании команды cal, существует несколько подходов. В стандартной версии cal, такой возможности нет, однако используя расширенные утилиты, такие как gcal, вы можете достичь желаемого результата. Давайте рассмотрим, как это сделать на Mac OS X и Ubuntu 14, которые вы упомянули.

Теория

Основное ограничение команды cal заключается в её минималистичности и отсутствии поддержки цветного вывода. Это серьёзное препятствие, если вы хотите выделять определённые дни, такие как праздничные, с помощью цветовых схем. Однако, альтернатива в виде программы gcal (GNU Calendar) предоставляет гораздо более гибкие возможности.

Основная идея использования gcal состоит в том, чтобы применять управляющие последовательности ANSI для изменения цвета текста в терминале. ANSI-коды позволяют управлять цветом фона и текста, что делает возможным выделение текущих дат и праздничных дней в календаре.

Пример реализации

Для того чтобы использовать gcal с цветным выводом, необходимо выполнить следующие шаги:

  1. Установите gcal: На Ubuntu вы можете установить его следующим образом:

    sudo apt-get update
    sudo apt-get install gcal

    На Mac OS X можно использовать пакетный менеджер Homebrew:

    brew install gcal
  2. Используйте опцию -H для настройки выделения: В этом флаге можно указать последовательность, которая будет включать и отключать цветовое выделение. Например, чтобы выделить текущий день синим цветом, а праздники зелёным, выполните:

    gcal -H '\e[34m:\e[0m:\e[32m:\e[0m' -q US_AK

    Здесь \e[34m включает синий цвет текста для текущего дня, \e[32m — зелёный для праздников, а \e[0m возвращает цвет к стандартному.

  3. Выберите нужную страну или регион: Например, для отображения праздников на определённой территории, используйте:

    gcal -q US_AK 2023

    Чтобы получить список всех доступных кодов стран, можно использовать команду info gcal.

Применение

Предположим, вы хотите выделять текущий день на красном фоне и китайские праздники на желтом. Для этого выполните:

gcal -H '\e[31;42m:\e[0m:\e[33;45m:\e[0m' -q CN 2023

Здесь 31;42 задаёт текст красного цвета на зелёном фоне для текущего дня, а 33;45 — жёлтый текст на пурпурном фоне для праздников.

Кроме использования gcal, есть возможность добавить цветовой вывод к старой доброй команде cal, используя настройки terminal-colors.d в вашей системе.

Настройка terminal-colors.d для команды cal:

  1. Создайте конфигурационный файл:

    mkdir -p ~/.config/terminal-colors.d
    echo -e 'weekend 35\ntoday 1;41\nheader yellow' > ~/.config/terminal-colors.d/cal.scheme
    • Здесь 35 — пурпурный цвет для выходных,
    • 1;41 — белый текст на красном фоне для текущей даты,
    • yellow — жёлтый цвет для заголовка.

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

Заключение

Использование цветового выделения в календарных утилитах значительно улучшает читаемость и восприятие информации. Выделение праздников и текущих дат позволяет быстро ориентироваться в календаре, что полезно как в личных, так и в профессиональных сценариях. С помощью gcal можно добиться высокой гибкости в настройке отображения дат, и если система допускает использование ANSI-цветов, это легко внедрить, как было показано выше. Надеемся, что данное руководство помогло вам реализовать цветовое выделение в вашей системе!

Оцените материал
Добавить комментарий

Капча загружается...