Working prototype.

This commit is contained in:
larstvei 2014-11-14 00:21:29 +01:00
parent b9995ddd04
commit 9216930082

39
try.el
View File

@ -4,18 +4,8 @@
(defvar try-tmp-dir "/tmp/") (defvar try-tmp-dir "/tmp/")
(defun try-newest-package-installed-p (package)
"Return true if the newest available PACKAGE is installed."
(when (package-installed-p package)
(let* ((local-pkg-desc (or (assq package package-alist)
(assq package package--builtins)))
(newest-pkg-desc (assq package package-archive-contents)))
(and local-pkg-desc newest-pkg-desc
(version-list-= (package-desc-vers (cdr local-pkg-desc))
(package-desc-vers (cdr newest-pkg-desc)))))))
(defun try-raw-link-p (url) (defun try-raw-link-p (url)
"Returns non-nil if this looks like an URL to a .el file."
(string-match-p "[^:]*://\\([^?\r\n]+\\).*\.el?$" url)) (string-match-p "[^:]*://\\([^?\r\n]+\\).*\.el?$" url))
(defun try-raw-link (url) (defun try-raw-link (url)
@ -23,32 +13,31 @@
(condition-case nil (condition-case nil
(progn (progn
(eval-region (search-forward-regexp "^$") (point-max)) (eval-region (search-forward-regexp "^$") (point-max))
(message "Trying!")) (let ((str (car (last (split-string url "/")))))
(message "Trying %s!" str)))
((debug error) ((debug error)
(message "Could not parse %s" url) nil)))) (message "Could not parse %s" url) nil))))
(defun try-compose (f g) (defun try-compose (f g)
"Compose two functions."
(lambda (&rest x) (funcall f (apply g x)))) (lambda (&rest x) (funcall f (apply g x))))
(defun try-package (package)
(unless package--initialized
(package-initialize t))
(unless package-archive-contents
(package-refresh-contents))
(if (try-newest-package-installed-p package)
(message "Already installed.")
(message "Trying %s!" (symbol-name package))
t))
(defun try () (defun try ()
"Takes an URL to a .el-file, and evaluates it." "Try out a package from your `package-archives' or pass a URL
to a raw .el file. Packages are stored in `try-tmp-dir' and raw
.el files are not stored at all."
(interactive) (interactive)
(let ((url-or-package (completing-read (let ((url-or-package (completing-read
"url or package: " "url or package: "
(mapcar (try-compose 'symbol-name 'car) (mapcar (try-compose 'symbol-name 'car)
package-archive-contents)))) package-archive-contents))))
(cond ((try-raw-link-p url-or-package) (try-raw-link url-or-package)) (cond ((try-raw-link-p url-or-package) (try-raw-link url-or-package))
((try-package (intern url-or-package))) ((assq (intern url-or-package) package-archive-contents)
(t (message "Couldn't find a sensible way to try this."))))) (let ((package-user-dir try-tmp-dir)
(package-alist nil))
(package-install (intern url-or-package))
(message "Trying %s!" url-or-package)))
(t (message (concat "Couldn't find a sensible way to try this. "
"Try running `package-refresh-contents'!"))))))
(provide 'try) (provide 'try)