diff options
author | Gerd Moellmann <gerd@gnu.org> | 2000-06-27 10:55:46 +0000 |
---|---|---|
committer | Gerd Moellmann <gerd@gnu.org> | 2000-06-27 10:55:46 +0000 |
commit | 4fa9f63662512bbf5107aafce22f1c12d292ab03 (patch) | |
tree | 2138ed07789a931625df9c2a2164a119af56a660 /lisp/pcmpl-gnu.el | |
parent | d365421f859f6c88e3dc4b610c87adaef3cb099c (diff) | |
download | emacs-4fa9f63662512bbf5107aafce22f1c12d292ab03.tar.gz |
*** empty log message ***
Diffstat (limited to 'lisp/pcmpl-gnu.el')
-rw-r--r-- | lisp/pcmpl-gnu.el | 305 |
1 files changed, 305 insertions, 0 deletions
diff --git a/lisp/pcmpl-gnu.el b/lisp/pcmpl-gnu.el new file mode 100644 index 00000000000..f390f541e25 --- /dev/null +++ b/lisp/pcmpl-gnu.el @@ -0,0 +1,305 @@ +;;; pcmpl-gnu --- completions for GNU project tools + +;; 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. + +;;; Code: + +(provide 'pcmpl-gnu) + +(require 'pcomplete) +(require 'pcmpl-unix) + +(defgroup pcmpl-gnu nil + "Completions for GNU project tools." + :group 'pcomplete) + +;; User Variables: + +(defcustom pcmpl-gnu-makefile-regexps + '("\\`Makefile\\." "\\.mak\\'") + "*A list of regexps that will match Makefile names." + :type '(repeat regexp) + :group 'pcmpl-gnu) + +;; Functions: + +;;;###autoload +(defun pcomplete/gzip () + "Completion for `gzip'." + (let ((pcomplete-help "(gzip)")) + (pcomplete-opt "cdfhlLnNqrStvV123456789") + (while (pcomplete-here + (pcmpl-gnu-zipped-files + (catch 'has-d-flag + (let ((args pcomplete-args)) + (while args + (if (string-match "\\`-.*[dt]" (car args)) + (throw 'has-d-flag t)) + (setq args (cdr args)))))))))) + +(defun pcmpl-gnu-zipped-files (unzip-p) + "Find all zipped or unzipped files: the inverse of UNZIP-P." + (pcomplete-entries + nil + (function + (lambda (entry) + (when (and (file-readable-p entry) + (file-regular-p entry)) + (let ((zipped (string-match "\\.\\(t?gz\\|\\(ta\\)?Z\\)\\'" + entry))) + (or (and unzip-p zipped) + (and (not unzip-p) (not zipped))))))))) + +;;;###autoload +(defun pcomplete/bzip2 () + "Completion for `bzip2'." + (pcomplete-opt "hdzkftcqvLVs123456789") + (while (pcomplete-here + (pcmpl-gnu-bzipped-files + (catch 'has-d-flag + (let ((args pcomplete-args)) + (while args + (if (string-match "\\`-.*[dt]" (car args)) + (throw 'has-d-flag t)) + (setq args (cdr args))))))))) + +(defun pcmpl-gnu-bzipped-files (unzip-p) + "Find all zipped or unzipped files: the inverse of UNZIP-P." + (pcomplete-entries + nil + (function + (lambda (entry) + (when (and (file-readable-p entry) + (file-regular-p entry)) + (let ((zipped (string-match "\\.\\(t?z2\\|bz2\\)\\'" entry))) + (or (and unzip-p zipped) + (and (not unzip-p) (not zipped))))))))) + +;;;###autoload +(defun pcomplete/make () + "Completion for GNU `make'." + (let ((pcomplete-help "(make)Top")) + (pcomplete-opt "bmC/def(pcmpl-gnu-makefile-names)hiI/j?kl?no.pqrsStvwW.") + (while (pcomplete-here (pcmpl-gnu-make-rule-names) nil 'identity)))) + +(defun pcmpl-gnu-makefile-names () + "Return a list of possible makefile names." + (let ((names (list t)) + (reg pcmpl-gnu-makefile-regexps)) + (while reg + (nconc names (pcomplete-entries (car reg))) + (setq reg (cdr reg))) + (cdr names))) + +(defun pcmpl-gnu-make-rule-names () + "Return a list of possible make rule names in MAKEFILE." + (let* ((minus-f (member "-f" pcomplete-args)) + (makefile (or (cadr minus-f) "Makefile")) + rules) + (if (not (file-readable-p makefile)) + (unless minus-f (list "-f")) + (with-temp-buffer + (insert-file-contents-literally makefile) + (while (re-search-forward + (concat "^\\s-*\\([^\n#%.$][^:=\n]*\\)\\s-*:[^=]") nil t) + (setq rules (append (split-string (match-string 1)) rules)))) + (pcomplete-uniqify-list rules)))) + +(defcustom pcmpl-gnu-tarfile-regexp + "\\.t\\(ar\\(\\.\\(gz\\|bz2\\|Z\\)\\)?\\|gz\\|a[zZ]\\|z2\\)\\'" + "*A regexp which matches any tar archive." + :type 'regexp + :group 'pcmpl-gnu) + +(defvar pcmpl-gnu-tar-buffer nil) + +;;;###autoload +(defun pcomplete/tar () + "Completion for the GNU tar utility." + ;; options that end in an equal sign will want further completion... + (let (saw-option complete-within) + (setq pcomplete-suffix-list (cons ?= pcomplete-suffix-list)) + (while (pcomplete-match "^-" 0) + (setq saw-option t) + (if (pcomplete-match "^--" 0) + (if (pcomplete-match "^--\\([^= \t\n\f]*\\)\\'" 0) + (pcomplete-here* + '("--absolute-names" + "--after-date=" + "--append" + "--atime-preserve" + "--backup" + "--block-number" + "--blocking-factor=" + "--catenate" + "--checkpoint" + "--compare" + "--compress" + "--concatenate" + "--confirmation" + "--create" + "--delete" + "--dereference" + "--diff" + "--directory=" + "--exclude=" + "--exclude-from=" + "--extract" + "--file=" + "--files-from=" + "--force-local" + "--get" + "--group=" + "--gzip" + "--help" + "--ignore-failed-read" + "--ignore-zeros" + "--incremental" + "--info-script=" + "--interactive" + "--keep-old-files" + "--label=" + "--list" + "--listed-incremental" + "--mode=" + "--modification-time" + "--multi-volume" + "--new-volume-script=" + "--newer=" + "--newer-mtime" + "--no-recursion" + "--null" + "--numeric-owner" + "--old-archive" + "--one-file-system" + "--owner=" + "--portability" + "--posix" + "--preserve" + "--preserve-order" + "--preserve-permissions" + "--read-full-records" + "--record-size=" + "--recursive-unlink" + "--remove-files" + "--rsh-command=" + "--same-order" + "--same-owner" + "--same-permissions" + "--sparse" + "--starting-file=" + "--suffix=" + "--tape-length=" + "--to-stdout" + "--totals" + "--uncompress" + "--ungzip" + "--unlink-first" + "--update" + "--use-compress-program=" + "--verbose" + "--verify" + "--version" + "--volno-file="))) + (pcomplete-opt "01234567ABCFGKLMNOPRSTUVWXZbcdfghiklmoprstuvwxz")) + (cond + ((pcomplete-match "\\`--after-date=" 0) + (pcomplete-here*)) + ((pcomplete-match "\\`--backup=" 0) + (pcomplete-here*)) + ((pcomplete-match "\\`--blocking-factor=" 0) + (pcomplete-here*)) + ((pcomplete-match "\\`--directory=\\(.*\\)" 0) + (pcomplete-here* (pcomplete-dirs) + (pcomplete-match-string 1 0))) + ((pcomplete-match "\\`--exclude-from=\\(.*\\)" 0) + (pcomplete-here* (pcomplete-entries) + (pcomplete-match-string 1 0))) + ((pcomplete-match "\\`--exclude=" 0) + (pcomplete-here*)) + ((pcomplete-match "\\`--\\(extract\\|list\\)\\'" 0) + (setq complete-within t)) + ((pcomplete-match "\\`--file=\\(.*\\)" 0) + (pcomplete-here* (pcomplete-dirs-or-entries pcmpl-gnu-tarfile-regexp) + (pcomplete-match-string 1 0))) + ((pcomplete-match "\\`--files-from=\\(.*\\)" 0) + (pcomplete-here* (pcomplete-entries) + (pcomplete-match-string 1 0))) + ((pcomplete-match "\\`--group=\\(.*\\)" 0) + (pcomplete-here* (pcmpl-unix-group-names) + (pcomplete-match-string 1 0))) + ((pcomplete-match "\\`--info-script=\\(.*\\)" 0) + (pcomplete-here* (pcomplete-entries) + (pcomplete-match-string 1 0))) + ((pcomplete-match "\\`--label=" 0) + (pcomplete-here*)) + ((pcomplete-match "\\`--mode=" 0) + (pcomplete-here*)) + ((pcomplete-match "\\`--new-volume-script=\\(.*\\)" 0) + (pcomplete-here* (pcomplete-entries) + (pcomplete-match-string 1 0))) + ((pcomplete-match "\\`--newer=" 0) + (pcomplete-here*)) + ((pcomplete-match "\\`--owner=\\(.*\\)" 0) + (pcomplete-here* (pcmpl-unix-user-names) + (pcomplete-match-string 1 0))) + ((pcomplete-match "\\`--record-size=" 0) + (pcomplete-here*)) + ((pcomplete-match "\\`--rsh-command=\\(.*\\)" 0) + (pcomplete-here* (funcall pcomplete-command-completion-function) + (pcomplete-match-string 1 0))) + ((pcomplete-match "\\`--starting-file=\\(.*\\)" 0) + (pcomplete-here* (pcomplete-entries) + (pcomplete-match-string 1 0))) + ((pcomplete-match "\\`--suffix=" 0) + (pcomplete-here*)) + ((pcomplete-match "\\`--tape-length=" 0) + (pcomplete-here*)) + ((pcomplete-match "\\`--use-compress-program=\\(.*\\)" 0) + (pcomplete-here* (funcall pcomplete-command-completion-function) + (pcomplete-match-string 1 0))) + ((pcomplete-match "\\`--volno-file=\\(.*\\)" 0) + (pcomplete-here* (pcomplete-entries) + (pcomplete-match-string 1 0))))) + (setq pcomplete-suffix-list (cdr pcomplete-suffix-list)) + (unless saw-option + (pcomplete-here + (mapcar 'char-to-string + (string-to-list + "01234567ABCFGIKLMNOPRSTUVWXZbcdfghiklmoprstuvwxz"))) + (if (pcomplete-match "[xt]" 'first 1) + (setq complete-within t))) + (pcomplete-here (pcomplete-dirs-or-entries pcmpl-gnu-tarfile-regexp)) + (setq pcmpl-gnu-tar-buffer (find-file-noselect (pcomplete-arg 1))) + (while (pcomplete-here + (if complete-within + (with-current-buffer pcmpl-gnu-tar-buffer + (mapcar + (function + (lambda (entry) + (tar-header-name (cdr entry)))) + tar-parse-info)) + (pcomplete-entries)) + nil 'identity)))) + +;;;###autoload +(defalias 'pcomplete/gdb 'pcomplete/xargs) + +;;; pcmpl-gnu.el ends here |