Text-based to-do management CLI & language server

Related tags

Command-line todome
Overview

☑️ Todome

(日本語版はこちら

Todome is a notation developed for making and editing to-do lists. It is inspired by Todo.txt, and in fact some of the todome notation is similar to that of Todo.txt.

Support Tools

Todome provides several tools to help you manage your tasks. By using these, you can achieve more effective and efficient task management than simply editing text.

  • tree-sitter-todome: a todome parser written using Tree-sitter.
  • todome CLI (in this repository): CLI tool for formatting todome notation, etc.
  • todome-language-server (in this repository): language server for helping edit your todome files.
    • Complete category names and tag names
    • Highlight overdue tasks

Todome Notation

Tasks in todome notation are written in files with the extension .todome.

An overview of the todome notation is shown in the figure below:

todome-notation.png

Basic Tasks

The basic idea of todome is to write one task per line. Like Todo.txt, you can just string text together and it will be treated as a task.

Return books at the library
Buy milk
Have a meeting with xxx on the phone
Reply to email from xxx

Status (To Do, Doing, Done, Cancelled)

You can indicate the status of a task by prefixing it with a symbol such as - or *.

Return books at the library              # Status: To Do (default)
- Buy milk                               # Status: Done
= Have a meeting with xxx on the phone   # Status: Cancelled
Reply to email from xxx

There are four types of symbols that represent states.

Symbol Status Note
+ To Do Default
* Doing
- Done
= Caneclled

Meta-Information (Priority, Due Date, and Category)

Each task can contain meta-information such as priority, due date, and category. The meta-information is written between the status and the task body.

(B) (2021-11-13) Return books at the library      # Priority: B, Due date: Nov. 13, 2021
- [shopping] Buy milk                             # Status: Done, Category: shopping
[work] Have a meeting with xxx on the phone       # Category: work
- (A) [work] [Project X] Reply to email from xxx  # Status: Done, Priority: A, Category: work and "Project X"
  • Priority: (A), (B), (C), ..., (Z)
    • indicated by round parentheses and a single uppercase alphabet character
    • (A) represents the highest priority, (Z) the lowest
  • Due date: (2021-11-06), etc.
    • indicated by round parentheses and a string in the format YYYY-mm-dd
  • Category: [work], [Project X], [About xxx's email], etc.
    • indicated by square brackets and a non-empty string
    • category names (the contents of square brackets) can contain almost any character, but must not contain characters such as [, ], #, and line feeds.

Subtasks

In todome, indentation can be used to indicate the hierarchical structure of tasks. Indentation must be done using the TAB character (indenting with spaces will simply be ignored).

# Use TAB character to indent
Shopping
	milk
	6 eggs

Subtask itself can contain meta-information.

Shopping
	- (A) milk   # Status: Done, Priority: A
	(C) 6 eggs   # Status: To Do, Priority: C

If you write the following, the attributes (status and meta-information) of the parent task will be inherited, and the tasks "Shopping", "milk", and "6 eggs" will all be treated as done. The attributes can be overridden.

- Shopping
	(A) milk     # Status: Done, Priority: A
	(C) 6 eggs   # Status: Done, Priority: C

Subtasks can be nested.

shopping
	- Groceries
		milk
		(C) 6 eggs
	Daily necessities
		Dishwashing detergent

Subtasks can be used to describe detailed information about the parent task or to write notes on the progress of the parent task, as well as to break down the parent task. You can write them in any way you like as long as you don't use incorrect syntax.

Survey of papers about XXX
	Title: xxxxxx
	URL: https://...
	Sections
		- Introduction
		- Conventional method
		* Proposed method
		Experiment

Headers

If you want to include multiple tasks in the same category, it is useful to use headers to organize tasks. By writing one or more attributes and indenting the task with a TAB character on the next line, the attributes you just wrote will be reflected in all indented tasks.

(2021-11-13)
	(B) Return books at the library

[shopping]
	- Buy milk
	6 eggs

(A) [work]
	Have a meeting with xxx on the phone
	- Reply to email from xxx

This is equivalent for the following:

(2021-11-13) (B) Return books at the library

- [shopping] Buy milk
[shopping] 6 eggs

(A) [work] Have a meeting with xxx on the phone
- (A) [work] Reply to email from xxx

Although headers are similar to subtasks, there are some differences:

  • A header line itself is not treated as a task.
  • Each child element of the header is treated as an independent task.

Tags

Each task body can contain some tags. A sequence of alphanumeric characters starting with @ (@[a-zA-Z0-9][a-zA-Z0-9_-]* in regexp) is considered as a tag.

- (A) [work] Reply to @email from xxx

Comments

# is treated as the start of an inline comment. You can create a line that consists only of a comment. Comments are not treated as a task or a task body.

You might also like...
A text and (will be) graphic programming language

Siren Language I'm trying to make a simple programming language called Siren Language. This language will become a graphic and text programming langua

Attempt to summarize text from `stdin`, using a large language model (locally and offline), to `stdout`

summarize-cli Attempt to summarize text from stdin, using a large language model (locally and offline), to stdout. cargo build --release target/releas

Putting a brain behind `cat`🐈‍⬛ Integrating language models in the Unix commands ecosystem through text streams.
Putting a brain behind `cat`🐈‍⬛ Integrating language models in the Unix commands ecosystem through text streams.

smartcat (sc) Puts a brain behind cat! CLI interface to bring language models in the Unix ecosystem and allow power users to make the most out of llms

Simple macros to write colored and formatted text to a terminal. Based on `termcolor`, thus also cross-platform.
Simple macros to write colored and formatted text to a terminal. Based on `termcolor`, thus also cross-platform.

Bunt: simple macro-based terminal colors and styles bunt offers macros to easily print colored and formatted text to a terminal. It is just a convenie

A text renderer for Rust's embedded-graphics crate, based on U8g2
A text renderer for Rust's embedded-graphics crate, based on U8g2

u8g2-fonts This crate is a pure Rust reimplementation of the font subsystem of U8g2. It is intended for the embedded-graphics ecosystem. Licensing Whi

A library for building declarative text-based user interfaces
A library for building declarative text-based user interfaces

Intuitive docs.rs Documentation Intuitive is a component-based library for creating text-based user interfaces (TUIs) easily. It is heavily inspired b

Bruteforce connecting to a specific Sea of Thieves server. Useful if you want to be in the same server as your friends.

SoT Server Finder Find which Sea of Thieves server you're connected to. Useful if you want to be in the same server as your friends. Setup Download so

Leptos server signals synced through Server-Sent-Events (SSE)

Leptos Server Sent Events Server signals are leptos signals kept in sync with the server through server-sent-events (SSE). The signals are read-only o

Terminal-UI for the RabbitMQ management API
Terminal-UI for the RabbitMQ management API

RabbiTui A terminal client for the RabbitMQ Management API Installation Homebrew brew tap maxmindlin/rabbitui brew install rabbitui Building from sou

Owner
monaqa
Vim (Neovim) / Rust / SATySFi
monaqa
This is a `Rust` based package to help with the management of complex medicine (pill) management cycles.

reepicheep This is a Rust based package to help with the management of complex medicine (pill) management cycles. reepicheep notifies a person(s) via

Daniel B 24 Dec 13, 2023
A diff-based data management language to implement unlimited undo, auto-save for games, and cloud-apps which needs to retain every change.

Docchi is a diff-based data management language to implement unlimited undo, auto-save for games, and cloud-apps which needs to save very often. User'

juzy 21 Sep 19, 2022
Ideas => Creations, a multi-language CMS(Content Management System) based on Rust Web stacks, with long-term upgrade and maintenance.

Ideas => Creations 中文 RustHub: Rust ideas yesterday, shining creations today! This repository holds source code used to run https://rusthub.org, it's

rusthub.org 4 May 9, 2023
An implementation of Piet's text interface using cosmic-text

piet-cosmic-text Implements piet's Text interface using the cosmic-text crate. License piet-cosmic-text is free software: you can redistribute it and/

John Nunley 7 Mar 12, 2023
CLI for ERC-5564 compliant stealth address management on evm chains

stealthereum-cli This is a bare bones CLI written in rust for ERC-5564 compliant stealth address management on evm chains It's currently the easiest w

κασσάνδρα.eth 6 Oct 11, 2023
Rustato: A powerful, thread-safe global state management library for Rust applications, offering type-safe, reactive state handling with an easy-to-use macro-based API.

Rustato State Manager A generical thread-safe global state manager for Rust Introduction • Features • Installation • Usage • Advanced Usage • Api Refe

BiteCraft 8 Sep 16, 2024
Kana - a small CLI program for transliterating romaji text to either hiragana (ひらがな) or katakana (カタカナ).

Kana About Kana is a small CLI program for transliterating romaji text to either hiragana (ひらがな) or katakana (カタカナ). How it works Internally, it uses

Gabriel Sanches 3 Dec 27, 2022
A simple (but really fast!) CLI tool to convert an epub into a text file.

epub_to_txt A simple (but really fast!) CLI tool written in Rust to convert an epub into a text file (in Markdown format). Usage epub_to_txt filename.

Darren Mothersele 3 Jul 30, 2023
A Text User Interface library for the Rust programming language

Cursive Cursive is a TUI (Text User Interface) library for rust. It uses ncurses by default, but other backends are available. It allows you to build

Alexandre Bury 3.3k Jan 9, 2023
A Text User Interface library for the Rust programming language

Cursive Cursive is a TUI (Text User Interface) library for rust. It uses ncurses by default, but other backends are available. It allows you to build

Alexandre Bury 3.3k Jan 3, 2023