manywaypark's Blog
개발, 검색, 함수

[emacs/org-mode] 반복되는 항목?

emacs 2009. 3. 5. 14:27 by manywaypark
매주, 매달, 매년 반복되는 항목은 어떻게 관리할까?
항목 밑에 SCHEDULED, DEADLINE 뒤에으로 표시되는 날짜필드(보통 <YYYY-mm-dd>형식)의 끝 부분에 +duration_num(d|w|m|y) 형태의 반복지시(repeater)를 덧붙이면 된다.
즉, 다음과 같은 형식이다.
* 국경일
** 삼일절
   SCHEDULED: <2009-03-01 Sun +1y>
day, week, month, year의 접미어를 쓸 수 있다.
M-x org-agenda를 입력한후 스크롤해서 내년으로 가보면 삼일절 항목이 스케줄에 표시되는 것을 볼 수 있을 것이다.

주간회의 같은 항목은 +1w를 써주면 매주 반복된다.

또한, TODO 항목의 경우 DONE으로 설정하기위해 C-c, C-t 를 누르면 항목 아래쪽에 -State "DONE"과 timestamp가 찍히고 자동으로 원래 SCHEDULEDDEADLINE으로 설정된 시각에 반복기간만큼의 시간이 더해져서 TODO 상태가 유지된다.
편리하지 않은가?

역시 편집기는 emacs - one and only.

참고: Using dates and times in Emacs org-mode

happy hackin'
~/.Xdefaults file:
Emacs.FontBackend: xft
Xft.dpi: 96
Xft.hinting: None
Emacs.font:UnTaza-16

$ xrdb -merge ~/.Xdefaults

emacs-snapshot 에서만 동작을 확인했음.

happy hackin'
문제: 보통 M-x shell을 써서 실행시킨 emacs shell에서는 다음과 같은 메시지와 함께 screen을 실행할 수 없다.
"Clear screen capability required."

해결: 그냥 shell말고 ansi shell(terminal)을 실행시키면 된다.
M-x ansi-term RET /bin/bash RET screen

ansi-term에서는 키바인딩이 shell과 달리 원래 bash의 바인딩이다. 즉, M-을 썼던 곳에 C-를 써야한다는 말이다.

문제: emacs에서 ansi-term을 실행시킨 후 ssh 등으로 원격 접속 한 다음 기존에 실행시켜 두었던 screen에 붙으려(attach) 할때 다음과 같은 메시지가 나오면서 제대로 실행 되지 않는다.
"Cannot find terminfo entry for 'eterm-color'."

해결: default 위치에 eterm-color 파일을 생성해준다.
sudo mkdir /usr/share/terminfo/e
sudo cp /usr/share/terminfo/E/Eterm-color /usr/share/terminfo/e/eterm-color

(Ubuntu에서는 /usr/share/terminfo/에 다른 것들은 다 소문자 인데 이상하게 e만 대문자로 되어있다. 내 경우에는 local에서 실행할 때는 잘 되었지만, ansi-term내에서 다른 박스로 접속후에 screen을 쓰려고 했을 때 eterm-color를 못찾는다는 메시지가 나오면서 제대로 실행되지 않았다.)

보너스: 다음 내용을 ~/.screenrc에 추가해보자.
shell -${SHELL}
caption always "%{= kc}%H (system load: %l)%-21=%{= .m}%Y.%m.%d(%D) %0c"

line #1: screen이 실행될 때 기본 shell 설정(~/.bash_profile 등)을 읽어들인다.
line #2: screen 화면에서 유용한 정보들(호스트 이름, 시스템 부하상태, 시간)을 표시한다.

참고:
http://www.omgili.com/newsgroups/gnu/emacs/help/mailman5350118812963732220help-gnu-emacsgnuorg.html
http://www.emacswiki.org/cgi-bin/wiki/GnuScreen
http://www.softpanorama.org/Utilities/Screen/screenrc_examples.shtml

happy hackin'
tramp를 쓰면 간단히 해결된다.
TRAMP는 "Transparent Remote (file) Access, Multiple Protocol"의 줄임말이다.
.emacs에 다음 내용을 추가한다.

(require 'tramp)
(setq tramp-default-method "scp")


파일을 열때 (C-x C-f) 입력형식:
/host:path/to/file


원격 파일을 편집하는 도중에 M-x shell을 해보라. 원격지의 shell이 뜬다. 이게 아마도 file을 괄호친 이유일까?

언제봐도 emacs는 간결하고 아름답다.

2008-11-10 약간의 응용(로컬 파일을 루트 권한으로 다시 열기)
C-x C-f /sudo::/path/to/file RET
KLDP에 내가 답변으로 올렸던 글인데... 매번 까먹는다. 이놈의 건망증이란... Orz.

2017-03-22 포트번호 지정(default 22번이 아닐 때):
C-x C-f /ssh:test@host#2222:/tmp
ref: https://www.emacswiki.org/emacs/TrampMode#toc28


emacs의 nxml-mode를 사용하면, emacs에서 xml 파일들을 쉽게 편집할 수 있다.
nxml은 내부적으로 validation에 relaxng라는 xml schema 표기 형식을 사용하는데, docbook이나 xhtml같은 널리 쓰이는 문서형식에 대해서는 /usr/share/emacs/site-lisp/nxml-mode/schema/ 디렉토리에 *.rnc 파일들이 준비되어 있어서 쓰는데 별 문제가 없다. 그런데, custom dtd나 schema를 쓰려면 어떻게 해야할까?
trang을 사용해서 변환하면 된다.
$ trang /path/to/custom.dtd /path/to/custom.rnc
emacs의 메뉴에서 XML > Set Schema > File... 선택후 /path/to/custom.rnc를 입력하면 즉시 편집중인 문서의 validation을 실행하고 결과를 상태표시줄에 표시한다.
에러 있는 부분은 빨간 밑줄이 쳐지며, <C-c C-n>으로 에러있는 곳으로 바로 움직일 수도 있다.
유용한 편집 팁을 하나만 더 소개하자면, 마크업 부분 입력(eg, <do) 후에 <C-return>을 눌러보자. schema 상에서 그곳에 삽입을 허용하는 do로 시작하는 tag들이 예쁘게 줄을 선다 (문맥감지 자동완성 기능이라 맘대로 명명했다).

James Clark에게 경의를...

happy hackin'

2012-12-15:
상기 자동 완성 기능(nxml-complete)은 M-TAB으로 변경 되었다.
http://lists.gnu.org/archive/html/bug-gnu-emacs/2012-03/msg00696.html
http://debbugs.gnu.org/cgi/bugreport.cgi?bug=6776

예전 스타일로 쓰고 싶다면 ~/.emacs에 다음과 같은 내용을 추가하자.
;; nxml mode key binding(old style): complete w/ C-return
(add-hook 'nxml-mode-hook
          '(lambda ()
             (define-key nxml-mode-map [C-return] 'nxml-complete)))


얼마전에 emacs를 21에서 22으로 버전업을 했는데, 미니 버퍼에서의 자동 완성 기능이 동작하지 않았다.
M-x 후에 몇 글자 입력하고 tab을 눌렀을 때 분명히 자동완성이 존재하는 문자열임에도 불구하고 "No completions of blabla~~"라고 표시되며 동작하지 않았다.
검색을 해도 쉽게 나오진 않았는데, 해결법은 의외로 간단했다. 참고
.emacs 파일에서 다음과 같은 라인을 찾아서
;; find a line like this in .emacs
(define-key minibuffer-local-map [tab] 'comint-dynamic-complete)
다음과 같이 바꾼다.
;; replace the line with this line
(define-key minibuffer-local-map "\t" 'comint-dynamic-complete)

emacs 새 버전의 reader의 구현이나 설정이 "[tab]" 같은 형태의 입력을 못 받아들이는 듯하다.

happy hackin'
1 2 
분류 전체보기 (306)
잡담 (20)
함수형 언어 (65)
emacs (16)
java (18)
tips & tricks (154)
사랑 (1)
가사 (0)
독서 (4)
mobile (6)
비함수형 언어 (2)

공지사항

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

04-25 06:24