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

125 lines
8.1 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-Type | нет | тип форматера. Поддерживаются следующие типы: `NoFormat`, `DateTime`, `Float`, `List`, `Script` | NoFormat |
Каждый тип форматера имеет свое поведение и свои настройки, которые описаны ниже.
Также существуют системные настройки, которые хранятся в `/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-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-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="#macros" class="anchor" id="macros"><span class="octicon octicon-link"></span></a>Макросы
Другая особенность - макросы. Пользователь может определить свою функцию, используя
следующую конструкцию `$aw_macro<my_macro_name,some_arg,another_arg>{{macro body here with $some_arg}}`.
Первый аргумент - имя макроса - обязателен. Другие описывают аргументы, которые
будут переданы при вызове макроса. Тело макроса может иметь любой текст (включая
шаблоны, лямбды и прочее) и аргументы, определенные используя `$`.
Чтобы вызвать макрос в коде нужно использовать следующую конструкцию: `$aw_macro_my_macro_name<$cpu,$cpucl>{{}}` (тело функции будет проигнорировано
здесь). В данном примере, макрос будет развернут в `macro body here with $cpu`.