[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

install-elisp.el --- Simple Emacs Lisp installer using curl

From: rubikitch
Subject: install-elisp.el --- Simple Emacs Lisp installer using curl
Date: Wed, 25 Jul 2007 23:07:07 +0900 (JST)

 Automate Emacs Lisp installation.
 (1) download Emacs Lisp
 (2) save to your repository
 (3) byte compile
 (4) load
 (5) show Emacs Lisp

 M-x install-elisp
 M-x install-elisp-from-emacswiki

For example, if you want to upgrade anything.el, you have only to issue:
M-x install-elisp-from-emacswiki anything.el

;;; install-elisp.el --- Simple Emacs Lisp installer using curl
;; $Id: install-elisp.el,v 1.2 2007/07/24 10:44:31 rubikitch Exp $

;; Copyright (C) 2007  rubikitch

;; Author: rubikitch <address@hidden>
;; Keywords: lisp, convenience, maint
;; URL:

;; This file 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 2, or (at your option)
;; any later version.

;; This file is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING.  If not, write to
;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.

;;; Commentary:

;; Automate Emacs Lisp installation.
;; (1) download Emacs Lisp
;; (2) save to your repository
;; (3) byte compile
;; (4) load
;; (5) show Emacs Lisp

;;; Installation:

;; To use this program, you must have curl, command-line HTTP client.

;; You need to add to .emacs:  
;;   (require 'install-elisp)
;;   (setq install-elisp-repository-directory "~/emacs/lisp/")

;;; Usage:

;; M-x install-elisp
;; M-x install-elisp-from-emacswiki
;; It is convenient to add to your Emacs Lisp programs:
;;   (install-elisp "";)
;; because users have only to evaluate this sexp by C-x C-e.

;; If you want to complete EmacsWiki pagename, eval:
;;   (install-elisp "";)
;; It is very convenient to access EmacsWiki with oddmuse.el.

;;; Upgrade this program:

;; Simply eval:
;;  (install-elisp-from-emacswiki "install-elisp.el")

;;; Related project:

;; Emacs Lisp Package Archive:

;;; History:

;; $Log: install-elisp.el,v $
;; Revision 1.2  2007/07/24 10:44:31  rubikitch
;; Fixed a serious bug.
;; New variable: install-elisp-use-view-mode
;; Revision 1.1  2007/07/24 10:39:40  rubikitch
;; Initial revision

;;; Code:

(defvar install-elisp-repository-directory nil
  "Directory to save Emacs Lisp programs downloaded by install-elisp.el.
You MUST set it in .emacs.

Developer's note: The default is nil to prevent install-elisp from installing 
wrong place.")

(defvar install-elisp-use-view-mode t
  "If non-nil, turn on `view-mode' for installed Emacs Lisp program.")

(defun %install-elisp-create-buffer (url)
  (let ((buffer (generate-new-buffer " *install-elisp-tmp*")))
    (shell-command (format "curl --silent '%s'" url) buffer)
    (switch-to-buffer buffer)))

(defun install-elisp (url &optional filename)
  "Retrieve Emacs Lisp program from URL and save and byte-compile and load.
If optional FILENAME is supplied, save URL as FILENAME, otherwise URL's 
  (interactive "sInstall Emacs Lisp from URL: ")
  (if (null install-elisp-repository-directory)
      (with-output-to-temp-buffer "*Help*"
        (princ "You must prepare to use install-elisp program!
Set `install-elisp-repository-directory' to your local Emacs Lisp repository 
directory in your ~/.emacs.

For example: (setq install-elisp-repository-directory \"~/emacs/lisp/\")"))
    (%install-elisp-create-buffer url)
    (write-file (expand-file-name (or filename (file-name-nondirectory url))
    (byte-compile-file buffer-file-name t)
    (and install-elisp-use-view-mode (view-mode 1))))

(defun %install-elisp-from (baseurl)
  "Return higher-order function installing from BASEURL, which accepts an 
argument FILENAME."
  `(lambda (filename)
     (install-elisp (concat ,baseurl filename) filename)))

(defun install-elisp-from-emacswiki (filename)
  "Install Emacs Lisp program from the EmacsWiki."
  (interactive (list (if (fboundp 'oddmuse-read-pagename)
                         (oddmuse-read-pagename "EmacsWiki")
                       (read-string "PageName: "))))
  (funcall (%install-elisp-from 
"";) filename))

(provide 'install-elisp)

;; How to save (DO NOT REMOVE!!)
;; (emacswiki-post "install-elisp.el")
;;; install-elisp.el ends here


reply via email to

[Prev in Thread] Current Thread [Next in Thread]