我正在尝试编写一个函数,让我选择(交互式)org-agenda-month-view
的月份和年份 - 使用201312
格式(不带双引号),2013年12月。我想在本月使用单词(December
)或数字(12
),但需要一些帮助(请)将月份名称解码为整数 - 类似{{ 1}}。
此外,关于如何将我的两个(if (not (integer-p month)) (setq month (decode-name-of-month month)))
read-string
绑定合并为一个操作的任何指针都将非常感激 - 即,能够手动输入let
或{{1 }};而不是先输入January 2014
,然后在两个单独的操作中输入01 2014
。
January
编辑(2013年12月11日):基于@Drew和@Sean Perry的有用答案的第一份工作草案。添加了变量2014
,允许(let* (
(year (read-string "Insert the year: "))
(month (read-string "Insert the month: ")))
(org-agenda nil "1")
(org-agenda-month-view (read (format "%s%02s" year month))))
根据用户输入在[开头]显示正确的月份 - 不再需要函数org-agenda-start-day
。更新了变量(org-agenda nil "1")
以修正拼写错误并包含其他可能性 - 例如01,02等
org-agenda-month-view
答案 0 :(得分:1)
(defun foo (month year)
(interactive
(let* ((mon+yr (split-string
(read-string "Month and year: " nil nil
(format-time-string "%B %Y"(current-time)))
nil 'TRIM))
(mon (car mon+yr))
(yr (cadr mon+yr))
(m2 (condition-case nil (format "%d" mon) (error nil))))
(list (or m2 mon) yr)))
(message "Month: %s, Year: %s" month year))
M-x foo 12 2013 ==> Month: 12, Year: 2013
M-x foo December 2013 ==> Month: December, Year: 2013
M-x foo Dec 2013 ==> Month: Dec, Year: 2013
M-x foo Nebraska 200000 ==> Month: Nebraska, Year: 200000
但是你明白了。 (检查有效的月份名称和月份和年份数字。)
答案 1 :(得分:1)
(require 'parse-time) ;; in standard lib
(defun encode-name-of-month (month_name)
(cdr (assoc (downcase month_name) parse-time-months))
)
(defun decode-name-of-month (month)
(car (rassoc month parse-time-months))
)
这应该让你开始。