* lisp/emacs-lisp/package.el (package-desc-keywords): New function.
authorDmitry Gutov <dgutov@yandex.ru>
Wed, 15 Jan 2014 04:58:06 +0000 (06:58 +0200)
committerDmitry Gutov <dgutov@yandex.ru>
Wed, 15 Jan 2014 04:58:06 +0000 (06:58 +0200)
(describe-package-1, package-all-keywords)
(package--has-keyword-p): Use it.

Fixes: debbugs:16222

lisp/ChangeLog
lisp/emacs-lisp/package.el

index 2f44787..5bd7245 100644 (file)
@@ -1,3 +1,10 @@
+2014-01-15  Dmitry Gutov  <dgutov@yandex.ru>
+
+       * emacs-lisp/package.el (package-desc-keywords): New function
+       (Bug#16222).
+       (describe-package-1, package-all-keywords)
+       (package--has-keyword-p): Use it.
+
 2014-01-14  Nicolas Richard  <theonewiththeevillook@yahoo.fr>
 
        * simple.el (define-alternatives): When creating the
index f22221f..465eac9 100644 (file)
@@ -332,7 +332,10 @@ contrast, `package-user-dir' contains packages for personal use."
                              (unless (memq (car rest-plist) '(:kind :archive))
                                (let ((value (cadr rest-plist)))
                                  (when value
-                                   (push (cons (car rest-plist) value)
+                                   (push (cons (car rest-plist)
+                                               (if (eq (car-safe value) 'quote)
+                                                   (cdr value)
+                                                 value))
                                          alist))))
                              (setq rest-plist (cddr rest-plist)))
                            alist)))))
@@ -384,6 +387,12 @@ Slots:
     (`tar ".tar")
     (kind (error "Unknown package kind: %s" kind))))
 
+(defun package-desc-keywords (pkg-desc)
+  (let ((keywords (assoc :keywords (package-desc-extras pkg-desc))))
+    (if (eq (car-safe keywords) 'quote)
+        (cdr keywords)
+      keywords)))
+
 ;; Package descriptor format used in finder-inf.el and package--builtins.
 (cl-defstruct (package--bi-desc
                (:constructor package-make-builtin (version summary))
@@ -1378,7 +1387,7 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages."
          (archive (if desc (package-desc-archive desc)))
          (extras (and desc (package-desc-extras desc)))
          (homepage (cdr (assoc :url extras)))
-         (keywords (cdr (assoc :keywords extras)))
+         (keywords (if desc (package-desc-keywords desc)))
          (built-in (eq pkg-dir 'builtin))
          (installable (and archive (not built-in)))
          (status (if desc (package-desc-status desc) "orphan"))
@@ -1729,7 +1738,7 @@ KEYWORDS should be nil or a list of keywords."
   (let (keywords)
     (package--mapc (lambda (desc)
                      (let* ((extras (and desc (package-desc-extras desc)))
-                            (desc-keywords (cdr (assoc :keywords extras))))
+                            (desc-keywords (and desc (package-desc-keywords desc))))
                        (setq keywords (append keywords desc-keywords)))))
     keywords))
 
@@ -1771,7 +1780,7 @@ Built-in packages are converted with `package--from-builtin'."
 When none are given, the package matches."
   (if keywords
       (let* ((extras (and desc (package-desc-extras desc)))
-             (desc-keywords (cdr (assoc :keywords extras)))
+             (desc-keywords (and desc (package-desc-keywords desc)))
              found)
         (dolist (k keywords)
           (when (and (not found)