Мои запросы Tasks и шаблоны Templater для задач в Obsidian. JavaScript.. JavaScript. obsidian.. JavaScript. obsidian. tasks.. JavaScript. obsidian. tasks. templater.. JavaScript. obsidian. tasks. templater. Текстовые редакторы и IDE.

Всем привет, меня зовут Влад. Сегодня я хочу рассказать как и с помощью чего, я веду свои задачи в Obisiadn.

Как я докатился до жизни такой…

C таск трекерами у меня долгая история: я много сидел на Todoist, потом перешел на TickTick. Не знаю на сколько это было связанно с сами таск трекерами или уже с моими личными проблемами – но по итогу они мне мало помогали закрывать задачи, что личные, так и по работе. Потом у меня появился iPad и годовая подписка на Microsoft Office. Так я и перешел на OneNote.

Примерно в тоже время после тренинга по эмоциональному интеллекту было принято решение делить задачи на сферы жизни: Быт, Работа, Яркость жизни, Хобби и тд, – чтобы можно было заметить перекос в ту или иную сторону. Текстовый редактор, как по мне, в отличие от приложений, дает больше свободы в структурировании и нахождении своего способа организации дел. Если не знаешь как тебе удобно (а ты не знаешь, если только начинаешь вести задачи), то приложения будут структурировать хаос, а не наводить порядок.

Подписка закончилась, продлевать было лень и не очень то и хотелось за один OneNote платить. Так я и перешел на Obsidian, который и по сей день является моим основным приложением для всего.

Переход к автоматизации

По началу я разделял задачи руками, сферы жизни – заголовки, месяц – отдельный файл. Но спустя некоторое время, как бы обойтись без французкого… мне надоело это делать руками, Я ЖЕ ПРОГРАММИСТ подумал я и начала автоматизировать свою работу.

Начал я с плагина Tasks, который позволяет писать кастомные запросы на задачи со всего хранилища. И это был ад.

Сама возможность использовать мой любимый Javascript в запросах не может не вызывать уважения к плагину, но то как это пишется… примерно так

filter by function 
	const SPRINT_P = 'SPRINT';
	
	const SPRINT_START_DATE = '2025-03-17';
	const SPRINT_END_DATE = '2025-03-30';
	
	const hasSprintTag = () => {
		const sprintTagBegin = '#Спринт25';
		const currentSprint = '03С2';
		const sprintTag = sprintTagBegin+currentSprint;
		return task.tags.includes(sprintTag);
	};
	
	...

Про дебагинг я вообще молчу, один раз я искал пробел после слеша целый час, может быть если я изначально знал, что искать, то нашел бы быстрее, в том же Templater с этим проблем нет, я конечно не пробовал Dataview, но может быть там все хорошо.

Сейчас мой запрос работает на свойствах файла и тегах задач.

Структура самого шаблона:

  • Инбокс – задачи, которые появились в текущем спринте

  • Задачи – блок с запросом Tasks

Сам результат запроса выглядит так:

Мои запросы Tasks и шаблоны Templater для задач в Obsidian - 1

Символом параграфа отмечаются категории в тегах, двойными – родительские задачи (так удобнее понимать к чему относиться задача). В “Не сгруппировалось” попадают задачи без категории

Описание свойств, которое используются в запросе:

Свойство

Описание

Значения

HAS_TASK

Чтобы задачи попали в запрос у Файла должно быть это свойство

Не имеет значения

SPINT

свойство отвечающее за то, зависят ли задачи от тега со спринтом

DONE – попадает в запрос, если дата завершения попадает в период спринта

TAG – задачи попадают в тот спринт, который указан в теге задачи

GROUPING

отвечает за группировку

HEADING – группировка по заголовкам (нужна для списков, где есть несколько категорий)

CUSTOM – группировка по свойствам файла

GROUP_NAME

Название группы

Строка

SUBGROUP_NAME

Название субгруппы

Строка или $FILENAME – которое берет значение из имени файла

На сегодня я использую только два набора свойств для списков:

Свойство

Значения

Описание

Списки с несколькими категориями, например, беклог на год или на квартал

Список под конкретную категорию

Пример: Похудение, Петпроект %NAME%, и тд

SPINT

TAG

DONE

GROUPING

HEADING

CUSTOM

GROUP_NAME

{{Название категории}}

SUBGROUP_NAME

$FILENAME

Шаблон с запросом Tasks: https://github.com/imabramon/my-templates

Работа с тегами

После агрегирования главной проблемой стала работа с тегами, так как вся группировка основана них. По началу я еще не уставал вручную писать, но, например, когда начинается спринт, пишешь очень много задач, многие их которых относятся к разным категориям, то это надоедает. Так я написал первые версии шаблоны на JS. В целом ничего сложного, бьешь tp.selection на строки и добавляешь в конец теги из промта.

Но планы были грандиозные (да и сейчас остались), вот например есть такой список:

- [ ] task
	- [ ] sub parent
		- [x] sub 1
		- [ ] sub 2
	- [x] sub 3

Хотелось бы шаблон который сможет превратить его в

- [ ] task
	- [ ] sub parent
		- [ ] sub 2
- [x] task
	- [x] sub parent
		- [x] sub 1
	- [x] sub 3

Т.е. разделить на завершенную часть и незавершенную. Например у меня есть большая задача в инбоксе, и я не хочу переносить всю ее в беклог или следующий спринт. Так или иначе были идеи шаблонов, для которых нужна была абстракция, чтобы можно было удобнее работать, да и перспектива писать код в обсидиане меня не впечатляла. Так я перешел в привычный vs code.

К сожалению не так часто удавалось или даже хотелось писать из-за личных загонов. Но по спустя временя, понял что это было интересно, как говорил Жан Пьер Польнореф. Потихоньку писал парсер, фиксил баги, писал тесты, фиксил баги, думал какие шаблоны сделать еще и фиксил баги. Не хватает пару обычных для коллекций функций по типу map, reduce и тд, но то что уже есть сейчас хватит, чтобы покрыть большое количество запросов (в первую очередь моих).

По итогу сейчас есть следующие шаблоны:

  • добавление и удаление тегов – тут понятно

  • разделение по завершенности – пример выше

  • счетчик – создает однотипные задачи вида - [ ] N, удобно использовать для трекеров привычек

Так же есть 2 шаблон использующие понятие категории (сферы жизни):

  • разделить по категории – удобно сортировать инбокс

  • теги как у родителя – так же удобно работать с инбоксом, так как обычно у меня нет пересечений по категориям

Более подробно про сами шаблоны с примерами и JS API, которое есть на данным момент есть, можно найти на гитхабе: https://github.com/imabramon/templater_tasks_processor

Заключение

Пациент в глубокой коме…
Пока все это делал, довольно много устал от этого проекта. Вот в начале каждого пета есть некий тильт, так как еще не очень шаришь, мало что есть и много что надо сделать, в середине самый пик приятных эмоций – уже много что есть, начал уже жестко шарить за область проекта, но вот в конце, когда надо полишить – самый тягостный период разработки, как по мне. Понимаешь, что так оставлять нельзя, но и доделывать очень тяжело (возможно у меня SVG).

Надеюсь получилось не слишком душно и кому-нибудь это поможет для работы в obsidian.

Автор: im_abramon

Источник

Рейтинг@Mail.ru
Rambler's Top100