arcanis.me/ru/_posts/2016-06-05-aw-formatters-and-macros.md

155 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
category: ru
type: paper
hastr: true
layout: paper
tags: awesome-widgets, pytextmonitor
title: Awesome Widgets - Произвольные форматеры и макросы
short: aw-formatters-and-macros
---
Данная статья описывает два основных изменения в версии 3.2.0.
<!--more-->
# <a href="#formatters" class="anchor" id="formatters"><span class="octicon octicon-link"></span></a>Форматеры
На самом деле, форматеры имеют графический интерфейс для настройки, но здесь
я опишу, как их можно настроить, используя текстовый редактор.
Чтобы включить форматер, используйте файл `$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`, `Json`, `List`, `Script`, `String` | NoFormat |
Дополнительно следующте поля добавлены для совместимости:: `X-AW-Active`,
`X-AW-Interval`, `X-AW-Number`, `X-AW-Schedule`, `X-AW-Socket`, но они будут
проигнорированы.
Каждый тип форматера имеет свое поведение и свои настройки, которые описаны ниже.
Также существуют системные настройки, которые хранятся в `/usr/share/awesomewidgets/formatters/`,
системные форматеры будут перезаписаны пользовательскими, но настройки (то есть
`formatters.ini`) будут просто дополнены.
## <a href="#formatter-noformat" class="anchor" id="formatter-noformat"><span class="octicon octicon-link"></span></a>NoFormat форматер
Просто значение конвертирует в строку. Не имеет никаких особых настроек.
## <a href="#formatter-datetime" class="anchor" id="formatter-datetime"><span class="octicon octicon-link"></span></a>DateTime форматер
Конвертирует `QDateTime` объект в строку.
| Поле | Обязательное | Значение | По-умолчанию |
| -------------------|--------------|----------------------------------|--------------|
| X-AW-Format | да | Qt специфичный формат времени | (пусто) |
Действует аналогично `$ctime` и имеет аналогичную конфигурацию.
## <a href="#formatter-float" class="anchor" id="formatter-float"><span class="octicon octicon-link"></span></a>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`.
## <a href="#formatter-float" class="anchor" id="formatter-float"><span class="octicon octicon-link"></span></a>Json форматер
Извлекает сообщения из JSON.
| Поле | Обязательное | Значение | По-умолчанию |
| -------------------|--------------|----------------------------------|--------------|
| X-AW-Path | да | путь к значению в JSON | (пусто) |
Путь должен быть разделен точками. Числа в пути будут интерпретированы как индекс
элемента в массиве.
## <a href="#formatter-list" class="anchor" id="formatter-list"><span class="octicon octicon-link"></span></a>List форматер
Конвертирует список строк в строку
| Поле | Обязательное | Значение | По-умолчанию |
| -------------------|--------------|----------------------------------|--------------|
| X-AW-Filter | нет | фильтровать список по заданному регулярному выражению | (пусто) |
| X-AW-Separator | нет | использовать разделитель для объединения | (пусто) |
| X-AW-Sort | нет | сортировать или нет список | false |
## <a href="#formatter-script" class="anchor" id="formatter-script"><span class="octicon octicon-link"></span></a>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;
})
```
## <a href="#formatter-script" class="anchor" id="formatter-script"><span class="octicon octicon-link"></span></a>String форматер
Улучшенная версия `NoFormat`.
| Поле | Обязательное | Значение | По-умолчанию |
| -------------------|--------------|----------------------------------|--------------|
| X-AW-FillChar | нет | символ для заполнения до `X-AW-Width` | (space) |
| X-AW-ForceWidth | нет | обрезать строку после `X-AW-Width` | false |
| X-AW-Width | нет | ширина поля, отрицательное - выравнивание по левому краю | 0 (не ограничивать) |
# <a href="#macros" class="anchor" id="macros"><span class="octicon octicon-link"></span></a>Макросы
Другая особенность - макросы. Пользователь может определить свою функцию, используя
следующую конструкцию
`$aw_macro<my_macro_name,some_arg,another_arg>{% raw %}{{{% endraw %}macro body here with $some_arg{% raw %}}}{% endraw %}`.
Первый аргумент - имя макроса - обязателен. Другие описывают аргументы, которые
будут переданы при вызове макроса. Тело макроса может иметь любой текст (включая
шаблоны, лямбды и прочее) и аргументы, определенные используя `$`.
Чтобы вызвать макрос в коде нужно использовать следующую конструкцию:
`$aw_macro_my_macro_name<$cpu,$cpucl>{% raw %}{{}}{% endraw %}` (тело функции
будет проигнорировано здесь). В данном примере, макрос будет развернут в
`macro body here with $cpu`.