mirror of
https://github.com/callumalpass/tasknotes.git
synced 2026-07-22 12:50:26 +00:00
224 lines
8.3 KiB
Markdown
224 lines
8.3 KiB
Markdown
# Template Variables Reference
|
|
|
|
TaskNotes supports template variables for dynamic content generation in body templates, folder paths, and filenames. Variables use the `{{variableName}}` syntax and are replaced with actual values when content is created.
|
|
|
|
## Overview
|
|
|
|
Template variables are available in three contexts:
|
|
|
|
- **Body templates** - Content templates for task and note files
|
|
- **Folder templates** - Dynamic folder paths for file organization
|
|
- **Filename templates** - Dynamic filename generation
|
|
|
|
Not all variables are available in every context. The tables below indicate where each variable can be used.
|
|
|
|
## Task Properties
|
|
|
|
Variables for task-specific data.
|
|
|
|
| Variable | Description | Body | Folder | Example |
|
|
|----------|-------------|:----:|:------:|---------|
|
|
| `{{title}}` | Task title | Yes | Yes | `My Task` |
|
|
| `{{titleLower}}` | Title in lowercase | Yes | Yes | `my task` |
|
|
| `{{titleUpper}}` | Title in uppercase | Yes | Yes | `MY TASK` |
|
|
| `{{titleSnake}}` | Title in snake_case | Yes | Yes | `my_task` |
|
|
| `{{titleKebab}}` | Title in kebab-case | Yes | Yes | `my-task` |
|
|
| `{{titleCamel}}` | Title in camelCase | Yes | Yes | `myTask` |
|
|
| `{{titlePascal}}` | Title in PascalCase | Yes | Yes | `MyTask` |
|
|
| `{{priority}}` | Task priority value | Yes | Yes | `high` |
|
|
| `{{priorityShort}}` | First character of priority (uppercase) | Yes | Yes | `H` |
|
|
| `{{status}}` | Task status value | Yes | Yes | `active` |
|
|
| `{{statusShort}}` | First character of status (uppercase) | Yes | Yes | `A` |
|
|
| `{{context}}` | First context from contexts array | No | Yes | `work` |
|
|
| `{{contexts}}` | All contexts (comma-separated in body, `/` in folder) | Yes | Yes | `work, home` or `work/home` |
|
|
| `{{project}}` | First project from projects array | No | Yes | `ProjectA` |
|
|
| `{{projects}}` | All projects joined by `/` | No | Yes | `ProjectA/ProjectB` |
|
|
| `{{projectFilePath}}` | Full path of the first project, without `.md` | No | Yes | `Work/Projects/ProjectA` |
|
|
| `{{projectFilePaths}}` | Full paths of all projects, joined by `/` | No | Yes | `Work/Alpha/Personal/Beta` |
|
|
| `{{dueDate}}` | Task due date | Yes | Yes | `2025-01-15` |
|
|
| `{{scheduledDate}}` | Task scheduled date | Yes | Yes | `2025-01-10` |
|
|
|
|
## Body Template Only
|
|
|
|
Variables available only in body templates (not folder templates).
|
|
|
|
| Variable | Description | Example |
|
|
|----------|-------------|---------|
|
|
| `{{details}}` | User-provided details/description | `Task description text` |
|
|
| `{{parentNote}}` | Parent note name/path where task was created | `Projects/MyNote` |
|
|
| `{{tags}}` | Task tags (comma-separated) | `urgent, review` |
|
|
| `{{hashtags}}` | Task tags as space-separated hashtags | `#urgent #review` |
|
|
| `{{timeEstimate}}` | Time estimate in minutes | `30` |
|
|
|
|
## Date and Time
|
|
|
|
Variables for current date and time values.
|
|
|
|
| Variable | Description | Format | Example |
|
|
|----------|-------------|--------|---------|
|
|
| `{{date}}` | Full current date | `YYYY-MM-DD` | `2025-01-07` |
|
|
| `{{year}}` | Current year | `YYYY` | `2025` |
|
|
| `{{shortYear}}` | Short year | `YY` | `25` |
|
|
| `{{month}}` | Current month | `MM` | `01` |
|
|
| `{{day}}` | Current day | `DD` | `07` |
|
|
| `{{monthName}}` | Full month name | - | `January` |
|
|
| `{{monthNameShort}}` | Abbreviated month name | - | `Jan` |
|
|
| `{{dayName}}` | Full day name | - | `Tuesday` |
|
|
| `{{dayNameShort}}` | Abbreviated day name | - | `Tue` |
|
|
| `{{week}}` | Week number of year | `WW` | `02` |
|
|
| `{{quarter}}` | Quarter of year | `Q` | `1` |
|
|
| `{{shortDate}}` | Compact date | `YYMMDD` | `250107` |
|
|
|
|
### Time Variables
|
|
|
|
| Variable | Description | Format | Example |
|
|
|----------|-------------|--------|---------|
|
|
| `{{time}}` | Current time (compact) | `HHmmss` | `143052` |
|
|
| `{{time24}}` | 24-hour time | `HH:mm` | `14:30` |
|
|
| `{{time12}}` | 12-hour time with AM/PM | `hh:mm a` | `02:30 PM` |
|
|
| `{{hour}}` | Current hour (24-hour) | `HH` | `14` |
|
|
| `{{hourPadded}}` | Hour with leading zero | `HH` | `14` |
|
|
| `{{hour12}}` | Hour in 12-hour format | `hh` | `02` |
|
|
| `{{minute}}` | Current minute | `mm` | `30` |
|
|
| `{{second}}` | Current second | `ss` | `52` |
|
|
| `{{ampm}}` | AM/PM indicator | `a` | `PM` |
|
|
|
|
### Timestamps
|
|
|
|
| Variable | Description | Format | Example |
|
|
|----------|-------------|--------|---------|
|
|
| `{{timestamp}}` | Date and time combined | `YYYY-MM-DD-HHmmss` | `2025-01-07-143052` |
|
|
| `{{dateTime}}` | Date and time (no seconds) | `YYYY-MM-DD-HHmm` | `2025-01-07-1430` |
|
|
| `{{unix}}` | Unix timestamp (seconds) | - | `1736264852` |
|
|
| `{{unixMs}}` | Unix timestamp (milliseconds) | - | `1736264852000` |
|
|
| `{{milliseconds}}` | Current milliseconds | `SSS` | `123` |
|
|
| `{{ms}}` | Milliseconds (alias) | `SSS` | `123` |
|
|
|
|
### Timezone
|
|
|
|
| Variable | Description | Example |
|
|
|----------|-------------|---------|
|
|
| `{{timezone}}` | Timezone offset | `+01:00` |
|
|
| `{{timezoneShort}}` | Short timezone offset | `+0100` |
|
|
| `{{utcOffset}}` | UTC offset | `+01:00` |
|
|
| `{{utcOffsetShort}}` | Short UTC offset | `+0100` |
|
|
| `{{utcZ}}` | UTC Z indicator | `Z` |
|
|
|
|
### Unique Identifiers
|
|
|
|
| Variable | Description | Example |
|
|
|----------|-------------|---------|
|
|
| `{{zettel}}` | Zettelkasten-style ID (date + seconds since midnight in base36) | `250107abc` |
|
|
| `{{nano}}` | Unique nano ID (timestamp + random string) | `1736264852000x7k2m` |
|
|
|
|
## ICS Calendar Event Variables
|
|
|
|
Variables for content created from ICS calendar events. Available when creating notes or tasks from calendar events.
|
|
|
|
### Event Information
|
|
|
|
| Variable | Description | Body | Folder |
|
|
|----------|-------------|:----:|:------:|
|
|
| `{{icsEventTitle}}` | Event title | Yes | Yes |
|
|
| `{{icsEventTitleLower}}` | Event title lowercase | No | Yes |
|
|
| `{{icsEventTitleUpper}}` | Event title uppercase | No | Yes |
|
|
| `{{icsEventTitleSnake}}` | Event title in snake_case | No | Yes |
|
|
| `{{icsEventTitleKebab}}` | Event title in kebab-case | No | Yes |
|
|
| `{{icsEventTitleCamel}}` | Event title in camelCase | No | Yes |
|
|
| `{{icsEventTitlePascal}}` | Event title in PascalCase | No | Yes |
|
|
| `{{icsEventStart}}` | Event start time (ISO format) | Yes | No |
|
|
| `{{icsEventEnd}}` | Event end time (ISO format) | Yes | No |
|
|
| `{{icsEventLocation}}` | Event location | Yes | Yes |
|
|
| `{{icsEventDescription}}` | Event description | Yes | Yes |
|
|
| `{{icsEventUrl}}` | Event URL | Yes | No |
|
|
| `{{icsEventSubscription}}` | Calendar subscription name | Yes | No |
|
|
| `{{icsEventId}}` | Unique event identifier (UUID) | Yes | No |
|
|
|
|
## Current Note Folder Variables
|
|
|
|
Variables available for inline-created tasks and the default tasks folder.
|
|
|
|
| Variable | Description | Example |
|
|
|----------|-------------|---------|
|
|
| `{{currentNotePath}}` | Path to the current note's folder | `Projects/Notes` |
|
|
| `{{currentNoteTitle}}` | Title/name of the current note | `Meeting Notes` |
|
|
|
|
## Examples
|
|
|
|
### Body Template
|
|
|
|
```markdown
|
|
---
|
|
created: {{date}}
|
|
priority: {{priority}}
|
|
status: {{status}}
|
|
---
|
|
|
|
# {{title}}
|
|
|
|
{{details}}
|
|
|
|
Created from: {{parentNote}}
|
|
Tags: {{hashtags}}
|
|
```
|
|
|
|
### Folder Template
|
|
|
|
Organize tasks by project and status:
|
|
```
|
|
Tasks/{{project}}/{{status}}
|
|
```
|
|
Result: `Tasks/MyProject/active`
|
|
|
|
Organize by date hierarchy:
|
|
```
|
|
Daily/{{year}}/{{month}}/{{day}}
|
|
```
|
|
Result: `Daily/2025/01/07`
|
|
|
|
Organize ICS events by year and title:
|
|
```
|
|
Events/{{year}}/{{icsEventTitleKebab}}
|
|
```
|
|
Result: `Events/2025/team-meeting`
|
|
|
|
### Filename Template
|
|
|
|
Using Zettelkasten ID:
|
|
```
|
|
{{zettel}}-{{titleKebab}}
|
|
```
|
|
Result: `250107abc-my-task.md`
|
|
|
|
Using timestamp:
|
|
```
|
|
{{shortDate}}-{{title}}
|
|
```
|
|
Result: `250107-My Task.md`
|
|
|
|
## Notes
|
|
|
|
### YAML Safety
|
|
|
|
When used in YAML frontmatter, values containing special characters (colons, brackets, quotes) are automatically quoted to prevent parsing errors.
|
|
|
|
### Folder Path Sanitization
|
|
|
|
In folder templates, title values have filesystem-unsafe characters (`<>:"/\|?*`) replaced with underscores to ensure valid paths. Project file path variables preserve folder separators and sanitize unsafe characters within each path segment.
|
|
|
|
### Empty Values
|
|
|
|
If a variable references data that isn't available (e.g., `{{project}}` when no project is set), it resolves to an empty string.
|
|
|
|
### Case Transformations
|
|
|
|
The case transformation variables work as follows:
|
|
|
|
| Transform | Input | Output |
|
|
|-----------|-------|--------|
|
|
| `titleLower` | `My Task Name` | `my task name` |
|
|
| `titleUpper` | `My Task Name` | `MY TASK NAME` |
|
|
| `titleSnake` | `My Task Name` | `my_task_name` |
|
|
| `titleKebab` | `My Task Name` | `my-task-name` |
|
|
| `titleCamel` | `My Task Name` | `myTaskName` |
|
|
| `titlePascal` | `My Task Name` | `MyTaskName` |
|