Todo.txt 문법

원문: https://github.com/ginatrapani/todo.txt-cli/wiki/The-Todo.txt-Format

왜 플레인 텍스트인가?

플레인 텍스트는 소프트웨어나 운영체제에 제약받지 않습니다. 게다가 검색이 편하고, 가볍고, 만들기도 쉽습니다. 파일을 열기 위해 특정 프로그램이 필요한 것도 아닙니다. 웹서버가 다운되거나 아웃룩 .PST 파일이 꼬여도 아무 문제가 없습니다. 데이터를 내보내거나 가져올 필요도 없습니다. 그냥 파일을 옮기면 됩니다. 데이터베이스도 필요없고 태그도 필요없고 플래그, 스타, 중요도 등등 어쨌든 플랫폼에서 강요하는 규칙에 따를 필요도 전혀 없습니다.

효율적인 할일 목록을 위한 3개의 축

Todo.txt에서는 세 가지 방법으로 목록을 분류할 수 있도록 해줍니다.

  • 우선순위: 할일 목록을 보면 해야할 일 중에 현재 가장 중요한 일이 어떤 것인지 바로 알 수 있어야 합니다. 프로젝트나 컨텍스트를 통해서도 이를 구분할 수 있지만, 추가적으로 특정 할일에 우선순위를 부여하여 목록 맨 위에 올리는 것도 가능합니다.
  • 프로젝트: 거대한 프로젝트를 잘 끝마치려면 이를 작은 할일들로 쪼개는 과정이 필요합니다. Todo.txt는 특정 프로젝트에 관련된 모든 할일들을 모아 볼 수 있도록 해줍니다.

    예컨대 집안을 정리해야 한다고 생각해 봅시다. 할일 목록은 이 프로젝트를 수행하기 위해 해야할 일들을 순서대로 보여주어야 합니다. 따라서 “집안 치우기”라고 할일을 추가하기 보다는, “집안 치우기”라는 프로젝트를 만들고 그 아래에 “창문 닦기” “청소업자 부르기” 등의 할일을 추가하는 게 더 낫습니다.

  • 컨텍스트: Getting Things Done을 창시한 David Allen은 할일들을 컨텍스트에 따라 나눠보기를 제안합니다. 다시 말해, 이 할일을 수행해야 할 장소나 상황을 함께 적어놓으라는 것입니다. 이메일로 대응해야 하는 일은 @email"로, 전화로 대응해야 할 일은 @phone으로, 집에서 해야 할 일은 @home으로 적는 식입니다.

    그 다음에, 만약 당신이 차를 몰고 가다가 전화할 짬이 몇분 생기면, @phone에 해당하는 할일을 확인한 다음, 전화를 몇 군데 거는 식으로 일을 처리할 수 있습니다.

Todo.txt를 사용하면 이 모든 일을 할 수 있습니다.

Todo.txt 문법: 개요

Todo.txt는 기본적으로 플레인 텍스트 파일로 이루어져 있습니다. 목록을 보고 할일에 대한 정보들, 예컨대 우선순위, 프로젝트, 컨텍스트, 생성일, 완료일 등을 쉽게 파악할 수 있도록, todo.txt는 몇가지 간단하면서 유연한 문법을 가지고 있습니다.

좀 더 구체적으로, Todo.txt 문법이 추구하는 목표는 크게 두 가지입니다.

  1. 목록 파일은 사람이 읽기에 어려움이 없어야 합니다. 그러니까 굳이 특별한 소프트웨어가 없어도, 단지 텍스트 파일을 에디터나 메모장으로 열어도 쉽게 이해할 수 있어야 합니다.
  2. 목록을 사람이나 프로그램이 마음대로 수정할 수 있어야 합니다. 예를 들어 텍스트 에디터나 수동으로 할일들을 알파벳 순서로 정렬한다고 생각해 봅시다. 그렇게 하더라도 목록이 깨지면 안되고, 사람이나 다른 소프트웨어가 이해할 수 있어야 합니다.

아래 그림은 위의 두 목표를 구체적으로 설명하고 있습니다. 우선순위나 날짜, 완료 여부는 할일의 가장 앞에 기재됩니다. 그렇게 해야 해당 정보들의 순서대로 할일들을 정렬하거나 눈으로 파악하기가 쉽기 때문입니다. 물론 아래에 설명하겠지만 꼭 저렇게 써야 할 필요는 없습니다.

무엇보다 가장 중요한 문법은 다음과 같습니다: 목록 한 줄마다 할일 하나씩.

이제 좀 더 구체적으로 살펴봅시다.

미완료된 할일: 세 가지 규칙들

Todo.txt의 좋은 점은 정해진 구조가 없다는 것입니다. 다시 말해 마음대로 할일에 대한 정보를 작성할 수 있습니다. 아래 목록을 예로 들어봅시다. 당신은 동네 벼룩시장에 물건을 내다 팔려고 합니다. 목록은 물건을 내놓기 위한 할일들을 정리하는 과정에 대한 것이며, 컨텍스트나 (@phone) 프로젝트 (+GarageSale), 우선순위 ((A)) 등을 사용하고 있습니다.

(A) 엄마한테 도시락 싸달라고 하기 @phone 
(B) 콜밴 부르기 +GarageSale @phone
인터넷에 벼룩시장 홍보하기 +GarageSale @facebook @twitter
@GroceryStore 커피와 쿠키

@phone 컨텍스트만 분류하거나, 스크립트를 짜서 이 컨텍스트만 따로 보여주도록 한다던가 하면 아래 할일만 남을 것입니다.

(A) 엄마한테 도시락 싸달라고 하기 @phone  
(B) 콜밴 부르기 +GarageSale @phone

혹은 벼룩시장에 직접적으로 관련된 할일만 뽑아내면, 아래와 같이 될 것입니다.

(B) 콜밴 부르기 +GarageSale @phone
인터넷에 벼룩시장 홍보하기 +GarageSale @facebook @twitter

할일을 기록할 때에는 다음 세 가지 규칙을 따라야 합니다.

규칙 1: 우선순위를 맨 앞에 쓸 것

우선순위는 대문자 A에서 Z까지를 괄호 안에 넣고, 스페이스로 띄워서 작성합니다.

예를 들어 가장 높은 우선순위는 (A)가 될 것입니다.

(A) 엄마한테 전화하기

따라서 아래 할일들은 우선순위가 없는 것으로 인식됩니다.

가장 먼저 엄마한테 전화하기 (A) @phone @someday
(b) 부장님 보고
(B)->연하장 발송

규칙 2: 할일 생성일은 우선순위 바로 다음에 쓸 것

즉 우선순위가 없는 할일의 경우 생성일이 가장 앞에 옵니다. 생성일은 YYYY-MM-DD 형식으로 작성합니다.

아래 할일들은 생성일이 있는 것으로 인식됩니다.

2011-03-02 문서 발송 +TodoTxt task format
(A) 2011-03-02 엄마한테 전화하기

반면 아래 할일은 생성일이 없는 것으로 인식됩니다.

(A) 엄마한테 전화하기 2011-03-02

규칙 3: 컨텍스트와 프로젝트는 아무 곳에나 써도 무방

컨텍스트는 @ 기호로, 프로젝트는 + 기호로 구분되며, 공백을 포함하지 않습니다. 또한 하나의 할일에 여러 개의 프로젝트나 컨텍스트를 넣는 것도 가능합니다.

예를 들어, 아래 할일은 +Family+PeaceLoveAndHappiness 프로젝트에, 그리고 @iphone@phone 컨텍스트에 포함됩니다.

(A) 엄마한테 전화하기 +Family +PeaceLoveAndHappiness @iphone @phone

또한 컨텍스트나 프로젝트는 앞에 공백이 존재해야 합니다. 즉 아래 할일들은 컨텍스트나 프로젝트가 없는 것으로 인식됩니다.

업체에 이메일 보내기 soandso@example.com
1+1 행사 확인하기

완료된 할일: 두 가지 규칙들

완료된 할일들은 아래 규칙에 따라 작성됩니다.

규칙 1: 완료된 할일은 맨 앞에 x를 붙일 것

할일 앞에 소문자 x와 공백을 붙이면 그 할일은 완료된 것으로 인식됩니다.

x 2011-03-03 엄마한테 전화하기

즉 아래 할일들은 완료된 것으로 인식되지 않습니다.

x-file 시즌 1 보기
X 2012-01-01 사직서 쓰기
(A) x 미팅장소 잡기

굳이 소문자 x를 쓰는 이유는, 알파벳 순으로 정렬했을 때 완료된 할일들이 아래로 가도록 하기 위함입니다.

규칙 2: 완료일은 x 다음에 작성할 것

예를 들어:

x 2011-03-02 2011-03-01 사직서 검토하기 +TodoTxtTouch @work

위 할일에는 날짜가 두 개 등장합니다. 규칙 2에 의해, 앞에 나오는 날짜는 완료일을 가리킵니다. 뒤의 날짜는 생성일이 될 것입니다. 이를 이용하면 할일을 완료일 기준으로 정렬할 수 있습니다. 다만, 많은 Todo.txt 클라이언트는 완료된 할일에서 우선순위를 제거해서 저장하는 경향이 있습니다. pri:A 형식으로 지정하면 우선순위를 보존할 수 있습니다(자세한 것은 후술).

생성일은 꼭 작성할 필요가 없지만, 완료일은 반드시 기재되어야 합니다. 이 두 날짜를 이용하면 할일을 몇일만에 끝냈는지 계산할 수 있습니다.

추가 문법

Todo.txt CLI는 애드온으로 문법을 확장할 수 있는 기능을 제공하고 있습니다. 기본 문법과 구분하기 위해, 애드온은 키:값 형태로 추가 메타데이터를 정의하도록 되어 있습니다. 예를 들어 due:2010-01-02는 예정일을 뜻합니다. 키와 값은 콜론으로 구분하며, 공백이 있어서는 안됩니다.

기타

todo.sh를 사용하면 특정 키워드를 지정해 검색해 볼 수 있습니다. 예를 들어 어떤 할일들은 다른 일이 먼저 끝나야 진행이 가능하다면, WAIT라고 키워드를 붙인 후 따로 검색해 보면 됩니다. 혹은 위에 설명한 것처럼 DUE:2016-03-22 같은 식으로 쓸 수도 있습니다. 모든 건 사용자 마음대로입니다.

Todo.txt CLI에서 특정 키워드를 필터링하고 싶다면, todo.sh list 키워드를 입력하면 됩니다.

댓글 남기기