123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 |
- (require 'pcomplete)
- (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\\'"))
- (defun pcomplete/rpm ()
- "Completion for the `rpm' command."
-
- (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")))
- (cond
- ((or (eq mode 'query)
- (pcomplete-match "-[^-]*q"))
- (setq mode 'query)
- (if (pcomplete-match "^--\\(.*\\)" 0)
- (progn
- (pcomplete-here*
- '("--changelog"
- "--dbpath"
- "--dump"
- "--file"
- "--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 "--file")
- (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")
- (if (pcomplete-test "-[^-]*p" 'first 1)
- (pcomplete-here (pcmpl-rpm-files))
- (if (pcomplete-test "-[^-]*f" 'first 1)
- (pcomplete-here* (pcomplete-entries))
- (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
- (pcomplete-dirs-or-entries (if (eq mode 'test)
- "\\.tar\\'"
- "\\.spec\\'"))))))
- (t
- (error "You must select a mode: -q, -i, -U, --verify, etc"))))))
- (provide 'pcmpl-rpm)
|