emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/pcmpl-rpm.el [lexbind]


From: Miles Bader
Subject: [Emacs-diffs] Changes to emacs/lisp/pcmpl-rpm.el [lexbind]
Date: Tue, 14 Oct 2003 19:52:15 -0400

Index: emacs/lisp/pcmpl-rpm.el
diff -c /dev/null emacs/lisp/pcmpl-rpm.el:1.2.8.1
*** /dev/null   Tue Oct 14 19:52:15 2003
--- emacs/lisp/pcmpl-rpm.el     Tue Oct 14 19:51:20 2003
***************
*** 0 ****
--- 1,330 ----
+ ;;; pcmpl-rpm.el --- functions for dealing with rpm completions
+ 
+ ;; Copyright (C) 1999, 2000 Free Software Foundation
+ 
+ ;; This file is part of GNU Emacs.
+ 
+ ;; GNU Emacs is free software; you can redistribute it and/or modify
+ ;; it under the terms of the GNU General Public License as published by
+ ;; the Free Software Foundation; either version 2, or (at your option)
+ ;; any later version.
+ 
+ ;; GNU Emacs is distributed in the hope that it will be useful,
+ ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ ;; GNU General Public License for more details.
+ 
+ ;; You should have received a copy of the GNU General Public License
+ ;; along with GNU Emacs; see the file COPYING.  If not, write to the
+ ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ ;; Boston, MA 02111-1307, USA.
+ 
+ ;;; Commentary:
+ 
+ ;; These functions provide completion rules for RedHat's `rpm' tool.
+ 
+ ;;; Code:
+ 
+ (provide 'pcmpl-rpm)
+ 
+ (require 'pcomplete)
+ 
+ (defgroup pcmpl-rpm nil
+   "Functions for dealing with CVS completions"
+   :group 'pcomplete)
+ 
+ ;; Functions:
+ 
+ (defsubst pcmpl-rpm-packages ()
+   (split-string (pcomplete-process-result "rpm" "-q" "-a")))
+ 
+ (defun pcmpl-rpm-all-query (flag)
+   (message "Querying all packages with `%s'..." flag)
+   (let ((pkgs (pcmpl-rpm-packages))
+       (provs (list t)))
+     (while pkgs
+       (nconc provs (split-string
+                   (pcomplete-process-result
+                    "rpm" "-q" (car pkgs) flag)))
+       (setq pkgs (cdr pkgs)))
+     (pcomplete-uniqify-list (cdr provs))))
+ 
+ (defsubst pcmpl-rpm-files ()
+   (pcomplete-dirs-or-entries "\\.rpm\\'"))
+ 
+ ;;;###autoload
+ (defun pcomplete/rpm ()
+   "Completion for RedHat's `rpm' command.
+ These rules were taken from the output of `rpm --help' on a RedHat 6.1
+ system.  They follow my interpretation of what followed, but since I'm
+ not a major rpm user/builder, please send me any corrections you find.
+ You can use \\[eshell-report-bug] to do so."
+   (let (mode)
+     (while (<= pcomplete-index pcomplete-last)
+       (unless mode
+       (if (pcomplete-match "^--\\(.*\\)" 0)
+           (pcomplete-here*
+            '("--addsign"
+              "--checksig"
+              "--erase"
+              "--help"
+              "--initdb"
+              "--install"
+              "--pipe"
+              "--querytags"
+              "--rebuild"
+              "--rebuilddb"
+              "--recompile"
+              "--resign"
+              "--rmsource"
+              "--setperms"
+              "--setugids"
+              "--upgrade"
+              "--verify"
+              "--version"))
+         (pcomplete-opt "vqVyiUebtK")))
+ ;     -b<stage> <spec>
+ ;     -t<stage> <tarball>    - build package, where <stage> is one of:
+ ;       p                - prep (unpack sources and apply patches)
+ ;       l                - list check (do some cursory checks on %files)
+ ;       c                - compile (prep and compile)
+ ;       i                - install (prep, compile, install)
+ ;       b                - binary package (prep, compile, install, package)
+ ;       a                - bin/src package (prep, compile, install, package)
+       (cond
+        ((or (eq mode 'query)
+           (pcomplete-match "-[^-]*q"))
+       (setq mode 'query)
+       (if (pcomplete-match "^--\\(.*\\)" 0)
+           (progn
+             (pcomplete-here*
+              '("--changelog"
+                "--dbpath"
+                "--dump"
+                "--ftpport"            ;nyi for the next four
+                "--ftpproxy"
+                "--httpport"
+                "--httpproxy"
+                "--provides"
+                "--queryformat"
+                "--rcfile"
+                "--requires"
+                "--root"
+                "--scripts"
+                "--triggeredby"
+                "--whatprovides"
+                "--whatrequires"))
+             (cond
+              ((pcomplete-test "--dbpath")
+               (pcomplete-here* (pcomplete-dirs)))
+              ((pcomplete-test "--queryformat")
+               (pcomplete-here*))
+              ((pcomplete-test "--rcfile")
+               (pcomplete-here* (pcomplete-entries)))
+              ((pcomplete-test "--root")
+               (pcomplete-here* (pcomplete-dirs)))
+              ((pcomplete-test "--scripts")
+               (if (pcomplete-match "^--\\(.*\\)" 0)
+                   (pcomplete-here* '("--triggers"))))
+              ((pcomplete-test "--triggeredby")
+               (pcomplete-here* (pcmpl-rpm-packages)))
+              ((pcomplete-test "--whatprovides")
+               (pcomplete-here*
+                (pcmpl-rpm-all-query "--provides")))
+              ((pcomplete-test "--whatrequires")
+               (pcomplete-here*
+                (pcmpl-rpm-all-query "--requires")))))
+         (if (pcomplete-match "^-" 0)
+             (pcomplete-opt "af.p(pcmpl-rpm-files)ilsdcvR")
+           (pcomplete-here (pcmpl-rpm-packages)))))
+        ((pcomplete-test "--pipe")
+       (pcomplete-here* (funcall pcomplete-command-completion-function)))
+        ((pcomplete-test "--rmsource")
+       (pcomplete-here* (pcomplete-entries))
+       (throw 'pcomplete-completions nil))
+        ((pcomplete-match "\\`--re\\(build\\|compile\\)\\'")
+       (pcomplete-here (pcmpl-rpm-files))
+       (throw 'pcomplete-completions nil))
+        ((pcomplete-match "\\`--\\(resign\\|addsign\\)\\'")
+       (while (pcomplete-here (pcmpl-rpm-files))))
+        ((or (eq mode 'checksig)
+           (pcomplete-test "--checksig"))
+       (setq mode 'checksig)
+       (if (pcomplete-match "^--\\(.*\\)" 0)
+           (progn
+             (pcomplete-here*
+              '("--nopgp"
+                "--nogpg"
+                "--nomd5"
+                "--rcfile"))
+             (cond
+              ((pcomplete-test "--rcfile")
+               (pcomplete-here* (pcomplete-entries)))))
+         (if (pcomplete-match "^-" 0)
+             (pcomplete-opt "v")
+           (pcomplete-here (pcmpl-rpm-files)))))
+        ((or (eq mode 'rebuilddb)
+           (pcomplete-test "--rebuilddb"))
+       (setq mode 'rebuilddb)
+       (if (pcomplete-match "^--\\(.*\\)" 0)
+           (progn
+             (pcomplete-here*
+              '("--dbpath"
+                "--root"
+                "--rcfile"))
+             (cond
+              ((pcomplete-test "--dbpath")
+               (pcomplete-here* (pcomplete-dirs)))
+              ((pcomplete-test "--root")
+               (pcomplete-here* (pcomplete-dirs)))
+              ((pcomplete-test "--rcfile")
+               (pcomplete-here* (pcomplete-entries)))))
+         (if (pcomplete-match "^-" 0)
+             (pcomplete-opt "v")
+           (pcomplete-here))))
+        ((memq mode '(install upgrade))
+       (if (pcomplete-match "^--\\(.*\\)" 0)
+           (progn
+             (pcomplete-here*
+              (append
+               '("--allfiles"
+                 "--badreloc"
+                 "--dbpath"
+                 "--excludedocs"
+                 "--excludepath"
+                 "--force"
+                 "--hash"
+                 "--ignorearch"
+                 "--ignoreos"
+                 "--ignoresize"
+                 "--includedocs"
+                 "--justdb"
+                 "--nodeps"
+                 "--noorder"
+                 "--noscripts"
+                 "--notriggers")
+               (if (eq mode 'upgrade)
+                   '("--oldpackage"))
+               '("--percent"
+                 "--prefix"
+                 "--rcfile"
+                 "--relocate"
+                 "--replacefiles"
+                 "--replacepkgs"
+                 "--root")))
+             (cond
+              ((pcomplete-test "--dbpath")
+               (pcomplete-here* (pcomplete-dirs)))
+              ((pcomplete-test "--relocate")
+               (pcomplete-here*))
+              ((pcomplete-test "--rcfile")
+               (pcomplete-here* (pcomplete-entries)))
+              ((pcomplete-test "--excludepath")
+               (pcomplete-here* (pcomplete-entries)))
+              ((pcomplete-test "--root")
+               (pcomplete-here* (pcomplete-dirs)))
+              ((pcomplete-test "--prefix")
+               (pcomplete-here* (pcomplete-dirs)))))
+         (if (pcomplete-match "^-" 0)
+             (pcomplete-opt "vh")
+           (pcomplete-here (pcmpl-rpm-files)))))
+        ((or (pcomplete-test "--install")
+           (pcomplete-match "-[^-]*i"))
+       (setq mode 'install))
+        ((or (pcomplete-test "--upgrade")
+           (pcomplete-match "-[^-]*U"))
+       (setq mode 'upgrade))
+        ((or (eq mode 'erase)
+           (pcomplete-test "--erase")
+           (pcomplete-match "-[^-]*e"))
+       (setq mode 'erase)
+       (if (pcomplete-match "^--\\(.*\\)" 0)
+           (progn
+             (pcomplete-here*
+              '("--allmatches"
+                "--dbpath"
+                "--justdb"
+                "--nodeps"
+                "--noorder"
+                "--noscripts"
+                "--notriggers"
+                "--rcfile"
+                "--root"))
+             (cond
+              ((pcomplete-test "--dbpath")
+               (pcomplete-here* (pcomplete-dirs)))
+              ((pcomplete-test "--rcfile")
+               (pcomplete-here* (pcomplete-entries)))
+              ((pcomplete-test "--root")
+               (pcomplete-here* (pcomplete-dirs)))))
+         (if (pcomplete-match "^-" 0)
+             (pcomplete-opt "v")
+           (pcomplete-here (pcmpl-rpm-packages)))))
+        ((or (eq mode 'verify)
+           (pcomplete-test "--verify"))
+       (setq mode 'verify)
+       (if (pcomplete-match "^--\\(.*\\)" 0)
+           (progn
+             (pcomplete-here*
+              '("--dbpath"
+                "--nodeps"
+                "--nofiles"
+                "--nomd5"
+                "--rcfile"
+                "--root"
+                "--triggeredby"
+                "--whatprovides"
+                "--whatrequires"))
+             (cond
+              ((pcomplete-test "--dbpath")
+               (pcomplete-here* (pcomplete-dirs)))
+              ((pcomplete-test "--rcfile")
+               (pcomplete-here* (pcomplete-entries)))
+              ((pcomplete-test "--root")
+               (pcomplete-here* (pcomplete-dirs)))
+              ((pcomplete-test "--triggeredby")
+               (pcomplete-here* (pcmpl-rpm-packages)))
+              ((pcomplete-test "--whatprovides")
+               (pcomplete-here*
+                (pcmpl-rpm-all-query "--provides")))
+              ((pcomplete-test "--whatrequires")
+               (pcomplete-here*
+                (pcmpl-rpm-all-query "--requires")))))
+         (if (pcomplete-match "^-" 0)
+             (pcomplete-opt "af.p(pcmpl-rpm-files)v")
+           (pcomplete-here (pcmpl-rpm-packages)))))
+        ((or (memq mode '(build test))
+           (pcomplete-match "\\`-[bt]"))
+       (setq mode (if (pcomplete-match "\\`-b")
+                      'build
+                    'test))
+       (if (pcomplete-match "^--\\(.*\\)" 0)
+           (progn
+             (pcomplete-here*
+              '("--buildroot"
+                "--clean"
+                "--nobuild"
+                "--rcfile"
+                "--rmsource"
+                "--short-circuit"
+                "--sign"
+                "--target"
+                "--timecheck"))
+             (cond
+              ((pcomplete-test "--buildroot")
+               (pcomplete-here* (pcomplete-dirs)))
+              ((pcomplete-test "--rcfile")
+               (pcomplete-here* (pcomplete-entries)))
+              ((pcomplete-test "--timecheck")
+               (pcomplete-here*))))
+         (if (pcomplete-match "^-" 0)
+             (pcomplete-opt "v")
+           (pcomplete-here
+            (if (eq mode 'test)
+                (pcomplete-dirs-or-entries "\\.tar\\'")
+              (pcomplete-dirs-or-entries "\\.spec\\'"))))))
+        (t
+       (error "You must select a mode: -q, -i, -U, --verify, etc"))))))
+ 
+ ;;; arch-tag: 4e64b490-fecf-430e-b2b9-70a8ad64b8c1
+ ;;; pcmpl-rpm.el ends here




reply via email to

[Prev in Thread] Current Thread [Next in Thread]