# ChangeLog for app-xemacs/slider
# Copyright 2002-2009 Gentoo Foundation; Distributed under the GPL v2
# $Header: /var/cvsroot/gentoo-x86/app-xemacs/slider/ChangeLog,v 1.12 2009/02/21 16:26:02 graaff Exp $

*slider-1.16 (21 Feb 2009)

  21 Feb 2009; Hans de Graaff <graaff@gentoo.org> +slider-1.16.ebuild:
  Version bump with compatibility fixes for SXemacs.

  19 Mar 2008; Hans de Graaff <graaff@gentoo.org> metadata.xml,
  -slider-1.13.ebuild:
  A herd should not be listed as maintainer

  03 Jun 2007; Hans de Graaff <graaff@gentoo.org> slider-1.15.ebuild:
  Stable on amd64, ppc, ppc64, sparc, x86 as per #175560

  29 May 2007; Raúl Porcel <armin76@gentoo.org> slider-1.15.ebuild:
  alpha stable wrt #175560

  22 Feb 2007; Piotr Jaroszyński <peper@gentoo.org> ChangeLog:
  Transition to Manifest2.

*slider-1.15 (12 Nov 2006)

  12 Nov 2006; Hans de Graaff <graaff@gentoo.org> +metadata.xml,
  +slider-1.15.ebuild:
  Version bump; add metadata.

  02 Oct 2003; Aron Griffis <agriffis@gentoo.org> slider-1.13.ebuild:
  Stable on alpha

*slider-1.13 (16 Dec 2002)

  22 Feb 2003;  <rendhalver@gentoo.org> slider-1.13.ebuild :
  Add ~alpha to KEYWORDS

  16 Dec 2002; Rendhalver [Peter Brown] <rendhalver@gentoo.org> :
  Initial import.
