Пользовательский дневник-функция восхода не работает. `Автозагрузка-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) был ответ... Я не пытался сделать это достаточно сильно, так как он не отвечал на автозаполнение.

Живописный путь к ответу привел меня к таким отвлекающим факторам:

Я сделал Edebugging, задаваясь вопросом, есть ли у чего-то, что я использовал, файл cookie автозагрузки (еще не полностью понимая это), но затем заметил, что был (provide 'solar) в конце solar.el вот тогда я и понял (require 'solar) пришлось работать. Это так и было.

Из кода в моем вопросе я удаляю куки автозагрузки (не уверен, если это необходимо), и добавляю (require 'solar) и это работает! Наслаждайтесь!

Другие вопросы по тегам