Создаем картотеку людей в Obsidian максимально лениво или «Тронул мышку — проиграл»

от автора

Я уже писал на Хабре статью, что такое СДВГ и как он влияет на жизнь. Жизнь с СДВГ создаёт свои трудности и я (как имеющий этот синдром) ненавижу и максимально стараюсь избегать любую рутину.

Иногда это доходит до крайности — мне необходимо заполнить какие-то заметки, но они все одинаковые. Ты их копируешь, вставляешь, опять поднимаешь руку к мышке, пытаешься попасть в нужную строку иии… глючит при прокрутке ролик, ты промазываешь и эмоции такие, что хочется выкинуть всю технику в окно.

Поэтому я сделал для себя кучу шаблонов заметок, которые очень быстро заполняются по правилу игры «Тронул мышку — проиграл». Эти шаблоны сильно облегчили мою жизнь и одним таким шаблоном я и хочу поделиться.

Содержание статьи

  1. Rolodex

  2. Предварительная настройка Obsidian

  3. Настройка шаблона Rolodex

  4. Тронул мышку — проиграл

Rolodex

Вы вряд ли слышали про Rolodex. Это картотека, которая связана больше с американской культурой. Удобно было обменяться визитками и сразу вставить в свой ролодекс, потому что визитки уже имели специальные прорези под это:

Стандартный ролодекс, который продаётся практически в каждом канцелярском магазине в США

Стандартный ролодекс, который продаётся практически в каждом канцелярском магазине в США

У миллиардера Джона Рокфеллера карточки ролодекса выглядели более массивно и информативно (и, по некоторым данным, их у него было около 200 тысяч):

Карточка в ролодексе с Дональдом Трампом у Джона Рокфеллера

Карточка в ролодексе с Дональдом Трампом у Джона Рокфеллера

Давайте возьмем подобный формат за основу нашего ролодекса, а именно Имя, Фамилия, Номер телефона, Момент знакомства с человеком и Заметки о человеке в свободной форме.

Предварительная настройка Obsidian

Пошаговая инструкция для полнейших чайников, у кого всё ещё нет Obsidian (или пропускаем этот раздел, если, в целом, уже умеете пользоваться приложением):

  • Скачиваем Obsidian с официального сайта, если до сих пор этого не сделали: https://obsidian.md/download

  • Запускаем Obsidian. Нас встречает Главное меню приложения. Можете изменить язык на Русский в выпадающем меню, я же это делать не буду (но буду дублировать свои выборы на русском языке).
    Выбираем в меню Create new vault (Создать новое хранилище). Кликаем по Create (Создать).

  • Vault name (Имя хранилища) выбираем какое Вашей душе угодно. Но лучше не использовать пробелы, называть хранилище одним словом.

  • Location (Расположение) лучше не делать длинным и не иметь пробелы в пути (это не обязательно, просто с большой базой становится сложнее работать со скриптами). Лучше лаконично, к примеру, «C:\Work\». Итак, я создал хранилище в C:\Work\ и назвал её rolodex, кликнув по Create (Создать):

Всё, мы всё создали и, в целом, настраивать даже ничего и не нужно в самом приложении, из коробки всё уже хорошо:

Но если Вам что-либо нужно изменить — необходимо кликать по шестеренке напротив названия нашего хранилища. К настройкам мы ещё далее вернемся.

Настройки

Настройки

Настройка шаблона Rolodex

Создаем новую папку, назовём её Templates.

Перейдем в Настройки (кликнув по той самой шестеренке, как я объяснял выше). Переходим в Community plugins (Сторонние плагины):

Включаем Turn on community plugins (Включить плагины сообщества) и выбираем Browse (Обзор):

У меня сразу тут вылез нужный мне Templater. Устанавливаем его. Для этого переходим по нему и кликаем по Install (Установить) и Enable (Включить):

Заходим сразу в Options (Настройки) и выбираем Templates, как папку по умолчанию:

Создаём новую заметку в папке Templates и называем её Rolodex Template:

И вставляем этот код прямо в заметку:

--- <%* /*  * © 2025 Jarwix  *  * Этот шаблон предоставляется по лицензии MIT.  * Вы можете использовать, изменять и распространять его свободно,  * при условии обязательного указания автора и включения этой лицензии.  *  * Author: Jarwix (https://t.me/sdvghack)  */ %> title: <%*   const surname = await tp.system.prompt("Введите фамилию");   const name = await tp.system.prompt("Введите имя");   const title = `${surname.trim()} ${name.trim()}`;   tR += title; %> created: <% tp.date.now("YYYY-MM-DD HH:mm") %> <%* let categories = [     "Друзья",      "Коллеги",      "Семья",      "Клиенты",      "Партнёры",      "Знакомые",      "Образование",      "Другое" ];  let selectedCategory = await tp.system.suggester(     categories,      categories,      false,      "Выберите категорию контакта" );  let rolesByCategory = {     "Друзья": ["Друг", "Близкий друг", "Романтический партнёр"],     "Коллеги": ["Коллега", "Руководитель", "Подчинённый", "Наставник", "Ученик"],     "Семья": ["Родственник", "Супруг/Супруга", "Родитель", "Ребёнок", "Брат/Сестра"],     "Клиенты": ["Клиент", "Заказчик", "Контрагент"],     "Партнёры": ["Деловой партнёр", "Инвестор", "Соавтор"],     "Знакомые": ["Знакомый", "Сосед", "Бывший коллега"],     "Образование": ["Учитель", "Преподаватель", "Наставник", "Тренер", "Репетитор"],     "Другое": ["Коуч", "Советник", "Вдохновитель", "Спикер", "Онлайн-знакомый", "Знаменитость", "Другое"] };  let roles = rolesByCategory[selectedCategory] || ["Другое"]; let selectedRole = await tp.system.suggester(     roles,      roles,      false,      "Выберите роль контакта" );  tR += `category: ${selectedCategory}\nrole: ${selectedRole}`; %>  birthday: <%*   let birthday = await tp.system.prompt("Введите день рождения (например, 1990-05-15)", "-");   birthday = birthday.trim();   if (!birthday.match(/^\d{4}-\d{2}-\d{2}$/)) {     birthday = "";   }   tR += birthday; %> tags:   - Rolodex   - Person   - Контакт --- # Карточка: <% title %>  **Дата создания:** <% tp.date.now("YYYY-MM-DD") %>  --- ## Основная информация  **Место работы/учебы:** <%* let workplace = await tp.system.prompt("Введите место работы/учебы (например, Поликлиника в Химках)", "-"); tR += workplace.trim(); %> **Должность:** <%* let jobtitle = await tp.system.prompt("Введите название должности (например, врач)", "-"); tR += jobtitle.trim(); %> **Знакомство:** <%* let meeting = await tp.system.prompt("Как именно познакомились (в чате, лично, можно краткую историю)", "-"); tR += meeting.trim(); %> **Дата знакомства:** <%* let timemeeting = await tp.system.prompt("Введите дату знакомства (год, если не получается вспомнить точную дату)", "-"); tR += timemeeting.trim(); %>  --- ## Контактные данные  **Телефон:** <%*  let phone = await tp.system.prompt("Введите номер телефона", "Не указан"); tR += phone.trim(); %> **Email:** <%*  let email = await tp.system.prompt("Введите email", "Не указан"); tR += email.trim(); %> **Социальные сети:** <%*  let socials = await tp.system.prompt("Введите ссылки на соцсети (или оставьте пустым)", "Не указаны"); tR += socials.trim(); %>  --- ## Заметки  <%* let notes = []; let continueAdding = true;  while (continueAdding) {     const note = await tp.system.prompt("Введите заметку о человеке, его хобби, отношение к Вам. Можно вводить несколько пунктов через Enter. Для завершения оставьте пустое поле.");          if (note) {         notes.push(note);     } else {         continueAdding = false;     } }  if (notes.length > 0) {     tR += notes.map(n => `- ${n}`).join("\n"); } else {     tR += "- Нет заметок"; } %>  --- ## Встречи и события  <%*  let flag = true; let events = await tp.system.prompt("Добавить событие или встречу? (или оставьте пустым)"); if (events) {     tR += `- [ ] ${events} #rolodex\n`;     flag = false; } if (!birthday) {     tR += `- [ ] Узнать и добавить день рождения #rolodex\n`;     flag = false; } if (notes.length == 0) {     tR += `- [ ] Нет заметок — необходимо узнать о человеке побольше #rolodex\n`;     flag = false; } if (flag){     tR += `- [ ] Нужно что-то запланировать совместное с человеком? #rolodex\n`; } %> <%*   let fileName = `${title}`;   let startFolder = `Картотека`;   const firstLetter = fileName.charAt(0).toUpperCase();  let targetFolder = ""; if (/[А-И]/.test(firstLetter)) {     targetFolder = `${startFolder}/А-И/${firstLetter}`; } else if (/[К-Т]/.test(firstLetter)) {     targetFolder = `${startFolder}/К-Т/${firstLetter}`; } else if (/[У-Я]/.test(firstLetter)) {     targetFolder = `${startFolder}/У-Я/${firstLetter}`; } else if (/[A-I]/.test(firstLetter)) {     targetFolder = `${startFolder}/A-I/${firstLetter}`; } else if (/[J-Q]/.test(firstLetter)) {     targetFolder = `${startFolder}/J-Q/${firstLetter}`; } else if (/[R-Z]/.test(firstLetter)) {     targetFolder = `${startFolder}/R-Z/${firstLetter}`; } else {     targetFolder = `${startFolder}/-Другое`; }    let finalFilePath = `${targetFolder}/${fileName}`;   let counter = 2;   while (await app.vault.adapter.exists(`${finalFilePath}.md`)) {     finalFilePath = `${targetFolder}/${fileName} - ${counter}`;     counter++;   }   await tp.file.rename(fileName);   await tp.file.move(finalFilePath); %>

Тронул мышку — проиграл

Следим за пальцами, чтобы они не переключились на мышку:

  • CTRL+N (создаём новую заметку).

  • ALT+E (горячая клавиша Templater, возможно придется переключить раскладку клавиатуры на Английский язык).

  • Клавиша вниз и Enter:

  • Вводим фамилию. Enter:

    -

  • Вводим Имя. Enter:

  • Стрелочками выбираем Категорию контакта. Enter:

  • Выбираем Роль контакта. Enter:

  • Вводим дату рождения в формате ГГГГ-ММ-ДД (можем пропустить, если не знаем). Enter:

  • Вводим место работы (или пропускаем, если не знаем). Enter:

  • Вводим название должности у человека (пропускаем, если пока не знаем). Enter:

  • Вводим как и где познакомились с человеком (тоже можно пропустить). Enter:

  • Вводим дату знакомства. Можно в свободной форме, если не знаете точно. Enter:

  • Номер телефона и другие пункты я заполнять не буду, пусть они будут не указаны. Вообще было бы умнее номер телефона и другие данные вытащить во Frontmatter, но здесь это не особо имеет смысла, так как с такими данными никакого аналитики не построить или какой-то особый парсинг не нужен (а день рождения, например, важен).

  • Здесь вводим заметки о человеке, как в ролодексе у Рокфеллера. Важные даты у человека, его интересы и т.д. Не старайтесь разные мысли ввести в одну строку, лучше мысли разделить на несколько пунктов. Помните, к этому и всем остальным пунктам Вы можете вернуться позже. Enter (с пустым полем для перехода к следующему пункту):

  • Вы можете добавить сразу событие или встречу с этим человеком, она появится с тегом #rolodex. Я оставлю пустым, чтобы показать что будет при пустом вводе. Enter:

Карточка сгенерирована. Что сразу видно: создана папка Картотека, в ней создалась папка А-И и далее буква под фамилию человека И. То есть не нужно волноваться про создание папок и подпапок, шаблон сделает всё сам.

Мы не заполнили последний этап, поэтому появился отдельный пункт снизу, чтобы человек не выпал вообще из вашего поля зрения и Вы его не забыли, когда будете вытаскивать данные по тегу #rolodex. Если, например, не будет введена дата рождения — будет напоминание о том, чтобы Вы узнали информацию о дне рождении. Если не будет заметок — будет напоминание о том, что нужно узнать о человеке побольше.

Ну и финальный вид, как бы это выглядело, если бы были найдены все люди на все папки:

Выложу ещё некоторые шаблоны у себя в Telegram-канале, где я делюсь своими лайфхаками по борьбе с СДВГ и выкладываю некоторые свои разработки: https://t.me/sdvghack


ссылка на оригинал статьи https://habr.com/ru/articles/902656/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *