summaryrefslogtreecommitdiff
path: root/lisp/pcmpl-rpm.el
diff options
context:
space:
mode:
authorGlenn Morris <rgm@gnu.org>2012-06-22 00:01:32 -0700
committerGlenn Morris <rgm@gnu.org>2012-06-22 00:01:32 -0700
commita4c8dd51c1ca62fbfc4fce54a4e90f6604d073af (patch)
tree447e9465640e0d37725144e9054eecd4bda8069c /lisp/pcmpl-rpm.el
parentd251c37c729a3c96ad10c5f6675370d371159534 (diff)
downloademacs-a4c8dd51c1ca62fbfc4fce54a4e90f6604d073af.tar.gz
Try to speed up pcomplete's calling of rpm -qa
Ref: http://lists.gnu.org/archive/html/emacs-devel/2012-04/msg00174.html * lisp/pcmpl-rpm.el (pcmpl-rpm): New group. (pcmpl-rpm-query-options): New option. (pcmpl-rpm-packages): No need to inline it. Use pcmpl-rpm-query-options.
Diffstat (limited to 'lisp/pcmpl-rpm.el')
-rw-r--r--lisp/pcmpl-rpm.el36
1 files changed, 29 insertions, 7 deletions
diff --git a/lisp/pcmpl-rpm.el b/lisp/pcmpl-rpm.el
index f28469d791b..6347666507b 100644
--- a/lisp/pcmpl-rpm.el
+++ b/lisp/pcmpl-rpm.el
@@ -27,18 +27,40 @@
(require 'pcomplete)
+(defgroup pcmpl-rpm nil
+ "Options for rpm completion."
+ :group 'pcomplete
+ :prefix "pcmpl-rpm-")
+
+;; rpm -qa can be slow. Adding --nodigest --nosignature is MUCH faster.
+(defcustom pcmpl-rpm-query-options
+ (let (opts)
+ (with-temp-buffer
+ (when (ignore-errors (call-process "rpm" nil t nil "--help"))
+ (if (search-backward "--nodigest " nil 'move)
+ (setq opts '("--nodigest")))
+ (goto-char (point-min))
+ (if (search-forward "--nosignature " nil t)
+ (push "--nosignature" opts))))
+ opts)
+ "List of extra options to add to an rpm query command."
+ :version "24.2"
+ :type '(repeat string)
+ :group 'pcmpl-rpm)
+
;; Functions:
-;; FIXME rpm -qa can be slow, so:
-;; Adding --nodigest --nosignature is MUCH faster.
-;; (Probably need to test --help for those options though.)
+;; TODO
+;; This can be slow, so:
;; Consider caching the result (cf woman).
;; Consider printing an explanatory message before running -qa.
-;;
-;; Seems pointless for this to be a defsubst.
-(defsubst pcmpl-rpm-packages ()
- (split-string (pcomplete-process-result "rpm" "-q" "-a")))
+(defun pcmpl-rpm-packages ()
+ "Return a list of all installed rpm packages."
+ (split-string (apply 'pcomplete-process-result "rpm"
+ (append '("-q" "-a") pcmpl-rpm-query-options))))
+;; Should this use pcmpl-rpm-query-options?
+;; I don't think it would speed it up at all (?).
(defun pcmpl-rpm-all-query (flag)
(message "Querying all packages with `%s'..." flag)
(let ((pkgs (pcmpl-rpm-packages))