이맥스(Emacs) Org 모드

이맥스는 쓰면 쓸수록 매력있는 텍스트 에디터입니다. 이맥스로 할 수 있는게 아주 많습니다. 대부분의 사람들이 이맥스를 프로그래밍 할 때 사용하지만 Org 모드를 이용하면 일정관리, 메모, 문서작성에도 요긴하게 쓸 수 있습니다. 이 글에서는 Org 모드 중 일정관리에 대한 부분을 중점적으로 살펴보도록 하겠습니다.

들어가며

아래는 Org 모드가 어떤 것인지 한눈에 볼 수 있는 이미지입니다.

Preview of Org mode

시작하기

1
2
3
4
(global-set-key "\C-c l" 'org-store-link)
(global-set-key "\C-c a" 'org-agenda)
(global-set-key "\C-c c" 'org-capture)
(global-set-key "\C-c b" 'org-iswitchb)

헤드라인

Org 모드의 시작은 헤드라인과 함께 합니다. 헤드라인은 위의 스크린 샷에서 *로 시작하는 줄입니다. 헤드라인은 단락과도 비슷한데, 들여쓰기와 함께 문서를 __트리 구조__로 작성할 수 있게 합니다. M-RET를 통해 추가할 수 있으며 헤드라인이 있는 줄에서 M-방향키를 입력하면 레벨과 위치를 조절 할 수 있습니다.

1
2
3
4
5
6
7
8
* Top level headline
** Second level
*** 3rd level
some text
*** 3rd level
more text

* Another top level headline

할 일 목록(TODO Items)

헤드라인은 모두 할 일이 될 수 있습니다. 할 일이 되기 위해서는 헤드라인이 _TODO_로 시작하면 됩니다. 헤드라인에서 S-<LEFT> 또는 S-<RIGHT>를 입력하면 헤드라인 -> TODO -> DONE의 세 가지 상태로 쉽게 전환할 수 있습니다.

시간과 날짜(Date and Times)

일정관리에는 시간이 중요합니다. 일정은 특정한 날까지 수행해야 하는 일, 일정한 주기로 반복적으로 일어나는 일, 언제부터 언제까지와 같은 일정 날짜 사이에 해야하는 일 등 시간 엮이는 경우가 많습니다.

Org 모드에서 각각의 할 일은 타임스탬프 레이블을 통해 관리 할 수 있습니다. 타임스탬프는 할 일 목록에만 붙는게 아니라 Org 트리에 있는 엔트리에 모두 붙을 수 있습니다.

일반 시간, 이벤트, 일정

특정한 이벤트나 일정이 열시는 시간을 나타냅니다.

     * Meet Peter at the movies
       <2006-11-01 Wed 19:15>
     * Discussion on climate change
       <2006-11-02 Thu 20:00-22:00>

반복되는 시간

일정한 주기로 반복되는 일을 나타냅니다.

     * Pick up Sam at school
       <2007-05-16 Wed 12:30 +1w>

Diary-style sexp entries

     * The nerd meeting on every 2nd Thursday of the month
       <%%(diary-float t 4 2)>

시간 범위

시간 범위를 나타냅니다. ‘–’로 두 타임스탬프를 연결하는 형태로 표현합니다.

     ** Meeting in Amsterdam
        <2004-08-23 Mon>--<2004-08-26 Thu>

비활성 타임스탬프

아젠다에 나타나지 않는 시간입니다. ‘[‘ ~ ‘]’로 표현되며 할 일을 완료해서 DONE이 되면 나타나는 시간입니다.

     * Gillian comes late for the fifth time
       [2006-11-01 Wed]

태그(Tags)

헤드라인에 서로 연관있는 정보나 추가 정보를 기입하기 위해 태그를 사용할 수 있습니다. 태그는 헤드라인의 끝에 들어가며 여러 태그를 같이 달 수 있습니다. 태그는 문자와 숫자, _, @로 구성되며 ::로 감싸야합니다. 아래는 태그의 예 입니다.

또한 태그는 상속이 됩니다. 아래 예에서 두 번째 레벨의 헤드라인은 :work:boss:notes: 태그를 갖게 되고 세 번째 레벨의 헤드라인은 :work:boss:notes:action: 태그를 갖게 됩니다.

     * Meeting with the French group      :work:
     ** Summary by Frank                  :boss:notes:
     *** TODO Prepare slides for him      :action:

태그는 파일 단위로도 달 수 있습니다. 아래와 같이 문서에 #+FILETAGS:를 이용하면 파일 전체에 태그가 적용됩니다.

#+FILETAGS: :Peter:Boss:Secret:

Enter new tags for the current headline. Org mode will either offer completion or a special single-key interface for setting tags, see below. After pressing , the tags will be inserted and aligned to org-tags-column. When called with a C-u prefix, all tags in the current buffer will be aligned to that column, just to make things look nice.

아젠다(Agenda)

기능

Feature list

일정관리(Todo)

C-c C-c
When the cursor is in a headline, this does the same as C-c C-q.

  • 헤드라인에서 입력하는 경우 : 태그 입력
  • 타임스탬프에서 입력하는 경우 : 타임스탬프 수정

org-support-shift-select

자주쓰는 단축키

태그 단축키

단축키 | 명령어 | 설명
— | — |
C-c C-q | C-c C-q | 현재 엔트리에 태그를 추가합니다

할 일 목록 단축키

단축키 | 명령어 | 설명
— | — |
C-c C-t | org-todo | 헤드라인을 할일, 완료, 상태없음(unmarked)로 변경
S-/ | org-shift-right / org-shift-left | 헤드라인을 할일, 완료, 상태없음(unmarked)로 변경
C-c / t | | 모든 할일 목록을 보여준다
S-M- | org-insert-todo-heading | 현재 헤드라인과 동일한 레벨에 할일 목록을 추가한다.

아젠다 단축키

단축키 | 명령어 | 설명
— | — |
C-c [ | org-agenda-file-to-front | 현재 파일을 아젠다 목록에 추가
C-c ] | org-remove-file | 현재 파일을 아젠다 목록에서 제거
C-, | org-cycle-agenda-files | org-agenda-files 목록에 있는 아젠다 파일 순회
C-c C-d | org-deadline | 데드라인 타임스탬프 추가

이맥스(Emacs) Org 모드 - 1. 시작하기

Preview of Org mode

들어가며

Org 모드는 이맥스를 이용해 문서를 작성하거나 일정관리를 할 수 있도록 도와주는 모드입니다. 위의 그림과 같이 생각을 구조적으로 정리하고 타임스탬프를 이용해 일정을 관리할 수 있습니다.

또한 이렇게 작성된 문서는 다양한 형태의 포맷으로 변환이 가능합니다.

Org 모드의 기능은 아주 많기 때문에 이번 포스팅에서는 Org 모드의 가장 기본이 되는 요소들에 대해 먼저 알아보고 이어지는 포스팅을 통해 점차 Org 모드의 세부 기능에 대해 알아보도록 하겠습니다.

이 포스팅에 있는 내용은 대부분 Org 모드 공식 페이지의 메뉴얼과 가이드를 가지고 정리한 것으로, 자세한 내용은 공식 홈페이지를 참고하시면 됩니다.

이맥스의 Org 모드가 갖는 장점

1. 문서작성

이맥스 자체는 텍스트 편집기이기 때문에 사람이 보기 좋게 서식을 갖추어 바로 보기는 어렵습니다. 하지만 이렇게 서식을 신경쓰지 않아도 되기 때문에 문서의 외형보다는 __내용__에 집중해서 문서를 작성할 수 있도록 해줍니다.

게다가 이렇게 Org 모드를 통해 작성한 문서는 HTML, PDF, LaTeX, Markdown, OpenDocument 등 다양한 형식으로 변환이 가능하기 때문에 결국 서식에 있어서도 워드프로세서에 비해 훨씬 확장성이 크다 할 수 있습니다.

데이터와 모양(서식)을 분리한게 마치 HTML과 CSS 관계랑 비슷하죠? 또한 문서 자체가 텍스트 이기 때문에 용량도 작고 OS나 특정 워드프로세서와 같은 소프트웨어 종속적이지 않다는 장점도 가집니다.

2. 일정관리

일정 관리에 있어서도 Org 모드는 할 일 목록(ToDO), 타임스탬프, 링크, 아젠다 뷰, 달력 등을 이용해 손쉽게 일정을 관리 할 수 있는 다양한 기능을 제공합니다. 이런 기능들은 이맥스 특유의 단축키 시스템과 결합되어 사용자에게 엄청난 생산성을 가져다 줍니다.

시작하기

Org 모드는 확장자가 .org인 파일을 열면 자동으로 활성화 되는 메이저 모드입니다. 직접 Org 모드를 활성화 시키고 싶으면 M-x org-mode<RET> 키를 입력하면 됩니다.

만약 Org 모드가 설치되어 있지 않다면 아래와 같이 org 모드를 설치합니다.

M-x package-install RET org RET

헤드라인(Headlines)

Org 모드의 시작은 헤드라인과 함께 합니다. 헤드라인은 위의 스크린 샷에서 *로 시작하는 줄입니다. 헤드라인은 단락과도 비슷합니다. 들여쓰기와 *의 개수는 단락의 레벨을 나타냅니다. 헤드라인을 이용해서 __트리 구조__로 문서를 작성할 수 있습니다. M-RET를 통해 헤드라인을 추가할 수 있으며, 헤드라인이 있는 줄에서 M-방향키를 입력하면 레벨과 위치를 조절 할 수 있습니다.

1
2
3
4
5
6
7
8
* Top level headline
** Second level
*** 3rd level
some text
*** 3rd level
more text

* Another top level headline

할 일 목록(TODO Items)

헤드라인은 모두 할 일이 될 수 있습니다. 할 일이 되기 위해서는 헤드라인이 __TODO__로 시작하면 됩니다. 헤드라인에서 S-<LEFT> 또는 S-<RIGHT>를 입력하면 헤드라인 -> TODO -> DONE 세 가지 상태로 쉽게 전환할 수 있습니다.

플레인 리스트(Plain lists)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
** Lord of the Rings
My favorite scenes are (in this order)
1. The attack of the Rohirrim
2. Eowyn's fight with the witch king
+ this was already my favorite scene in the book
+ I really like Miranda Otto.
3. Peter Jackson being shot by Legolas
- on DVD only
He makes a really funny face when it happens.
But in the end, no individual scenes matter but the film as a whole.
Important actors in this film are:
- Elijah Wood :: He plays Frodo
- Sean Astin :: He plays Sam, Frodo's friend. I still remember
him very well from his role as Mikey Walsh in The Goonies.

헤드라인이 단락과 같은 역할을 한다면 플레인 리스트는 단락에서 리스트를 표현하는데 사용됩니다. 또한 플레인 리스트는 이후 설명할 체크박스(Checkboxes)에도 사용됩니다.

플레인 리스트는 크게 순서가 있는 리스트, 순서가 없는 리스트, 디스크립션 리스트로 나눌 수 있습니다.

  • 순서가 없는 리스트
    -+, *로 시작합니다. 여기서 *는 위치에 따라 헤드라인이 되기도 하고 플레인 리스트가 되기도 하기 때문에 혼동을 줄이기 위해 -+를 사용하는게 좋습니다.

  • 순서가 있는 리스트
    1. 이나 1) 처럼 숫자에 .이나 )를 붙여서 표현합니다. 만약 20과 같은 숫자로 시작하고 싶다면 [@20]과 같이 사용하면 됩니다.

  • 디스크립션 리스트
    디스크립션 리스트는 정의를 표현하기 위해 사용며 순서가 없는 리스트에 ::를 이용해서 표현합니다.. 사전을 생각하면 쉬운데, ::를 기준으로 왼쪽에는 단어, 오른쪽에는 설명을 적는다고 생각하면 쉬울 것 같습니다.

플레인 리스트에서 S-<LEFT> 또는 S-<RIGHT> 키를 입력하면 리스트의 형태가 바뀌고 M-<RET>를 입력하면 새로운 플레인 리스트 아이템을 추가할 수 있습니다.

체크박스(Checkboxes)

플레인 리스트 안에 있는 아이템은 체크박스를 가질 수 있습니다. 체크박스를 사용하는건 간단합니다. 아이템의 맨 앞에 [ ]를 삽입하면 됩니다. 단축키로는 M-S-<RET>를 사용합니다.

체크박스에 체크를 하거나 체크를 해제하는건 C-c C-c 단축키를 사용합니다.

또한 체크박스가 있는 아이템의 부모는 진행 사항을 알 수 있습니다. 부모 아이템의 마지막 줄에 [/]을 넣으면 [2/4]와 같은 형태로, [%]를 넣으면 [50%]와 같은 형식으로 진행 사항을 보여줍니다.

아래는 체크박스의 예입니다.

1
2
3
4
5
6
7
8
* TODO Organize party [2/4]
- [-] call people [1/3]
- [ ] Peter
- [X] Sarah
- [ ] Sam
- [X] order food
- [ ] think about what music to play
- [X] talk to the neighbors

접기/펼치기(Folding and Expanding)

헤드라인이나 플레인 리스트는 <TAB>키를 통해 접기와 펼치기가 가능합니다.

마무리

이번 포스팅에서는 간단히 Org 모드에 대한 설명과 기본 구성요소에 대해 정리 알아 보았습니다. 다음 포스팅에서는 Org 모드를 이용한 일정관리에 대해 조금 더 자세히 알아보도록 하겠습니다.

참고자료

Org 모드 공식 페이지

Org 모드의 기능에 대한 모든 설명을 볼 수 있습니다.