Function: package--remove-hidden
package--remove-hidden is a byte-compiled function defined in
package.el.gz.
Signature
(package--remove-hidden PKG-LIST)
Documentation
Filter PKG-LIST according to package-archive-priorities.
PKG-LIST must be a list of package-desc objects, all with the
same name, sorted by decreasing package-desc-priority-version.
Return a list of packages tied for the highest priority according
to their archives.
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/package.el.gz
(defun package--remove-hidden (pkg-list)
"Filter PKG-LIST according to `package-archive-priorities'.
PKG-LIST must be a list of `package-desc' objects, all with the
same name, sorted by decreasing `package-desc-priority-version'.
Return a list of packages tied for the highest priority according
to their archives."
(when pkg-list
;; Variable toggled with `package-menu-toggle-hiding'.
(if (not package-menu--hide-packages)
pkg-list
(let ((installed (cadr (assq (package-desc-name (car pkg-list))
package-alist))))
(when installed
(setq pkg-list
(let ((ins-version (package-desc-version installed)))
(cl-remove-if (lambda (p) (version-list-< (package-desc-version p)
ins-version))
pkg-list))))
(let ((filtered-by-priority
(cond
((not package-menu-hide-low-priority)
pkg-list)
((eq package-menu-hide-low-priority 'archive)
(let (max-priority out)
(while pkg-list
(let ((p (pop pkg-list)))
(let ((priority (package-desc-priority p)))
(if (and max-priority (< priority max-priority))
(setq pkg-list nil)
(push p out)
(setq max-priority priority)))))
(nreverse out)))
(pkg-list
(list (car pkg-list))))))
(if (not installed)
filtered-by-priority
(let ((ins-version (package-desc-version installed)))
(cl-remove-if (lambda (p) (or (version-list-= (package-desc-version p)
ins-version)
(package-vc-p installed)))
filtered-by-priority))))))))