Coder Social home page Coder Social logo

el-get's Introduction

Build Status

Color El-Get logo El-Get allows you to install and manage elisp code for Emacs. It supports lots of different types of sources and is able to install them, update them and remove them, but more importantly it will init them for you. That means it will require the features you need, load the necessary files, set the Info paths so that C-h i shows the new documentation you now depend on, and finally call your own initialisation code for you to setup the extension. Or call it a package.

Introduction

Join the chat at https://gitter.im/dimitri/el-get

There are many methods to keep track of your emacs setup. You can manage it all in a private git repository, you can set up git submodules or directly import external repositories. You can manually retrieve the various packages you wish to track and ensure they are installed on any machine you apply your configuration to.

All of these systems require some degree of manual maintenance, especially if you have packages from various types of locations: github, emacswiki, GNU ELPA or Marmalade, privately hosted pages, git, bzr, CVS, the list goes on.

El-Get is designed to simplify this process and allow access to all the various methods of obtaining packages from a single interface. Every package has a recipe that allows you to locate the original source, and that can be updated if the package is moved.

Whether you are using one machine or many, El-Get provides you with a simple interface to your list of installed packages, and the tools to keep them up to date.

El-Get, ELPA and package.el

Emacs 24 ships with package.el which allows for easy installation of Emacs Lisp extensions for Emacs, and supports several servers where to find a list of packaged extension.

Rather than ask authors or contributors to clean-up and package existing software, the El-Get approach is to take bits and pieces as they exist today and still empower Emacs users in a way that those random electrons are easy to use.

That's why El-Get supports package.el as one of its methods to fetch Emacs Lisp Extensions.

Technical differences also include the ability for El-Get to run OS commands (such as make or ginstall-info) so as to better cope with the diversity found in the wild, allowing for automatic inclusion of Info pages for packages providing some.

You can use el-get-elpa-build-local-recipes to install extensions provided by ELPA.

Installation

El-Get is easy to install. The only requirements to do so successfully are Emacs (24.3 and above), git and a connection to the internet that allows you to git clone repositories.

If you do not already have git on your system, you can install it through your package manager if you are using Linux or by downloading it from the Git Homepage.

Installation Dependencies

Installing El-Get depends on a working install-info command, please make sure you have one in your PATH. In debian, it's available in the install-info debian package. The MacOSX install-info version works fine with El-Get.

When using the windows operating system, take into account that the way Emacs calls external programs is not the same for native builds and cygwin, so make sure you don't mix and match them at least for install-info (e.g. cygwin version of install-info will error out when called by el-get from a windows-nt Emacs, see system-type). When using a native build of Emacs for windows, consider using the GNU Win 32 distribution of TexInfo for windows, which contains the proper install-info version when you're not using the cygwin Emacs binary.

The Lazy Installer

To install El-Get you can use the lazy-installer. This will not load it on startup or otherwise affect future usage of Emacs. If you wish to ensure that El-Get will be available in future Emacs session please use the code provided in Basic Setup. Using the code below will require an internet connection even if El-Get is already installed, that's why it's advised to use it for first time installation, not for embedding into your .emacs (or your user-init-file).

;; So the idea is that you copy/paste this code into your *scratch* buffer,
;; hit C-j, and you have a working el-get.
(url-retrieve
 "https://raw.githubusercontent.com/dimitri/el-get/master/el-get-install.el"
 (lambda (s)
   (goto-char (point-max))
   (eval-print-last-sexp)))

NOTE: if you are using Windows see Installation on Windows.

Evaluating this code after copying it into your *scratch* buffer by typing C-j or M-x eval-print-last-exp will retrieve the El-Get installation script. This script will then use git to clone El-Get and install it to the default location (~/.emacs.d/el-get/el-get).

Replicating a package set on another Emacs installation

In the Emacs whose setup you wish to replicate, type M-x ielm for an Emacs Lisp prompt, and enter:

`(setq my-packages
              ',(mapcar #'el-get-as-symbol
                        (el-get-list-package-names-with-status "installed")))

Copy the result into the new Emacs, in which you should already have installed El-Get, and evaluate it, followed by (el-get 'sync my-packages)

Setup

Basic Setup

If you wish to ensure that El-Get is available when you load Emacs you can place the following elisp code in your init file. It will detect if el-get is already installed and install it if necessary.

The addition of (el-get 'sync) in the code blocks below ensures that any currently installed packages will be initialized and any required packages will be installed.

Calling the el-get function is covered in details in the full Info manual.

Here is the basic setup to add to your user-init-file (.emacs):

(add-to-list 'load-path (expand-file-name "el-get/el-get" user-emacs-directory))

(unless (require 'el-get nil 'noerror)
  (with-current-buffer
      (url-retrieve-synchronously
       "https://raw.githubusercontent.com/dimitri/el-get/master/el-get-install.el")
    (goto-char (point-max))
    (eval-print-last-sexp)))

(add-to-list 'el-get-recipe-path "~/.emacs.d/el-get-user/recipes")
(el-get 'sync)

Alternative Basic Setup with Installation via MELPA

(add-to-list 'load-path (expand-file-name "el-get/el-get" user-emacs-directory))

(unless (require 'el-get nil 'noerror)
  (require 'package)
  (add-to-list 'package-archives
               '("melpa" . "http://melpa.org/packages/"))
  (package-refresh-contents)
  (package-initialize)
  (package-install 'el-get)
  (require 'el-get))

(add-to-list 'el-get-recipe-path "~/.emacs.d/el-get-user/recipes")
(el-get 'sync)

Package Setup

The easiest way to setup a given package is to add its initialization code to a file named init-<package>.el with <package> replaced with the package name. This file needs to be placed in the directory el-get-user-package-directory (defaults to nil, you have to set a value for it, like for example ~/.emacs.d/el-get-init-files/).

El-Get will then load that file at package initialization time. See the full Info documentation for more details and possibilities.

Many init- packages are already available in El-Get.

Usage

El-Get requires very little interaction with your init file when managing packages. Basic Usage explains how to manage your packages without ever having to touch your init file again (meaning, once El-Get is installed). Advanced Usage with Local Recipes explains how to write your init file with explicitly specifying packages to install (when sharing the same setup between several machines for example).

Basic Usage

Adding and removing packages

  • M-x el-get-install

    Will prompt for a package name, with completion, then install it. It will only propose packages that are not already installed. Any package that you have a recipe for is a candidate.

  • M-x el-get-remove

    Will prompt for an installed package name, with completion, then remove it. Depending on the type of the package, this often means simply deleting the directory where the source package lies. Sometime we have to use external tools instead (e.g. apt-get). No effort is made to unload the features.

  • M-x el-get-reinstall

    This is just a shortcut for el-get-remove followed by el-get-install of the same package. It is primarily useful when a package has changed types, so the normal el-get-update process will not work correctly.

Keeping up to date

  • M-x el-get-self-update

    Update only one package, el-get itself.

  • M-x el-get-update

    Will prompt for an installed package name, with completion, then update it. This will run the build commands and init the package again.

  • M-x el-get-update-all

    Will update all packages that have the installed status in your status file. Before the update you will be prompted for confirmation that you wish to proceed.

    Beware that using this function can lead to hours of settings review: more often than not updating a package requires some adjustments to your setup. Updating all of them at once will require reviewing almost all your setup.

  • M-x el-get-reload

    Reload the given package files. Happens automatically at update time too.

Viewing available recipes

  • M-x el-get-list-packages

    Opens a buffer listing all known packages (those for which you have a recipe). The listing includes the package name, its status (one of available, installed, removed or required) and the package description. The description is a free form text and has not been provided for all recipes.

  • M-x el-get-describe

    Prompt for a package name, with completion, then open an *Help* window with details about the selected package. Those include current status, website, description, installation method, full recipe, and buttons to easily install, update or remove the package.

  • M-x el-get-find-recipe-file

    Will prompt for the name of a package, with completion, then find-file its recipe file. If the recipe does not exist, it will create a new recipe file with the appropriate name.

Advanced Usage with Local Recipes

Placing el-get-bundle macro calls instead of (el-get 'sync) in your init file to explicitly specify which packages should be installed. The macro accepts either a simple package name from defined recipes, a package name with a local recipe definition, a package with initialization code, or everything together.

Note that if you leave in the (el-get 'sync) call (which you need to, unless you've also made sure to explicitly call el-get-bundle for all dependency packages), it must go after any recipe defining el-get-bundle calls, otherwise el-get won't know the recipe when it tries to initialize the package.

;; Basic setup

(add-to-list 'load-path (expand-file-name "el-get/el-get" user-emacs-directory))

(unless (require 'el-get nil 'noerror)
  (with-current-buffer
      (url-retrieve-synchronously
       "https://raw.githubusercontent.com/dimitri/el-get/master/el-get-install.el")
    (goto-char (point-max))
    (eval-print-last-sexp)))

(add-to-list 'el-get-recipe-path "~/.emacs.d/el-get-user/recipes")

;; Simple package names
(el-get-bundle yasnippet)
(el-get-bundle color-moccur)

;; Locally defined recipe
(el-get-bundle yaicomplete
  :url "https://github.com/tarao/elisp.git"
  :features yaicomplete)

;; With initialization code
(el-get-bundle zenburn-theme
  :url "https://raw.githubusercontent.com/bbatsov/zenburn-emacs/master/zenburn-theme.el"
  (load-theme 'zenburn t))

;; End of recipes, call `el-get' to make sure all packages (including
;; dependencies) are setup.
(el-get 'sync)

If a package with a local recipe definition has a recipe file, the definition overrides that in the recipe file.

There is some syntactic sugar to specify a package name and a recipe source together.

(el-get-bundle tarao/tab-group-el)
;; equivalent to
;; (el-get-bundle tab-group-el :type github :pkgname "tarao/tab-group-el")

(el-get-bundle gist:4468816:pit
;; equivalent to
;; (el-get-bundle pit :type git :url "http://gist.github.com/4468816.git")

(el-get-bundle elpa:undo-tree)
;; equivalent to
;; (el-get-bundle undo-tree :type elpa)

Please refer to the Info documentation provided with El-Get for the complete syntax of el-get-bundle and recipe definitions.

Troubleshooting

In some hard to understand cases installed packages may fail to produce correct autoloads. In this case a package will be present at your file system but Emacs will not "see" it.

If you have this problem you can try reinstalling a package or add explicit (require 'package-name) to your Emacs config.

Conclusion

Enjoy El-get, enjoy Emacs, have fun with Emacs Lisp, and simplify your Emacs Setup today!

el-get's People

Contributors

adrieankhisbe avatar aki2o avatar alexg0 avatar alexott avatar andersontorres avatar dabrahams avatar damiencassou avatar darwinawardwinner avatar deftsp avatar dholm avatar dimitri avatar ericdanan avatar jd avatar npostavs avatar pasja avatar pierre-lecocq avatar renard avatar rlaboiss avatar rrthomas avatar ruediger avatar stardiviner avatar stephan-cr avatar syohex avatar tarao avatar tkf avatar vedang avatar xiaohanyu avatar xuhdev avatar yyr avatar zilti avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

el-get's Issues

color-theme-zen-and-art recipe fix

new to emacs & lisp, but it seems like the recipe for color-theme-zen-and-art needs the load after, if i'm not mistaken:

(:name color-theme-zen-and-art :type git :url "git://github.com/irfn/zen-and-art.git" :load "zen-and-art.el")

":after" hook called before loading autoloads

The :after hook is called on a per-package basis, while these are being loaded, but the ".loaddefs" file is not loaded until all other packages have also been loaded.

Thus, I'm not able to write something like:

    (:name enclose               :type http
           :url "https://github.com/rejeep/enclose/raw/master/enclose.el"
           :after (lambda () (enclose-global-mode t)))

But instead:

    (:name enclose               :type http
           :url "https://github.com/rejeep/enclose/raw/master/enclose.el"
           :features (enclose)
           :after (lambda () (enclose-global-mode t)))

This is not of maximum importance, but a nuissance nonetheless.

The only solution I see to it is to load the ".loaddefs" file both on:

  • a call to 'el-get', before doing anything else, so that autoloads for already-installed packages will be available.
  • a package build (after a successful one), so that new features will be made immediately available

Issues with not finding git

I was just trying to get el-get installed with the lazy installer & was getting an error for wrong-type-argument. Still being very new to lisp I wasn't really able to find out what the issue was from the code + debugger data. Searching for it online wasn't helpful either.

After thinking for a bit I recalled that I have two versions of git installed on my system & that if it was trying to access it through the system path it would cause problems. Turns out it was exactly that. Although this might be unnecessary, it would be nice if in cases like this (can't find git, git not installed, etc) if a built-in error message was displayed to notify the user of the issue rather than have the debugger spew out the wrong-type-argument error.

org-mode.el: el-get could not find directory `./doc'

Yesterday I encountered a problem with Org mode export:

org-export: Cannot open load file: org-mode/lisp/org-latex

But the .el(c) files were present and not stale.

Today, the error prevented entering org-mode itself:

org: Cannot open load file: org-mode/lisp/org

I used el-get-init org-mode to see:

if: el-get could not find directory `./doc' for package org-mode, at /home/myuser/.emacs.d/el-get/el-get/recipes/doc

This is curious, because the line :info "doc" is used in many other packages. Has something changed with the recommended syntax for :info?

The temporary workaround was to remove the line :info "doc" from recipes.el. Org works then. Export via pdflatex works fine, too.

Is this related to the autoloads problems in #111?

Need a way to specify branch/tag to checkout

For example, the FLIM package is developed on the flim-1_14 branch rather than trunk, for some reason. I have worked around it as follows, but it's a bad solution. There should be a :revision option or something.

(:name flim 
   :type cvs 
   :module "flim" 
   :url ":pserver:[email protected]:/cvs/root" 
   :build `(,(concat (executable-find "cvs") " up -r flim-1_14-wl") 
            ,(concat invocation-directory invocation-name 
                     " -L " (file-name-as-directory "..") "apel" 
                     " -batch -q -no-site-file -l FLIM-MK -f compile-flim"
                     " NONE NONE NONE"))
   )

(note that there's something I want from flim-1_14-wl, but the official head is flim-1_14)

A better bootstrap?

Maybe it would be better to recommend something like this?

(url-retrieve "https://github.com/dimitri/el-get/raw/bf87b10f12fd90f4b0b0ddc2b9bc23e4abfeb2dc/el-get-install.el" (lambda (s)(end-of-buffer)(eval-print-last-sexp)))

It would be great if GitHub would provide a stable URL for the raw HEAD revision of a file; if it did, the following stricter version would be easier to write:

   (url-retrieve 
"https://github.com/dimitri/el-get/blob/master/el-get-install.el"
(lambda (s)
  (re-search-forward "<a[^>]*\\Shref=\"\\([^\"]*\\)\"[^>]*\\Sid=\"raw-url\"")
  (url-retrieve 
   (concat "https://github.com" (match-string 1))
   (lambda (s) (end-of-buffer) (eval-print-last-sexp)))))

I'm not sure if the complication is worth the trouble, though

install fails on mac os x w/ emacs 23.2

Getting this error, trying to install following instruction in readme.

Debugger entered--Lisp error: (error "el-get: can not find package name `el-get' in `el-get-sources'")
  signal(error ("el-get: can not find package name `el-get' in `el-get-sources'"))
  error("el-get: can not find package name `%s' in `el-get-sources'" "el-get")
  (if (el-get-package-p package) nil (error "el-get: can not find package name `%s' in `el-get-sources'" package))
  (unless (el-get-package-p package) (error "el-get: can not find package name `%s' in `el-get-sources'" package))
  el-get-error-unless-package-p("el-get")
  el-get-init("el-get")
  (progn (setq default-directory (file-name-as-directory "/Users/dig/.emacs.d/el-get/el-get")) (load (concat ... "el-get" ".el")) (el-get-init "el-get") (with-current-buffer (process-buffer proc) (goto-char ...) (insert "\nCongrats, el-get is installed and ready to serve!")))
  (if (eq (process-status proc) (quote exit)) (progn (setq default-directory ...) (load ...) (el-get-init "el-get") (with-current-buffer ... ... ...)))
  (when (eq (process-status proc) (quote exit)) (setq default-directory (file-name-as-directory "/Users/dig/.emacs.d/el-get/el-get")) (load (concat ... "el-get" ".el")) (el-get-init "el-get") (with-current-buffer (process-buffer proc) (goto-char ...) (insert "\nCongrats, el-get is installed and ready to serve!")))
  (lambda (proc change) (when (eq ... ...) (setq default-directory ...) (load ...) (el-get-init "el-get") (with-current-buffer ... ... ...)))(# "exited abnormally with code 128\n")
  recursive-edit()
  byte-code("\306�  @\307=\203!

Request: support .el.gz URLs

Here's a package that's distributed online in .el.gz format:

(:name ido-hacks :type http :url "http://www0.fh-trier.de/~politza/emacs/ido-hacks.el.gz")

Currently el-get puts the gzipped content into the local .el file; it'd be nice if IDO could detect the file extension and gunzip the content as necessary.

(In the longer term, I personally think it would be ideal to unify the http and http-tar methods, and instead make the http download method handle content detection.)

org-export: Cannot open load file: org-mode/lisp/org-latex (#113 redux)

Sometime in the last few days one of the errors in Issue 113 returned:

Org buffer, C-c C-e, p (export via pdflatex):

org-export: Cannot open load file: org-mode/lisp/org-latex

The .el(c) files are present and not stale:

[master]~/.emacs.d/el-get/org-mode $ ls -l lisp/latex
-rw-r--r-- 1 myuser users 6886 Jan 16 14:31 lisp/ob-latex.el
-rw-r--r-- 1 myuser users 5202 Jan 16 14:32 lisp/ob-latex.elc
-rw-r--r-- 1 myuser users 95570 Jan 16 14:31 lisp/org-latex.el
-rw-r--r-- 1 myuser users 76882 Jan 16 14:31 lisp/org-latex.elc

I have tried an el-get-remove, el-get-install cycle, with emacs daemon restart. Nothing seems to have any effect.

The .el file in question does have a couple of warnings, but nothing that should prevent el-get from initializing:

M-x byte-compile-file:
Compiling file /home/myuser/.emacs.d/el-get/org-mode/lisp/org-latex.el at Sun Jan 16 14:44:35 2011
Entering directory /home/myuser/.emacs.d/el-get/org-mode/lisp/' org-latex.el:76:1:Warning: global/dynamic varlatexp' lacks a prefix
org-latex.el:78:1:Warning: global/dynamic var `commentsp' lacks a prefix

In org-export-latex-tables:
org-latex.el:1850:41:Warning: assignment to free variable width' org-latex.el:1850:62:Warning: reference to free variablewidth'

Wrote /home/myuser/.emacs.d/el-get/org-mode/lisp/org-latex.elc

There could be similar issues lurking in loading other org modules, but this is the most common org mode special op for me, and thus the only problem I have encountered.

Thanks.

Method apt-get stops waiting for user input

Apt get asks the user if the installation should be performed whenever other packages are pulles as dependencies.

So either emacs must show the question (and allow interaction) to the user, of the flag "-y" must be used with apt-get.

Does it compatible with daemon mode?

I have got the following error during 'emacs --daemon' command execution:

Package el-get failed to install, remove it first.

(No files need saving)
Checking /home/nik/.emacs.d/el-get/package...
Checking /home/nik/.emacs.d/el-get/package/elpa...
Done (Total of 0 files compiled)
require 'package
el-get: Calling :after function for package package
el-get initialized package package
Starting Emacs daemon.

Also, I've got the following error until I've added package to the el-get-sources:

Package el-get failed to install, remove it first.
el-get install google-maps
Warning (initialization): An error occurred while loading `/home/nik/.emacs.d/init.el':

Symbol's value as variable is void: package-user-dir

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file. Start Emacs with
the `--debug-init' option to view a complete error backtrace.
Starting Emacs daemon.

Bug when removing elpa packages

I got this backtrace:

Debugger entered--Lisp error: (file-error "Removing directory" "Not a directory" "/var/folders/w6/w6aHCL+5EVeBUsDYKAF0pU+++TI/-Tmp-/elhome.RsLcquEd/home/.emacs.d/el-get/gist")
  delete-directory-internal("/var/folders/w6/w6aHCL+5EVeBUsDYKAF0pU+++TI/-Tmp-/elhome.RsLcquEd/home/.emacs.d/el-get/gist")
  delete-directory("~/.emacs.d/el-get/gist/" always)
  dired-delete-file("~/.emacs.d/el-get/gist/" always)
  el-get-rmdir("gist" nil el-get-post-remove)
  el-get-elpa-remove("gist" nil el-get-post-remove)
  el-get-remove("gist")
  call-interactively(el-get-remove t nil)
  execute-extended-command((4))
  call-interactively(execute-extended-command nil nil)

it appears to be trying to remove the el-get directory even though gist was installed in an elpa-specific location.

Pathname for Emacs should not be hardcoded for build/darwin

Hello, I've noticed that several recipes have a hardcoded path to Emacs for build/darwin. Specifically, the recipes for bbdb, emacs-w3m, emms, and magit all assume that Emacs.app is in /Applications and hardcode /Applications/Emacs.app/Contents/MacOS or /Applications/Emacs.app/Contents/MacOS/Emacs.

I personally have my Emacs.app in ~/Applications (i.e. my home directory) and anyone else who uses Homebrew to install Emacs may be in the same situation. Ideally, there should be a way to fill in the base path of Emacs so that recipes can be written in a generic way.

Thoughts?

Feature request: keep-going option on byte compile

Related to a compile-exclude feature, it would be nice to have an option to simply keep-going to byte compile other .el files when one .el file has a problem.

After the init completes, and the user adjudges the application to be in a works-for-me status despite a few byte-compilation errors, they could exclude those files which failed.

Thanks.

url-retrieve unable to fetch ftp url

I'm trying to write a recipe for el-screen:

(:name el-screen
       :type http-tar
       :options ("xzf")
       :url "ftp://ftp.morishima.net/pub/morishima.net/naoto/ElScreen/elscreen-1.4.6.tar.gz")

It seems that url-retrieve is unable to fetch that file through ftp:

Debugger entered--Lisp error: (error "File does not exist: ftp://ftp.morishima.net/pub/morishima.net/naoto/ElScreen/elscreen-1.4.6.tar.gz")
  signal(error ("File does not exist: ftp://ftp.morishima.net/pub/morishima.net/naoto/ElScreen/elscreen-1.4.6.tar.gz"))
  error("File does not exist: %s" "ftp://ftp.morishima.net/pub/morishima.net/naoto/ElScreen/elscreen-1.4.6.tar.gz")
  url-ftp([cl-struct-url "ftp" nil nil "ftp.morishima.net" 21 "/pub/morishima.net/naoto/ElScreen/elscreen-1.4.6.tar.gz" nil nil t] el-get-http-retrieve-callback (nil "el-screen" (lambda (package) (let ... ...)) "~/.emacs.d/el-get/el-screen/elscreen-1.4.6.tar.gz" (apel autopair color-theme django-mode el-get emacs-w3m magit nxhtml package pymacs python-mode smex switch-window textile-mode undo-tree yasnippet (:name clojure-mode :type elpa) (:name dired-isearch :type elpa) (:name full-ack :type elpa) (:name gist :type elpa) (:name haml-mode :type elpa) (:name htmlize :type elpa) (:name inf-ruby :type elpa) (:name js2-mode :type elpa) (:name json :type elpa) (:name kill-ring-search :type elpa) (:name lua-mode :type elpa) (:name pastie :type elpa) (:name ruby-compilation :type elpa) (:name ruby-electric :type elpa) (:name ruby-mode :type elpa) (:name sass-mode :type elpa) (:name slime :type elpa) (:name textmate :type elpa) (:name yaml-mode :type elpa) (:name browse-kill-ring :type emacswiki) (:name dired+ :type emacswiki) (:name coffee-mode :type git :url "git://github.com/defunkt/coffee-mode.git") (:name color-theme-chocolate-rain :type git :url "git://github.com/marktran/color-theme-chocolate-rain.git" :load "color-theme-chocolate-rain.el" :after ...) (:name diminish :type http :url "http://www.eskimo.com/~seldon/diminish.el") (:name el-screen :type http-tar :options ... :url "ftp://ftp.morishima.net/pub/morishima.net/naoto/ElScreen/elscreen-1.4.6.tar.gz") (:name growl :type http :url "http://edward.oconnor.cx/elisp/growl.el") (:name ipython :type http :url "http://ipython.scipy.org/dist/ipython.el") (:name markdown-mode :type git :url "git://jblevins.org/git/markdown-mode.git") (:name mo-git-blame :type git :url "git://github.com/voins/mo-git-blame.git") (:name mode-compile :type http :url "http://perso.tls.cena.fr/boubaker/distrib/mode-compile.el") (:name paredit :type http :url "http://mumble.net/~campbell/emacs/paredit.el") (:name peepopen :type git :url "git://github.com/topfunky/PeepOpen-EditorSupport.git" :features peepopen) (:name quack :type http :url "http://www.neilvandyke.org/quack/quack.el") (:name rhtml-mode :type git :url "git://github.com/eschulte/rhtml.git" :compile "rhtml-mode.el") ...)))
  url-retrieve-internal("ftp://ftp.morishima.net/pub/morishima.net/naoto/ElScreen/elscreen-1.4.6.tar.gz" el-get-http-retrieve-callback (nil "el-screen" (lambda (package) (let ... ...)) "~/.emacs.d/el-get/el-screen/elscreen-1.4.6.tar.gz" (apel autopair color-theme django-mode el-get emacs-w3m magit nxhtml package pymacs python-mode smex switch-window textile-mode undo-tree yasnippet (:name clojure-mode :type elpa) (:name dired-isearch :type elpa) (:name full-ack :type elpa) (:name gist :type elpa) (:name haml-mode :type elpa) (:name htmlize :type elpa) (:name inf-ruby :type elpa) (:name js2-mode :type elpa) (:name json :type elpa) (:name kill-ring-search :type elpa) (:name lua-mode :type elpa) (:name pastie :type elpa) (:name ruby-compilation :type elpa) (:name ruby-electric :type elpa) (:name ruby-mode :type elpa) (:name sass-mode :type elpa) (:name slime :type elpa) (:name textmate :type elpa) (:name yaml-mode :type elpa) (:name browse-kill-ring :type emacswiki) (:name dired+ :type emacswiki) (:name coffee-mode :type git :url "git://github.com/defunkt/coffee-mode.git") (:name color-theme-chocolate-rain :type git :url "git://github.com/marktran/color-theme-chocolate-rain.git" :load "color-theme-chocolate-rain.el" :after ...) (:name diminish :type http :url "http://www.eskimo.com/~seldon/diminish.el") (:name el-screen :type http-tar :options ... :url "ftp://ftp.morishima.net/pub/morishima.net/naoto/ElScreen/elscreen-1.4.6.tar.gz") (:name growl :type http :url "http://edward.oconnor.cx/elisp/growl.el") (:name ipython :type http :url "http://ipython.scipy.org/dist/ipython.el") (:name markdown-mode :type git :url "git://jblevins.org/git/markdown-mode.git") (:name mo-git-blame :type git :url "git://github.com/voins/mo-git-blame.git") (:name mode-compile :type http :url "http://perso.tls.cena.fr/boubaker/distrib/mode-compile.el") (:name paredit :type http :url "http://mumble.net/~campbell/emacs/paredit.el") (:name peepopen :type git :url "git://github.com/topfunky/PeepOpen-EditorSupport.git" :features peepopen) (:name quack :type http :url "http://www.neilvandyke.org/quack/quack.el") (:name rhtml-mode :type git :url "git://github.com/eschulte/rhtml.git" :compile "rhtml-mode.el") ...)))
  url-retrieve("ftp://ftp.morishima.net/pub/morishima.net/naoto/ElScreen/elscreen-1.4.6.tar.gz" el-get-http-retrieve-callback ("el-screen" (lambda (package) (let ... ...)) "~/.emacs.d/el-get/el-screen/elscreen-1.4.6.tar.gz" (apel autopair color-theme django-mode el-get emacs-w3m magit nxhtml package pymacs python-mode smex switch-window textile-mode undo-tree yasnippet (:name clojure-mode :type elpa) (:name dired-isearch :type elpa) (:name full-ack :type elpa) (:name gist :type elpa) (:name haml-mode :type elpa) (:name htmlize :type elpa) (:name inf-ruby :type elpa) (:name js2-mode :type elpa) (:name json :type elpa) (:name kill-ring-search :type elpa) (:name lua-mode :type elpa) (:name pastie :type elpa) (:name ruby-compilation :type elpa) (:name ruby-electric :type elpa) (:name ruby-mode :type elpa) (:name sass-mode :type elpa) (:name slime :type elpa) (:name textmate :type elpa) (:name yaml-mode :type elpa) (:name browse-kill-ring :type emacswiki) (:name dired+ :type emacswiki) (:name coffee-mode :type git :url "git://github.com/defunkt/coffee-mode.git") (:name color-theme-chocolate-rain :type git :url "git://github.com/marktran/color-theme-chocolate-rain.git" :load "color-theme-chocolate-rain.el" :after ...) (:name diminish :type http :url "http://www.eskimo.com/~seldon/diminish.el") (:name el-screen :type http-tar :options ... :url "ftp://ftp.morishima.net/pub/morishima.net/naoto/ElScreen/elscreen-1.4.6.tar.gz") (:name growl :type http :url "http://edward.oconnor.cx/elisp/growl.el") (:name ipython :type http :url "http://ipython.scipy.org/dist/ipython.el") (:name markdown-mode :type git :url "git://jblevins.org/git/markdown-mode.git") (:name mo-git-blame :type git :url "git://github.com/voins/mo-git-blame.git") (:name mode-compile :type http :url "http://perso.tls.cena.fr/boubaker/distrib/mode-compile.el") (:name paredit :type http :url "http://mumble.net/~campbell/emacs/paredit.el") (:name peepopen :type git :url "git://github.com/topfunky/PeepOpen-EditorSupport.git" :features peepopen) (:name quack :type http :url "http://www.neilvandyke.org/quack/quack.el") (:name rhtml-mode :type git :url "git://github.com/eschulte/rhtml.git" :compile "rhtml-mode.el") ...)))
  (let* ((pdir ...) (fname ...) (dest ...)) (unless (file-directory-p pdir) (make-directory pdir)) (url-retrieve url (quote el-get-http-retrieve-callback) (\` ...)))
  el-get-http-install("el-screen" "ftp://ftp.morishima.net/pub/morishima.net/naoto/ElScreen/elscreen-1.4.6.tar.gz" (lambda (package) (let (...) (el-get-start-process-list package ... ...))) "~/.emacs.d/el-get/el-screen/elscreen-1.4.6.tar.gz")
  (let* ((source ...) (options ...) (pdir ...) (tarfile ...) (dest ...) (name ...) (ok ...) (ko ...) (post ...)) (el-get-http-install package url post dest))
  el-get-http-tar-install("el-screen" "ftp://ftp.morishima.net/pub/morishima.net/naoto/ElScreen/elscreen-1.4.6.tar.gz" el-get-post-install)
  funcall(el-get-http-tar-install "el-screen" "ftp://ftp.morishima.net/pub/morishima.net/naoto/ElScreen/elscreen-1.4.6.tar.gz" el-get-post-install)
  (let* ((source ...) (method ...) (install ...) (url ...)) (el-get-check-init) (el-get-save-package-status package "required") (funcall install package url (quote el-get-post-install)) (message "el-get install %s" package))
  (let ((el-get-sources ...)) (el-get-error-unless-package-p package) (let (...) (when ... ...) (when ... ...)) (let* (... ... ... ...) (el-get-check-init) (el-get-save-package-status package "required") (funcall install package url ...) (message "el-get install %s" package)))
  el-get-install("el-screen")
  (if (el-get-package-exists-p package) (if (and status ...) (condition-case err ... ...) (message "Package %s failed to install, remove it first." package)) (el-get-install package))
  (let* ((package ...) (status ...)) (if (el-get-package-exists-p package) (if ... ... ...) (el-get-install package)))
  (lambda (source) (let* (... ...) (if ... ... ...)))((:name el-screen :type http-tar :options ("xzf") :url "ftp://ftp.morishima.net/pub/morishima.net/naoto/ElScreen/elscreen-1.4.6.tar.gz"))
  mapcar((lambda (source) (let* (... ...) (if ... ... ...))) (apel autopair color-theme django-mode el-get emacs-w3m magit nxhtml package pymacs python-mode smex switch-window textile-mode undo-tree yasnippet (:name clojure-mode :type elpa) (:name dired-isearch :type elpa) (:name full-ack :type elpa) (:name gist :type elpa) (:name haml-mode :type elpa) (:name htmlize :type elpa) (:name inf-ruby :type elpa) (:name js2-mode :type elpa) (:name json :type elpa) (:name kill-ring-search :type elpa) (:name lua-mode :type elpa) (:name pastie :type elpa) (:name ruby-compilation :type elpa) (:name ruby-electric :type elpa) (:name ruby-mode :type elpa) (:name sass-mode :type elpa) (:name slime :type elpa) (:name textmate :type elpa) (:name yaml-mode :type elpa) (:name browse-kill-ring :type emacswiki) (:name dired+ :type emacswiki) (:name coffee-mode :type git :url "git://github.com/defunkt/coffee-mode.git") (:name color-theme-chocolate-rain :type git :url "git://github.com/marktran/color-theme-chocolate-rain.git" :load "color-theme-chocolate-rain.el" :after (lambda nil ...)) (:name diminish :type http :url "http://www.eskimo.com/~seldon/diminish.el") (:name el-screen :type http-tar :options ("xzf") :url "ftp://ftp.morishima.net/pub/morishima.net/naoto/ElScreen/elscreen-1.4.6.tar.gz") (:name growl :type http :url "http://edward.oconnor.cx/elisp/growl.el") (:name ipython :type http :url "http://ipython.scipy.org/dist/ipython.el") (:name markdown-mode :type git :url "git://jblevins.org/git/markdown-mode.git") (:name mo-git-blame :type git :url "git://github.com/voins/mo-git-blame.git") (:name mode-compile :type http :url "http://perso.tls.cena.fr/boubaker/distrib/mode-compile.el") (:name paredit :type http :url "http://mumble.net/~campbell/emacs/paredit.el") (:name peepopen :type git :url "git://github.com/topfunky/PeepOpen-EditorSupport.git" :features peepopen) (:name quack :type http :url "http://www.neilvandyke.org/quack/quack.el") (:name rhtml-mode :type git :url "git://github.com/eschulte/rhtml.git" :compile "rhtml-mode.el") ...))
  (prog1 (mapcar (lambda ... ...) el-get-sources) (when progress (while ... ... ... ...) (progress-reporter-done progress)))
  (let* ((p-status ...) (total ...) (installed ...) (progress ...) (el-get-default-process-sync ...)) (prog1 (mapcar ... el-get-sources) (when progress ... ...)))
  el-get()
  eval((el-get))
  eval-last-sexp-1(nil)
  eval-last-sexp(nil)
  call-interactively(eval-last-sexp nil nil)

(url-retrieve) seems to fail rather quickly for ftp urls. Any ideas?

el-get-package-exists-p not tolerant to previous failed installation

el-get-package-exists-p just checks if the package directory exists, and not if the package is really installed.

This becomes an issue when an (el-get) has failed, and just created an empty directory for the package. This can happen for example with a broken internet connexion: the download timeouts, and the package is not fully installed.

Checking if the package has been correctly installed could be done with a hidden dotfile created when the installation is OK. Or we could use specific checks for each type, but it would be harder.

Bad error message when recipe missing

It looks like you probably reported the error well, once upon a time, but currently if there's no recipe for a requested package, I get something like:

Package flim failed to install, remove it first.

Of course, there's nothing to remove in that case, so it's a bit confusing.

Prefer (high-quality) git mirrors if available over CVS sources?

I have been maintaining forks of certain recipes, e.g. wanderlust, flim, semi, apel, mailcrypt, where there is a high-quality git mirror of upstream CVS.

This issue is to discuss the issue of whether el-get bundled recipes could and should use a git mirror instead of CVS, presuming a well-maintained and full-fidelity git mirror exists. The question is irrelevant if the git mirror isn't of sufficiently high quality.

Some arguments in favor (of git mirrors) are:

  • Easier to set (or bisect) to a specific whole-tree revision, in case upstream causes a breaking change.
  • Easier to track a specific branch, i.e. the wanderlust packages almost all need to run a branch, which is actually maintained by the git mirror maintainer.
  • Easier to create, maintain, and merge local branches for contributing to upstream.

el-get doesn't play nicely with alternative shells

I am loving el-get, but I use the Friendly Interactive Shell (fish) and many of el-get's installation methods assume bash, e.g. in el-get-http-tar-cleanup-extract-hook "(format "cd %s && mv "%s"/* ." pdir (car files))".

I think these problems can be addressed by explicitly running these command lines using "bash -c '...'". What do you think? I may be totally missing something here...

Thanks for the great work!

Kevin

More things than necessary done by current emacs instance

For example, byte-compiling package files can take a long time, but when there's no build recipe we are doing it with the foreground emacs instance rather than launching an asynchronous job. Furthermore, things currently loaded could in principle adversely affect the results. That's why most makefiles that byte-compile things bypass the user's init file.

Requires a too-modern version of git

The default git installed on MacOS X Snow Leopard doesn't include the --init option to git submodule update. I think el-get should do git submodule init; git submodule update just to be more compatible.

Automatically generate and use autoloads

Packages living on emacswiki and other simple http files usually have autoload cookies. Instead of writing a per-package :after lambda declaring the autoloads, I'd rather prefer to have an :autoload or similar property on sources (which could be t by default, at least on the emacswiki and http sources), which would automatically generate the autoload file during installation and load it at init time.

I tried this using el-get-post-install-hook, but I have no el-get-post-init-hook, so I still need some per-package boiler plate code (in the form of :load). Besides, the property-based approach would be much cleaner by itself (defaulting to 't' on all methods except elpa, for example).

;; Generate package autoloads
(add-hook 'el-get-post-install-hooks
      '(lambda (package)
         (let* ((method   (plist-get (el-get-package-def package) :type))
                (generate (or (eq method 'http)
                              (eq method 'emacswiki)))
                (generated-autoload-file (concat (el-get-package-directory package) "/loaddefs.el")))
           (when generate
             (update-directory-autoloads (el-get-package-directory package))))))

Error while trying to install magit

A similar exception occurs with color-theme, should I blame bzr version of Emacs, or is it el-get?

el-get remove magit
el-get install magit
el-get: updating outdated autoloads
el-get: byte-compiling autoload file
el-get: evaluating autoload file
Loading ~/.emacs.d/el-get/.loaddefs...done
el-get: Package magit installed.
el-get: git submodule update ok
error in process sentinel: insert-file-contents-literally: Variable binding depth exceeds max-specpdl-size
error in process sentinel: Variable binding depth exceeds max-specpdl-size

nxhtml recipe doesn't work

I can't get the nxhtml recipe to install. It throws me in the debugger with the following:

Debugger entered--Lisp error: (void-function :name)
  (:name nxhtml :type git :url "http://github.com/emacsmirror/nxhtml.git" :load "autostart.el")
  eval-buffer(#<buffer  *load*<3>> nil "/Users/marktran/.emacs.d/el-get/el-get/recipes/nxhtml.el" nil t)  ; Reading at buffer position 115
  load-with-code-conversion("/Users/marktran/.emacs.d/el-get/el-get/recipes/nxhtml.el" "/Users/marktran/.emacs.d/el-get/el-get/recipes/nxhtml.el" t t)
  require(nxhtml nil t)
  (progn (require (quote nxhtml) nil t))
  (eval-when-compile (require (quote nxhtml) nil t))
  eval-buffer(#<buffer  *load*<2>> nil "/Users/marktran/.emacs.d/el-get/nxhtml/nxhtml/nxhtml-mumamo.el" nil t)  ; Reading at buffer position 1550
  load-with-code-conversion("/Users/marktran/.emacs.d/el-get/nxhtml/nxhtml/nxhtml-mumamo.el" "/Users/marktran/.emacs.d/el-get/nxhtml/nxhtml/nxhtml-mumamo.el" nil t)
  nxhtml-mumamo-mode()
  funcall(nxhtml-mumamo-mode)
  (progn (funcall mode) mode)
  (if mode (progn (funcall mode) mode))
  (when mode (funcall mode) mode)
  (if (and keep-mode-if-same (eq ... ...)) nil (when mode (funcall mode) mode))
  (unless (and keep-mode-if-same (eq ... ...)) (when mode (funcall mode) mode))
  mumamo-ad-set-auto-mode-0(nxhtml-mumamo-mode t)
  set-auto-mode-0(nxhtml-mumamo-mode t)
  set-auto-mode(t)
  majmodpri-check-normal-mode()
  majmodpri-apply-priorities(t)
  #[(sym val) "\306�    \"\210\307\310\311\312\n\"\"�   \205r

Does not work with git 1.5.6.5

git-submodule update --recursive is not available with this git version thus making your package impossible to use with debian etch

el-get-remove does not work properly with ELPA

Given: gist recipe:

(:name gist
:type elpa)

M-x el-get-remove gist reports:
No such file or directory, /home/cbbrowne/.emacs.d/el-get/gist

This is so; gist happens to reside in
/home/cbbrowne/.emacs.d/elpa/gist-0.5

Probably el-get-remove should be using the ELPA package-delete function.

Some kind of auto-installation needed

Currently, el-get is installed explicitely by using the scratch buffer. However, this requires extra steps when one's Emacs configuration is in Git or other RCS -- a simple pull and Emacs restart is not enough to update configuration fully.

Instead, el-get's installation routine described in the quick-start could check whether el-get is already installed and become a noop. This way, that installation routine could be installed permanently into init.el

package.el recipe

Hi Dimitri, I'm not sure how you prefer to receive patches, but I changed the package.el recipe so that package-list-packages (ELPA) would work out of the box:

(:name package
:type http
:url "http://tromey.com/elpa/package.el"
:features package
:after (lambda ()
(make-directory (expand-file-name "~/.emacs.d/elpa") t)
(package-initialize))
)

FTP

FTP is only supported by the HTTP method, because that actually calls url-retrieve. This is a bit weird from a naming perspective, as a ftp:// URL is definitely not HTTP.

There probably ought to be a default FTP method in v1.0 which is a duplicate of the HTTP method?

installation failure not respected?

The comment on el-get-start-process-list-sentinel seems to imply that the next command is only chained when the process has exited successfully, but change is never inspected, so it looks like it runs unconditionally.

False report of duplicates in el-get-sources

  • have a package foo, whose installation will fail, in el-get-sources
  • launch emacs, note the failure
  • `M-x el-get-remove RET foo RET'
  • `C-u M-x el-get-install RET'

Result:

el-get-package-name-list: Please remove duplicates in `el-get-sources': ("foo").

Generated autoloads file is broken

Starting up emacs without el-get's new generated loaddefs file works fine for me, but once that file has been generated asynchronously, the next attempt to start emacs fails:

Debugger entered--Lisp error: (file-error "Cannot open load file" "diff-git/diff-git")
  (diff-git-default-bindings)
  eval((diff-git-default-bindings))
  eval-after-load(diff-mode (diff-git-default-bindings))
  eval-buffer(#<buffer  *load*<3>> nil "/Users/steve/.emacs.d/el-get/.loaddefs.el" nil t)  ;     Reading at buffer position 9396
  load-with-code-conversion("/Users/steve/.emacs.d/el-get/.loaddefs.el"     "/Users/steve/.emacs.d/el-get/.loaddefs.el" nil nil)
  load("~/.emacs.d/el-get/.loaddefs")
  el-get-load-fast("~/.emacs.d/el-get/.loaddefs.el")
  el-get-eval-autoloads()
  (if el-get-outdated-autoloads nil (el-get-eval-autoloads))
  (unless el-get-outdated-autoloads (el-get-eval-autoloads))
  el-get(sync)

Here's the offending autoload:

(autoload 'diff-git-default-bindings "diff-git/diff-git" "\
Add bindings to the `diff-mode' keymap.

\(fn)" nil nil)

The corresponding recipe looks like this:

    (:name diff-git :type git :url "git://github.com/alanfalloon/diff-git.el.git")

but actually all the autoloads use similar relative paths.

This is with the latest dev emacs, but breaks similarly in Emacs 22.

plist merging apparently not working?

Doc sez:

If your property list is missing the :type property, then it's merged with the recipe one, so that you can override any definition provided by `el-get' recipes locally.

But with this plist:

(:name org-mode
       :build `,(mapcar 
                 (lambda (target) 
                   (concat "make " target " EMACS=" invocation-directory invocation-name))
                 '("clean" "all" "doc"))
)

I'm getting this backtrace:

Debugger entered--Lisp error: (void-function nil)
  nil("org-mode" nil el-get-post-install)
  funcall(nil "org-mode" nil el-get-post-install)
  (let* ((source ...) (method ...) (install ...) (url ...)) (el-get-check-init) (el-get-save-package-status package "required") (funcall install package url (quote el-get-post-install)) (message "el-get install %s" package))
  (let ((el-get-sources ...)) (el-get-error-unless-package-p package) (let (...) (when ... ...) (when ... ...)) (let* (... ... ... ...) (el-get-check-init) (el-get-save-package-status package "required") (funcall install package url ...) (message "el-get install %s" package)))
  el-get-install("org-mode")
  (if (el-get-package-exists-p package) (if (and status ...) (condition-case err ... ...) (message "Package %s failed to install, remove it first." package)) (el-get-install package))
  (let* ((package ...) (status ...)) (if (el-get-package-exists-p package) (if ... ... ...) (el-get-install package)))
  (lambda (source) (let* (... ...) (if ... ... ...)))(org-mode)
  mapcar((lambda (source) (let* (... ...) (if ... ... ...))) (apel auto-complete bbdb emacs-w3m flim magit org-mode semi wanderlust))
  (prog1 (mapcar (lambda ... ...) el-get-sources) (when progress (while ... ... ... ...) (progress-reporter-done progress)))
  (let* ((p-status ...) (total ...) (installed ...) (progress ...) (el-get-default-process-sync ...)) (prog1 (mapcar ... el-get-sources) (when progress ... ...)))
  el-get(sync)
  (if (or t el-get-newly-installed) (el-get (quote sync)) (el-get))
  (let ((el-get-newly-installed)) (condition-case nil (require ...) (error ... ... ... ... ...)) (add-to-list (quote el-get-recipe-path) "~/.emacs.d/elhome/el-get-recipes") (setq el-get-sources (quote ...)) (if (or t el-get-newly-installed) (el-get ...) (el-get)))
  eval-buffer(#> nil "/Users/dave/Dropbox/home/.emacs.d/elhome/init.d/20-el-get.el" nil t)  ; Reading at buffer position 1294
  load-with-code-conversion("/Users/dave/Dropbox/home/.emacs.d/elhome/init.d/20-el-get.el" "/Users/dave/Dropbox/home/.emacs.d/elhome/init.d/20-el-get.el" nil nil)
  load("/Users/dave/Dropbox/home/.emacs.d/elhome/init.d/20-el-get")
  mapc(load ("/Users/dave/Dropbox/home/.emacs.d/elhome/init.d/00-essentials" "/Users/dave/Dropbox/home/.emacs.d/elhome/init.d/10-initsplit" "/Users/dave/Dropbox/home/.emacs.d/elhome/init.d/20-el-get" "/Users/dave/Dropbox/home/.emacs.d/elhome/init.d/99-byte-code-cache"))
  elhome-init()
  eval-buffer(# nil "/Users/dave/Dropbox/home/.emacs.d/init.el" nil t)  ; Reading at buffer position 5490
  load-with-code-conversion("/Users/dave/Dropbox/home/.emacs.d/init.el" "/Users/dave/Dropbox/home/.emacs.d/init.el" t t)
  load("/Users/dave/Dropbox/home/.emacs.d/init" t t)
  #[nil "�\205\264

el-get installation procedure needs to require bytecomp

Otherwise, we get:

Debugger entered--Lisp error: (void-variable byte-compile-verbose)
  byte-compile-file("~/.emacs.d/el-get/el-get/el-get.el")
  el-get-byte-compile-file("~/.emacs.d/el-get/el-get" "el-get.el")
  el-get-init("el-get")
  (progn (setq default-directory (file-name-as-directory "/Users/dave/Dropbox/home/.emacs.d/el-get/el-get")) (setq el-get-sources (quote ...)) (load (concat ... "el-get" ".el")) (el-get-init "el-get") (with-current-buffer (process-buffer proc) (goto-char ...) (insert "\nCongrats, el-get is installed and ready to serve!")))
  (if (eq (process-status proc) (quote exit)) (progn (setq default-directory ...) (setq el-get-sources ...) (load ...) (el-get-init "el-get") (with-current-buffer ... ... ...)))
  (when (eq (process-status proc) (quote exit)) (setq default-directory (file-name-as-directory "/Users/dave/Dropbox/home/.emacs.d/el-get/el-get")) (setq el-get-sources (quote ...)) (load (concat ... "el-get" ".el")) (el-get-init "el-get") (with-current-buffer (process-buffer proc) (goto-char ...) (insert "\nCongrats, el-get is installed and ready to serve!")))
  (lambda (proc change) (when (eq ... ...) (setq default-directory ...) (setq el-get-sources ...) (load ...) (el-get-init "el-get") (with-current-buffer ... ... ...)))(# "exited abnormally with code 128\n")

Feature request: compile-exclude, regexp omit buggy or non-platform .el files

Some recipes which require a build step would also work if certain .el files were not byte compiled. The family of recipes I have in mind are wanderlust its dependencies, some of which are quite old. After inquiring on the wanderlust lists, I was informed that the .el files which reference these might never be used on certain platforms of newer versions of emacs.

This capability would also be useful with large packages under active development, where a bug is introduced in some file, but it's not a showstopper, and you'd like to keep using the package (or el-get install it today).

Thanks.

Feature request: download URL as alternative to SCM checkouts

el-get fails when a recipe uses a SCM method for which the binary tool is not installed (and the error message is not very helpful).
A fall back HTTP method URL would be useful in case the user cannot/does not want to install yet another SCM tool.

Recipe override should be able to set type

Great. Seems to me that recipe override might easily need to set the type. For example, if I fork some cvs-based package to github and make some modifications that haven't been accepted upstream yet, I want to change the type and the URL, and nothing else. In fact, I'm pretty sure that's about to happen for me with wanderlust, in fact.

no-conversion is needed under Windows

diff --git a/el-get.el b/el-get.el
index d924bf4..b9d1415 100644
--- a/el-get.el
+++ b/el-get.el
@@ -1151,6 +1151,7 @@ PACKAGE isn't currently installed by ELPA."
     (re-search-forward "^$" nil 'move)
     (forward-char)
     (delete-region (point-min) (point))
+    (setq buffer-file-coding-system 'no-conversion)
     (write-file part)
     (when (file-exists-p dest)
       (delete-file dest))

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.