我开始开发自己的Emacs环境,我有一个自定义init.el(如下所示),它从我的用户目录加载库并忽略已安装的目录。我没有在用户目录中放置任何Amusement或Mail lisp库,但它们仍然出现在自动完成列表中。这是因为它们被定义为自动加载功能。如何防止创建这些自动加载功能?我不想单独删除每个不需要的功能,因为这很麻烦和浪费。
有关不需要的功能的帮助信息;
5x5 is an interactive autoloaded Lisp function.
It is bound to <menu-bar> <tools> <games> <5x5>.
我的init.el;
(setq inhibit-defaul-init 1)
(setq load-path (list
(expand-file-name "~/.emacs.d/")
(expand-file-name "~/.emacs.d/lisp/")
(expand-file-name "~/.emacs.d/lisp/emacs-lisp/")
(expand-file-name "~/.emacs.d/lisp/eshell/")
(expand-file-name "~/.emacs.d/lisp/net/")
(expand-file-name "~/.emacs.d/lisp/nxml")
(expand-file-name "~/.emacs.d/lisp/org")
(expand-file-name "~/.emacs.d/lisp/term")
(expand-file-name "~/.emacs.d/lisp/textmodes")
(expand-file-name "~/.emacs.d/lisp/usrl")
(expand-file-name "~/.emacs.d/lisp/")
)
)
答案 0 :(得分:3)
您可以解锁自动加载的功能,方法与解除正常功能相同,这样就可以有效地从正在运行的系统中删除5x5
和其他不需要的自动加载功能,如下所示:
(mapc
(lambda (func) (fmakunbound func))
'(5x5 5x5-crack-randomly 5x5-crack-mutating-current 5x5-crack-mutating-best 5x5-crack-xor-mutate 5x5-crack))
对于自动加载的变量,您可以使用makunbound
代替fmakunbound
。
要获取可能的嫌疑人名单,您可以使用
find-library
RET loaddefs
RET occur
RET ^(autoload
RET loadhist
库可能也很有用。
修改强>
实际上,检查自动加载文件似乎是相当安全的方法,用于确定是否要消除某些内容。我相信这只适用于功能;据我所知,其他种类的自动加载对象只是由loaddef立即定义。你可以根据符号名做出假设,但我不推荐它(但是我不会做任何这个,所以YMMV)。
(defvar my-unwanted-libraries
'("5x5" "snake" "hanoi" "tetris")
"Unbind all autoloaded functions for these libraries.")
(defun my-unbind-unwanted-autoload-functions ()
"Unbind all unwanted autoloaded functions."
(interactive)
(do-symbols (symbol)
(let* ((function (and (fboundp symbol)
(symbol-function symbol)))
(file (and function
(consp function)
(eq (car function) 'autoload)
(cadr function))))
(when (and file (member file my-unwanted-libraries))
(fmakunbound symbol)))))
答案 1 :(得分:2)
由于大多数Emacs都是用Emacs Lisp编写的,并且尽可能自动加载,因此无法轻松删除为自动加载设置的功能。例如,c++-mode
是一个自动加载的函数,因此删除所有自动加载的函数会阻止您使用c++-mode
(除非您添加了自己的副本)。
可能最好的方法就是建立自己的Emacs可执行文件,并限制放入Emacs可执行文件本身的内容。记录在案here。您可以简单地删除您不想要的目录/库,然后重建。新生成的自动加载文件不包含对这些库中的函数的引用,您将全部设置。
注意:您可能无意中删除了您未意识到的Emacs使用的库。例如, M-x report-emacs-bug 使用电子邮件...
您是否有特殊原因要删除这些自动加载的功能?如果您觉得它们完成了混乱,那么您可以使用许多完成库来自定义您所看到的内容。