Emacs에서 음력 지원 (cal-korea.el)

jmjeong의 이미지

http://jmjeong.com/index.php?Emacs/Cal%2DKorea

메모+일정관리 목적으로 사용하고 있는 Org-mode에다 음력을 지원할 수 있지 않을까 해서, 관련 모듈을 살펴보다가 Emacs의 calendar + org-mode 모드에 사용되는 Calendar 음력 모드를 만들었습니다.

Emacs 내장 calendar에 moon phase를 출력하는 모듈과 중국 음력(cal-china)을 출력하는 루틴이 이미 들어 있습니다. 이것을 활용하여 한국음력을 지원하도록 했습니다. 중국과 우리나라 간의 음력날짜가 하루씩 다른 경우와 년도 표기 방법도 우리나라에서쓰는 방식대로 수정을 했습니다. 한국천문연구원에 있는 달력을 바탕으로 요 몇년 사이의 음력날짜에 대해서는 확인을 했는데, 혹시라도 다른 경우가 있으면 알려주시기 바랍니다.

출력되는 한글 메시지는 euc-kr를 기준으로 출력하도록 했습니다. prefer-coding-system에 맞춰서 출력 메시지를 다르게 할 필요가 있지 않을까 싶습니다.

korean-calendar-print-long-description 값이 t인 경우에는 간지까지 출력, nil 인 경우에는 간략하게 출력이 됩니다. 예를 들어 2007/12/12일 경우, 해당 값이 t인 경우에는 "2007년 11월 03일 (평달) 정해년 임자월 경진일"이, nil 인 경우에는 "2007/11/03" 으로 출력이 됩니다.

Diary 모드나 Org-mode에서 새로 지원이 되도록 추가된 sexp 함수는 아래와 같습니다.

(diary-korean-date)

그 날짜에 해당하는 음력 날짜 출력
출력결과로는 '음력: 2007/11/03' 이렇게 출력이 됩니다.

(diary-lunar-date MONTH DAY YEAR &optional LEAP MARK)

diary-date에 상대되는 음력함수입니다.
MONTH, DAY, YEAR 각 항목을 t로 지정하면 임의의 값이 들어와도 됩니다.
사용 방법으로는 '%%(diary-lunar-date 1 1 t) 설날 - %s' 과 같이 사용하고 %s는 음력 날짜로 치환이 됩니다.

(diary-lunar-anniversary MONTH DAY &optional YEAR LEAP MARK)

diary-anniversary에 상대되는 음력함수입니다. YEAR가 숫자로 입력이 된 경우에는 현재 날짜가 그 음력날짜로부터 몇 년이 지났는지를 계산해주고, t 인 경우에는 계산이 되지 않습니다.

사용방법으로는 '%%(diary-lunar-anniversary 12 4 1970) 정재목 - %s(%d)' 와 같이 되고 %s는 음력 날짜로, %d는 해당하는 음력날짜로부터 몇년이 지났는지에 대한 값이 치환됩니다. 윤달인 경우에는 LEAP에 t를 입력하면 됩니다. %s %d가 이 순서대로 나와야 합니다. %d %s 이런식으로 쓰게 되면 에러가 납니다. 출력결과는 '정재목 - 음력 12월 4일(37)' 와 같이 출력이 됩니다.

Calendar mode에서 음력날짜 지원을 위해 calendar-print-korean-date와 calendar-goto-korean-date가 추가되었습니다. 각각 default key 값으로는 'p l'과 'g l'로 mapping을 시켜 놓았습니다. Calendar mode에서 'p l'을 누르면 해당하는 날짜에 대한 음력날짜가 출력이 됩니다. 또한 해당 음력날짜에 해당하는 양력을 알고 싶은 경우에는 'g l'을 누르면 양력날짜로 옮겨가게 됩니다.

해당 모듈을 사용하기 위해서는 cal-korea.el을 load-path중 적당한 곳에 옮겨 놓고, .emacs 파일에서 (require 'cal-korea)를 하면 됩니다. Calendar, Diary, Org-mode 등에서 활용할 수 있습니다.

File attachments: 
첨부파일 크기
Image icon cal-korea.png12.25 KB
Package icon cal-korea.zip7.45 KB
Forums: 

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.