Я пытаюсь написать функцию, которая позволит мне выбрать (в интерактивном режиме) месяц и год для org-agenda-month-view
- который использует формат 201312
(без двойных кавычек) на декабрь 2013 года. Я хотел бы использовать либо слова (December
), либо цифры (12
) за месяц, но вам нужна помощь (пожалуйста), чтобы декодировать имя месяца в целое число - что-то вроде (if (not (integer-p month)) (setq month (decode-name-of-month month)))
.Как расшифровать название месяца в целое число
Кроме того, любые указатели о том, как объединить два моих read-string
let
привязок в только одно действие было бы весьма признателен - то есть, иметь возможность вводить вручную January 2014
или 01 2014
; вместо первого ввода January
, а затем ввода 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))))
EDIT (11 декабря 2013): Первый рабочий проект основывается на полезные ответы по @Drew и @Sean Перри. Добавлена переменная org-agenda-start-day
, которая позволяет (org-agenda nil "1")
отображать [в самом начале] правильный месяц на основе пользовательского ввода - функция org-agenda-month-view
больше не нужна. Обновление переменной lawlist-parse-time-months
исправить опечатку, а также дополнительные возможности - например, 01, 02 и т.д.
(defvar lawlist-parse-time-months '(
("1" . "01")
("01" . "01")
("jan" . "01")
("january" . "01")
("2" . "02")
("02" . "02")
("feb" . "02")
("february". "02")
("3" . "03")
("03" . "03")
("mar" . "03")
("march" . "03")
("4" . "04")
("04" . "04")
("apr" . "04")
("april" . "04")
("5" . "05")
("05" . "05")
("may" . "05")
("6" . "06")
("06" . "06")
("jun" . "06")
("june" . "06")
("7" . "07")
("07" . "07")
("jul" . "07")
("july" . "07")
("8" . "08")
("08" . "08")
("aug" . "08")
("august" . "08")
("9" . "09")
("09" . "09")
("sep" . "09")
("september" . "09")
("10" . "10")
("oct" . "10")
("october" . "10")
("11" . "11")
("nov" . "11")
("november" . "11")
("12" . "12")
("dec" . "12")
("december" . "12")))
(defun encode-name-of-month (month_name)
(cdr (assoc (downcase month_name) lawlist-parse-time-months)))
(defun decode-name-of-month (month)
(car (rassoc month lawlist-parse-time-months)))
(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)))
(setq org-agenda-start-day (concat year "-" (encode-name-of-month month) "-" "01"))
(org-agenda nil "1"))
Большое спасибо за помощь - очень благодарен !!! – lawlist