你似乎发现了一个bug。应该是 ddate 的样子
debug 了半天,发现不是。这个函数实际是这么使用的:
(let ((entry "entry")
(date '(7 23 2018)))
(diary-chinese-anniversary ...))
感觉被欺骗了感情
同样很困惑,看了下 diary-sexp-entry
,其中用了 calendar-dlet*
,大概类似于
x
;; error-> Symbol's value as variable is void: x
(defun foo ()
x)
;; => foo
(progn (defvar x)
(let ((x 42))
(foo)))
;; => 42
x
;; error-> Symbol's value as variable is void: x
改写了一下貌似可以了:
(require 'cal-china)
;; diary for chinese birthday
(defun my--diary-chinese-anniversary (lunar-month lunar-day &optional year mark)
(if year
(let* ((d-date (diary-make-date lunar-month lunar-day year))
(a-date (calendar-absolute-from-gregorian d-date))
(c-date (calendar-chinese-from-absolute a-date))
(date a-date)
(cycle (car c-date))
(yy (cadr c-date))
(y (+ (* 100 cycle) yy)))
(diary-chinese-anniversary lunar-month lunar-day y mark))
(diary-chinese-anniversary lunar-month lunar-day year mark)))
主要是加了 (require 'cal-china)
不然函数 calendar-chinese-from-absolute
找不到。
另外 date 变量报错的问题,我加了一个 (date a-date)
我这里calendar-date-style
默认是’iso,会出现 Bad sexp at line 2
错误,在let里将calendar-date-style
改成american
后正常。
;; diary for chinese birthday
(defun my-diary-chinese-anniversary (lunar-month lunar-day &optional year mark)
(if year
(let* ((calendar-date-style 'american)
(d-date (diary-make-date lunar-month lunar-day year))
(a-date (calendar-absolute-from-gregorian d-date))
(c-date (calendar-chinese-from-absolute a-date))
(date a-date)
(cycle (car c-date))
(yy (cadr c-date))
(y (+ (* 100 cycle) yy)))
(diary-chinese-anniversary lunar-month lunar-day y mark))
(diary-chinese-anniversary lunar-month lunar-day year mark)))
这个如果想提前一周显示应该怎么写?我试了一下<%%(my-diary-chinese-anniversary 2 5) +1y -1w>
好像不行
我也报错非法date,你解决了吗?
我是调试的时候手动运行那个函数报date的那个错误,放到org文件里面去就没问题,我就直接用的 @lld2001提供的这个函数就可以了
放到org文件里面是啥意思?放到哪个文件里了?不是在diary文件里通过%%(my-diary-chinese-anniversary 2 5 1990)这样调用吗? 能把你的用法贴个例子吗?
谢谢啦
** 某人生日
<%%(my-diary-chinese-anniversary 7 14)>
这样用
很奇怪,在diary中(my-diary-chinese-anniversary 2 1)来写就没问题,可是带上年就会报错Error: (wrong-type-argument listp 721020),感觉好像年的用法不太对? 大家有同样的问题吗?
谢谢;
我是这样用,经过测试,没问题:
在ORG标题下: %%(my-diary-chinese-anniversary 1 23 2021)这是第%d个生日
(defun my/chinese-year (lunar-month lunar-day year)
(+ (* 100 (car (calendar-chinese-from-absolute (calendar-absolute-from-gregorian (diary-make-date lunar-month lunar-day year)))))
(cadr (calendar-chinese-from-absolute (calendar-absolute-from-gregorian (diary-make-date lunar-month lunar-day year))))))
%%(diary-chinese-anniversary 8 10 (my/chinese-year 8 10 1949)) 新中国第 %d 个农历生日
这样就不会报错了