Как стать автором
Обновить

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

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров9.1K

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

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

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

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

  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:

И вставляем этот код прямо в заметку:
(UPD: если код съезжает и ломается — скачиваем код отсюда: https://github.com/jarwix/obsidian-templates).

---
title: <%*
/*
 * © 2025 Jarwix
 *
 * Этот шаблон предоставляется по лицензии MIT.
 * Вы можете использовать, изменять и распространять его свободно,
 * при условии обязательного указания автора и включения этой лицензии.
 *
 * Author: Jarwix (https://t.me/sdvghack)
 */
  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

Теги:
Хабы:
+22
Комментарии13

Публикации

Работа

Ближайшие события