Browse Source

auto-install-0.1.24-2

git-svn-id: http://trac.vinelinux.org/repos/projects/specs@3355 ec354946-7b23-47d6-9f5a-488ba84defc7
iwaim 13 years ago
parent
commit
ae01ac059c

+ 16 - 0
a/auto-install/auto-install-init.el

@@ -0,0 +1,16 @@
+;;
+;; auto-install-init.el
+;;
+;;      for Vine Linux with emacsen-common
+;;      IWAI, Masaharu <iwai@alib.jp>
+
+(defcustom vine-default-auto-install t
+  "A boolean for vine-default-auto-install"
+  :type 'boolean)
+
+(add-hook 'vine-default-setup-hook
+          (lambda()
+            (if vine-default-auto-install
+                (require 'vine-default-auto-install))))
+
+;;; end of file

+ 35 - 0
a/auto-install/auto-install-install.sh

@@ -0,0 +1,35 @@
+#! /bin/sh -e
+# /usr/lib/emacsen-common/packages/install/auto-install
+
+FLAVOR=$1
+PACKAGE=auto-install
+
+FLAGS="${SITEFLAG} -q -batch -f batch-byte-compile"
+
+ELDIR="/usr/share/emacs/site-lisp/${PACKAGE}"
+ELCDIR="/usr/share/${FLAVOR}/site-lisp/${PACKAGE}"
+STARTDIR=/etc/${FLAVOR}/site-start.d
+STARTFILE="${PACKAGE}-init.el"
+
+SOURCES="auto-install.el"
+
+case "${FLAVOR}" in
+    emacs)
+    ;;
+    *)
+    echo -n "install/${PACKAGE}: Byte-compiling for ${FLAVOR} ..."
+    install -m 755 -d ${ELCDIR}
+    cd ${ELDIR}
+    cp *.el ${ELCDIR}
+    FILES="${SOURCES}"
+    cd ${ELCDIR}
+    ${FLAVOR} ${FLAGS} ${FILES} > ${ELCDIR}/CompilationLog 2>&1
+    rm -f ${SOURCES}
+    gzip -9 ${ELCDIR}/CompilationLog
+
+    ln -sf ${ELDIR}/${STARTFILE} ${STARTDIR}/95${STARTFILE};
+    echo " done."
+    ;;
+esac
+
+exit 0 ;

+ 32 - 0
a/auto-install/auto-install-remove.sh

@@ -0,0 +1,32 @@
+#!/bin/sh -e
+# /usr/lib/emacsen-common/packages/remove/auto-install
+
+FLAVOR=$1
+PACKAGE=auto-install
+STARTDIR=/etc/${FLAVOR}/site-start.d
+STARTFILE="${PACKAGE}-init.el"
+
+if [ "X${FLAVOR}" = "X" ]; then
+    echo Need argument to determin FLAVOR of emacs;
+    exit 1
+fi
+
+if [ "X${PACKAGE}" = "X" ]; then
+    echo Internal error: need package name;
+    exit 1;
+fi
+
+ELCDIR=/usr/share/${FLAVOR}/site-lisp/${PACKAGE}
+
+case "${FLAVOR}" in
+    emacs)
+    ;;
+    *)
+    echo -n "remove/${PACKAGE}: Handling removal of emacsen flavor ${FLAVOR} ..."
+    rm -rf ${ELCDIR}
+    rm -f ${STARTDIR}/95${STARTFILE}*
+    echo " done."
+    ;;
+esac
+
+exit 0

+ 109 - 0
a/auto-install/auto-install-vl.spec

@@ -0,0 +1,109 @@
+%define _noVersionedDependencies	1
+%define prereq_ge()  %(LC_ALL="C" rpm -q --queryformat 'PreReq:%%{NAME} >= %%{VERSION}' %1| grep -v "is not")
+%define emacsen_pkgdir /usr/lib/emacsen-common/packages
+%define	origname auto-install
+%define origver  0.1.24
+
+Summary:      Auto install elisp file
+Name:         %{origname}
+Version:      %{origver}
+Release:      2%{?_dist_release}
+
+Source0:      http://www.emacswiki.org/emacs/download/auto-install.el
+Source1:      %{origname}-install.sh
+Source2:      %{origname}-remove.sh
+Source3:      vine-default-%{origname}.el
+Source4:      %{origname}-init.el
+Source5:      http://www.gnu.org/licenses/gpl-3.0.txt
+
+License:      GPLv3+
+Group:        Applications/Editors/Emacs
+URL:          http://www.emacswiki.org/emacs/auto-install.el
+BuildRoot:    %{_tmppath}/%{name}-%{version}-root
+BuildArch:    noarch
+
+Requires:     emacsen
+PreReq:       emacsen
+Conflicts:    flim < 1.14.9-2
+%prereq_ge    emacsen-common
+
+Distribution: Vine Linux
+Vendor:       Project Vine
+Packager:     iwaim
+
+%description
+Auto install elisp file
+
+%prep
+
+%setup -q -T -c %{origname}-%{origver}
+%{__cp} -a %{SOURCE5} .
+
+%build
+
+%install
+[ "%{buildroot}" != "/" ] && rm -rf %{buildroot}
+[ "%{buildroot}" != "/" ] && mkdir -p %{buildroot}
+
+mkdir -p %{buildroot}%{_datadir}/emacs/site-lisp/%{origname}/packages
+mkdir -p %{buildroot}%{emacsen_pkgdir}/install
+mkdir -p %{buildroot}%{emacsen_pkgdir}/remove
+
+#
+# install el files
+#
+
+cp -p %{SOURCE0} %{SOURCE3} %{SOURCE4} %{buildroot}%{_datadir}/emacs/site-lisp/%{origname}
+
+
+#
+# install script (bytecompile el and install elc , remove)
+#
+
+%_installemacsenscript %{origname} %{SOURCE1}
+
+%_removeemacsenscript  %{origname} %{SOURCE2}
+
+
+%clean
+[ "%{buildroot}" != "/" ] && rm -rf %{buildroot}
+
+%post
+#
+# bytecompile and install
+#
+if [ "$1" = 2 ]; then
+
+%_emacsenPackageRemove %{origname}
+
+fi
+
+%_addemacsenlist %{origname}
+
+%_emacsenPackageInstall %{origname}
+
+
+%preun
+if [ "$1" = 0 ]; then
+
+%_emacsenPackageRemove %{origname}
+
+%_removeemacsenlist %{origname}
+
+fi
+
+
+%files
+%defattr(-,root,root)
+%doc gpl-3.0.txt
+%{_datadir}/emacs/site-lisp/%{origname}
+%{emacsen_pkgdir}/install/%{origname}
+%{emacsen_pkgdir}/remove/%{origname}
+
+
+%changelog
+* Sun Mar  7 2010 IWAI, Masaharu <iwai@alib.jp> 0.1.24-2
+- update Conflicts flim version
+
+* Tue Feb 23 2010 IWAI, Masaharu <iwai@alib.jp> 0.1.24-1
+- first release for Vine Linux

+ 1228 - 0
a/auto-install/auto-install.el

@@ -0,0 +1,1228 @@
+;;; auto-install.el --- Auto install elisp file
+
+;; Filename: auto-install.el
+;; Description: Auto install elisp file
+;; Author: Andy Stewart <lazycat.manatee@gmail.com>
+;;         rubikitch <rubikitch@ruby-lang.org>
+;; Maintainer: rubikitch <rubikitch@ruby-lang.org>
+;; Copyright (C) 2008, 2009, Andy Stewart, all rights reserved.
+;; Copyright (C) 2009, rubikitch, all rights reserved.
+;; Created: 2008-12-11 13:56:50
+;; Version: $Revision: 1.24 $
+;; Last-Updated: Fri May 22 13:07:04 2009 (-0700)
+;;           By: dradams
+;; URL: http://www.emacswiki.org/emacs/download/auto-install.el
+;; Keywords: auto-install
+;; Compatibility: GNU Emacs 22 ~ 23
+;;
+;; Features that might be required by this library:
+;;
+;;   `backquote', `bytecomp', `dired', `find-func', `ietf-drums',
+;;   `loadhist', `mail-parse', `mail-prsvr', `mailcap', `mm-util',
+;;   `qp', `rfc2045', `rfc2047', `rfc2231', `thingatpt', `time-date',
+;;   `timezone', `url', `url-cookie', `url-expand', `url-history',
+;;   `url-methods', `url-parse', `url-privacy', `url-proxy',
+;;   `url-util', `url-vars'.
+;;
+
+(defvar auto-install-version "$Id: auto-install.el,v 1.24 2010/01/05 09:40:04 rubikitch Exp $")
+;;; This file is NOT part of GNU Emacs
+
+;;; License
+;;
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3, or (at your option)
+;; any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth
+;; Floor, Boston, MA 02110-1301, USA.
+
+;;; Commentary:
+;;
+;; Automates the installation of Emacs Lisp files and packages.
+;;
+;; `auto-install' provides an automated way to:
+;;
+;; (1) Download Emacs Lisp files and packages from common sources
+;; (2) View them (diff) and save them to your repository
+;; (3) Compile and Load them
+;;
+
+;;; Commands:
+;;
+;; Below are complete command list:
+;;
+;;  `auto-install-minor-mode'
+;;    Auto Install minor mode.
+;;  `auto-install-from-buffer'
+;;    Install the elisp file in the current buffer.
+;;  `auto-install-from-url'
+;;    Install an elisp file from a given url.
+;;  `auto-install-from-emacswiki'
+;;    Install an elisp file from EmacsWiki.org.
+;;  `auto-install-from-gist'
+;;    Install an elisp file from gist.github.com.
+;;  `auto-install-from-library'
+;;    Update an elisp LIBRARY.
+;;  `auto-install-from-directory'
+;;    Update elisp files under DIRECTORY from EmacsWiki.
+;;  `auto-install-from-dired'
+;;    Update dired marked elisp files from EmacsWiki.org.
+;;  `auto-install-update-emacswiki-package-name'
+;;    Update the list of elisp package names from `EmacsWiki'.
+;;  `auto-install-dired-mark-files'
+;;    Mark dired files that contain at `EmacsWiki.org'.
+;;  `auto-install-mode'
+;;    Major mode for auto-installing elisp code.
+;;  `auto-install-buffer-quit'
+;;    Quit from `auto-install' temporary buffer.
+;;  `auto-install-compatibility-setup'
+;;    Install Compatibility commands for install-elisp.el users.
+;;  `auto-install-batch'
+;;    Batch install many libraries in some extension.
+;;  `auto-install-buffer-diff'
+;;    View different between old version.
+;;  `auto-install-buffer-save'
+;;    Save downloaded content to file FILENAME.
+;;
+;;; Customizable Options:
+;;
+;; Below are customizable option list:
+;;
+;;  `auto-install-directory'
+;;    The directory for saving elisp files.
+;;    default = "~/.emacs.d/auto-install/"
+;;  `auto-install-buffer-name'
+;;    The temporary buffer for storing download content.
+;;    default = "auto-install"
+;;  `auto-install-emacswiki-base-url'
+;;    The base emacswiki.org url from which to download elisp files.
+;;    default = "http://www.emacswiki.org/cgi-bin/wiki/download/"
+;;  `auto-install-gist-base-url'
+;;    The base gist.github.com url from which to download elisp files.
+;;    default = "http://gist.github.com/"
+;;  `auto-install-filter-url'
+;;    Alist mapping filter url for library.
+;;    default = (quote (("color-grep" "http://www.bookshelf.jp/elc/")))
+;;  `auto-install-save-confirm'
+;;    Whether confirmation is needed to save downloaded content.
+;;    default = t
+;;  `auto-install-replace-confirm'
+;;    Whether confirmation is needed to replace an existing elisp file.
+;;    default = nil
+;;  `auto-install-install-confirm'
+;;    Whether confirmation is needed to install a downloaded elisp file.
+;;    default = nil
+;;  `auto-install-from-dired-confirm'
+;;    Whether confirmation is needed to download marked files from Dired.
+;;    default = t
+;;  `auto-install-batch-list'
+;;    This list contain packages information for batch install.
+;;    default = (quote (("icicles" 21 10 ...) ("auto-complete development version" nil nil ...) ("anything" nil nil ...) ("sdcv" nil nil ...) ("lazy-search" nil nil ...) ...))
+
+;;; Tips:
+;;
+;;      Downloading is asynchronous: you can do your work and download
+;;      files at the same time.  The download process won't hang
+;;      Emacs.
+;;
+;;      `auto-install-from-url' remembers previous installations.  So if
+;;      your search is the same as the previous search, you don't need
+;;      to type it in, just hit RETURN.
+;;
+;;      `auto-install-from-emacswiki' will complete then names of
+;;      packages from those in the Elisp area in `EmacsWiki'.
+;;
+;;      `auto-install-from-library' will prompt you library name in
+;;      you load-path, then it try to download from EmacsWiki if it
+;;      can't find match in `auto-install-filter-url'.
+;;
+;;      `auto-install-from-directory' can install elisp file
+;;      under specify directory.
+;;
+;;      `auto-install-from-dired' can install marked files using dired.
+;;      You can mark the files you want in dired and then use
+;;      `auto-install-from-dired' to download those files
+;;      asynchronously.
+;;
+;;      `auto-install-from-buffer' can save and install the contents of
+;;      the current buffer as a file.  You need a valid elisp file name.
+;;      The default name is the buffer name.
+;;
+;;      `auto-install-from-emacswiki' and `auto-install-from-library'
+;;      will try to pick up file around point, you can move
+;;      cursor to file name, and just hit RET for install.
+;;
+;;      Some extension (such as icicles) have many libraries to need install,
+;;      and install one by one is painful, you can use command
+;;      `auto-install-batch' install all icicles libraries.
+;;      And `auto-install-batch' handle max connect limit with some website
+;;      (such as EmacsWiki) to avoid download failed.
+;;
+;;      All of the above functions support a filename filter.  You can
+;;      input any url to download an elisp file, if the file name suffix is
+;;      `.el', it will download and install the file automatically.
+;;      Otherwise, it won't install it unless you input a valid elisp
+;;      file name.
+;;
+;;      By default, if a file that you download does not exist on your
+;;      system the file is downloaded to `auto-install-directory'.  If
+;;      you already have a file with the same name in your load
+;;      directory, `auto-install' will try to replace that file.
+;;
+;;      You can use command `auto-install-dired-mark-files' to mark files
+;;      that contain at `EmacsWiki.org' for fast update.
+;;
+;;      By default, command `auto-install-from-emacswiki' will initialization
+;;      current symbol as default value, if default value is you want,
+;;      just hit RET, so lazy!
+;;
+
+;;; Installation:
+;;
+;; (1) Put auto-install.el somewhere in your load-path.
+;;
+;;     For example, put it into  ~/elisp/.
+;;     Then add the following to your ~/.emacs:
+;;
+;;       (add-to-list 'load-path (expand-file-name "~/elisp"))
+;;
+;; (2) And put the following in your ~/.emacs startup file:
+;;
+;;       (require 'auto-install)
+;;
+;; (3) Add this to your ~/.emacs to optionally specify a download directory:
+;;
+;;       (setq auto-install-directory "~/.emacs.d/auto-install/")
+;;
+;;     If you don't set this, "~/.emacs.d/auto-install/" will be used as the default,
+;;     and will be created as needed.
+;;
+;; (4) Optionally, if your computer is always connected Internet when Emacs start up,
+;;     I recommend you add below to your ~/.emacs, to update package name when start up:
+;;
+;;       (auto-install-update-emacswiki-package-name t)
+;;
+;;     And above setup is not necessary, because AutoInstall will automatically update
+;;     package name when you just first call `auto-install-from-emacswiki',
+;;     above setup just avoid *delay* when you first call `auto-install-from-emacswiki'.
+;;
+;; (5) I recommend you add below to your ~/.emacs for install-elisp users:
+;;
+;;       (auto-install-compatibility-setup)
+;;
+;;     This command `defalias'es `install-elisp',
+;;     `install-elisp-from-emacswiki' and `install-elisp-from-gist' to
+;;     `auto-install' ones.
+;;
+;; (6) If you want to use proxy server, set `url-proxy-services'. For example:
+;;
+;;       (setq url-proxy-services '(("http" . "localhost:8339")))
+
+;;; Customize:
+;;
+;; `auto-install-directory'
+;; The default directory for keeping auto-downloaded elisp files.
+;;
+;; `auto-install-buffer-name'
+;; The base buffer name for temporarily storing downloaded download content.
+;;
+;; `auto-install-emacswiki-base-url'
+;; The base url for downloading from EmacsWiki.org.
+;;
+;; `auto-install-gist-base-url'
+;; The base url for downloading from gist.github.com
+;;
+;; `auto-install-filter-url'
+;; Filter url for downloading a special library.
+;;
+;; `auto-install-save-confirm'
+;; Whether to require confirmation when saving downloaded content.
+;;
+;; `auto-install-replace-confirm'
+;; Whether to require confirmation when replacing an already-installed
+;; file.
+;;
+;; `auto-install-install-confirm'
+;; Whether to require confirmation when installing a file.
+;;
+;; `auto-install-from-dired-confirm'
+;; Whether to require confirmation when downloading files marked in dired.
+;;
+;; `auto-install-batch-list'
+;; This list contain packages information for batch install.
+;; Anyone can add packages information in this list for batch install.
+;;
+;; And all above option can customize easy through:
+;;      M-x RET customize-group RET auto-install RET
+;;
+
+;;; Change log:
+;;
+;; $Log: auto-install.el,v $
+;; Revision 1.24  2010/01/05 09:40:04  rubikitch
+;; fixed error of auto-complete development version in `auto-install-batch-list'
+;;
+;; Revision 1.23  2009/12/29 09:31:23  rubikitch
+;; add Text Translator to auto-install-batch-list
+;;
+;; Revision 1.22  2009/12/21 12:51:56  rubikitch
+;; Update auto-install-batch anything
+;;
+;; Revision 1.21  2009/12/21 12:26:54  rubikitch
+;; New URL for auto-complete development version
+;;
+;; Revision 1.20  2009/05/22 20:17:24  rubikitch
+;; Merged from dradams' change
+;;
+;; Revision 1.19  2009/05/22 13:04:56  dadams
+;; Split icicles-cmd.el into icicles-cmd[12].el.
+;;
+;; Revision 1.18  2009/05/20 15:42:54  rubikitch
+;; Add php-completion / perl-completion to auto-install-batch-list
+;;
+;; Revision 1.17  2009/05/20 01:19:15  rubikitch
+;; Add document for proxy server
+;;
+;; Revision 1.16  2009/05/15 20:28:18  rubikitch
+;; More readable temporary buffer name.
+;;
+;; Revision 1.15  2009/05/15 20:12:49  rubikitch
+;; Added missing require
+;;
+;; Revision 1.14  2009/05/15 20:11:44  rubikitch
+;; How to save
+;;
+;; Revision 1.13  2009/05/15 20:09:07  rubikitch
+;; Code cleanup
+;;
+;; Revision 1.12  2009/05/15 19:59:30  rubikitch
+;; Fixed a bug of single file installation
+;;
+;; Revision 1.11  2009/05/15 19:44:32  rubikitch
+;; Ordering `auto-install-batch'
+;;
+;; Revision 1.10  2009/05/15 17:48:09  rubikitch
+;; Replace `message' with `error' for error messages.
+;;
+;; Revision 1.9  2009/05/15 17:40:37  rubikitch
+;; refactoring
+;;
+;; Revision 1.8  2009/05/15 17:19:47  rubikitch
+;; refactoring
+;;
+;; Revision 1.7  2009/05/15 17:17:03  rubikitch
+;; Use `view-mode' if `view-read-only'.
+;;
+;; Revision 1.6  2009/05/15 17:10:22  rubikitch
+;; Adjust docstrings of commands to auto-document.
+;; Delete `It provides the following commands:' section because of duplication.
+;;
+;; Revision 1.5  2009/05/15 17:03:13  rubikitch
+;; Show downloaded URL in header-line.
+;;
+;; Revision 1.4  2009/05/15 16:59:32  rubikitch
+;; New internal variable: `auto-install-add-load-path-flag'
+;;
+;; Revision 1.3  2009/05/09 02:41:32  rubikitch
+;; Add `auto-install-directory' automatically.
+;;
+;; Revision 1.2  2009/05/09 02:37:14  rubikitch
+;; Changed `auto-install-get-buffer' format (including URL)
+;;
+;; Revision 1.1  2009/05/09 02:33:09  rubikitch
+;; Initial revision
+;;
+;; 2009/05/01
+;;  * Andy Stewart:
+;;      * Take over by rubikitch.
+;;
+;; 2009/04/15
+;;  * rubikitch:
+;;      * Encoding detection support.
+;;
+;; 2009/04/07
+;;  * Andy Stewart:
+;;      * Fix bug of `auto-install-batch'.
+;;      * Add more sources to `auto-install-batch-list'.
+;;
+;; 2009/03/30
+;;  * Andy Stewart:
+;;      * Add new command: `auto-install-batch'.
+;;      * Add new option: `auto-install-batch-list'.
+;;
+;; 2009/03/29
+;;  * Andy Stewart:
+;;      * Add new function: `auto-install-from-url-list'.
+;;
+;; 2009/03/11
+;;  * Andy Stewart:
+;;      * Fix bug of `auto-install-download'.
+;;
+;; 2009/03/03
+;;  * rubikitch
+;;      * Add new command `auto-install-compatibility-setup'
+;;        for install-elisp users.
+;;  * Andy Stewart:
+;;      * `auto-install-region-or-thing' return region string
+;;        just when `transient-mark-mode' is on.
+;;      * Fix doc.
+;;
+;; 2009/02/17
+;;  * Andy Stewart:
+;;      * Modified keybindings, make it more easy to remember.
+;;      * Make `auto-install-save-confirm' default with `t'
+;;        for security problem.
+;;      * Pick up current symbol when use `auto-install-from-library'.
+;;      * Remove unnecessary completion name from `auto-install-from-library'.
+;;      * Refactory code.
+;;      * Fix doc.
+;;
+;; 2009/02/12
+;;  * Andy Stewart:
+;;      * Remove option `auto-install-update-emacswiki-package-name-when-startup'.
+;;      * Make current symbol as initialization of `auto-install-from-emacswiki'.
+;;      * Add option `unforced' to function `auto-install-update-emacswiki-package-name'.
+;;      * Fix doc.
+;;      * Fix bug of `auto-install-from-library'.
+;;
+;; 2009/02/10
+;;  * Andy Stewart:
+;;      * Automatically download package name list when
+;;        variable `auto-install-package-name-list' is nil.
+;;      * Reverse `auto-install-package-name-list' for `anything' interface.
+;;      * New command `auto-install-dired-mark-files',
+;;        mark files that contain at `EmacsWiki.org'.
+;;      * New command `auto-install-buffer-diff',
+;;        view different between current version and old version.
+;;
+;; 2009/02/06
+;;  * Andy Stewart:
+;;      * Add new command `auto-install-from-directory'.
+;;      * Remove option `auto-install-create-directory', not necessary.
+;;      * Documentation improvements (thanks Scot Becker)
+;;
+;; 2009/02/01
+;;  * Andy Stewart:
+;;      * Make command `auto-install-from-emacswiki' can
+;;        completing package name for input.
+;;      * Add new command `auto-install-update-emacswiki-package-name'.
+;;      * Add new option `auto-install-update-emacswiki-package-name-when-startup'
+;;
+;; 2009/01/30
+;;  * Andy Stewart:
+;;      * Compatibility with GNU Emacs 22.
+;;
+;; 2009/01/26
+;;  * Andy Stewart:
+;;      * Add new command `auto-install-from-gist'.
+;;
+;; 2009/01/21
+;;  * Andy Stewart:
+;;      * Add emacs-lisp syntax highlight for download buffer.
+;;      * Make notify message display at mode-line instead echo-area.
+;;
+;; 2009/01/10
+;;  * Andy Stewart:
+;;      * Add new option `auto-install-filter-url' and new function
+;;        `auto-install-from-library', try to use it. ;)
+;;
+;; 2009/01/08
+;;  * Andy Stewart:
+;;      * Fix coding bug.
+;;
+;; 2009/01/07
+;;  * Andy Stewart:
+;;      * Move `w3m' code to file `auto-install-extension.el' to make all
+;;        user can use this package with standard emacs.
+;;
+;; 2009/01/06
+;;  * Andy Stewart:
+;;      * Clean code.
+;;
+;; 2009/01/02
+;;  * Andy Stewart:
+;;      * Add new option `auto-install-create-directory' for create install directory
+;;        automatically if it doesn't exist.
+;;      * Improve many document make it more clear.
+;;      * Thanks document improve and create directory advice of 'Drew Adams'!
+;;
+;; 2008/12/24
+;;  * Andy Stewart:
+;;      * Remove `auto-install-window-configuration-before-download', `auto-install-init-window-layout'
+;;        and `auto-install-revert-window-layout'.
+;;        It's not necessary to revert window layout, `winner-mode' can revert window layout more better,
+;;        just type `winner-undo'.
+;;
+;; 2008/12/15
+;;  * Andy Stewart:
+;;      * Fix a little bug of `auto-install-window-configuration-before-download'.
+;;
+;; 2008/12/11
+;;  * Andy Stewart:
+;;      * Add new function `auto-install-from-buffer', to install elisp file from current buffer.
+;;        Modified `auto-install-buffer-save' to use `auto-install-from-buffer'.
+;;
+;;      * First released.
+;;
+
+;;; Acknowledgements:
+;;
+;;      rubikitch       <rubikitch@ruby-lang.org>
+;;              For install-elisp.el
+;;      Drew Adams      <drew.adams@oracle.com>
+;;      Scot Becker     <scot.becker@gmail.com>
+;;      Richard Riley   <rileyrgdev@gmail.com>
+;;              For documentation improvements and advices.
+;;
+
+;;; TODO
+;;
+;;      Fix the problem parallel install process with recursive prompt.
+;;      Redesign and give more friendly user interface.
+;;      Scan RSS track package update and notify.
+;;
+
+;;; Require
+(require 'url)
+(require 'dired)
+(require 'find-func)
+(require 'bytecomp)
+(require 'thingatpt)
+(eval-when-compile (require 'cl))
+(when (<= emacs-major-version 22)       ;Compatibility with 22.
+  (autoload 'ignore-errors "cl-macs"))
+
+;;; Code:
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Customize ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defgroup auto-install nil
+  "Auto install elisp files."
+  :group 'external)
+
+(defcustom auto-install-directory "~/.emacs.d/auto-install/"
+  "The directory for saving elisp files.
+This directory is used when a downloaded
+elisp file does not already exist in other directory.
+Otherwise, the existing file of the same name is replaced."
+  :type 'string
+  :group 'auto-install)
+
+(defcustom auto-install-buffer-name "auto-install"
+  "The temporary buffer for storing download content."
+  :type 'string
+  :group 'auto-install)
+
+(defcustom auto-install-emacswiki-base-url "http://www.emacswiki.org/cgi-bin/wiki/download/"
+  "The base emacswiki.org url from which to download elisp files."
+  :type 'string
+  :group 'auto-install)
+
+(defcustom auto-install-gist-base-url "http://gist.github.com/"
+  "The base gist.github.com url from which to download elisp files."
+  :type 'string
+  :group 'auto-install)
+
+(defcustom auto-install-filter-url
+  '(("color-grep" "http://www.bookshelf.jp/elc/"))
+  "Alist mapping filter url for library.
+Default command `auto-install-from-library' will install from EmacsWiki,
+if it can't find match in this alist."
+  :type '(repeat (list (string :tag "Library")
+                       (string :tag "Download URL")))
+  :group 'auto-install)
+
+(defcustom auto-install-save-confirm t
+  "Whether confirmation is needed to save downloaded content.
+Nil means no confirmation is needed.
+If non-nil, the downloaded content is shown in a buffer and you are
+prompted to confirm saving it to a file."
+  :type 'boolean
+  :group 'auto-install)
+
+(defcustom auto-install-replace-confirm nil
+  "Whether confirmation is needed to replace an existing elisp file.
+Nil means no confirmation is needed."
+  :type 'boolean
+  :group 'auto-install)
+
+(defcustom auto-install-install-confirm nil
+  "Whether confirmation is needed to install a downloaded elisp file.
+Nil means no confirmation is needed."
+  :type 'boolean
+  :group 'auto-install)
+
+(defcustom auto-install-from-dired-confirm t
+  "Whether confirmation is needed to download marked files from Dired.
+Nil means no confirmation is needed."
+  :type 'boolean
+  :group 'auto-install)
+
+(defcustom auto-install-batch-list
+  '(
+    ;; Icicles.
+    ("icicles" 21 10
+     (
+      "http://www.emacswiki.org/emacs/download/icicles.el"      ; Main library
+      "http://www.emacswiki.org/emacs/download/icicles-chg.el"  ; Change logs
+      "http://www.emacswiki.org/emacs/download/icicles-cmd1.el" ; Top-level Icicles commands, part 1
+      "http://www.emacswiki.org/emacs/download/icicles-cmd2.el" ; Top-level Icicles commands, part 2
+      "http://www.emacswiki.org/emacs/download/icicles-doc1.el" ; Doc, part 1
+      "http://www.emacswiki.org/emacs/download/icicles-doc2.el" ; Doc, part 2
+      "http://www.emacswiki.org/emacs/download/icicles-face.el" ; Faces
+      "http://www.emacswiki.org/emacs/download/icicles-fn.el"   ; Non-interactive functions
+      "http://www.emacswiki.org/emacs/download/icicles-mac.el"  ; Macros
+      "http://www.emacswiki.org/emacs/download/icicles-mcmd.el" ; Minibuffer commands
+      "http://www.emacswiki.org/emacs/download/icicles-mode.el" ; Icicle (Icy) mode
+      "http://www.emacswiki.org/emacs/download/icicles-opt.el"  ; User options
+      "http://www.emacswiki.org/emacs/download/icicles-var.el"  ; Internal variables
+      "http://www.emacswiki.org/emacs/download/lacarte.el"      ; Menu-bar access from keyboard
+      "http://www.emacswiki.org/emacs/download/icomplete+.el"   ; Enhancements to `icomplete.el'
+      "http://www.emacswiki.org/emacs/download/hexrgb.el"       ; Color manipulation
+      "http://www.emacswiki.org/emacs/download/synonyms.el"     ; Look up synonyms
+      ))
+    ;; AutoComplete development version.
+    ("auto-complete development version" nil nil
+     (
+      "http://github.com/m2ym/auto-complete/raw/master/popup.el"
+      "http://github.com/m2ym/auto-complete/raw/master/auto-complete.el"
+      "http://github.com/m2ym/auto-complete/raw/master/auto-complete-config.el"
+      ))
+    ;; Anything
+    ("anything" nil nil
+     (
+      "http://www.emacswiki.org/emacs/download/anything.el"        ; Main library
+      "http://www.emacswiki.org/emacs/download/anything-config.el" ; Configuration for anything.el
+      "http://www.emacswiki.org/emacs/download/anything-match-plugin.el" ; Matching algorithm humanely
+      "http://www.emacswiki.org/emacs/download/anything-migemo.el" ; Migemo extension for Japanese
+      "http://www.emacswiki.org/emacs/download/anything-complete.el" ; Completion
+      "http://www.emacswiki.org/emacs/download/anything-show-completion.el" ; Show completion prettily
+      "http://www.emacswiki.org/emacs/download/anything-auto-install.el" ; auto-install extension
+      "http://www.emacswiki.org/emacs/download/descbinds-anything.el" ; describe-key replacement
+      "http://www.emacswiki.org/emacs/download/anything-grep.el" ; Grep with anything
+      "http://www.emacswiki.org/emacs/download/anything-startup.el" ; Startup file
+      ))
+    ;; SDCV (Interface for StartDict console version)
+    ("sdcv" nil nil
+     (
+      "http://www.emacswiki.org/emacs/download/showtip.el" ; Basic tooltip show library
+      "http://www.emacswiki.org/emacs/download/sdcv.el"    ; sdcv.el
+      ))
+    ;; Lazy search
+    ("lazy-search" nil nil
+     (
+      "http://www.emacswiki.org/emacs/download/one-key.el"     ; Basic library for lazy-search.el
+      "http://www.emacswiki.org/emacs/download/lazy-search.el" ; Main library
+      ))
+    ;; PHP completion
+    ("php-completion" nil nil
+     (
+      "http://www.emacswiki.org/emacs/download/anything.el"
+      "http://www.emacswiki.org/emacs/download/anything-match-plugin.el"
+      "http://www.emacswiki.org/emacs/download/anything-show-completion.el"
+      "http://www.emacswiki.org/emacs/download/php-completion.el"
+      ))
+    ;; Perl completion
+    ("perl-completion" nil nil
+     (
+      "http://www.emacswiki.org/emacs/download/anything.el"
+      "http://www.emacswiki.org/emacs/download/anything-match-plugin.el"
+      "http://www.emacswiki.org/emacs/download/anything-show-completion.el"
+      "http://www.emacswiki.org/emacs/download/perl-completion.el"
+      ))
+    ;; Text Translator
+    ("text translator" nil nil
+     (
+      "http://www.emacswiki.org/emacs/download/text-translator.el"
+      "http://www.emacswiki.org/emacs/download/text-translator-vars.el"
+      "http://www.emacswiki.org/emacs/download/text-translator-load.el"
+      ))
+    )
+  "This list contain packages information for batch install.
+
+Have four arguments per list:
+First argument is extension name.
+Second argument is delay time for batch install.
+Third argument is libraries number limit in delay time.
+Fourth argument is libraries url list.
+
+Anyone can add information in this list for batch install."
+  :group 'auto-install)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Variable ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defvar auto-install-download-buffer nil
+  "The download buffer used by `url-retrieve'.
+This variable is always buffer-local.")
+(make-variable-buffer-local 'auto-install-download-buffer)
+
+(defvar auto-install-download-url nil
+  "The url from which to download files.
+This variable is always buffer-local.")
+(make-variable-buffer-local 'auto-install-download-url)
+
+(defvar auto-install-last-url nil
+  "The last url used in `auto-install-from-url'.")
+
+(defvar auto-install-last-gist-id nil
+  "The last gist id you visit in `auto-install-from-gist'.")
+
+(defvar auto-install-package-name-list nil
+  "The package name list for completion input.")
+
+(defvar auto-install-minor-mode-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map (kbd "C-c C-d") 'auto-install-buffer-diff) ;diff
+    (define-key map (kbd "C-c C-c") 'auto-install-buffer-save) ;save
+    (define-key map (kbd "C-c C-q") 'auto-install-buffer-quit) ;quit
+    map)
+  "Keymap used by variable `auto-install-minor-mode'.")
+
+(defvar auto-install-add-load-path-flag t
+  "If non-nil, add `auto-install-directory' to `load-path'.
+This variable is intended to be used in test.")
+
+(defvar auto-install-waiting-url-list nil
+  "URLs in downloading.")
+(defvar auto-install-url-queue nil
+  "Installation order.")
+(defvar auto-install-download-buffer-alist nil
+  "Pairs of URL and downloaded buffer.")
+
+
+(define-minor-mode auto-install-minor-mode
+  "Auto Install minor mode."
+  :init-value nil
+  :lighter " Auto-Install"
+  :keymap auto-install-minor-mode-map
+  :group 'auto-install)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Interactive Functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defun auto-install-from-buffer ()
+  "Install the elisp file in the current buffer."
+  (interactive)
+  (let (filename)
+    (setq filename (read-string (format "Filename (%s): " (buffer-name)) nil nil (buffer-name)))
+    (auto-install-mode)
+    (auto-install-buffer-save filename)))
+
+(defun auto-install-from-url (&optional url)
+  "Install an elisp file from a given url."
+  (interactive)
+  (or url (setq url (read-string (format "URL (%s): " (or auto-install-last-url "")) nil nil auto-install-last-url)))
+  (setq auto-install-last-url url)
+  (auto-install-download url))
+
+(defun auto-install-from-emacswiki (&optional file)
+  "Install an elisp file from EmacsWiki.org."
+  (interactive)
+  (cond (auto-install-package-name-list
+         ;; Install package if `auto-install-package-name-list' is non-nil.
+         (or file (setq file (auto-install-get-candidate "Package" auto-install-package-name-list)))
+         (auto-install-download (concat auto-install-emacswiki-base-url file)))
+        (t
+         ;; Otherwise update package name and install.
+         (auto-install-download "http://www.emacswiki.org/cgi-bin/emacs?action=index;raw=1"
+                                'auto-install-handle-emacswiki-package-install))))
+
+(defun auto-install-from-gist (&optional gistid)
+  "Install an elisp file from gist.github.com.
+Optional argument GISTID is gist ID for download elisp file from gist.github.com."
+  (interactive)
+  (or gistid (setq gistid (read-string (format "Gist ID (%s): " (or auto-install-last-gist-id ""))
+                                       nil nil
+                                       auto-install-last-gist-id)))
+  (setq auto-install-last-gist-id gistid)
+  (auto-install-download (format "%s%s.txt" auto-install-gist-base-url gistid)))
+
+(defun auto-install-from-library (&optional library)
+  "Update an elisp LIBRARY.
+Default this function will found 'download url' from `auto-install-filter-url',
+if not found, try to download from EmacsWiki."
+  (interactive
+   (let* ((dirs load-path)
+          (suffixes (find-library-suffixes)))
+     (list (auto-install-get-candidate "Library name" (auto-install-get-library-list)))))
+  (let ((filename (file-name-nondirectory (find-library-name library)))
+        (base-url auto-install-emacswiki-base-url)
+        (library-name (replace-regexp-in-string "\\(\\.el.*$\\)" "" library)))
+    (if (assoc library-name auto-install-filter-url)
+        (setq base-url (cadr (assoc library-name auto-install-filter-url))))
+    (auto-install-download (concat base-url filename))))
+
+(defun auto-install-from-directory (directory)
+  "Update elisp files under DIRECTORY from EmacsWiki.
+You can use this command to update elisp file under DIRECTORY."
+  (interactive "DDirectory: ")
+  (let (filename)
+    (dolist (file (directory-files directory t))
+      (if (file-directory-p file)
+          ;; Don't match . or .. directory.
+          (unless (string-match "^\\.\\.?$" (file-name-nondirectory file))
+            ;; Find files in sub-directory.
+            (auto-install-from-directory file))
+        ;; Get file name.
+        (setq filename (file-name-nondirectory file))
+        ;; Not backup file.
+        (unless (string-match "^\\.?#" filename)
+          ;; Match elisp file.
+          (if (string-match "^.*\\.el" filename)
+              (auto-install-download (concat auto-install-emacswiki-base-url filename))))))))
+
+(defun auto-install-from-dired ()
+  "Update dired marked elisp files from EmacsWiki.org.
+You can use this to download marked files in Dired asynchronously."
+  (interactive)
+  (if (eq major-mode 'dired-mode)
+      (if (or (not auto-install-from-dired-confirm)
+              (yes-or-no-p "Do you want install marked files from EmacsWiki.org?"))
+          (dolist (file (dired-get-marked-files))
+            (auto-install-download (concat auto-install-emacswiki-base-url (file-name-nondirectory file)))))
+    (error "This command is only for `dired-mode'.")))
+
+(defun auto-install-update-emacswiki-package-name (&optional unforced)
+  "Update the list of elisp package names from `EmacsWiki'.
+By default, this function will update package name forcibly.
+If UNFORCED is non-nil, just update package name when `auto-install-package-name-list' is nil."
+  (interactive)
+  (unless (and unforced
+               auto-install-package-name-list)
+    (auto-install-download "http://www.emacswiki.org/cgi-bin/emacs?action=index;raw=1"
+                           'auto-install-handle-emacswiki-package-name)))
+
+(defun auto-install-dired-mark-files ()
+  "Mark dired files that contain at `EmacsWiki.org'."
+  (interactive)
+  (if (eq major-mode 'dired-mode)
+      (if auto-install-package-name-list
+          ;; Mark files that exist at `EmacsWiki'.
+          (auto-install-dired-mark-files-internal)
+        ;; Or get package name list and match files.
+        (auto-install-download "http://www.emacswiki.org/cgi-bin/emacs?action=index;raw=1"
+                               'auto-install-handle-dired-mark-files))
+    (error "This command just use in `dired-mode'.")))
+
+(defun auto-install-mode ()
+  "Major mode for auto-installing elisp code."
+  (interactive)
+  ;; Load emacs-lisp syntax highlight.
+  (set-syntax-table emacs-lisp-mode-syntax-table)
+  (lisp-mode-variables)
+  (setq font-lock-mode t)
+  (font-lock-fontify-buffer)
+  ;; Read only.
+  (setq buffer-read-only t)
+  (and view-read-only (view-mode 1))
+  ;; Load `auto-install' mode.
+  (auto-install-minor-mode t)
+  (setq major-mode 'auto-install-minor-mode))
+
+(defun auto-install-buffer-quit ()
+  "Quit from `auto-install' temporary buffer."
+  (interactive)
+  ;; Quit buffer.
+  (if (eq major-mode 'auto-install-minor-mode)
+      (auto-install-quit)
+    (error "This command just use in `auto-install-minor-mode'.")))
+
+(defun auto-install-compatibility-setup ()
+  "Install Compatibility commands for install-elisp.el users."
+  (interactive)
+  (defalias 'install-elisp 'auto-install-from-url)
+  (if (require 'anything-auto-install nil t)
+      (defalias 'install-elisp-from-emacswiki 'anything-auto-install-from-emacswiki)
+    (defalias 'install-elisp-from-emacswiki 'auto-install-from-emacswiki))
+  (defalias 'install-elisp-from-gist 'auto-install-from-gist)
+  (message "Install-elisp compatibility installed.
+install-elisp                = %s
+install-elisp-from-emacswiki = %s
+install-elisp-from-gist      = %s"
+           (symbol-function 'install-elisp)
+           (symbol-function 'install-elisp-from-emacswiki)
+           (symbol-function 'install-elisp-from-gist)))
+
+(defun auto-install-batch (&optional extension-name)
+  "Batch install many libraries in some extension.
+EXTENSION-NAME is extension name for batch install."
+  (interactive)
+  (let (extension-info-list)
+    ;; Get extension information list.
+    (setq extension-info-list
+          (assoc (or
+                  ;; Get information list from give extension name.
+                  extension-name
+                  ;; Otherwise completion from user select.
+                  (completing-read "Extension name: " (mapcar 'car auto-install-batch-list)))
+                 auto-install-batch-list))
+    (if extension-info-list
+        ;; Install extension libraries.
+        (let ((extension-delay-time (nth 1 extension-info-list))
+              (extension-limit-number (nth 2 extension-info-list))
+              (extension-library-list (car (last extension-info-list))))
+          (setq auto-install-waiting-url-list extension-library-list
+                auto-install-url-queue extension-library-list)
+          (if (not (and
+                    ;; Delay time is above 0.
+                    extension-delay-time
+                    (> extension-delay-time 0)
+                    ;; Limit number is above 0.
+                    extension-limit-number
+                    (> extension-limit-number 0)))
+              (auto-install-from-url-list extension-library-list)
+            (let ((delay-counter 0)
+                    install-list)
+                (while extension-library-list
+                  (if (> (length extension-library-list) extension-limit-number)
+                      ;; Install apart libraries list under `extension-limit-number'
+                      (progn
+                        (setq install-list (nthcar extension-limit-number extension-library-list))
+                        (run-with-timer
+                         (* delay-counter extension-delay-time)
+                         nil
+                         'auto-install-from-url-list install-list)
+                        (setq extension-library-list (nthcdr+ extension-limit-number extension-library-list))
+                        (incf delay-counter))
+                    ;; Install remain libraries list.
+                    (setq install-list extension-library-list)
+                    (run-with-timer
+                     (* delay-counter extension-delay-time)
+                     nil
+                     'auto-install-from-url-list install-list)
+                    (setq extension-library-list nil))))))
+      ;; Notify message when haven't install information
+      ;; for libraries that user given.
+      (message "Haven't install information for `%s'." extension-name))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Utilities Functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defun auto-install-download (url &optional handle-function)
+  "Download elisp file from URL.
+HANDLE-FUNCTION for handle download content,
+default is `auto-install-handle-download-content'."
+  ;; Check and create install directory.
+  (unless (file-exists-p auto-install-directory)
+    (make-directory auto-install-directory)
+    (when auto-install-add-load-path-flag
+      (add-to-list 'load-path auto-install-directory)) 
+    (message "Create directory %s for install elisp file." auto-install-directory))
+  ;; Download.
+  (let* ((url-request-method "GET")
+         (url-request-extra-headers nil)
+         (url-mime-accept-string "*/*")
+         (parsed-url (url-generic-parse-url url))
+         (download-buffer (auto-install-get-buffer url))
+         (download-buffer-name (buffer-name download-buffer)))
+    (with-current-buffer download-buffer
+      ;; Bind download url with local buffer.
+      (setq auto-install-download-url url)
+      ;; Bind download buffer with local buffer.
+      ;;
+      ;; Use buffer-local variable receive
+      ;; data from `url-retrieve' to make asynchronously
+      ;; download file with special buffer.
+      ;;
+      ;; Because the buffer name is unique that generate
+      ;; through `current-time', so can download many elisp file
+      ;; asynchronously and won't conflict each other.
+      (setq auto-install-download-buffer
+            (url-retrieve parsed-url
+                          'auto-install-download-callback
+                          (list download-buffer-name handle-function))))))
+
+(defun auto-install-download-callback (&optional redirect download-buffer-name handle-function)
+  "The callback for `auto-install-download'.
+With `auto-install-download', this downloads elisp files asynchronously.
+REDIRECT is the argument for check download status.
+DOWNLOAD-BUFFER-NAME is the name of download buffer.
+HANDLE-FUNCTION is function for handle download content."
+  (if (eq (car redirect) ':error)
+      ;; Notify user and kill buffer when occur error.
+      (with-current-buffer (get-buffer download-buffer-name)
+        (message "Download from '%s' failed." auto-install-download-url)
+        (kill-buffer download-buffer-name))
+    ;; Otherwise continue install process.
+    (auto-install-retrieve-decode download-buffer-name) ;decode retrieve information.
+    (with-current-buffer (get-buffer download-buffer-name)
+      ;; Show successful message
+      (message "Download from '%s' successful." auto-install-download-url)
+      ;; Handle download content.
+      (funcall (or handle-function 'auto-install-handle-download-content)
+               (current-buffer)))))
+
+(defun auto-install-retrieve-decode (retrieve-buffer-name)
+  "Decode the RETRIEVE-BUFFER-NAME with coding detection."
+  (declare (special url-http-end-of-headers))
+  (with-current-buffer (get-buffer retrieve-buffer-name)
+    (insert
+     (with-current-buffer auto-install-download-buffer
+       (set-buffer-multibyte t)
+       (goto-char (1+ url-http-end-of-headers))
+       (decode-coding-region
+        (point) (point-max)
+        (coding-system-change-eol-conversion
+         ;; rubikitch: encoding detection is better because of
+         ;; non-utf8 Japanese encodings.
+         (detect-coding-region (point-min) (point-max) t) 'dos))
+       (buffer-substring (point) (point-max))))
+    (goto-char (point-min))))
+
+(defun auto-install-handle-download-content (download-buffer)
+  "Handle the content downloaded to buffer DOWNLOAD-BUFFER."
+  (with-current-buffer download-buffer
+    ;; Load mode.
+    (auto-install-mode)
+    ;; Display help information in mode-line.
+    (setq mode-line-format (list "Type C-c C-c to continue; Type C-c C-d for view diff; Type C-c C-q to quit."))
+
+    (setq header-line-format (list auto-install-download-url))
+    (setq auto-install-download-buffer-alist
+          (cons (cons auto-install-download-url download-buffer)
+                auto-install-download-buffer-alist))
+    (setq auto-install-waiting-url-list
+          (remove auto-install-download-url auto-install-waiting-url-list))
+    ;; When all files are downloaded
+    (unless auto-install-waiting-url-list
+      ;; Select first file
+      (switch-to-buffer (or (assoc-default (car auto-install-url-queue)
+                                           auto-install-download-buffer-alist)
+                            ;; if single file
+                            download-buffer))
+      (unless auto-install-save-confirm
+        (auto-install-buffer-save)))))
+
+(defun auto-install-handle-emacswiki-package-name (download-buffer &optional prompt-install)
+  "Handle elisp package name from `EmacsWiki'.
+DOWNLOAD-BUFFER is the name of download buffer.
+PROMPT-INSTALL is non-nil, will prompt package name for install."
+  ;; Update package name list.
+  (auto-install-update-emacswiki-package-list download-buffer)
+  ;; Prompt package name for install.
+  (when prompt-install
+    (auto-install-download
+     (concat auto-install-emacswiki-base-url
+             (auto-install-get-candidate "Package" auto-install-package-name-list)))))
+
+(defun auto-install-handle-dired-mark-files (download-buffer)
+  "Handle dired mark files that exist at `EmacsWiki'.
+DOWNLOAD-BUFFER is the name of download buffer."
+  ;; Update package name list.
+  (auto-install-update-emacswiki-package-list download-buffer)
+  ;; Mark dired files.
+  (auto-install-dired-mark-files-internal))
+
+(defun auto-install-handle-emacswiki-package-install (download-buffer)
+  "Handle elisp package install from `EmacsWiki'.
+DOWNLOAD-BUFFER is the name of download buffer."
+  (auto-install-handle-emacswiki-package-name download-buffer t))
+
+(defun auto-install-update-emacswiki-package-list (download-buffer)
+  "Filter and update package name list from `EmacsWiki'.
+DOWNLOAD-BUFFER is the name of download buffer."
+  (goto-char (point-min))
+  (setq auto-install-package-name-list
+        (loop while (re-search-forward "^.*\\.el$" nil t)
+              collect (match-string 0)))
+  ;; Kill buffer.
+  (kill-buffer download-buffer)
+  ;; Display successful message.
+  (message "Update package name from `EmacsWiki' successful."))
+
+(defun auto-install-buffer-diff ()
+  "View different between old version.
+This command just run when have exist old version."
+  (interactive)
+  (let* ((new-file (url-file-nondirectory auto-install-download-url))
+         (old-file (auto-install-get-path new-file)))
+    (if old-file
+        ;; View different when have old version exist.
+        (ediff-buffers (current-buffer) (find-file-noselect old-file))
+      ;; Otherwise notify user.
+      (message "Haven't old version exist."))))
+
+(defun auto-install-buffer-save (&optional filename)
+  "Save downloaded content to file FILENAME."
+  (interactive)
+  (if (eq major-mode 'auto-install-minor-mode)
+      (let (file-path)
+        ;; Get filename
+        (unless filename
+          (setq filename (url-file-nondirectory auto-install-download-url)))
+        ;; Make sure file suffix with `.el'.
+        (while (not (string-match ".*\.el$" filename))
+          (setq filename (read-string "Please input file name suffix with `.el': ")))
+        ;; Get file path.
+        (setq file-path
+              (or
+               ;; Replace file if have exist.
+               (auto-install-get-path filename)
+               ;; Otherwise, install in directory `auto-install-directory'.
+               (concat auto-install-directory filename)))
+        ;; Save file.
+        (if (and (file-exists-p file-path)
+                 auto-install-replace-confirm
+                 (not (yes-or-no-p (format "Do you want replace file: '%s' ?" file-path))))
+            (auto-install-quit)
+          (write-file file-path)
+          (auto-install-install file-path)))
+    (error "This command just use in `auto-install-minor-mode'.")))
+
+(defun auto-install-install (file-path)
+  "Install elisp file FILE-PATH."
+  (if (and auto-install-install-confirm
+           (not (yes-or-no-p (format "Do you want install file: '%s' ?" file-path))))
+      (auto-install-quit)
+    (let (byte-compile-warnings) ;; suppress compile warnings
+      ;; Compile and load file.
+      (setq auto-install-url-queue (cdr auto-install-url-queue))
+      (unless (ignore-errors (byte-compile-file file-path t))
+        ;; Show `ERROR' message if compile failed.
+        (message (format "Auto-Install ERROR: Compiled file '%s' failed." file-path)))
+      ;; Install next file.
+      (cond ((car auto-install-url-queue)
+             (switch-to-buffer (assoc-default (car auto-install-url-queue)
+                                              auto-install-download-buffer-alist))
+             (unless auto-install-save-confirm
+               (auto-install-buffer-save)))
+            (t                          ;completed
+             ;; cleanup
+             (setq auto-install-url-queue nil)
+             (setq auto-install-download-buffer-alist nil)
+             (message "Installation is completed."))))))
+
+(defun auto-install-quit ()
+  "Quit auto-install."
+  ;; Kill buffer
+  (kill-buffer (current-buffer))
+  ;; Show quit message.
+  (message "Quit auto-install process."))
+
+(defun auto-install-get-path (library)
+  "Return the absolute file path of the Lisp source of LIBRARY."
+  ;; If the library is byte-compiled, try to find a source library by
+  ;; the same name.
+  (if (string-match "\\.el\\(c\\(\\..*\\)?\\)\\'" library)
+      (setq library (replace-match "" t t library)))
+  (or
+   (locate-file library
+                (or find-function-source-path load-path)
+                (find-library-suffixes))
+   (locate-file library
+                (or find-function-source-path load-path)
+                load-file-rep-suffixes)))
+
+(defun auto-install-get-buffer (url)
+  "Get a buffer for temporary storage of downloaded content.
+Uses `current-time' to make buffer name unique."
+  (get-buffer-create (format "*%s %s <%s>*"
+                             auto-install-buffer-name url
+                             (format-time-string "%m/%d %H:%M:%S"))))
+
+(defun auto-install-dired-mark-files-internal ()
+  "Mark files that match `auto-install-package-name-list'."
+  ;; Set buffer visible in select window.
+  (set-buffer (window-buffer))
+  ;; Get mark files.
+  (save-excursion
+    (let (filename)
+      ;; Unmark all markes.
+      (dired-unmark-all-marks)
+      ;; Try to mark files.
+      (goto-char (point-min))
+      (while (not (eobp))
+        (setq filename (dired-get-filename nil t))
+        (if (and filename
+                 (not (file-directory-p filename))
+                 (member (file-name-nondirectory filename) auto-install-package-name-list))
+            (dired-mark 1))
+        (dired-next-line 1)))))
+
+(defun auto-install-region-or-thing (&optional thing)
+  "Return region or thing around point.
+If `mark-active' and variable `transient-mark-mode', return region.
+If THING is non-nil, return THING around point;
+otherwise return symbol around point."
+  ;; Return string.
+  (if (and mark-active
+           transient-mark-mode)
+      ;; Return region string just when
+      ;; `mark-active' and `transient-mark-mode' is on.
+      (buffer-substring-no-properties (region-beginning)
+                                      (region-end))
+    ;; Otherwise try to pick-up THING around point.
+    (setq thing (or thing 'symbol))
+    (ignore-errors
+      (save-excursion
+        (buffer-substring-no-properties (beginning-of-thing thing)
+                                        (end-of-thing thing))))))
+
+(defun auto-install-get-library-list (&optional dirs string)
+  "Do completion for file names passed to `locate-file'.
+DIRS is directory to search path.
+STRING is string to match."
+  ;; Use `load-path' as path when ignore `dirs'.
+  (or dirs (setq dirs load-path))
+  ;; Init with blank when ignore `string'.
+  (or string (setq string ""))
+  ;; Get library list.
+  (let ((string-dir (file-name-directory string))
+        name
+        names)
+    (dolist (dir dirs)
+      (unless dir
+        (setq dir default-directory))
+      (if string-dir
+          (setq dir (expand-file-name string-dir dir)))
+      (when (file-directory-p dir)
+        (dolist (file (file-name-all-completions
+                       (file-name-nondirectory string) dir))
+          ;; Suffixes match `load-file-rep-suffixes'.
+          (setq name (if string-dir (concat string-dir file) file))
+          (if (string-match (format "^.*\\.el%s$" (regexp-opt load-file-rep-suffixes)) name)
+              (add-to-list 'names name)))))
+    names))
+
+(defun auto-install-get-candidate (prompt collection)
+  "Get candidate from completing list.
+PROMPT is string for prompt.
+COLLECTION is list for completing candidates."
+  (completing-read (format "%s (%s): " prompt (or (auto-install-region-or-thing) ""))
+                   collection
+                   nil nil nil nil
+                   (auto-install-region-or-thing)))
+
+(defun auto-install-from-url-list (&optional url-list)
+  "Batch install many packages form URL-LIST."
+  (if (listp url-list)
+      (dolist (url url-list)
+        (auto-install-from-url url))
+    (error "Invalid url list for install.")))
+
+(defun nthcdr+ (n list)
+  "Take cdr N times on LIST, return the result.
+If LIST length below N, return entire list.
+If LIST is nil, return nil."
+  (if (or (null list)
+          (> n (length list)))
+      list
+    (nthcdr n list)))
+
+(defun nthcar (n list)
+  "Return first N elements of LIST.
+If LIST length below N, return entire list.
+If LIST is nil, return nil."
+  (reverse (nthcdr (- (length list) n) (reverse list))))
+
+(provide 'auto-install)
+
+;; How to save (DO NOT REMOVE!!)
+;; (emacswiki-post "auto-install.el")
+;;; auto-install.el ends here
+
+;;; LocalWords:  el eol dirs fontify gistid txt func bytecomp DDirectory ediff
+;;; LocalWords:  noselect Unmark unmark AutoInstall keybindings defalias'es

+ 674 - 0
a/auto-install/gpl-3.0.txt

@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.

+ 20 - 0
a/auto-install/vine-default-auto-install.el

@@ -0,0 +1,20 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;  -*- coding: utf-8-unix -*-
+;;  FSF Emacs 23 用 Vine Linux auto-install 設定
+;;    IWAI, Masaharu <iwai@alib.jp>
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; auto-install の設定
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(require 'auto-install)
+(setq auto-install-directory "~/.emacs.d/auto-install/")
+(auto-install-update-emacswiki-package-name t)
+(auto-install-compatibility-setup) ; insall-elisp.elとの互換性確保
+
+(provide 'vine-default-auto-install)
+
+;; Local Variables:
+;; mode: emacs-lisp
+;; End: