package-autoremoveはどのパッケージを削除するかをどのように決定しますか?


11

現在のパッケージを更新してpackage-autoremoveを実行するように要求されると、古いパッケージや不要なパッケージを削除するように要求されることがよくあります。ただし、私が使用する2つのパッケージ(つまり、これらの古いパッケージとともに)は常に削除されているようです(つまり、aurora-theme、私の現在の選択テーマであり、dired +)。

私はEmacs-Lispに関しては初心者だと思います。パッケージの自動削除を停止して、これらのパッケージを削除する方法があるので、再インストールを続ける必要がないのではないかと思っていました。

回答:


7

ソースはこちらです:https://github.com/emacs-mirror/emacs/blob/master/lisp/emacs-lisp/package.el#L2113

package-selected-packagesにも依存関係にもないすべてのパッケージを削除します。

(defun package-autoremove ()
"Remove packages that are no more needed.
        Packages that are no more needed by other packages in
        `package-selected-packages' and their dependencies
        will be deleted."
(interactive)
;; If `package-selected-packages' is nil, it would make no sense to
;; try to populate it here, because then `package-autoremove' will
;; do absolutely nothing.
(when (or package-selected-packages
            (yes-or-no-p
            (format-message
            "`package-selected-packages' is empty! Really remove ALL packages? ")))
    (let ((removable (package--removable-packages)))
    (if removable
        (when (y-or-n-p
                (format "%s packages will be deleted:\n%s, proceed? "
                        (length removable)
                        (mapconcat #'symbol-name removable ", ")))
            (mapc (lambda (p)
                    (package-delete (cadr (assq p package-alist)) t))
                removable))
        (message "Nothing to autoremove")))))

(defun package--removable-packages ()
  "Return a list of names of packages no longer needed.
These are packages which are neither contained in
`package-selected-packages' nor a dependency of one that is."
  (let ((needed (cl-loop for p in package-selected-packages
                         if (assq p package-alist)
                         ;; `p' and its dependencies are needed.
                         append (cons p (package--get-deps p)))))
    (cl-loop for p in (mapcar #'car package-alist)
             unless (memq p needed)
             collect p)))

1
したがって、このコードは、パッケージ名がに追加された場合、package-selected-packages自動削除されないことを意味します。
zck 2015年

@zckはい。パッケージ--removable-packagesはそれをしました。
jiegec 2015年

またpackage-selected-packages、パッケージをインストールおよび削除すると自動的に更新されることにも注意してください。通常は、直接変更する必要はありません。自動的に削除されるものがある場合、それらはおそらく、インストールしたものの依存関係として取り込まれ、後で削除されたパッケージです。自動削除のサポートに加えて、この変数は、emacs設定を新しいマシンにコピーし、選択したパッケージリストのすべてをを使用してインストールする場合に使用できpackage-install-selected-packagesます。
glucas

1
@jiegec私のポイントは、あまりよく書かれていませんが、ユーザーの問題の解決策(「パッ​​ケージが自動削除されないようにするにはどうすればよいですか」)は「パッケージをpackage-selected-packages。に追加することです」
zck

@zckはい。あなたは正しい
jiegec 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.