有时,在 list-packages 页面,更新 packages 后,用 magit 会出现问题。
大概是说 upstream 的 symbol 不对还是啥,总之 magit-status 的功能不 work 了。就算关闭 emacs,再重新打开依然不行。
可行的办法,就是将 magit 移除 (package-delete),然后重启 emacs,它会重新装 magit,这个时候就恢复正常了。
但是我需要每次都用 package-delete 去删除magit,以及相关依赖,再重启 emacs,相当麻烦。
于是想,既然重装 magit 就行,那是否可以写一个函数,完成 magit 的卸载和重装?
然后就写了下面的函数,逻辑是把我知道的依赖包列出来,然后一个一个的调用 package-delete 删除,删除后再调用 package-install 去重新安装。
(defun spike-leung/reinstall-magit ()
"Remove magit dependences and reinstall magit."
(interactive)
(let ((remove-packages '(magit-todos github-clone forge magit)))
(progn
(while remove-packages
(let ((package (car remove-packages)))
(if (assq package package-alist)
(package-delete (package-get-descriptor package))))
(setq remove-packages (cdr remove-packages)))
)))
;; (let ((install-packages) '(magit github-clone forge))
;; (while install-packages
;; (package-install (car install-packages))
;; (setq install-packages (cdr install-packages));
;; ))
但是,这样也是不行。删除是能够删除,在文件目录中,maigt 的文件已经删除了,但 magit 注册在 emacs 里的函数依然可以用。
我想请问,有什么办法可以删除 magit,并且把 magit 注册的函数一并删除吗?是否有相关的 elisp 函数?
或者,有没有什么办法,在不重启 emacs 的前提下, 把一个 package 以及它注册的函数全部删除?
我对 elisp 还不是很熟,也许有什么内置函数?(不太清楚怎么找到有什么函数可用= =)