我在使用 projectile 的时候,经常受到 project.el 的干扰。具体表现在 M-x 出来输入 proj 的时候提示的大多数函数是 project.el 的。 由于我不打算使用 project.el,请问大家能否防止 project.el 在启动的时候自动加载?
我尝试使用 unload-feature
把 project.el 去掉,但是发现 xref
依赖了 project.el
我在使用 projectile 的时候,经常受到 project.el 的干扰。具体表现在 M-x 出来输入 proj 的时候提示的大多数函数是 project.el 的。 由于我不打算使用 project.el,请问大家能否防止 project.el 在启动的时候自动加载?
我尝试使用 unload-feature
把 project.el 去掉,但是发现 xref
依赖了 project.el
(provide 'project)
这样 Emacs 就会觉得你已经加载过 project.el
我正在删除 projectile ,打算都用 project.el。
似乎不太管用?我都已经放在 early-init.el 里面了,重启之后还是会加载 project-XXX 的函数
我想起来了,当多个同名包的时候,似乎有个加载顺序可以调整,我再看看
UPDATE2: 我自己写了个 project.el
文件,在里面 (provide 'project)
,然后使用 use-package 加载。加载后使用 locate-library 'project
确实是我这个文件的路径,但是,依然有这些 autoload 的 proejct-XXX 函数出现在 M-x 里面。
也许有个workaround,用defalias全部映射到projectile?
我比较想知道怎么 override 内置包,例如我想单独升级下 org-mode 之类 。。
单独升级org是没有问题的,会先加载版本高的包。
Emacs 28 有个新特性,给 symbol put 某个 property 以后就不会出现在 M-x 里了。
autoload的函数?
是的,这些都是 autoload 的函数
大概昨天我也有这个心思,不过现在感觉要和这问题杠上了,凭啥我一定要用内置的 project.el
,我偏不 哈哈哈哈
project.el
现在功能上大部分已经接近projectile
了,现在大佬们都倾向于发展内置的project.el
,更方便和其他配置包配合(比如xref
)。
最近有人给project.el
提供了一个补丁,更方便基于当前光标下的symbol
进行项目范围内的替换, 但还没合并。[Patch] Add project.el command to replace symbol at point throughout pro
不过要求高的话还是用 projectile 功能更丰富。
既然都知道有别的包依赖它,为什么还要去掉,这不是闲得蛋疼吗。
试试最原始的办法:执行一遍所有projectile命令提高权重。
alias 那些命令一劳永逸
;; Emacs 28+
(dolist (sym '(project-search
project-other-window-command
project-vc-dir
project-display-buffer
project-dired
project-execute-extended-command
project-switch-to-buffer
project-query-replace-regexp
project-find-file
project-kill-buffers
project-forget-project
project-eshell
project-or-external-find-regexp
project-other-frame-command
project-other-tab-command
project-shell
project-find-dir
project-async-shell-command
project-compile
project-switch-project
project-shell-command
project-forget-zombie-projects
project-remember-projects-under
project-forget-projects-under
project-display-buffer-other-frame
project-or-external-find-file
project-find-regexp))
(put sym 'completion-predicate #'ignore))
这样就不会在 M-x 时显示 project.el 相关的命令了,也不会影响那些依赖 project.el 的包。
可能这就是折腾的本质
我还是希望能直接去掉 project-xxx
十分感谢!我使用的 counsel/ivy,所以直接使用你这份代码没起到作用。但是顺着你的思路,我找到了 counsel--M-x-make-predicate
函数,发现其中有检查 no-counsel-M-x
这个 property。于是我在你代码基础上,改成下面这句就成功在 counsel/ivy 里面把 project-xxx 隐藏掉了。谢谢!
(put sym 'no-counsel-M-x #'ignore)