모든 패키지를 비 대화식으로 업그레이드


13

emacs가 특정 조건에서 모든 패키지를 자동으로 업그레이드하기를 원합니다.

가장 좋은 방법은 무엇입니까?


: 여기에 모든 오래된 패키지를 업그레이드 구경에게 명령입니다 github.com/Malabarba/paradox/blob/2.3.5/paradox.el#L165-L181은 (모두 교체 paradox로를 package).
xuchunyang

@xuchunyang 아. 나는 그렇게 나쁘지 않은 것을 본다. 당신이 대답을한다면, 나는 그것을 받아 들일 것입니다.
PythonNut

답변:


9

나는 이것이 당신이 원하는 것이 확실하지 않습니다 (“특정 조건에서”의 의미를 모르겠습니다). 그러나 여기에 *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"))))

이것은 잘 시도됩니다. 또한 컴파일 버퍼가 팝업되는 것을 방지합니다.


좋은. 패키지를 업그레이드하기 전에 확인하지 않는 약간의 변형으로 이것을 사용하려고합니다.
PythonNut

당신이 (y-or-n-p (message ..))대신 하는 특별한 이유가 (y-or-n-p ...)있습니까?
PythonNut

@PythonNut가, 그럼 난 필요가 프롬프트 메시지를 구성하기 위해, 내가 사용하는 이유를 지금은 기억하지 message, 함께 할 수있는 것 같다 format단지뿐만 아니라.
Mark Karpov

아 예. 나는을 사용하는 것을 의미했다 format. 분명히 어떤 종류의 문자열 보간 없이는 할 수 없습니다.
PythonNut

8

자동 패키지 업데이트를 사용할 수 있습니다 .

로 설치하십시오 M-x package-install auto-update-package. 라는 함수를 제공합니다 auto-package-update-now. 간단한 if조건을 작성하여에 추가 할 수 있습니다 .emacs.

(if your-condition
   (auto-package-update-now))

흠 ... 나는 이것을 명심할 것이지만, 아이디어는 패키지가 깨지면 자동으로 수정을 시도하는 것입니다. 그렇게하는 패키지에 따라 다소 무의미합니다. :-)
PythonNut

1

이제 패키지를 자동 패키지 업데이트라고합니다. (위의 Chillar 게시물에 대한 의견으로 작성하기에는 평판이 너무 낮습니다).

(자신의 게시물에서 복사 하여이 답변과 병합) :

로 설치하십시오 M-x package-install auto-package-update. 라는 함수를 제공합니다 auto-package-update-now. 간단한 if 조건을 작성하여에 추가 할 수 있습니다 ~/.emacs.

(if your-condition
   (auto-package-update-now))

패키지 이름을 수정하기 위해 Chillar의 답변을 편집했습니다. 이제 이름을 삭제할 수 있습니다.
joelittlejohn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.