From: Ted Zlatanov Date: Mon, 9 Dec 2013 21:35:26 +0000 (-0500) Subject: Add keyword buttons to package description. X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~492 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a81fc7ba9329a21a449d4f1e81228ba26841f317;p=emacs.git Add keyword buttons to package description. * emacs-lisp/package.el: Require finder.el. (describe-package-1): Add keyword buttons. (package-make-button): New convenience function. (package-keyword-button-action): Keyword button action using `finder-list-matches' --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8a4cff949ab..4f294267d36 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2013-12-09 Teodor Zlatanov + + * emacs-lisp/package.el: Require finder.el. + (describe-package-1): Add keyword buttons. + (package-make-button): New convenience function. + (package-keyword-button-action): Keyword button action using + `finder-list-matches' + 2013-12-09 Eli Zaretskii * autorevert.el (auto-revert-notify-add-watch): Fix a thinko in diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 853c83e2fa2..4c1d67643fd 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -7,7 +7,7 @@ ;; Created: 10 Mar 2007 ;; Version: 1.0.1 ;; Keywords: tools -;; Package-Requires: ((tabulated-list "1.0")) +;; Package-Requires: ((tabulated-list "1.0") (finder)) ;; This file is part of GNU Emacs. @@ -166,6 +166,7 @@ (eval-when-compile (require 'cl-lib)) (require 'tabulated-list) +(require 'finder) (defgroup package nil "Manager for Emacs Lisp packages." @@ -1353,7 +1354,9 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." (reqs (if desc (package-desc-reqs desc))) (version (if desc (package-desc-version desc))) (archive (if desc (package-desc-archive desc))) - (homepage (if desc (cdr (assoc :url (package-desc-extras desc))))) + (extras (and desc (package-desc-extras desc))) + (homepage (cdr (assoc :url extras))) + (keywords (cdr (assoc :keywords extras))) (built-in (eq pkg-dir 'builtin)) (installable (and archive (not built-in))) (status (if desc (package-desc-status desc) "orphan")) @@ -1392,15 +1395,10 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." (insert (capitalize status)) (insert " from " (format "%s" archive)) (insert " -- ") - (let ((button-text (if (display-graphic-p) "Install" "[Install]")) - (button-face (if (display-graphic-p) - '(:box (:line-width 2 :color "dark grey") - :background "light grey" - :foreground "black") - 'link))) - (insert-text-button button-text 'face button-face 'follow-link t - 'package-desc desc - 'action 'package-install-button-action))) + (package-make-button + "Install" + 'action 'package-install-button-action + 'package-desc desc)) (t (insert (capitalize status) "."))) (insert "\n") (insert " " (propertize "Archive" 'font-lock-face 'bold) @@ -1433,6 +1431,15 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." (insert " " (propertize "Homepage" 'font-lock-face 'bold) ": ") (help-insert-xref-button homepage 'help-url homepage) (insert "\n")) + (when keywords + (insert " " (propertize "Keywords" 'font-lock-face 'bold) ": ") + (dolist (k keywords) + (package-make-button + k + 'package-keyword k + 'action 'package-keyword-button-action) + (insert " ")) + (insert "\n")) (let* ((all-pkgs (append (cdr (assq name package-alist)) (cdr (assq name package-archive-contents)) (let ((bi (assq name package--builtins))) @@ -1503,6 +1510,20 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." (revert-buffer nil t) (goto-char (point-min))))) +(defun package-keyword-button-action (button) + (let ((pkg-keyword (button-get button 'package-keyword))) + (finder-list-matches pkg-keyword))) + +(defun package-make-button (text &rest props) + (let ((button-text (if (display-graphic-p) text (concat "[" text "]"))) + (button-face (if (display-graphic-p) + '(:box (:line-width 2 :color "dark grey") + :background "light grey" + :foreground "black") + 'link))) + (apply 'insert-text-button button-text 'face button-face 'follow-link t + props))) + ;;;; Package menu mode.