Пользовательский дневник-функция восхода не работает. `Автозагрузка-diary`? (Emacs.)
Вступление:
На основе существующего кода для Emacs diary-sunrise-sunset
Я попытался создать две новые функции diary-sunrise
а также diary-sunset
,
Мои причины приведены ниже под заголовком "XY-описание".
У меня есть код ниже, который, кажется, работает, за исключением случаев, когда я перезагружаюсь с новым Emacs. Я могу исправить это на мгновение, используя оригинальный встроенный diary-sunrise-sunset
, С тех пор мои функции выполняются прекрасно.
Другими словами, я должен использовать встроенный %%(diary-sunrise-sunset)
всего один раз до моего %%(diary-sunrise)
а также %%(diary-sunset)
буду работать.
Вопрос:
Можете ли вы помочь мне исправить использование этих функций, чтобы мне не пришлось делать неловкий шаг, чтобы сначала вызвать встроенную функцию?
Строки кода, которые кажутся мне подозрительными, - это те, которые идут
;;;###diary-autoload
Хотя у меня есть представление о необходимости загрузки программ, я не уверен, что здесь происходит, или в этом проблема. (Я никогда не видел этот конкретный синтаксис.)
я пытался M-: (require 'solar)
а также M-: (require 'diary)
, но ни один не работал (и только сейчас calendar
). Я пытался поместить свой код как в мой .emacs
и во встроенном .../lisp/calendar/solar.el
(и перекомпиляция байтов), но ни один из них не сработал.
Мои функции:
(Они являются небольшими модификациями solar-sunrise-sunset-string
а также diary-sunrise-sunset
которые оба определены в .../lisp/calendar/solar.el
).
Восход:
(defun solar-sunrise-string (date &optional nolocation)
"String of *local* time of sunrise and daylight on Gregorian DATE."
(let ((l (solar-sunrise-sunset date)))
(format
"%s (%s hours daylight)"
(if (car l)
(concat "Sunset " (apply 'solar-time-string (car l)))
"no sunset")
(nth 2 l)
)))
;; To be called from diary-list-sexp-entries, where DATE is bound.
;;;###diary-autoload
(defun diary-sunrise ()
"Local time of sunrise as a diary entry.
Accurate to a few seconds."
(or (and calendar-latitude calendar-longitude calendar-time-zone)
(solar-setup))
(solar-sunrise-string date))
Заход солнца:
(defun solar-sunset-string (date &optional nolocation)
"String of *local* time of sunset and daylight on Gregorian DATE."
(let ((l (solar-sunrise-sunset date)))
(format
"%s (%s hours daylight)"
(if (cadr l)
(concat "Sunset " (apply 'solar-time-string (cadr l)))
"no sunset")
(nth 2 l)
)))
;; To be called from diary-list-sexp-entries, where DATE is bound.
;;;###diary-autoload
(defun diary-sunset ()
"Local time of sunset as a diary entry.
Accurate to a few seconds."
(or (and calendar-latitude calendar-longitude calendar-time-zone)
(solar-setup))
(solar-sunset-string date))
XY описание:
Я использую Org-режим Emacs и только начинаю использовать представления повестки дня. Мне нравится встроенный diary-sunrise-sunset
функции, но хотел сделать несколько небольших настроек, чтобы сделать его мне больше по вкусу.
По сути, представление повестки дня в режиме Org будет извлекаться в первый раз из дневника sexp. %%(diary-sunrise-sunset)
, например
Sat, Apr 5, 2014
Sunrise 6:43am (PDT), sunset 7:42pm (PDT) at Springfield, OH (12:59 hours daylight)
и, таким образом, сделать запись
6:43am........ Sunrise (PDT), sunset 7:42pm (PDT) at Springfield, OH (12:59 hours daylight)
в представлении повестки дня.
То, что я хотел бы сделать, это что-то вроде,
6:43am........ Sunrise (PDT) (12:59 hours daylight)
8:00am........ ----------------
10:00am........ ----------------
12:00pm........ ----------------
2:00pm........ ----------------
4:00pm........ ----------------
5:51pm........ now - - - - - - - - - - - - - - - - - - - - - - - - -
6:00pm........ ----------------
7:42pm........ Sunset (PDT) (12:59 hours daylight)
Где данные делятся на два раза, а не все записываются только во время восхода солнца.
Бонус:
фрагмент так, чтобы C-c a d
даст вам хороший дневник:
(setq org-agenda-custom-commands
'(("d" "day's agenda"
agenda ""
(
(org-agenda-files '("/e/org/agendatest.org"))
(org-agenda-prefix-format "%t %s")
(org-agenda-span 'day)
(org-agenda-timegrid-use-ampm t)
)
)
))
1 ответ
В последнем абзаце моего вопроса (восьмой абзац?) Я солгал, (require 'solar)
был ответ... Я не пытался сделать это достаточно сильно, так как он не отвечал на автозаполнение.
Живописный путь к ответу привел меня к таким отвлекающим факторам:
- Сохранение файлов автозагрузки Emacs для установленного пользователем elisp?
- elisp - Где мне добавить файлы автозагрузки в мой пакет Emacs Lisp? Есть ли исчерпывающее руководство?
C-h i g (elisp) Autoload
- поиск через
lisp
каталог для любогоupdate-file-autoloads
Я сделал Edebugging, задаваясь вопросом, есть ли у чего-то, что я использовал, файл cookie автозагрузки (еще не полностью понимая это), но затем заметил, что был (provide 'solar)
в конце solar.el
вот тогда я и понял (require 'solar)
пришлось работать. Это так и было.
Из кода в моем вопросе я удаляю куки автозагрузки (не уверен, если это необходимо), и добавляю (require 'solar)
и это работает! Наслаждайтесь!