--- category: ru type: paper hastr: true layout: paper tags: awesome-widgets, pytextmonitor title: Awesome Widgets - Произвольные форматеры и макросы short: aw-formatters-and-macros --- Данная статья описывает два основных изменения в версии 3.2.0. # Форматеры На самом деле, форматеры имеют графический интерфейс для настройки, но здесь я опишу, как их можно настроить, используя текстовый редактор. Чтобы включить форматер, используйте файл `$HOME/.local/share/awesomewidgets/formatters/formatters.ini`. Данный файл имеет только одну секцию `[Formatters]`, в которой ключи - это соответствующие ключи в виджете, а значения - имена соответствующих форматеров. Например: ```ini [Formatters] cpu=myformatter ``` означает, что форматер `myformatter` будет использован для ключа `cpu`. Все форматеры хранятся в той же директории, один форматер на файл, файлы должны иметь расширение `.desktop`. Каждый форматер имееет следующие настройки внутри секции `[Desktop Entry]`: | Поле | Обязательное | Значение | По-умолчанию | | -------------------|--------------|----------------------------------|--------------| | Name | да | имя форматера | none | | Comment | нет | комментарий | empty | | X-AW-ApiVersion | да | совместимость API. Не меняйте, если не знаете, что делаете | 0 | | X-AW-Type | нет | тип форматера. Поддерживаются следующие типы: `NoFormat`, `DateTime`, `Float`, `List`, `Script`, `String` | NoFormat | Дополнительно следующте поля добавлены для совместимости:: `X-AW-Active`, `X-AW-Interval`, `X-AW-Number`, но они будут проигнорированы. Каждый тип форматера имеет свое поведение и свои настройки, которые описаны ниже. Также существуют системные настройки, которые хранятся в `/usr/share/awesomewidgets/formatters/`, системные форматеры будут перезаписаны пользовательскими, но настройки (то есть `formatters.ini`) будут просто дополнены. ## NoFormat форматер Просто значение конвертирует в строку. Не имеет никаких особых настроек. ## DateTime форматер Конвертирует `QDateTime` объект в строку. | Поле | Обязательное | Значение | По-умолчанию | | -------------------|--------------|----------------------------------|--------------| | X-AW-Format | да | Qt специфичный формат времени | (пусто) | Действует аналогично `$ctime` и имеет аналогичную конфигурацию. ## Float форматер Конвертирует любое число в строку. | Поле | Обязательное | Значение | По-умолчанию | | -------------------|--------------|----------------------------------|--------------| | X-AW-FillChar | нет | символ для заполнения до `X-AW-Width` | (space) | | X-AW-ForceWidth | нет | обрезать строку после `X-AW-Width` | false | | X-AW-Format | нет | Qt специфичный формат числа, поддерживаются: `e`, `E`, `f`, `g`, `G` | `f` | | X-AW-Multiplier | нет | число, на которое значение будет умножено | 1.0 | | X-AW-Precision | нет | число знаков после запятой | -1 (как получится) | | X-AW-Summand | нет | число, которое будет добавлено к значению | 0.0 | | X-AW-Width | нет | ширина числового поля, отрицательное - выравнивание по левому краю | 0 (не ограничивать) | Конечное значение будет получено по формуле `X-AW-Multiplier * value + X-AW-Summand`. ## List форматер Конвертирует список строк в строку | Поле | Обязательное | Значение | По-умолчанию | | -------------------|--------------|----------------------------------|--------------| | X-AW-Filter | нет | фильтровать список по заданному регулярному выражению | (пусто) | | X-AW-Separator | нет | использовать разделитель для объединения | (пусто) | | X-AW-Sort | нет | сортировать или нет список | false | ## Script форматер Использует javascript код для конвертации значения в строку. Значение будет передано как аргумент в функцию. | Поле | Обязательное | Значение | По-умолчанию | | -------------------|--------------|----------------------------------|--------------| | X-AW-AppendCode | нет | вставить код между `(function(value) {` и `})` | true | | X-AW-Code | нет | код для использования | (пусто) | | X-AW-HasReturn | нет | если false, то дополнить код `return output;`. Работает только если `X-AW-AppendCode` - `true` | false | Например, для конвертации скорости загрузки в кибибиты на лету, вы можете использовать следующее: ```ini X-AW-AppendCode=true X-AW-Code="output=value/8.0;" X-AW-HasReturn=false ``` Код будет развернут в следующее: ```javascript (function(value) { output = value / 8.0; return output; }) ``` ## String форматер Улучшенная версия `NoFormat`. | Поле | Обязательное | Значение | По-умолчанию | | -------------------|--------------|----------------------------------|--------------| | X-AW-FillChar | нет | символ для заполнения до `X-AW-Width` | (space) | | X-AW-ForceWidth | нет | обрезать строку после `X-AW-Width` | false | | X-AW-Width | нет | ширина поля, отрицательное - выравнивание по левому краю | 0 (не ограничивать) | # Макросы Другая особенность - макросы. Пользователь может определить свою функцию, используя следующую конструкцию `$aw_macro{% raw %}{{{% endraw %}macro body here with $some_arg{% raw %}}}{% endraw %}`. Первый аргумент - имя макроса - обязателен. Другие описывают аргументы, которые будут переданы при вызове макроса. Тело макроса может иметь любой текст (включая шаблоны, лямбды и прочее) и аргументы, определенные используя `$`. Чтобы вызвать макрос в коде нужно использовать следующую конструкцию: `$aw_macro_my_macro_name<$cpu,$cpucl>{% raw %}{{}}{% endraw %}` (тело функции будет проигнорировано здесь). В данном примере, макрос будет развернут в `macro body here with $cpu`.