Вопрос или проблема
Я хочу выделить праздники цветом в 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
с цветным выводом, необходимо выполнить следующие шаги:
-
Установите gcal: На Ubuntu вы можете установить его следующим образом:
sudo apt-get update sudo apt-get install gcal
На Mac OS X можно использовать пакетный менеджер Homebrew:
brew install gcal
-
Используйте опцию -H для настройки выделения: В этом флаге можно указать последовательность, которая будет включать и отключать цветовое выделение. Например, чтобы выделить текущий день синим цветом, а праздники зелёным, выполните:
gcal -H '\e[34m:\e[0m:\e[32m:\e[0m' -q US_AK
Здесь
\e[34m
включает синий цвет текста для текущего дня,\e[32m
— зелёный для праздников, а\e[0m
возвращает цвет к стандартному. -
Выберите нужную страну или регион: Например, для отображения праздников на определённой территории, используйте:
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:
-
Создайте конфигурационный файл:
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-цветов, это легко внедрить, как было показано выше. Надеемся, что данное руководство помогло вам реализовать цветовое выделение в вашей системе!