Homemade Source/Templater snippets

[Templater] 옵시디언 문서의 update 날짜 자동 갱신하기

반응형

옵시디언 문서의 update 날짜 자동 갱신하는 Templater snippet입니다.

기능

created 및 updated 항목 추가

문서에 프로퍼티가 없거나 updated 항목이 없는 경우, created 및 updated 항목을 프로퍼티에 추가합니다.

현재 날짜와 시간으로 updated 항목 업데이트

문서의 프로퍼티에 updated 항목이 이미 존재하면, 현재 날짜와 시간으로 갱신합니다.

Templater Snippet

<%*
const KEY = 'updated';
const dateTimeFormat = "YYYY-MM-DD HH:mm";
const date = tp.date.now(dateTimeFormat);
const UPDATED = `${KEY}: ${date}`;

const editor = app.workspace.activeLeaf.view.editor;

const updatedFrontMatter = tp.frontmatter.updated;
if (updatedFrontMatter) {
  const replaceLine = async (query, text) => {
    let rowIndexFound = -1;
    for (let row = 0; row <= editor.lastLine(); row++) {
      if (editor.getLine(row).startsWith(query)) {
        rowIndexFound = row;
        break;
      }
    }

    if (rowIndexFound !== -1) {
      editor.replaceRange(
        text,
        { line: rowIndexFound, ch: 0 },
        { line: rowIndexFound, ch: editor.getLine(rowIndexFound).length }
      );
    }

    return rowIndexFound === -1 ? undefined : rowIndexFound;
  };

  const index = await replaceLine(KEY + ": ", UPDATED);
  if (index !== undefined) {
    new Notice("update 날짜와 시간을 업데이트하였습니다.");
  } else {
    new Notice("update 날짜와 시간을 업데이트하는데 실패하였습니다.");
  }
} else {
  const frontMatterBody = `
created: ${date}
updated: ${date}
`.trim();

  const hasFrontMatter = Object.keys(tp.frontmatter).length > 0;
  if (hasFrontMatter) {
    const insertAfterLine = async (query, text) => {
      let rowIndexFound = -1;
      for (let row = 0; row <= editor.lastLine(); row++) {
        if (editor.getLine(row) === query) {
          rowIndexFound = row;
          break;
        }
      }

      if (rowIndexFound !== -1) {
        editor.replaceRange("\n" + text, CodeMirror.Pos(rowIndexFound));
      }

      return rowIndexFound === -1 ? undefined : rowIndexFound + 1;
    };

    await insertAfterLine("---", frontMatterBody);
  } else {
    const insertFirst = async (text) => {
      editor.replaceRange(text, CodeMirror.Pos(0, 0));
    };

    const noteBody = `---
${frontMatterBody}
---
`;
    await insertFirst(noteBody);
  }
}
%>
Templater로 작성한 명령어(스크립트)을 단축키로 실행하는 방법을 참고해주세요.
Commander에 빠른실행 등록하는 방법을 참고해주세요

관련 플러그인

 

문서 일관성과 가독성 향상시키는 Linter 플러그인

개요 옵시디언 사용자라면 누구나 문서 관리와 유지 보수의 중요성을 잘 알고 있습니다. Linter 플러그인은 이 과정을 자동화하여 문서의 일관성과 가독성을 높이는 데 중요한 역할을 합니다. Lint

kaminik.tistory.com

 

프로퍼티에 작성일시를 자동으로 Update time on edit 플러그인

개요 Update time on edit 플러그인은 파일의 작성일시나 업데이트 일시를 자동으로 프로퍼티로 기록하는 플러그인입니다. Plugin Info 플러그인 명 Update time on edit 플러그인 설명 프로퍼티에 작성일시,

kaminik.tistory.com


 

반응형