自定义日记 - 日出功能不起作用。 `自动加载,diary`? (Emacs的。)

时间:2014-04-06 01:43:57

标签: emacs elisp org-mode autoload dot-emacs

说明:

根据现有的Emacs代码diary-sunrise-sunset,我尝试创建两个新功能diary-sunrisediary-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-stringdiary-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描述:

我正在使用Emacs的组织模式,并开始使用议程视图。我喜欢内置的diary-sunrise-sunset函数,但是想进行一些小的调整以使其更符合我的喜好。

基本上,Org-mode的议程视图将首次从日记性别%%(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 个答案:

答案 0 :(得分:0)

在我的问题的最后一段(第八段?)中,我撒谎,(require 'solar)是答案......我没有努力,因为它没有回应自动完成。

通往答案的风景路线让我想到了这些分心:

我做了一些Edebugging想知道我使用的是否有自动加载cookie(还没有完全理解它),但后来注意到(provide 'solar)末尾有一个solar.el,所以我想(require 'solar)必须工作。它确实就是这样。

从我的问题中的代码中,我删除了自动加载Cookie(不确定是否有必要),然后添加(require 'solar),它就可以了!请享用!