В прошлой статье Obsidian + Dataview: Таблицы я рассказал про установку плагина Dataview, формирование таблиц с его помощью и разобрал 4 кейса его использования.
Dataview - это очень мощный и функциональный плагин, с помощью которого кроме таблиц можно так же формировать списки, календари и задачи.
Сегодня хотелось бы остановиться на задачах, тем более что Dataview позволяет сделать из Обсидиана task/todo-менеджер с календарём и возможностью ставить себе задачи на определённые даты, а затем просматривать выполненные\невыполненные задачи за конкретные дни.
Про исходники
По вопросам из прошлой статьи я понял, что неплохо было бы сразу давать исходники того хранилища по которому написана статья. Чтобы читатели сразу открывали исходник и шли по нему не перепечатывая то, что я уже напечатал. Плюс я думаю, что найдутся такие читатели, которым с исходниками и статья не нужна будет.
Вот сразу ссылка на архив, чтобы можно было скачать, распаковать и открыть обсидианом как хранилище.
Про ошибку Error Fatal
(Скорее всего в углу всплывёт ошибка "Error fatal. not a git repositiry", ткните по ней и работайте дальше, я не смог победить её. Она вылезает из-за того, что я выгружаю всё из тестового хранилища в свой гитхаб, чтобы вы могли быстро скачать, а сам плагин Obsidian-git в только что скачанном хранилище не настроен, пощупать сами исходники эта ошибка не мешает. Если она разражает, то удалите в скачаной базе плагин Obsidian-git).
Как работают задачи в двух словах
В данной статье я не рассказываю как установить плагин Dataview, т.к. уже рассказывал об этом в первой статье.
Задачи так же как и таблицы работают на встроенном языке запросов
Чтобы отобрать все задачи со всего своего хранилища достаточно в любую заметку вставить следующий код (Если в вашем хранилище Обсидиан много задач, то в код лучше добавить что-то ограничивающее выдачу, например FROM #задачи1 , иначе Обсидиан может долго долго формировать в списке все 100500 задач, которые у вас есть):
```dataview
TASK
FROM #задачи1
```
Т.е. должно получиться что-то подобное
Добавляем параметр к задачам
Предположим мы хотим ввести градацию сложности в каджой задаче
Для этого в каждую заметку можно дописать соответствующий параметр [сложность:: 1]
Теперь мы можем по этому параметру: группировать, сортировать и отбирать задачи
Для этого добавляем
"GROUP BY сложность" - для группировки
"SORT сложность ASC" - для сортировки (ASC - по возрастанию, DESC - по убыванию)
"WHERE сложность = 1" - для отбора
Чтобы отобрать только выполненные задачи пишем "WHERE completed"
Чтобы отобрать только невыполненные задачи пишем "WHERE !completed"
Таким образом можно добавить сразу несколько параметров к одной задаче, этими параметрами могут быть:
Контекст - как по GTD (Телефон, Компьютер). И в дальнейшем сделать по заметке на каждый контекст и когда телефонное настроение открывать заметку "Телефон" и перед нами будут все задачи, где от нас требуется сделать звонок, при этом сами задачи могут быть расположены в соответствующих проектах.
Место (Дом, Офис, Торговый центр, Клиент) - и в дальнейшем всё так же как по контексту - можно добавлять к каждой задаче параметр места.
Сложность или трудозатраты - т.е. какая это задача, пятиминутная или часовая?
Добавляем дату к задачам и отбираем задачи на сегодня
Предположим нам надо задавать дату каждой задачи
Назовём этот параметр [Дата:: 2023-01-23]
Но каждый раз печатать эти 19 символов для каждой задачи - это очень сложно и долго, давайте автоматизируем это
Ставим плагин QuickAdd, включаем его и идём прописывать хоткеи:
В первом поле пишем название нашего хоткея, например "Сегодня", т.е. этот хоткей будет проставлять сегодняшнюю дату
Во втором выпадающем списке выбираем "Capture"
Потом жмякаем на кнопку "Add Choice"
Затем ткнём на молнию => это добавит данный хоткей в возможность назначения комбинации клавиш в обсидиане
Затем настраиваем созданный хоткей => жмём на шестерёнку
В открывшимся окне ставим две галки "Capture to active file" и "Capture format"
Затем в поле "Capture format" пишем следующий текст: ",[Дата:: {{DATE}}]," [[2023-01-23 - Obsidian - Tragic Panda.png]]
Так же можно добавить сразу подобные хоткеи на любые даты и вообще текст, который вам нужен:
",[Дата:: {{DATE:yyyy-MM-DD+1}}]," - данная сточка проставит завтрашнюю дату
",[Дата:: {{DATE:yyyy-MM-DD-1}}]," - эта вчерашнюю дату
",[Дата:: {{DATE:yyyy-MM-DD+7}}]," - а эта "через неделю"
Можно добавить все три сложности, что мы раньше создали, для этого в Caprute format пишем ",[сложность:: 1],"
Далее нам надо непосредственно прописать сочетания клавиш нашим хоткеям
Идём в настройки => Сочетания клавиш => Пишем в поле QuickAdd
Там видим все наши созданные хоткеи и назначаем им сочетания клавиш
У меня хоткеи такие: ALT+S - сегодня; ALT+D - завтра; ALT+F - через неделю; ALT+1/2/3 - сложность1/2/3.
Теперь присваиваем всем задачам в проекте даты:
Затем пишем вот такой код (Мы отбираем все задачи с нужным нам тегом, с непустой датой, а так же с датой сегодня и ранее, все незавершённые задачи, группируем их по дате)
```dataview
TASK
FROM #задачи3
WHERE Дата != empty
WHERE Дата <= date(today)
WHERE !completed
GROUP BY Дата
```
Должно получиться так (эта заметка - динамичная, т.е. каждый новый день сюда будут добавляться задачи с соответствующими датами, по сути это заметка "СЕГОДНЯ" в todo-листах.
Ну и на конец можно отобрать предстоящих задачи, невыполненные, сгруппированные сразу и по сложности и по дате (внутри скобок list() можно менять местами параметры или добавлять еще), с ограничением выдачи = 3 (За ограничение отвечает строчка LIMIT 3 и в зависимости от её положения в коде при сложных запросах будут разные результаты), т.е. три ближайших задачи, вот он код:
```dataview
TASK
FROM #задачи3
WHERE Дата > date(today)
WHERE !completed
GROUP BY list(сложность, Дата) as abs
SORT abs asc
LIMIT 3
```
Вот таким должен быть результат (Я не нашёл способа не дублировать каждую родительскую группировку и выглядит это не очень красиво, но это работает, а это главное)
Добавляем календарь и отбираем задачи на любой день
После того как мы получили возможность отобразить все сегодняшние и предстоящие задачи хотелось бы еще отобразить задачи на конкретный день
Захотели что-то сделать в обсидиане? Что надо сделать в первую очередь? Правильно - поставить плагин, потом настроить, а потом еще поставить один плагин.
Ставим плагин Calendar, в настройках плагина можно сразу снять галку "Confirm before crating new note"
Затем ставим плагин Templater
Далее нам надо создать: папку для ежедневных заметок (Daily Notes), папку для шаблонов (Template) и в ней первую заметку-шаблон (Daily Note)
Настраиваем встроенный плагин "Ежедневные заметки", указываем файл шаблона ежедневной заметки (Daily Note), указываем папку, куда будут складываться ежедневные заметки (Daily Notes), настраиваем представление даты: YYYY-MM-DD:
Настраиваем Dataview: Отключаем предупреждение о пустом результате, устанавливаем интервал обновления Dataview (т.е. выполнили задачу на заметке Dataview, через сколько времени представление обновиться и она оттуда пропадёт, значение в милисекундах), указываем формат даты yyyy-MM-dd, ставим галку "Автоматически проставлять параметр [completion:: 2023-01-23]".
Затем идём в файл-шаблон ежедневной заметки (Daily Note) и там пишем заголовок "# Запланированное на сегодня:", а под ним вот такой код (в строчке WHERE отбираются задачи по дате, а дата берётся из названия файла, а файл ежедневной заметки у нас будет называться как раз YYYY-MM-DD):
```dataview
TASK
FROM #задачи4
WHERE Дата = date({{Title}})
WHERE !completed
```
В этом же файле пишем заголовок "# Выполненные за сегодня:", а под ним вот такой код:
```dataview
TASK
FROM #задачи4
WHERE completion = date({{Title}})
WHERE completed
```
Теперь берём проект, в котором у нас перечислены задачи с параметром "Дата"
Если мы всё сделали верно или взяли мои исходники, то у нас должно получиться что-то подобное. И в какую дату бы мы не ткнули - у нас создаётся заметка на день, в которой уже есть код Dataview, который отбирает все запланированные и выполненные задачи за этот день.
Заключение
Надеюсь этот гайд поможет вам взглянуть на Обсидиан под другим углом.
Далее в планах раскрыть тему периодических задач через плагины Advanced URI или Tasks.
Не стесняйтесь задавать вопросы, если что-то не получается или не понятно.
Если нашли опечатку в тексте, то выделяйте её и жмите CTRL + Enter и тогда мне в личку прилетит репорт об опечатке.