# Summarum [English](README.md) **Калькулятор, который работает как блокнот.** Пишешь что думаешь — каждая строка сразу даёт ответ в правой колонке. Никаких кнопок, никакого синтаксиса формул, просто текст. ``` # Поездка в Лиссабон билеты $420 отель $95 * 4 ночи еда 30€ в день * 4 дня и музеи 25€ итого → $1,066.97 5 дюймов в см → 12.7 cm 100 км/ч в миль/ч → 62.14 mph $2000 в рублях → 144,060 ₽ скидка 20% от 1500 → 1,200 сегодня + 6 недель → 22 Июля 2026 1000 USD в EUR на 2024-01-01 → € 917.30 ? * 1.2 = 1000 → 833.33 AAPL в USD → $213.55 дней до 2027-01-01 → 183 day график → ▂▄▇█▆ ``` Работает на **английском и русском одновременно**: `5 метров в см`, `20$ в евро`, `сумма` — переключать язык не нужно. ## Установка Скачай сборку под свою систему из [Releases](../../releases). Приложение весит около 2 МБ, дальше обновления проверяются сами. - **Windows** — `Summarum_*_x64-setup.exe` (или `arm64-setup.exe` для Windows on ARM). Запусти — готово. - **Linux** — `.AppImage` (`chmod +x` и запускай) либо `.deb`/`.rpm`, если хочется поставить нормальным пакетом. Самообновление работает только у AppImage, deb и rpm обновляются скачиванием следующей версии. - **macOS** — `.dmg` для Apple Silicon или Intel. Сборки не подписаны сертификатом Apple Developer, поэтому первый запуск — правый клик → **Открыть**, а не двойной клик (либо один раз выполнить `xattr -cr /Applications/Summarum.app` в терминале). Дальше запускается как обычно. Требования: - **Windows 10 (1803+) или Windows 11**, 64-бит, и **[WebView2 Runtime](https://developer.microsoft.com/en-us/microsoft-edge/webview2/)** — уже встроен в Windows 11 и большинство обновлённых Windows 10; если отсутствует, установщик скачает его автоматически. - **Linux** с `webkit2gtk-4.1` (Ubuntu 22.04+, Debian 12+, Fedora 36+) и `libayatana-appindicator3` для иконки в трее. - **macOS 10.13** или новее. - Интернет нужен только для живых курсов и рыночных данных — всё остальное работает офлайн (курсы берутся из кэша или встроенного снимка). ## Что понимает **Обычная математика** — `2 + 2`, `8 / (45 - 20%)`, скобки, `^`, `sqrt`, `sin`, факториалы, `случайное()`, `случайное(1; 6)`. Точная десятичная арифметика: `0.1 + 0.2` это `0.3`, а не `0.30000000000000004`. **Слова как операторы** — `12 плюс 4`, `20 делить на 4`, `5 и 3`. Текст вокруг математики игнорируется: `потратил 20 на пиццу и 5 на кофе` даст 25. **Единицы** — длина, масса, объём, площадь, температура, время, углы, данные (`1 ГиБ в МБ`), CSS px/em, скорость, давление, энергия, мощность, частота, расход топлива: ``` 6 футов в метрах 1 атм в мм рт.ст. 8 л/100км в mpg 2 часа 30 мин в мин 150 л.с. в кВт 32 px в em ``` **Деньги** — ~150 валют и топ-20 криптовалют с живыми курсами (обновляются раз в час, кэшируются для офлайна). `$100 + 20%`, `5 eth в USD`, `9800 рублей в долларах`. **Живые рыночные данные** — котировки акций и сырья обновляются каждые 15 минут: `100 AAPL в USD`, `2 GC=F в USD` (фьючерс на золото), `MSFT + GOOGL`. **Исторические курсы** — `1000 USD в EUR на 2024-01-01` запрашивает курс ЕЦБ за этот день (через frankfurter.dev) и кэширует его навсегда. **Проценты по-человечески** — `20% от 80`, `скидка 20% от 1500`, `5 это сколько % от 25`, `20% от какого числа равно 30`. **Даты и время** — `сегодня + 2 недели`, `завтра - сегодня`, `время в Нью-Йорке` (работает и с прямым IANA-id: `время в Europe/Berlin`), `сейчас в unix`, `1750000000 как дата`. Форматы дат: ISO (`2024-01-01 + 30 дней`), или через точку/слэш с 4-значным годом — `31.12.2024`, `12/31/2024` — порядок день/месяц для неоднозначных случаев берётся из настройки «Формат даты». `дней до 2027-01-01`, `дней с 2020-03-15`. **Поиск неизвестного** — поставь `?` на место неизвестного и `=` с нужным результатом: `? * 1.2 = 1000` → `833.33`, `100 - ? = 30` → `70`. Работает для любых выражений, решаемых линейным методом или бисекцией. **Для программистов** — `0xFF & 0x0F`, `1 << 4`, `255 в hex`, `в binary`, плюс `в дроби` (0.75 → 3/4) и `в roman` (2026 → MMXXVI). **Листы с переменными** — переменные (`аренда = $500`), нарастающие итоги (`сумма`, `avg`, `prev`, `количество`, `минимум`, `максимум`, `произведение`), заголовки `#`, комментарии `//`. Строка статуса всегда показывает итог листа; выдели несколько строк — увидишь их сумму. Добавь `график` в конце блока чтобы нарисовать спарклайн. **Ссылки между листами** — тяни значение из другого листа через `@`: `@Бюджет.total`, `@Бюджет.аренда`, `@[Поездка в Лиссабон].еда`. Лист из одних ссылок становится живым дашбордом: `@Активы.total - @Долги.total`. Дай листу- источнику постоянное имя (не автоматическое), иначе ссылка сломается при правке первой строки. ## Удобные мелочи - **Ctrl+Alt+N** (настраивается — поле в настройках записывает нажатые клавиши) показывает/скрывает окно из любого места. Закрытие прячет в трей. - **Ctrl+W** закрывает текущий лист (спрашивает подтверждение если есть содержимое). - **Ctrl+F** (или кнопка 🔍) ищет сразу по всем листам — по тексту или по значению результата: `>1000`, `<50`, `=100`, `~100` (±1%). Клик по результату — переходишь туда. - **Клик по результату** копирует его. Копирование строки копирует её *вместе с ответом* (`аренда * 3 = $1,500`). **Ctrl+Shift+C** копирует весь лист с ответами. - **Экспорт картинкой** — меню ⤓ содержит «Скопировать картинкой»: рендерит лист в PNG и кладёт в буфер обмена (при ошибке предлагает сохранить файл). - **Потяни разделитель** чтобы изменить ширину колонки результатов. - **Брось файл `.numi`, `.sum`, `.txt` или `.md`** в окно — откроется как лист. - **Закрепление и порядок листов** — нажми значок булавки на любом листе в сайдбаре чтобы закрепить его вверху; кнопки ↑↓ меняют порядок. - **Резервные копии автоматические**: ежедневный снимок всех листов (хранятся 14 дней), удалённые листы лежат в корзине 14 дней (настраивается) — верни перетащив обратно. Настройки → Backups откроет папку. - **Папка данных настраивается** — укажи OneDrive/Dropbox и листы синхронизируются между машинами. - **Поверх всех окон** (в настройках) закрепляет окно над остальными. - Приложение проверяет обновления при запуске и потом каждые несколько часов, предлагая установить — вручную скачивать и переустанавливать не нужно. Настройки → Обновления → «Проверить обновления» запускает проверку вручную, либо отключи автопроверку целиком тумблером рядом. - Светлая/тёмная тема, интерфейс en/ru, настраиваемая точность, разделители и формат даты (системный, `31.12.2024`, `12/31/2024` или `2024-12-31`). Настройки разбиты на вкладки: Общие / Формат / Данные / Обновления. ## Расширения > **Внимание:** расширения выполняются в WebAssembly-песочнице — без доступа к файлам, сети и приложению, только API `numi` ниже. Зависший скрипт прерывается, упавший — пропускается. Брось `.js`-файл в папку расширений (Настройки → Extensions folder) и перезапусти. API совместим с расширениями Numi: ```js numi.setVariable("ндс", { double: 20 }); numi.addUnit({ id: "этаж", phrases: "этаж,этажей", baseUnitId: "meter", format: "эт", ratio: 3 }); numi.addFunction({ id: "гипот", phrases: "гипот" }, (v) => ({ double: Math.hypot(v[0].double, v[1].double) })); ``` Тогда `5 этажей в метрах` → `15 m` и `гипот(3; 4)` → `5`. ## Баги и идеи Открой [issue](../../issues). Строка того что написал и что ожидал увидеть — достаточно. ## Для разработчиков Устройство движка, структура проекта и как добавлять единицы/валюты: см. [ARCHITECTURE.ru.md](ARCHITECTURE.ru.md). ```bash npm install npm test # тесты движка (373 кейса) npm run tauri dev # запустить приложение npm run tauri build # собрать установщик ``` Для сборки нужны: - [Node.js](https://nodejs.org/) 22.6 или новее - [Rust](https://rustup.rs/), stable - На Windows: toolchain MSVC и [Visual Studio Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/) с компонентом «Desktop development with C++» (нужен линковщик MSVC) - На Linux: `libwebkit2gtk-4.1-dev`, `libayatana-appindicator3-dev`, `librsvg2-dev`, `libxdo-dev`, `libssl-dev`, `patchelf` и компилятор C - На macOS: Xcode Command Line Tools - Если что-то не собирается — см. [Tauri prerequisites](https://tauri.app/start/prerequisites/) `npm run tauri build` собирает то, что умеет хост-платформа: NSIS на Windows, deb/rpm/AppImage на Linux, .app/.dmg на macOS. Кросс-компиляция между ними не поддерживается — релизный workflow собирает каждую платформу на своём раннере. Стек: [Tauri 2](https://tauri.app) + TypeScript + CodeMirror 6. ## Благодарность Вдохновлён [Numi](https://numi.app) от Дмитрия Николаева — если ты на macOS, купи его. Summarum — независимый проект, написанный с нуля для Windows, Linux и macOS. ## Лицензия [PolyForm Noncommercial 1.0.0](LICENSE) — бесплатно для личного, образовательного и другого некоммерческого использования. Коммерческое использование (включая перепродажу или репакинг) запрещено.