Last Modified:
elpa形式じゃない野良elispをpackage-installする #Emacs
野良elispを集めたelpaリポジトリを作るのが王道なんだろうけど、面倒臭いのでお手軽にpackage-installしたい。
ソース
(defun my:package-install-from-url (url)
"URLを指定してパッケージをインストールする"
(interactive "sURL: ")
(let ((file (and (string-match "\\([a-z0-9-]+\\)\\.el" url) (match-string-no-properties 1 url))))
(with-current-buffer (url-retrieve-synchronously url)
(goto-char (point-min))
(delete-region (point-min) (search-forward "\n\n"))
(goto-char (point-min))
(setq info (cond ((ignore-errors (package-buffer-info)))
((re-search-forward "[$]Id: .+,v \\([0-9.]+\\) .*[$]" nil t)
(vector file nil (concat file " [my:package-install-from-url]") (match-string-no-properties 1) ""))
(t (vector file nil (concat file " [my:package-install-from-url]") (format-time-string "%Y%m%d") ""))))
(package-install-from-buffer info 'single)
(kill-buffer)
(dolist (package package-obsolete-alist)
(package-delete (symbol-name (car package)) (mapconcat 'int-to-string (caadr package) ".")))
(package-initialize))))
- 1ファイルで完結してるやつだけ対応。今のところ別に困ってないし。
- 一応バージョンっぽいのを少しだけがんばって取ってる。
使い方
(my:package-install-from-url "https://raw.github.com/kiwanami/emacs-calfw/master/calfw-org.el")
を評価するか、
M-x my:package-install-from-url RET https://raw.github.com/kiwanami/emacs-calfw/master/calfw-org.el
を実行する。
結果
% find ~/.emacs.d/elpa/calfw-org-20130806/
~/.emacs.d/elpa/calfw-org-20130806/
~/.emacs.d/elpa/calfw-org-20130806/calfw-org-autoloads.el
~/.emacs.d/elpa/calfw-org-20130806/calfw-org-pkg.el
~/.emacs.d/elpa/calfw-org-20130806/calfw-org-pkg.elc
~/.emacs.d/elpa/calfw-org-20130806/calfw-org.el
~/.emacs.d/elpa/calfw-org-20130806/calfw-org.elc
そんで、auto-installとかel-getとか自作インストーラーとか全部投げ捨てる(自作インストーラーは複数ファイルにも対応してたんだけどな…)。
更新履歴
- RCSなコメントから抽出するパターンのとき、パッケージ一覧でファイル名が出てないバグを直した
- インストールが終わったら古いパッケージを自動的に削除してパッケージ一覧を更新するようにした
おまけ
NTEmacsで実行したらgnutlsのエラー(落ちてしまうのでエラーログは保存してない。スクリーンショットも撮り損ねた)になって困ってたんだけど、これで直った。
あーナイス!こうした。 (eval-after-load "gnutls" '(setq gnutls-trustfiles (mapcar 'expand-file-name gnutls-trustfiles))) http://t.co/ZYFx5t07ty
— ろばりお (@robario) August 6, 2013
cygwin-mount.el
使ってるから大丈夫だと思っていたら、bin/libgnutls-28.dll(に限らず*.dll)がWindows形式のパスしか理解できず、
/usr/ssl/certs/ca-bundle.crt
が読み込めないのでc:/cygwin/usr/ssl/certs/ca-bundle.crt
にしてあげた。