Function: pcomplete/tar

pcomplete/tar is an autoloaded and byte-compiled function defined in pcmpl-gnu.el.gz.

Signature

(pcomplete/tar)

Documentation

Completion for the GNU tar utility.

Source Code

;; Defined in /usr/src/emacs/lisp/pcmpl-gnu.el.gz
;;;###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)
    (while (pcomplete-match "^-" 0)
      (setq saw-option t)
      (if (pcomplete-match "^--" 0)
          (if (pcomplete-match "^--\\([^= \t\n\f]*\\)\\'" 0)
              ;; FIXME: Extract this list from "tar --help".
              (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 "\\`-\\'" 0)
        (pcomplete-here*))
       ((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)))))
    (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))
    (while (pcomplete-here
	    (if (and complete-within
                     (let* ((fa (file-attributes (pcomplete-arg 1)))
                            (size (file-attribute-size fa)))
                       (and (numberp size)
                            (or (null large-file-warning-threshold)
                                (< size large-file-warning-threshold)))))
                (let ((file (pcomplete-arg 1)))
                  (completion-table-dynamic
                   (lambda (_string)
                     (pcmpl-gnu-with-file-buffer
                      file (mapcar #'tar-header-name tar-parse-info)))))
	      (pcomplete-entries))
	    nil #'identity))))