GNU bug report logs - #11260
24.1.50; `holiday-sexp' may create entry twice

Previous Next

Package: emacs;

Reported by: michael_heerdegen <at> web.de

Date: Mon, 16 Apr 2012 21:26:02 UTC

Severity: minor

Tags: notabug

Found in version 24.1.50

Done: Glenn Morris <rgm <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 11260 in the body.
You can then email your comments to 11260 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#11260; Package emacs. (Mon, 16 Apr 2012 21:26:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to michael_heerdegen <at> web.de:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Mon, 16 Apr 2012 21:26:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Michael Heerdegen <michael_heerdegen <at> web.de>
To: bug-gnu-emacs <at> gnu.org
Subject: 24.1.50; `holiday-sexp' may create entry twice
Date: Mon, 16 Apr 2012 23:27:08 +0200
Hi,

the following happens also in Emacs 23.  Recipe:

1. emacs -Q
2. M-x calendar RET
3. evaluate: (require 'holidays)
4. evaluate:
   (add-to-list
    'calendar-holidays
    '(holiday-sexp
      '(list 4 17 2012)
      "April 17th 2012"))

5. In the calendar, move point to April 17th 2012 and hit h.

You'll see that "April 17th 2012" appears twice.

I've debugged this.

`calendar-holiday-list' indeed returns two entries for this date.

The bug is in `holiday-sexp':

| (defun holiday-sexp (sexp string)
|   "Sexp holiday for dates in the calendar window.
| SEXP is an expression in variable `year' that is evaluated to
| give `date'.  STRING is an expression in `date' that evaluates to
| the holiday description of `date'.  If `date' is visible in the
| calendar window, the holiday STRING is on that date.  If date is
| nil, or if the date is not visible, there is no holiday."
|   (let ((m displayed-month)
|         (y displayed-year)
|         year date)
|     (calendar-increment-month m y -1)
|     (holiday-filter-visible-calendar
|      (list
|       (progn
|         (setq year y
|               date (eval sexp))
|         (list date (if date (eval string))))
|       (progn
|         (setq year (1+ y)
|               date (eval sexp))  ;; <------------------------------- 
|         (list date (if date (eval string))))))))


At the marked position, there is no check if `date' is in the
incremented year.


I see two possible fixes:

1.  Add such a check, and set date to nil when it fails.

2.  Add to the doc of `holiday-sexp' that a given sexp _must_ return
    either nil or a date which is in the year equal to the value of
    `year'.

I would prefer 1., because I don't see the need for such a
restriction.  But I'm not really familiar with calendar stuff.


Thanks,

Michael.


In GNU Emacs 24.1.50.1 (i486-pc-linux-gnu, GTK+ Version 3.2.3)
 of 2012-04-10 on zelenka, modified by Debian
 (emacs-snapshot package, version 2:20120410-1)
Windowing system distributor `The X.Org Foundation', version 11.0.11104000
Configured using:
 `configure '--build' 'i486-linux-gnu' '--host' 'i486-linux-gnu'
 '--prefix=/usr' '--sharedstatedir=/var/lib' '--libexecdir=/usr/lib'
 '--localstatedir=/var' '--infodir=/usr/share/info'
 '--mandir=/usr/share/man' '--with-pop=yes'
 '--enable-locallisppath=/etc/emacs-snapshot:/etc/emacs:/usr/local/share/emacs/24.1.50/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/24.1.50/site-lisp:/usr/share/emacs/site-lisp'
 '--without-compress-info' '--with-crt-dir=/usr/lib/i386-linux-gnu/'
 '--with-x=yes' '--with-x-toolkit=gtk3' '--with-imagemagick=yes'
 'build_alias=i486-linux-gnu' 'host_alias=i486-linux-gnu'
 'CFLAGS=-DDEBIAN -DSITELOAD_PURESIZE_EXTRA=5000 -g -O2''

Important settings:
  value of $LC_ALL: de_DE.utf8
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: C
  value of $LANG: de_DE.utf8
  value of $XMODIFIERS: nil
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#11260; Package emacs. (Mon, 16 Apr 2012 21:43:02 GMT) Full text and rfc822 format available.

Message #8 received at 11260 <at> debbugs.gnu.org (full text, mbox):

From: Andreas Schwab <schwab <at> linux-m68k.org>
To: michael_heerdegen <at> web.de
Cc: 11260 <at> debbugs.gnu.org
Subject: Re: bug#11260: 24.1.50; `holiday-sexp' may create entry twice
Date: Mon, 16 Apr 2012 23:42:08 +0200
Michael Heerdegen <michael_heerdegen <at> web.de> writes:

> the following happens also in Emacs 23.  Recipe:
>
> 1. emacs -Q
> 2. M-x calendar RET
> 3. evaluate: (require 'holidays)
> 4. evaluate:
>    (add-to-list
>     'calendar-holidays
>     '(holiday-sexp
>       '(list 4 17 2012)
>       "April 17th 2012"))
>
> 5. In the calendar, move point to April 17th 2012 and hit h.
>
> You'll see that "April 17th 2012" appears twice.

Your expression does not use year.

> | (defun holiday-sexp (sexp string)
> |   "Sexp holiday for dates in the calendar window.
> | SEXP is an expression in variable `year' that is evaluated to
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Andreas.

-- 
Andreas Schwab, schwab <at> linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#11260; Package emacs. (Mon, 16 Apr 2012 22:42:01 GMT) Full text and rfc822 format available.

Message #11 received at 11260 <at> debbugs.gnu.org (full text, mbox):

From: Michael Heerdegen <michael_heerdegen <at> web.de>
To: Andreas Schwab <schwab <at> linux-m68k.org>
Cc: 11260 <at> debbugs.gnu.org
Subject: Re: bug#11260: 24.1.50; `holiday-sexp' may create entry twice
Date: Tue, 17 Apr 2012 00:43:06 +0200
Andreas Schwab <schwab <at> linux-m68k.org> writes:

> >     '(holiday-sexp
> >       '(list 4 17 2012)
> >       "April 17th 2012"))
> >
> Your expression does not use year.
>
> > | (defun holiday-sexp (sexp string)
> > |   "Sexp holiday for dates in the calendar window.
> > | SEXP is an expression in variable `year' that is evaluated to
>                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Good point, indeed.  Also the manual says it clearly.  And I didn't find
a realistic counterexample that is an expression in `year'.

So, we can close this report.  Sorry for the noise!


Regards,

Michael.





Added tag(s) notabug. Request was from Glenn Morris <rgm <at> gnu.org> to control <at> debbugs.gnu.org. (Mon, 16 Apr 2012 23:12:01 GMT) Full text and rfc822 format available.

bug closed, send any further explanations to 11260 <at> debbugs.gnu.org and michael_heerdegen <at> web.de Request was from Glenn Morris <rgm <at> gnu.org> to control <at> debbugs.gnu.org. (Mon, 16 Apr 2012 23:12:01 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Tue, 15 May 2012 11:24:03 GMT) Full text and rfc822 format available.

This bug report was last modified 13 years and 95 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.