]> git.eshelyaron.com Git - emacs.git/commitdiff
Merge from origin/emacs-27
authorGlenn Morris <rgm@gnu.org>
Sun, 7 Jun 2020 16:03:59 +0000 (09:03 -0700)
committerGlenn Morris <rgm@gnu.org>
Sun, 7 Jun 2020 16:03:59 +0000 (09:03 -0700)
35661ef943 (origin/emacs-27) Fix typo in "(elisp) Type Keywords"
1af0e95fec Gnus nnir-summary-line-format has no effect
dd366b5d3b Improve documentation of 'window-text-pixel-size'
fbd49f969e * src/xdisp.c (Fwindow_text_pixel_size): Doc fix.  (Bug#41...
d8593fd19f Minor improvements to EDE and EIEIO manuals
3916e63f9e Have Fido mode also imitate Ido mode in ignore-case options
cc35b197c7 Update package-menu-quick-help
bf09106256 Improve documentation of 'sort-subr'
73749efa13 Update Ukrainian transliteration
30a7ee505a Fix Arabic shaping when eww/shr fill the text to be rendered
7d323f07c0 Silence some byte-compiler warnings in tests
cf473e742f * test/lisp/battery-tests.el: New file.
b07e3b1d97 Improve format-spec documentation (bug#41571)

# Conflicts:
# test/lisp/emacs-lisp/package-tests.el

1  2 
doc/lispref/display.texi
doc/lispref/text.texi
doc/misc/eieio.texi
lisp/emacs-lisp/package.el
lisp/gnus/nnir.el
src/xdisp.c
test/lisp/emacs-lisp/package-tests.el
test/lisp/eshell/eshell-tests.el
test/lisp/international/ccl-tests.el
test/lisp/simple-tests.el
test/src/buffer-tests.el

Simple merge
Simple merge
Simple merge
index 6298244c399422b3e2deb7b21342a2c5286bef3e,7d6be3cf4e28a030c047a0bf14056898dc8125f2..6fc8059412534a6046f4ed0903fb1be339a9b704
@@@ -3722,189 -3699,48 +3722,192 @@@ shown.
          (select-window win)
        (switch-to-buffer buf))))
  
 +(defun package-menu--filter-by (predicate suffix)
 +  "Filter \"*Packages*\" buffer by PREDICATE and add SUFFIX to header.
 +PREDICATE is a function which will be called with one argument, a
 +`package-desc' object, and returns t if that object should be
 +listed in the Package Menu.
 +
 +SUFFIX is passed on to `package-menu--display' and is added to
 +the header line of the first column."
 +  ;; Update `tabulated-list-entries' so that it contains all
 +  ;; packages before searching.
 +  (package-menu--refresh t nil)
 +  (let (found-entries)
 +    (dolist (entry tabulated-list-entries)
 +      (when (funcall predicate (car entry))
 +        (push entry found-entries)))
 +    (if found-entries
 +        (progn
 +          (setq tabulated-list-entries found-entries)
 +          (package-menu--display t suffix))
 +      (user-error "No packages found"))))
 +
 +(defun package-menu-filter-by-archive (archive)
 +  "Filter the \"*Packages*\" buffer by ARCHIVE.
 +Display only packages from package archive ARCHIVE.
 +
 +When called interactively, prompt for ARCHIVE, which can be a
 +comma-separated string.  If ARCHIVE is empty, show all packages.
 +
 +When called from Lisp, ARCHIVE can be a string or a list of
 +strings.  If ARCHIVE is nil or the empty string, show all
 +packages."
 +  (interactive (list (completing-read-multiple
 +                      "Filter by archive (comma separated): "
 +                      (mapcar #'car package-archives))))
 +  (package--ensure-package-menu-mode)
 +  (let ((re (if (listp archive)
 +                (regexp-opt archive)
 +              archive)))
 +    (package-menu--filter-by (lambda (pkg-desc)
 +                        (let ((pkg-archive (package-desc-archive pkg-desc)))
 +                          (and pkg-archive
 +                               (string-match-p re pkg-archive))))
 +                      (concat "archive:" (if (listp archive)
 +                                             (string-join archive ",")
 +                                           archive)))))
 +
  (defun package-menu-filter-by-keyword (keyword)
    "Filter the \"*Packages*\" buffer by KEYWORD.
 -Show only those items that relate to the specified KEYWORD.
 -
 -KEYWORD can be a string or a list of strings.  If it is a list, a
 -package will be displayed if it matches any of the keywords.
 -Interactively, it is a list of strings separated by commas.
 -
 -KEYWORD can also be used to filter by status or archive name by
 -using keywords like \"arc:gnu\" and \"status:available\".
 -Statuses available include \"incompat\", \"available\",
 -\"built-in\" and \"installed\"."
 -  (interactive
 -   (list (completing-read-multiple
 -          "Keywords (comma separated): " (package-all-keywords))))
 +Display only packages with specified KEYWORD.
 +
 +When called interactively, prompt for KEYWORD, which can be a
 +comma-separated string.  If KEYWORD is empty, show all packages.
 +
 +When called from Lisp, KEYWORD can be a string or a list of
 +strings.  If KEYWORD is nil or the empty string, show all
 +packages."
 +  (interactive (list (completing-read-multiple
 +                      "Keywords (comma separated): "
 +                      (package-all-keywords))))
 +  (when (stringp keyword)
 +    (setq keyword (list keyword)))
    (package--ensure-package-menu-mode)
 -  (package-show-package-list t (if (stringp keyword)
 -                                   (list keyword)
 -                                 keyword)))
 +  (if (not keyword)
 +      (package-menu--generate t t)
 +    (package-menu--filter-by (lambda (pkg-desc)
 +                        (package--has-keyword-p pkg-desc keyword))
 +                      (concat "keyword:" (string-join keyword ",")))))
  
+ (define-obsolete-function-alias
+   'package-menu-filter #'package-menu-filter-by-keyword "27.1")
  (defun package-menu-filter-by-name (name)
 -  "Filter the \"*Packages*\" buffer by NAME.
 -Show only those items whose name matches the regular expression
 -NAME.  If NAME is nil or the empty string, show all packages."
 -  (interactive (list (read-from-minibuffer "Filter by name (regexp): ")))
 +  "Filter the \"*Packages*\" buffer by NAME regexp.
 +Display only packages with name that matches regexp NAME.
 +
 +When called interactively, prompt for NAME.
 +
 +If NAME is nil or the empty string, show all packages."
 +  (interactive (list (read-regexp "Filter by name (regexp)")))
    (package--ensure-package-menu-mode)
    (if (or (not name) (string-empty-p name))
 -      (package-show-package-list t nil)
 -    ;; Update `tabulated-list-entries' so that it contains all
 -    ;; packages before searching.
 -    (package-menu--refresh t nil)
 -    (let (matched)
 -      (dolist (entry tabulated-list-entries)
 -        (let* ((pkg-name (package-desc-name (car entry))))
 -          (when (string-match name (symbol-name pkg-name))
 -            (push pkg-name matched))))
 -      (if matched
 -          (package-show-package-list matched nil)
 -        (user-error "No packages found")))))
 +      (package-menu--generate t t)
 +    (package-menu--filter-by (lambda (pkg-desc)
 +                        (string-match-p name (symbol-name
 +                                              (package-desc-name pkg-desc))))
 +                      (format "name:%s" name))))
 +
 +(defun package-menu-filter-by-status (status)
 +  "Filter the \"*Packages*\" buffer by STATUS.
 +Display only packages with specified STATUS.
 +
 +When called interactively, prompt for STATUS, which can be a
 +comma-separated string.  If STATUS is empty, show all packages.
 +
 +When called from Lisp, STATUS can be a string or a list of
 +strings.  If STATUS is nil or the empty string, show all
 +packages."
 +  (interactive (list (completing-read "Filter by status: "
 +                                      '("avail-obso"
 +                                        "available"
 +                                        "built-in"
 +                                        "dependency"
 +                                        "disabled"
 +                                        "external"
 +                                        "held"
 +                                        "incompat"
 +                                        "installed"
 +                                        "new"
 +                                        "unsigned"))))
 +  (package--ensure-package-menu-mode)
 +  (if (or (not status) (string-empty-p status))
 +      (package-menu--generate t t)
 +    (package-menu--filter-by (lambda (pkg-desc)
 +                        (string-match-p status (package-desc-status pkg-desc)))
 +                      (format "status:%s" status))))
 +
 +(defun package-menu-filter-by-version (version predicate)
 +  "Filter the \"*Packages*\" buffer by VERSION and PREDICATE.
 +Display only packages with a matching version.
 +
 +When called interactively, prompt for one of the qualifiers `<',
 +`>' or `=', and a package version.  Show only packages that has a
 +lower (`<'), equal (`=') or higher (`>') version than the
 +specified one.
 +
 +When called from Lisp, VERSION should be a version string and
 +PREDICATE should be the symbol `=', `<' or `>'.
 +
 +If VERSION is nil or the empty string, show all packages."
 +  (interactive (let ((choice (intern
 +                              (char-to-string
 +                               (read-char-choice
 +                                "Filter by version? [Type =, <, > or q] "
 +                                '(?< ?> ?= ?q))))))
 +                 (if (eq choice 'q)
 +                     '(quit nil)
 +                   (list (read-from-minibuffer
 +                          (concat "Filter by version ("
 +                                  (pcase choice
 +                                    ('= "= equal to")
 +                                    ('< "< less than")
 +                                    ('> "> greater than"))
 +                                  "): "))
 +                         choice))))
 +  (unless (equal predicate 'quit)
 +    (if (or (not version) (string-empty-p version))
 +        (package-menu--generate t t)
 +      (package-menu--filter-by
 +       (let ((fun (pcase predicate
 +                    ('= 'version-list-=)
 +                    ('< 'version-list-<)
 +                    ('> '(lambda (a b) (not (version-list-<= a b))))
 +                    (_ (error "Unknown predicate: %s" predicate))))
 +             (ver (version-to-list version)))
 +         (lambda (pkg-desc)
 +           (funcall fun (package-desc-version pkg-desc) ver)))
 +       (format "versions:%s%s" predicate version)))))
 +
 +(defun package-menu-filter-marked ()
 +  "Filter \"*Packages*\" buffer by non-empty upgrade mark.
 +Unlike other filters, this leaves the marks intact."
 +  (interactive)
 +  (package--ensure-package-menu-mode)
 +  (widen)
 +  (let (found-entries mark pkg-id entry marks)
 +    (save-excursion
 +      (goto-char (point-min))
 +      (while (not (eobp))
 +        (setq mark (char-after))
 +        (unless (eq mark ?\s)
 +        (setq pkg-id (tabulated-list-get-id))
 +          (setq entry (package-menu--print-info-simple pkg-id))
 +        (push entry found-entries)
 +        ;; remember the mark
 +        (push (cons pkg-id mark) marks))
 +        (forward-line))
 +      (if found-entries
 +          (progn
 +            (setq tabulated-list-entries found-entries)
 +            (package-menu--display t nil)
 +          ;; redo the marks, but we must remember the marks!!
 +          (goto-char (point-min))
 +          (while (not (eobp))
 +            (setq mark (cdr (assq (tabulated-list-get-id) marks)))
 +            (tabulated-list-put-tag (char-to-string mark) t)))
 +      (user-error "No packages found")))))
  
  (defun package-menu-clear-filter ()
    "Clear any filter currently applied to the \"*Packages*\" buffer."
Simple merge
diff --cc src/xdisp.c
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge