X-Git-Url: https://code.delx.au/gnu-emacs-elpa/blobdiff_plain/b8a46cb0a540bea942cc59d0664c8f73268366e0..be54382cca73c2a64f3bd2720a2332649541bbd5:/packages/ack/pcmpl-ack.el diff --git a/packages/ack/pcmpl-ack.el b/packages/ack/pcmpl-ack.el index 30293673d..315eb0493 100644 --- a/packages/ack/pcmpl-ack.el +++ b/packages/ack/pcmpl-ack.el @@ -1,6 +1,6 @@ -;;; pcmpl-ack.el --- completion for ack -*- lexical-binding: t; -*- +;;; pcmpl-ack.el --- completion for ack and ag -*- lexical-binding: t; -*- -;; Copyright (C) 2012-2013 Free Software Foundation, Inc. +;; Copyright (C) 2012-2015 Free Software Foundation, Inc. ;; Author: Leo Liu ;; Keywords: tools, processes, convenience @@ -27,6 +27,7 @@ ;; ;; Install: ;; (autoload 'pcomplete/ack "pcmpl-ack") +;; (autoload 'pcomplete/ag "pcmpl-ack") ;; ;; Usage: ;; - To complete short options type '-' first @@ -137,5 +138,39 @@ long options." ;;;###autoload (defalias 'pcomplete/ack-grep 'pcomplete/ack) +(defvar pcmpl-ack-ag-options nil) + +(defun pcmpl-ack-ag-options () + (or pcmpl-ack-ag-options + (setq pcmpl-ack-ag-options + (with-temp-buffer + (when (zerop (call-process "ag" nil t nil "--help")) + (let (short long) + (goto-char (point-min)) + (while (re-search-forward "^ +\\(-[a-zA-Z]\\) " nil t) + (push (match-string 1) short)) + (goto-char (point-min)) + (while (re-search-forward + "^ +\\(?:-[a-zA-Z] \\)?\\(--\\(\\[no\\]\\)?[^ \t\n]+\\) " + nil t) + (if (match-string 2) + (progn + (replace-match "" nil nil nil 2) + (push (match-string 1) long) + (replace-match "no" nil nil nil 2) + (push (match-string 1) long)) + (push (match-string 1) long))) + (list (cons 'short (nreverse short)) + (cons 'long (nreverse long))))))))) + +;;;###autoload +(defun pcomplete/ag () + "Completion for the `ag' command." + (while t + (if (pcomplete-match "^-" 0) + (pcomplete-here* (cdr (assq (if (pcomplete-match "^--" 0) 'long 'short) + (pcmpl-ack-ag-options)))) + (pcomplete-here* (pcomplete-dirs-or-entries))))) + (provide 'pcmpl-ack) ;;; pcmpl-ack.el ends here