Answers:
我package.el
通过首先创建两个目录pkgs
和来设置本地软件包归档文件(Emacs 24.5)local
。(名称无关紧要。)组成软件包的文件进入pkgs
,local
最终将保存您的存档。如果要使其他人可以local
使用存档,则可以使用Web服务器公开,但是过程与构建本地存档相同。
我在init.el
文件中添加了以下内容:
(require 'package)
(setq package-enable-at-startup nil)
(require 'package-x)
(defvar local-archive
(expand-file-name "local/" user-emacs-directory)
"Location of the package archive.")
(setq package-archive-upload-base local-archive)
(add-to-list 'package-archives `("local" . ,local-archive) t)
(package-initialize)
我将档案保存在.emacs.d
目录中(因此user-emacs-directory
在expand-file-name
表格中),但是您可以将其放置在任意位置。
评估之后,执行M-x package-upload-file
并输入要安装的软件包的文件名。这将在中生成一个新包local
。你会看到有三个新文件,archive-contents
,yourpackagename-version.el
,和yourpackagename-readme.txt
。现在,您应该可以M-x package-list-packages
查看列出的软件包了。运气好的话,他们将位于标记为“新”的顶部。您可以像往常一样安装该软件包,您将看到它.emacs.d/elpa
像其他任何软件包一样显示在目录中。
对于Emacs 24,这应该是开箱即用的。我不确定较早的版本。您的用户可以通过以下常规方式访问您的软件包:
(require 'package)
(setq package-enable-at-startup nil)
(add-to-list 'package-archives
'("archive" . "http://yourdomain.com/path-to-local-dir/"))
(package-initialize)
在他们的init.el
档案中。
有关如何编写程序包的信息,请参见GNU Emacs Lisp手册中的准备Lisp代码以进行分发。
M-x package-update-file
,它将.el
文件直接放在local/
dir 下。有没有一种方法来创建一个子目录,每个包,这样我们就结了local/pkg1/pkg1.el
,local/pkg2/pkg2.el
...?
elpa
目录设置你描述的方式。我真的不知道为什么local
不是。请记住,这些文件是自动生成的,因此没有人真正需要查看它们。我使用git将文件保持在版本控制下,因此将local
目录放入.gitignore
其中。我保持pkgs
目录的井井有条,并受版本控制,但这local
是事实。
local/
了吗?我希望采用分层结构,以便可以将包的URL元数据指定为;; URL: http://yourdomain.com/path-to-local-dir/pkg1
,对于不同的包,依此类推。但这没什么大不了的。我很高兴在本地的elpa上发布我的软件包。:)
local
无论如何,我不会将您的用户指向该目录。而是将它们指向原始源。
如果您想托管MELPA之类的东西,可以在MELPA Wiki上找到有关如何托管自己的MELPA实例的说明:
https://github.com/melpa/melpa/wiki/Custom-Melpa-Archive
本质上,它可以归结为:
recipes/
目录中删除所有现有配方make
。