unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Re: [O] org-calendar-holiday and local holidays
       [not found] <87pp8sz70q.fsf@hornet.workgroup>
@ 2015-03-02  0:33 ` Alexis
  2015-03-02 15:26   ` Jorge A. Alfaro-Murillo
  2015-03-02 17:32   ` Melleus
  0 siblings, 2 replies; 8+ messages in thread
From: Alexis @ 2015-03-02  0:33 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: help-gnu-emacs


[Crossposted to the help-gnu-emacs list, for possible advice on 
whether or not this involves a bug in GNU Emacs.]

On 2015-03-02T09:29:09+1100, Melleus said:

 M> I'm afraid to ask. But... Anyway. Does 
 %%(org-calendar-holiday) M> know about holiday-local-holidays? 
 I'm not programmer, sorry. I've M> set up those local holidays 
 but cannot see them in my agenda.

You can examine the definition of an ELisp function by:

1. typing C-h f whilst on a function;
2. typing RET to take you to the documentation for that function;
3. typing TAB then RET to take you to the function definition.

Starting with point on `org-calendar-holiday`, we find that:

- `org-calendar-holiday` calls (if available) 
  `calendar-check-holidays` or (otherwise) 
  `check-calendar-holidays`;

- `calendar-check-holidays` calls `calendar-holiday-list`;

- `calendar-holiday-list` makes use of the `calendar-holidays` 
  variable.

We can examine the documentation for the `calendar-holidays` 
variable by moving point onto and typing C-h v RET. On my setup 
(manually compiled Emacs 24.4.1 on Debian Wheezy(+updates) x86_64 
together with Org 20150223), the documentation suggests that 
`calendar-holidays` makes use of the `holiday-local-holidays` 
variable; and the documentation for `holiday-local-holidays` 
merely refers us back to the documentation for 
`calendar-holidays`.

When i scroll down to look at the current value of 
`calendar-holidays`, however, i see that neither the current value 
nor the original value makes any reference to the 
`holiday-local-holidays` variable. And indeed, when i examine my 
agenda for next Monday, which is a local holiday i've specified in 
`holiday-local-holidays`, i can't see that local holiday. To fix 
this, i use M-: to evaluate:

    (setq calendar-holidays (append calendar-holidays 
    holiday-local-holidays))

after which the local holiday next Monday appears in my Org 
agenda.

Given the documentation for the `calendar-holidays` variable, the 
fact that i need to manually add the value of the 
`holiday-local-holidays` variable to `calendar-holidays` seems to 
me like it might be a coding or documentation bug in Emacs .... ?


Alexis.



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: org-calendar-holiday and local holidays
  2015-03-02  0:33 ` [O] org-calendar-holiday and local holidays Alexis
@ 2015-03-02 15:26   ` Jorge A. Alfaro-Murillo
  2015-03-02 22:23     ` [O] " Alexis
  2015-03-02 17:32   ` Melleus
  1 sibling, 1 reply; 8+ messages in thread
From: Jorge A. Alfaro-Murillo @ 2015-03-02 15:26 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: help-gnu-emacs

Alexis writes:

> When i scroll down to look at the current value of 
> `calendar-holidays`, however, i see that neither the current 
> value nor the original value makes any reference to the 
> `holiday-local-holidays` variable. And indeed, when i examine my 
> agenda for next Monday, which is a local holiday i've specified 
> in `holiday-local-holidays`, i can't see that local holiday. To 
> fix this, i use M-: to evaluate: 
> 
>    (setq calendar-holidays (append calendar-holidays 
> holiday-local-holidays)) 
> 
> after which the local holiday next Monday appears in my Org 
> agenda.

You do not need to add that, calendar-holidays appends 
holiday-local-holidays when holidays.el is loaded, just restart 
emacs. 

> Given the documentation for the `calendar-holidays` variable, 
> the fact that i need to manually add the value of the 
> `holiday-local-holidays` variable to `calendar-holidays` seems 
> to me like it might be a coding or documentation bug in Emacs 
> .... ?

It is also not a documentation bug, at least in my emacs 
(25.0.50.1) the documentation of calendar-holidays says clearly:

"Note that these variables [`holiday-other-holidays', 
`holiday-general-holidays', `holiday-local-holidays', 
`holiday-christian-holidays', `holiday-hebrew-holidays', 
`holiday-islamic-holidays', `holiday-bahai-holidays', 
`holiday-oriental-holidays' and `holiday-solar-holidays'] have no 
effect on `calendar-holidays' after it has been set (e.g. after 
the calendar is loaded). In that case, customize 
`calendar-holidays' directly."

Best,

-- 
Jorge.




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: org-calendar-holiday and local holidays
  2015-03-02  0:33 ` [O] org-calendar-holiday and local holidays Alexis
  2015-03-02 15:26   ` Jorge A. Alfaro-Murillo
@ 2015-03-02 17:32   ` Melleus
  2015-03-02 21:58     ` Jorge A. Alfaro-Murillo
  1 sibling, 1 reply; 8+ messages in thread
From: Melleus @ 2015-03-02 17:32 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: help-gnu-emacs

Alexis <flexibeast@gmail.com> writes:

> see that local holiday. To fix this, i use M-: to evaluate:
>
>    (setq calendar-holidays (append calendar-holidays
> holiday-local-holidays))
>
> after which the local holiday next Monday appears in my Org agenda.

Works perfectly this way, thank you.




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: org-calendar-holiday and local holidays
  2015-03-02 17:32   ` Melleus
@ 2015-03-02 21:58     ` Jorge A. Alfaro-Murillo
  2015-03-02 22:54       ` [O] " Alexis
  2015-03-03 13:43       ` Melleus
  0 siblings, 2 replies; 8+ messages in thread
From: Jorge A. Alfaro-Murillo @ 2015-03-02 21:58 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: help-gnu-emacs

Melleus  writes:

> Alexis <flexibeast@gmail.com> writes: 
> 
>> see that local holiday. To fix this, i use M-: to evaluate: 
>> 
>>    (setq calendar-holidays (append calendar-holidays 
>> holiday-local-holidays)) 
> 
> Works perfectly this way, thank you. 
> 
> jorge.alfaro-murillo@yale.edu (Jorge A. Alfaro-Murillo) writes: 
> 
>> They should show up after you restart emacs. 
> 
> I supposed it should. But in fact in does not work.

holidays.el appends holiday-local-holidays to calendar-holidays 
via a defcustom, so if you set holiday-local-holidays in your 
.emacs, restart emacs and the local holidays are not in 
calendar-holidays, it is because you are calling something that 
loads holidays.el before you set holiday-local-holidays.

If you add the code above to your .emacs and later modify your 
configuration and remove or move the part that loads holidays.el, 
then either your code will fail (because calendar-holidays is not 
yet defined) or calendar-holidays will have your local holidays 
twice and they will show twice in your agenda.

I think that you should look for whatever calls holidays.el and 
set holiday-local-holidays before that.

If not, then at least use eval-after-load so that 
calendar-holidays is already defined when the code is run, and 
add-to-list so that the entries do not get added twice if they are 
already there:

#+BEGIN_SRC emacs-lisp
  (eval-after-load 'holidays
    '(dolist (holiday holiday-local-holidays)
             (add-to-list 'calendar-holidays holiday))
#+END_SRC

Best,
-- 
Jorge.




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [O] org-calendar-holiday and local holidays
  2015-03-02 15:26   ` Jorge A. Alfaro-Murillo
@ 2015-03-02 22:23     ` Alexis
  0 siblings, 0 replies; 8+ messages in thread
From: Alexis @ 2015-03-02 22:23 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: help-gnu-emacs


On 2015-03-03T02:26:37+1100, Jorge A. Alfaro-Murillo said:

 JAA> Alexis writes:

 >> When i scroll down to look at the current value of 
 >> `calendar-holidays`, however, i see that neither the current 
 >> value nor the original value makes any reference to the 
 >> `holiday-local-holidays` variable. And indeed, when i examine 
 >> my agenda for next Monday, which is a local holiday i've 
 >> specified in `holiday-local-holidays`, i can't see that local 
 >> holiday. To fix this, i use M-: to evaluate:
 >> 
 >> (setq calendar-holidays (append calendar-holidays 
 >> holiday-local-holidays))
 >> 
 >> after which the local holiday next Monday appears in my Org 
 >> agenda.

 JAA> You do not need to add that, calendar-holidays appends JAA> 
 holiday-local-holidays when holidays.el is loaded, just restart 
 JAA> emacs.

Not in my Emacs (manually compiled 24.4.1, the most recent 
official stable release). My `local-holidays` variable was set for 
years, such that only as part of trying to help the OP did i 
notice that it's been obsoleted; the documentation for it says:

      This variable is an alias for `holiday-local-holidays'. 
      This variable is obsolete since 23.1; use 
      `holiday-local-holidays' instead.

So i changed my init to refer to `holiday-local-holidays` instead 
of `local-holidays`, and restarted Emacs, and the issue persisted: 
the value of `holiday-local-holidays` is /not/ included in 
`calendar-holidays` by default. The `(setq calendar-holidays ...` 
line i described above is necessary to work around this.

 JAA> It is also not a documentation bug, at least in my emacs 
 JAA> (25.0.50.1) the documentation of calendar-holidays says 
 clearly:

 JAA> "Note that these variables [`holiday-other-holidays', JAA> 
 `holiday-general-holidays', `holiday-local-holidays', JAA> 
 `holiday-christian-holidays', `holiday-hebrew-holidays', JAA> 
 `holiday-islamic-holidays', `holiday-bahai-holidays', JAA> 
 `holiday-oriental-holidays' and `holiday-solar-holidays'] have 
 JAA> no effect on `calendar-holidays' after it has been set JAA> 
 (e.g. after the calendar is loaded). In that case, customize JAA> 
 `calendar-holidays' directly."

In 24.4.1, the documentation is phrased differently; it says:

    Additional holidays are easy to add to the list, just put them 
    in the list `holiday-other-holidays' in your init file. 
    Similarly, by setting any of `holiday-general-holidays', 
    `holiday-local-holidays', `holiday-christian-holidays', 
    `holiday-hebrew-holidays', `holiday-islamic-holidays', 
    `holiday-bahai-holidays', `holiday-oriental-holidays', or 
    `holiday-solar-holidays' to nil in your init file, you can 
    eliminate unwanted categories of holidays.

    The aforementioned variables control the holiday choices 
    offered by the function `holiday-list' when it is called 
    interactively.

    They also initialize the default value of `calendar-holidays', 
    which is the default list of holidays used by the function 
    `holiday-list' in the non-interactive case.  Note that these 
    variables have no effect on `calendar-holidays' after it has 
    been set (e.g. after the calendar is loaded).  In that case, 
    customize `calendar-holidays' directly.

    The intention is that (in the US) `holiday-local-holidays' be 
    set in site-init.el and `holiday-other-holidays' be set by the 
    user.

It's the fact that, despite the above docstring, and that, as i 
described above, setting the value of `holiday-local-holidays` has 
no direct effect on `calendar-holidays` /even after a restart of 
Emacs/, that led me to suggest there might be a code bug or a 
documentation bug (e.g. maybe some variable needed to be set to 
`t` to ensure the value of `holiday-local-holidays` gets included 
in `calendar-holidays`).

Since things work for you, and the phrasing for the documentation 
for `calendar-holidays` has changed between the most recent stable 
release and the development version of Emacs you're using, my 
guess is that there is indeed a bug in 24.4.1 and earlier that has 
subsequently been fixed. Later today i'll try building from the 
first 24.5 pretest and the master branch, and examine what happens 
with `holiday-local-holidays` / `calendar-holidays` in both 
instances.


Alexis.



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [O] org-calendar-holiday and local holidays
  2015-03-02 21:58     ` Jorge A. Alfaro-Murillo
@ 2015-03-02 22:54       ` Alexis
  2015-03-02 23:53         ` Jorge A. Alfaro-Murillo
  2015-03-03 13:43       ` Melleus
  1 sibling, 1 reply; 8+ messages in thread
From: Alexis @ 2015-03-02 22:54 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: help-gnu-emacs


On 2015-03-03T08:58:20+1100, Jorge A. Alfaro-Murillo 
<jorge.alfaro-murillo@yale.edu> said:

 JAA> holidays.el appends holiday-local-holidays to 
 calendar-holidays JAA> via a defcustom, so if you set 
 holiday-local-holidays in your JAA> .emacs, restart emacs and the 
 local holidays are not in JAA> calendar-holidays, it is because 
 you are calling something that JAA> loads holidays.el before you 
 set holiday-local-holidays.

 JAA> If you add the code above to your .emacs and later modify 
 your JAA> configuration and remove or move the part that loads 
 JAA> holidays.el, then either your code will fail (because JAA> 
 calendar-holidays is not yet defined) or calendar-holidays will 
 JAA> have your local holidays twice and they will show twice in 
 your JAA> agenda.

 JAA> I think that you should look for whatever calls holidays.el 
 and JAA> set holiday-local-holidays before that.

i just tried moving my `(setq holiday-local-holidays ...)` to the 
very first line of my config setup, and lo, that does result in 
local holidays appearing in my Org agenda. However, my config 
setup is a 3000+ line Org Babel file, in which i group together 
things that are related in my mind, and the setup for the calendar 
is about a third of the way through this. Thus ....

 JAA> If not, then at least use eval-after-load so that JAA> 
 calendar-holidays is already defined when the code is run, and 
 JAA> add-to-list so that the entries do not get added twice if 
 they are JAA> already there:

 JAA> #+BEGIN_SRC emacs-lisp (eval-after-load 'holidays '(dolist 
 JAA> (holiday holiday-local-holidays) (add-to-list 
 'calendar-holidays JAA> holiday)) #+END_SRC

.... works better in my context, and is more robust, longer-term, 
than my original suggestion to use

    (setq calendar-holidays (append calendar-holidays 
    holiday-local-holidays)) 

So, thank you! Although i do note that my suggestion was 
nevertheless within the guidelines of the documentation for 
`calendar-holidays`:

    Note that these variables have no effect on 
    `calendar-holidays' after it has been set (e.g. after the 
    calendar is loaded).  In that case, customize 
    `calendar-holidays' directly.

i feel the above documentation could be improved by adding that 
`eval-after-load` should probably by used in this context, e.g.:

    Note that these variables have no effect on 
    `calendar-holidays' after it has been set (e.g. after the 
    calendar is loaded).  In that case, customize 
    `calendar-holidays' directly, for example by using 
    `eval-after-load':

        (eval-after-load 'holidays
                         '(dolist (holiday holiday-local-holidays)
                                   (add-to-list 'calendar-holidays 
                                   holiday)))

i'll open a GNU Emacs issue to that effect. :-)

Thanks again!


Alexis.



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [O] org-calendar-holiday and local holidays
  2015-03-02 22:54       ` [O] " Alexis
@ 2015-03-02 23:53         ` Jorge A. Alfaro-Murillo
  0 siblings, 0 replies; 8+ messages in thread
From: Jorge A. Alfaro-Murillo @ 2015-03-02 23:53 UTC (permalink / raw)
  To: help-gnu-emacs; +Cc: emacs-orgmode

Alexis  writes:

> i just tried moving my `(setq holiday-local-holidays ...)` to 
> the very first line of my config setup, and lo, that does result 
> in local holidays appearing in my Org agenda.

I am glad it worked out for you.

> However, my config setup is a 3000+ line Org Babel file, in 
> which i group together things that are related in my mind, and 
> the setup for the calendar is about a third of the way through 
> this.

That is definitely the way to go, I do the same:

http://alfaromurillo.bitbucket.org/dotemacs.html

> Thus [...] works better in my context, and is more robust, 
> longer-term, than my original suggestion [...] So, thank you!

You are welcome. However, I think that it would be better to check 
what exactly loads holidays.el in your configuration (I will 
venture a guess that it is a call to org-agenda), and wrap that 
part in a (eval-after-load 'holidays '(progn ...)), then you can 
get rid of unnecessary code and you do not need to move things 
around in your nicely organized org file ;-)

Best,
-- 
Jorge.




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: org-calendar-holiday and local holidays
  2015-03-02 21:58     ` Jorge A. Alfaro-Murillo
  2015-03-02 22:54       ` [O] " Alexis
@ 2015-03-03 13:43       ` Melleus
  1 sibling, 0 replies; 8+ messages in thread
From: Melleus @ 2015-03-03 13:43 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: help-gnu-emacs

jorge.alfaro-murillo@yale.edu (Jorge A. Alfaro-Murillo) writes:

> calendar-holidays, it is because you are calling something that 
> loads holidays.el before you set holiday-local-holidays.

You're right. Now I understand. Thank you for explaining.




^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2015-03-03 13:43 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <87pp8sz70q.fsf@hornet.workgroup>
2015-03-02  0:33 ` [O] org-calendar-holiday and local holidays Alexis
2015-03-02 15:26   ` Jorge A. Alfaro-Murillo
2015-03-02 22:23     ` [O] " Alexis
2015-03-02 17:32   ` Melleus
2015-03-02 21:58     ` Jorge A. Alfaro-Murillo
2015-03-02 22:54       ` [O] " Alexis
2015-03-02 23:53         ` Jorge A. Alfaro-Murillo
2015-03-03 13:43       ` Melleus

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).