(defgroup reftex): Update home page url-link.
[bpt/emacs.git] / lisp / pcomplete.el
index 42f4c23..0f970c5 100644 (file)
@@ -1,6 +1,7 @@
 ;;; pcomplete.el --- programmable completion
 
-;; Copyright (C) 1999, 2000,01,02,03,04 Free Sofware Foundation
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+;;   2005, 2006 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 ;; Keywords: processes abbrev
@@ -19,8 +20,8 @@
 
 ;; 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.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Commentary:
 
@@ -150,7 +151,7 @@ This mirrors the optional behavior of tcsh."
   :type 'boolean
   :group 'pcomplete)
 
-(defcustom pcomplete-suffix-list (list directory-sep-char ?:)
+(defcustom pcomplete-suffix-list (list ?/ ?:)
   "*A list of characters which constitute a proper suffix."
   :type '(repeat character)
   :group 'pcomplete)
@@ -347,12 +348,12 @@ modified to be an empty string, or the desired separation string."
 ;;; User Functions:
 
 ;;;###autoload
-(defun pcomplete ()
+(defun pcomplete (&optional interactively)
   "Support extensible programmable completion.
 To use this function, just bind the TAB key to it, or add it to your
 completion functions list (it should occur fairly early in the list)."
-  (interactive)
-  (if (and (interactive-p)
+  (interactive "p")
+  (if (and interactively
           pcomplete-cycle-completions
           pcomplete-current-completions
           (memq last-command '(pcomplete
@@ -740,7 +741,7 @@ component, `default-directory' is used as the basis for completion."
                 (function
                  (lambda (file)
                    (if (eq (aref file (1- (length file)))
-                           directory-sep-char)
+                           ?/)
                        (and pcomplete-dir-ignore
                             (string-match pcomplete-dir-ignore file))
                      (and pcomplete-file-ignore
@@ -757,11 +758,11 @@ component, `default-directory' is used as the basis for completion."
               ;; since . is earlier in the ASCII alphabet than
               ;; /
               (let ((left (if (eq (aref l (1- (length l)))
-                                  directory-sep-char)
+                                  ?/)
                               (substring l 0 (1- (length l)))
                             l))
                     (right (if (eq (aref r (1- (length r)))
-                                   directory-sep-char)
+                                   ?/)
                                (substring r 0 (1- (length r)))
                              r)))
                 (if above-cutoff
@@ -946,8 +947,10 @@ generate the completions list.  This means that the hook
 (unless (fboundp 'event-matches-key-specifier-p)
   (defalias 'event-matches-key-specifier-p 'eq))
 
-(unless (fboundp 'read-event)
-  (defsubst read-event (&optional prompt)
+(if (fboundp 'read-event)
+    (defsubst pcomplete-read-event (&optional prompt)
+      (read-event prompt))
+  (defsubst pcomplete-read-event (&optional prompt)
     (aref (read-key-sequence prompt) 0)))
 
 (unless (fboundp 'event-basic-type)
@@ -969,13 +972,15 @@ Typing SPC flushes the help buffer."
       (prog1
          (catch 'done
            (while (with-current-buffer (get-buffer "*Completions*")
-                    (setq event (read-event)))
+                    (setq event (pcomplete-read-event)))
              (cond
               ((event-matches-key-specifier-p event ? )
                (set-window-configuration pcomplete-last-window-config)
                (setq pcomplete-last-window-config nil)
                (throw 'done nil))
-              ((event-matches-key-specifier-p event 'tab)
+              ((or (event-matches-key-specifier-p event 'tab)
+                    ;; Needed on a terminal
+                    (event-matches-key-specifier-p event 9))
                (save-selected-window
                  (select-window (get-buffer-window "*Completions*"))
                  (if (pos-visible-in-window-p (point-max))
@@ -1135,7 +1140,7 @@ If specific documentation can't be given, be generic."
                    (fboundp 'Info-goto-node))
               (listp pcomplete-help)))
       (if (listp pcomplete-help)
-         (message (eval pcomplete-help))
+         (message "%s" (eval pcomplete-help))
        (save-window-excursion (info))
        (switch-to-buffer-other-window "*info*")
        (funcall (symbol-function 'Info-goto-node) pcomplete-help))
@@ -1147,12 +1152,6 @@ If specific documentation can't be given, be generic."
 
 ;; general utilities
 
-(defsubst pcomplete-time-less-p (t1 t2)
-  "Say whether time T1 is less than time T2."
-  (or (< (car t1) (car t2))
-      (and (= (car t1) (car t2))
-          (< (nth 1 t1) (nth 1 t2)))))
-
 (defun pcomplete-pare-list (l r &optional pred)
   "Destructively remove from list L all elements matching any in list R.
 Test is done using `equal'.