回答:
私はこれがあなたが望むものかどうかわかりません(「特定の条件下」であなたが何を意味するのかわかりません)が、ここに私は*Packages*
バッファを表示せずにすべてのパッケージをアップグレードするために使用する関数がありますパッケージをアップグレードします。
(defun package-upgrade-all ()
"Upgrade all packages automatically without showing *Packages* buffer."
(interactive)
(package-refresh-contents)
(let (upgrades)
(cl-flet ((get-version (name where)
(let ((pkg (cadr (assq name where))))
(when pkg
(package-desc-version pkg)))))
(dolist (package (mapcar #'car package-alist))
(let ((in-archive (get-version package package-archive-contents)))
(when (and in-archive
(version-list-< (get-version package package-alist)
in-archive))
(push (cadr (assq package package-archive-contents))
upgrades)))))
(if upgrades
(when (yes-or-no-p
(message "Upgrade %d package%s (%s)? "
(length upgrades)
(if (= (length upgrades) 1) "" "s")
(mapconcat #'package-desc-full-name upgrades ", ")))
(save-window-excursion
(dolist (package-desc upgrades)
(let ((old-package (cadr (assq (package-desc-name package-desc)
package-alist))))
(package-install package-desc)
(package-delete old-package)))))
(message "All packages are up to date"))))
これはよく試されています。また、コンパイルバッファがポップアップするのを防ぎます。
(y-or-n-p (message ..))
ただの代わりにあなたがする特別な理由はあります(y-or-n-p ...)
か?
message
行うことができますformat
。
format
。明らかに、文字列の補間を行わずにそれを行うことはできません。
auto-package-updateを使用できます。
でインストールしM-x package-install auto-update-package
ます。という関数を提供しますauto-package-update-now
。単純なif
条件を記述して、それをに追加できます.emacs
。
(if your-condition
(auto-package-update-now))
パッケージは、自動パッケージ更新と呼ばれるようになりました。(上記のChillarの投稿へのコメントとしてそれを書くのは評判が低すぎます)。
(彼の投稿からコピーされ、この回答と統合されました):
でインストールしM-x package-install auto-package-update
ます。という関数を提供しますauto-package-update-now
。単純なif条件を記述して、それをに追加できます~/.emacs
。
(if your-condition
(auto-package-update-now))
paradox
をに置き換えますpackage
)。