mirror of
https://github.com/SeCherkasov/util-linux-cal.git
synced 2026-03-29 23:51:07 +03:00
188 lines
7.4 KiB
Markdown
188 lines
7.4 KiB
Markdown
# cal
|
||
|
||
Календарь для терминала — переписанная на Rust версия утилиты `cal` из util-linux.
|
||
|
||
## Возможности
|
||
|
||
- **Гибкое отображение**: один месяц, три месяца, год, произвольное количество месяцев
|
||
- **Неделя с понедельника или воскресенья**: `-m` (ISO) или `-s` (US)
|
||
- **Номера недель**: `-w` с выбором системы нумерации (`--week-type iso` или `us`)
|
||
- **Юлианские дни**: `-j` показывает день года вместо даты
|
||
- **Вертикальный режим**: `-v` для компактного отображения дней по колонкам
|
||
- **Кастомизация реформы**: `--reform 1752|gregorian|iso|julian` для разных календарных систем
|
||
- **Подсветка сегодня**: инверсия цвета для текущего дня
|
||
- **Подсветка выходных и праздников**: цвета для субботы, воскресенья и официальных праздников
|
||
- **Плагины**: динамическая загрузка плагинов для подсветки праздников через API
|
||
|
||
## Установка
|
||
|
||
```bash
|
||
cargo build --release
|
||
```
|
||
|
||
Бинарный файл появится в `target/release/cal`.
|
||
|
||
### Сборка с плагинами
|
||
|
||
Плагин подсветки праздников собирается в workspace:
|
||
|
||
```bash
|
||
cargo build --release --workspace
|
||
```
|
||
|
||
Плагин `libholiday_highlighter.so` будет в `target/release/`.
|
||
|
||
## Команды
|
||
|
||
### Базовое использование
|
||
|
||
| Команда | Описание |
|
||
|---------|----------|
|
||
| `cal` | Текущий месяц |
|
||
| `cal 2026` | Весь 2026 год |
|
||
| `cal 2 2026` | Февраль 2026 |
|
||
| `cal 15 9 2026` | Сентябрь 2026 с выделением 15 числа |
|
||
| `cal декабрь 2025` | Декабрь 2025 (поддержка названий месяцев) |
|
||
|
||
### Режимы отображения
|
||
|
||
| Команда | Описание |
|
||
|---------|----------|
|
||
| `cal -y` | Весь год (12 месяцев) |
|
||
| `cal -Y` | Следующие 12 месяцев от текущего |
|
||
| `cal -3` | Три месяца: предыдущий, текущий, следующий |
|
||
| `cal -n 6` | Показать 6 месяцев |
|
||
| `cal --span -n 12` | 12 месяцев с центрированием на текущем |
|
||
|
||
### Формат вывода
|
||
|
||
| Команда | Описание |
|
||
|---------|----------|
|
||
| `cal -v` | Вертикальный режим (дни в колонках) |
|
||
| `cal -j` | Юлианские дни (день года 1-365/366) |
|
||
| `cal -w` | С номерами недель |
|
||
| `cal --week-type us` | Недели по US стандарту (с воскресенья) |
|
||
| `cal -c 2` | Принудительно 2 колонки для мульти-месячного режима |
|
||
| `cal -c auto` | Автоподбор колонок по ширине терминала |
|
||
|
||
### Календарные опции
|
||
|
||
| Команда | Описание |
|
||
|---------|----------|
|
||
| `cal -m` | Неделя с понедельника (ISO, по умолчанию) |
|
||
| `cal -s` | Неделя с воскресенья (US стиль) |
|
||
| `cal --reform 1752` | Реформа 1752 года (пропуск 3-13 сентября в Великобритании) |
|
||
| `cal --reform gregorian` | Всегда григорианский календарь |
|
||
| `cal --reform julian` | Всегда юлианский календарь |
|
||
| `cal --iso` | ISO 8601 (алиас для `--reform iso`) |
|
||
|
||
### Вывод и цвета
|
||
|
||
| Команда | Описание |
|
||
|---------|----------|
|
||
| `cal --color` | Отключить цвета (монохромный вывод) |
|
||
| `cal -H` | Подсветка праздников через isdayoff.ru API (требует плагин) |
|
||
|
||
### Комбинированные примеры
|
||
|
||
```bash
|
||
# Год с номерами недель и праздниками
|
||
cal -y -w -H
|
||
|
||
# Три месяца вертикально с праздниками
|
||
cal -3 -v -H
|
||
|
||
# 6 месяцев в 2 колонки
|
||
cal -n 6 -c 2
|
||
|
||
# Февраль 2026 с юлианскими днями
|
||
cal -j 2 2026
|
||
|
||
# Следующие 12 месяцев с центрированием
|
||
cal --span -Y
|
||
```
|
||
|
||
## Плагины
|
||
|
||
### Holiday Highlighter
|
||
|
||
Плагин для подсветки официальных праздников через API isdayoff.ru.
|
||
|
||
#### Поддерживаемые страны
|
||
|
||
| Код | Страна | Локали |
|
||
|-----|--------|--------|
|
||
| RU | Россия | ru_RU, ru_BY, ru_KZ, ru_UZ, ru_LV |
|
||
| BY | Беларусь | be_BY, ru_BY |
|
||
| KZ | Казахстан | kk_KZ, ru_KZ |
|
||
| US | США | en_US, en |
|
||
| UZ | Узбекистан | uz_UZ, ru_UZ |
|
||
| TR | Турция | tr_TR |
|
||
| LV | Латвия | lv_LV, ru_LV |
|
||
|
||
Страна определяется автоматически по `LC_ALL`, `LC_TIME` или `LANG`.
|
||
|
||
#### Типы дней
|
||
|
||
| Код | Значение | Цвет |
|
||
|-----|----------|------|
|
||
| 0 | Рабочий день | — |
|
||
| 1 | Выходной | Красный |
|
||
| 2 | Сокращённый день | Бирюзовый |
|
||
| 8 | Официальный праздник | Красный |
|
||
|
||
#### Установка плагина
|
||
|
||
После сборки workspace плагин находится в `target/release/libholiday_highlighter.so`.
|
||
|
||
Для системной установки:
|
||
|
||
```bash
|
||
# Локально для пользователя
|
||
mkdir -p ~/.local/lib/cal/plugins
|
||
cp target/release/libholiday_highlighter.so ~/.local/lib/cal/plugins/
|
||
|
||
# Системно (требует root)
|
||
sudo mkdir -p /usr/lib/cal/plugins
|
||
sudo cp target/release/libholiday_highlighter.so /usr/lib/cal/plugins/
|
||
```
|
||
|
||
#### API
|
||
|
||
Плагин использует [isdayoff.ru API](https://isdayoff.ru/):
|
||
- `GET /api/getdata?year=YYYY&month=MM&pre=1` — данные за месяц
|
||
- `GET /api/getdata?year=YYYY&pre=1` — данные за год
|
||
|
||
Параметр `pre=1` включает информацию о предпраздничных сокращённых днях.
|
||
|
||
## Переменные окружения
|
||
|
||
| Переменная | Описание |
|
||
|------------|----------|
|
||
| `LC_ALL` | Приоритетная локаль для названий месяцев и дней |
|
||
| `LC_TIME` | Локаль для форматирования дат |
|
||
| `LANG` | Резервная локаль |
|
||
| `CAL_TEST_TIME` | Фиксированная дата для тестирования (формат YYYY-MM-DD) |
|
||
|
||
## Локализация
|
||
|
||
Поддерживаются названия месяцев на русском и английском:
|
||
|
||
```bash
|
||
cal январь 2026
|
||
cal February 2026
|
||
cal 1 2026
|
||
```
|
||
|
||
Дни недели сокращаются до 2 символов согласно локали:
|
||
- **ru_RU**: Пн, Вт, Ср, Чт, Пт, Сб, Вс
|
||
- **en_US**: Mo, Tu, We, Th, Fr, Sa, Su
|
||
|
||
## Отличия от util-linux cal
|
||
|
||
- Поддержка вертикального режима (`-v`)
|
||
- Динамические плагины
|
||
- Автоматическое определение локали
|
||
- Гибкая настройка календарной реформы
|
||
- Цветовой вывод с подсветкой сегодня/выходных/праздников
|