← All posts tagged elisp

demyan
elisp Переделал #272721, ввел лишний defun.. как-то вышло слегка
по-индусски, но зато все стало тупо-просто! Еще раз призываю
высказаться матерых Elisp'еров.

(defun calendar-x-month-last-thu (today)
(if (> (- (cadr today) (calendar-day-of-week today)) 3)
; current month or last
(car today) (- (car today)
; begining of year workaround
(if (eq 1 (car today)) -11 1))))

(let ((d (calendar-current-date))
(m (calendar-x-month-last-thu (calendar-current-date))))
(if (> m (car d))
; happy new year!
(concat (calendar-month-name m t) "_" (number-to-string (- (caddr d) 1)))
; string "Mon_YEAR" is what we need
(concat (calendar-month-name m t) "_" (number-to-string (caddr d)))))

В жуике это конечно не нужно, но мало-ли.. не делать же ради такой мелочи публичный git?
demyan
Emacs ? elisp
Выдумал немного elisp-кода для определения даты "прошлого четверга".
Код таков:

(format-time-string
"%c"
(apply 'encode-time
(let ((d ; that's day
(calendar-gregorian-from-absolute
(calendar-dayname-on-or-before
4 ; last Thursday
(calendar-absolute-from-gregorian (calendar-current-date))))))
(list 0 0 0 (cadr d) (car d) (caddr d) nil nil nil))))

Сразу оговорюсь, что мне этот код был надо не просто так, а для
личного использования. Поэтому использован format-time-string :)
Строку #3 я скопировал из time-date.el, еще, как видите, использованы
функции calendar.el

Собственно вопрос к знатокам: а проще можно? Как-то не очень нравится
получившийся вариант, слишком много конвертирования даты да и
громоздко. Манипуляция с со списком (последняя строка)
некрасивая. Может где есть возможность улучшить?