emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r104644: Use completion-at-point rath


From: Stefan Monnier
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r104644: Use completion-at-point rather than completion-in-region.
Date: Mon, 20 Jun 2011 12:02:31 -0400
User-agent: Bazaar (2.3.1)

------------------------------------------------------------
revno: 104644
committer: Stefan Monnier <address@hidden>
branch nick: trunk
timestamp: Mon 2011-06-20 12:02:31 -0400
message:
  Use completion-at-point rather than completion-in-region.
  * lisp/wid-edit.el: Use lexical scoping and move towards completion-at-point.
  (widget-complete): Use new :completion-function property.
  (widget-completions-at-point): New function.
  (default): Use :completion-function instead of :complete.
  (widget-default-completions): Rename from widget-default-complete, rewrite.
  (widget-string-complete, widget-file-complete, widget-color-complete):
  Remove functions.
  (file, symbol, function, variable, coding-system, color):
  * lisp/international/mule-cmds.el (default-input-method, charset)
  (language-info-custom-alist):
  * lisp/cus-edit.el (face): Use new property :completions.
  
  * lisp/progmodes/pascal.el (pascal-completions-at-point): New function.
  (pascal-mode): Use it.
  (pascal-mode-map): Use completion-at-point.
  (pascal-toggle-completions): Make obsolete.
  (pascal-complete-word, pascal-show-completions):
  * lisp/progmodes/octave-mod.el (octave-complete-symbol):
  Redefine as obsolete alias.
  * lisp/progmodes/octave-inf.el (inferior-octave-completion-at-point):
  Signal absence of completion info for old Octave,
  (inferior-octave-complete): Redefine as obsolete alias.
  * lisp/progmodes/meta-mode.el: Use lexical-binding and completion-at-point.
  (meta-completions-at-point): Rename from meta-complete-symbol and
  adapt it for use on completion-at-point-functions.
  (meta-common-mode): Use it.
  (meta-looking-at-backward, meta-match-buffer): Remove.
  (meta-complete-symbol): Redefine as obsolete alias.
  (meta-common-mode-map): Use completion-at-point.
  * lisp/progmodes/make-mode.el: Use lexical-binding and completion-at-point.
  (makefile-mode-map): Use completion-at-point.
  (makefile-completions-at-point): Rename from makefile-complete and
  adapt it for use on completion-at-point-functions.
  (makefile-mode): Use it.
  (makefile-complete): Redefine as obsolete alias.
modified:
  lisp/ChangeLog
  lisp/cus-edit.el
  lisp/international/mule-cmds.el
  lisp/mail/mailabbrev.el
  lisp/progmodes/make-mode.el
  lisp/progmodes/meta-mode.el
  lisp/progmodes/octave-inf.el
  lisp/progmodes/octave-mod.el
  lisp/progmodes/pascal.el
  lisp/wid-edit.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2011-06-20 12:55:24 +0000
+++ b/lisp/ChangeLog    2011-06-20 16:02:31 +0000
@@ -1,3 +1,41 @@
+2011-06-20  Stefan Monnier  <address@hidden>
+
+       * wid-edit.el: Use lexical scoping and move towards completion-at-point.
+       (widget-complete): Use new :completion-function property.
+       (widget-completions-at-point): New function.
+       (default): Use :completion-function instead of :complete.
+       (widget-default-completions): Rename from widget-default-complete, 
rewrite.
+       (widget-string-complete, widget-file-complete, widget-color-complete):
+       Remove functions.
+       (file, symbol, function, variable, coding-system, color):
+       * international/mule-cmds.el (default-input-method, charset)
+       (language-info-custom-alist):
+       * cus-edit.el (face): Use new property :completions.
+
+       * progmodes/pascal.el (pascal-completions-at-point): New function.
+       (pascal-mode): Use it.
+       (pascal-mode-map): Use completion-at-point.
+       (pascal-toggle-completions): Make obsolete.
+       (pascal-complete-word, pascal-show-completions):
+       * progmodes/octave-mod.el (octave-complete-symbol):
+       Redefine as obsolete alias.
+       * progmodes/octave-inf.el (inferior-octave-completion-at-point):
+       Signal absence of completion info for old Octave,
+       (inferior-octave-complete): Redefine as obsolete alias.
+       * progmodes/meta-mode.el: Use lexical-binding and completion-at-point.
+       (meta-completions-at-point): Rename from meta-complete-symbol and
+       adapt it for use on completion-at-point-functions.
+       (meta-common-mode): Use it.
+       (meta-looking-at-backward, meta-match-buffer): Remove.
+       (meta-complete-symbol): Redefine as obsolete alias.
+       (meta-common-mode-map): Use completion-at-point.
+       * progmodes/make-mode.el: Use lexical-binding and completion-at-point.
+       (makefile-mode-map): Use completion-at-point.
+       (makefile-completions-at-point): Rename from makefile-complete and
+       adapt it for use on completion-at-point-functions.
+       (makefile-mode): Use it.
+       (makefile-complete): Redefine as obsolete alias.
+
 2011-06-20  Deniz Dogan  <address@hidden>
 
        * net/rcirc.el: Delete trailing whitespaces once and for all.
@@ -31,8 +69,8 @@
        display-buffer-normalize-options.
        (display-buffer-normalize-alist-1): New function.
        (display-buffer-normalize-specifiers-3): Rename to
-       display-buffer-normalize-alist.  Call
-       display-buffer-normalize-alist-1.
+       display-buffer-normalize-alist.
+       Call display-buffer-normalize-alist-1.
        (display-buffer-normalize-options-inhibit): New variable.
        (display-buffer-normalize-specifiers): Rewrite calling
        display-buffer-normalize-alist,
@@ -43,8 +81,8 @@
        (window-deletable-p): Use frame-auto-delete.
        (window-list-no-nils, window-state-ignored-parameters)
        (window-state-get-1, window-state-get, window-state-put-list)
-       (window-state-put-1, window-state-put-2, window-state-put): New
-       functions.
+       (window-state-put-1, window-state-put-2, window-state-put):
+       New functions.
        (display-buffer-normalize-options): Move special-display-p group
        after pop-up-frame group (Bug#8851) and (Bug#8856).
 
@@ -71,12 +109,12 @@
 
 2011-06-18  Martin Rudalics  <address@hidden>
 
-       * window.el (display-buffer-default-specifiers): Remove
-       pop-up-frame.  Add pop-up-window-min-height,
+       * window.el (display-buffer-default-specifiers):
+       Remove pop-up-frame.  Add pop-up-window-min-height,
        pop-up-window-min-width, and another reuse-window specifier
        (Bug#8882).  Reported by Dan Nicolaescu <address@hidden>.
-       (display-buffer-normalize-specifiers-2): Handle
-       split-height-threshold and split-width-threshold also when
+       (display-buffer-normalize-specifiers-2):
+       Handle split-height-threshold and split-width-threshold also when
        pop-up-windows is unset.  Add a reuse-window specifier for the
        case popping up a new window fails.
        (special-display-popup-frame): Remove double quoting.
@@ -112,8 +150,8 @@
        (display-buffer-normalize-specifiers-2): Treat other-window case
        specially.
        (display-buffer-normalize-specifiers-3): New function.
-       (display-buffer-normalize-specifiers): Call
-       display-buffer-normalize-specifiers-3.
+       (display-buffer-normalize-specifiers):
+       Call display-buffer-normalize-specifiers-3.
 
 2011-06-17  Martin Rudalics  <address@hidden>
 
@@ -133,8 +171,8 @@
 
 2011-06-16  Martin Rudalics  <address@hidden>
 
-       * window.el (display-buffer-normalize-specifiers-1): Respect
-       current value of pop-up-frames for most reasonable values of
+       * window.el (display-buffer-normalize-specifiers-1):
+       Respect current value of pop-up-frames for most reasonable values of
        second argument of display-buffer (Bug#8865).
        (switch-to-buffer-same-frame, switch-to-buffer-other-window)
        (switch-to-buffer-other-window-same-frame)

=== modified file 'lisp/cus-edit.el'
--- a/lisp/cus-edit.el  2011-04-19 13:44:55 +0000
+++ b/lisp/cus-edit.el  2011-06-20 16:02:31 +0000
@@ -3830,9 +3830,8 @@
   :sample-face-get 'widget-face-sample-face-get
   :notify 'widget-face-notify
   :match (lambda (_widget value) (facep value))
-  :complete-function (lambda ()
-                      (interactive)
-                      (lisp-complete-symbol 'facep))
+  :completions (apply-partially #'completion-table-with-predicate
+                                obarray #'facep 'strict)
   :prompt-match 'facep
   :prompt-history 'widget-face-prompt-value-history
   :validate (lambda (widget)

=== modified file 'lisp/international/mule-cmds.el'
--- a/lisp/international/mule-cmds.el   2011-02-28 01:07:29 +0000
+++ b/lisp/international/mule-cmds.el   2011-06-20 16:02:31 +0000
@@ -1308,11 +1308,11 @@
 `toggle-input-method' (\\[toggle-input-method])."
   :link  '(custom-manual "(emacs)Input Methods")
   :group 'mule
-  :type '(choice (const nil) (string
-                             :completion-ignore-case t
-                             :complete-function widget-string-complete
-                             :completion-alist input-method-alist
-                             :prompt-history input-method-history))
+  :type '(choice (const nil)
+          (string
+           :completions (apply-partially
+                         #'completion-table-case-fold input-method-alist)
+           :prompt-history input-method-history))
   :set-after '(current-language-environment))
 
 (put 'input-method-function 'permanent-local t)
@@ -1875,10 +1875,10 @@
 (define-widget 'charset 'symbol
   "An Emacs charset."
   :tag "Charset"
-  :complete-function (lambda ()
-                      (interactive)
-                      (lisp-complete-symbol 'charsetp))
-  :completion-ignore-case t
+  :completions (apply-partially #'completion-table-with-predicate
+                                (apply-partially #'completion-table-case-fold
+                                                 obarray)
+                                #'charsetp 'strict)
   :value 'ascii
   :validate (lambda (widget)
              (unless (charsetp (widget-value widget))
@@ -1912,9 +1912,9 @@
           (set-language-environment current-language-environment)))
   :type `(alist
          :key-type (string :tag "Language environment"
-                           :completion-ignore-case t
-                           :complete-function widget-string-complete
-                           :completion-alist language-info-alist)
+                           :completions
+                            (apply-partially #'completion-table-case-fold
+                                             language-info-alist))
          :value-type
          (alist :key-type symbol
                 :options ((documentation string)
@@ -1927,9 +1927,9 @@
                           (nonascii-translation charset)
                           (input-method
                            (string
-                            :completion-ignore-case t
-                            :complete-function widget-string-complete
-                            :completion-alist input-method-alist
+                            :completions
+                             (apply-partially #'completion-table-case-fold
+                                              input-method-alist)
                             :prompt-history input-method-history))
                           (features (repeat symbol))
                           (unibyte-display coding-system)))))

=== modified file 'lisp/mail/mailabbrev.el'
--- a/lisp/mail/mailabbrev.el   2011-01-25 04:08:28 +0000
+++ b/lisp/mail/mailabbrev.el   2011-06-20 16:02:31 +0000
@@ -565,7 +565,6 @@
 
 (defun mail-abbrev-complete-alias ()
   "Perform completion on alias preceding point."
-  ;; Based on lisp.el:lisp-complete-symbol
   (interactive)
   (mail-abbrev-make-syntax-table)
   (let ((end (point))

=== modified file 'lisp/progmodes/make-mode.el'
--- a/lisp/progmodes/make-mode.el       2011-04-22 18:44:26 +0000
+++ b/lisp/progmodes/make-mode.el       2011-06-20 16:02:31 +0000
@@ -1,4 +1,4 @@
-;;; make-mode.el --- makefile editing commands for Emacs
+;;; make-mode.el --- makefile editing commands for Emacs -*- lexical-binding:t 
-*-
 
 ;; Copyright (C) 1992, 1994, 1999-2011  Free Software Foundation, Inc.
 
@@ -602,7 +602,7 @@
     (define-key map "\C-c\C-m\C-p" 'makefile-makepp-mode)
     (define-key map "\M-p"     'makefile-previous-dependency)
     (define-key map "\M-n"     'makefile-next-dependency)
-    (define-key map "\e\t"     'makefile-complete)
+    (define-key map "\e\t"     'completion-at-point)
 
     ;; Make menus.
     (define-key map [menu-bar makefile-mode]
@@ -653,7 +653,7 @@
       '(menu-item "Find Targets and Macros" makefile-pickup-everything
                  :help "Notice names of all macros and targets in Makefile"))
     (define-key map [menu-bar makefile-mode complete]
-      '(menu-item "Complete Target or Macro" makefile-complete
+      '(menu-item "Complete Target or Macro" completion-at-point
                  :help "Perform completion on Makefile construct preceding 
point"))
     (define-key map [menu-bar makefile-mode backslash]
       '(menu-item "Backslash Region" makefile-backslash-region
@@ -852,6 +852,8 @@
    List of special targets. You will be offered to complete
    on one of those in the minibuffer whenever you enter a `.'.
    at the beginning of a line in Makefile mode."
+  (add-hook 'completion-at-point-functions
+            #'makefile-completions-at-point nil t)
   (add-hook 'write-file-functions
            'makefile-warn-suspicious-lines nil t)
   (add-hook 'write-file-functions
@@ -1147,11 +1149,7 @@
 
 ;;; Completion.
 
-(defun makefile-complete ()
-  "Perform completion on Makefile construct preceding point.
-Can complete variable and target names.
-The context determines which are considered."
-  (interactive)
+(defun makefile-completions-at-point ()
   (let* ((beg (save-excursion
                (skip-chars-backward "^$(){}:#= \t\n")
                (point)))
@@ -1168,22 +1166,26 @@
                ;; Preceding "$(" or "${" means macros only.
                ((and (memq pc '(?\{ ?\())
                      (progn
-                       (setq paren (if (eq paren ?\{) ?\} ?\)))
+                       (setq paren (if (eq pc ?\{) ?\} ?\)))
                        (backward-char)
                        (= (preceding-char) ?$)))
                 t)))))
-
-         (table (apply-partially 'completion-table-with-terminator
-                                   (cond
-                                    (do-macros (or paren ""))
-                                    ((save-excursion (goto-char beg) (bolp)) 
":")
-                                    (t " "))
-                                   (append (if do-macros
-                                               '()
-                                             makefile-target-table)
-                                           makefile-macro-table))))
-    (completion-in-region beg (point) table)))
-
+         (suffix (cond
+                  (do-macros (if paren (string paren)))
+                  ((save-excursion (goto-char beg) (bolp)) ":")
+                  (t " "))))
+    (list beg (point)
+          (append (if do-macros '() makefile-target-table)
+                  makefile-macro-table)
+          :exit-function
+          (if suffix
+              (lambda (_s finished)
+                (when (memq finished '(sole finished))
+                  (if (looking-at (regexp-quote suffix))
+                      (goto-char (match-end 0))
+                    (insert suffix))))))))
+
+(define-obsolete-function-alias 'makefile-complete 'completion-at-point "24.1")
 
 
 ;; Backslashification.  Stolen from cc-mode.el.

=== modified file 'lisp/progmodes/meta-mode.el'
--- a/lisp/progmodes/meta-mode.el       2011-01-25 04:08:28 +0000
+++ b/lisp/progmodes/meta-mode.el       2011-06-20 16:02:31 +0000
@@ -1,4 +1,4 @@
-;;; meta-mode.el --- major mode for editing Metafont or MetaPost sources
+;;; meta-mode.el --- major mode for editing Metafont or MetaPost sources -*- 
lexical-binding:t -*-
 
 ;; Copyright (C) 1997, 2001-2011  Free Software Foundation, Inc.
 
@@ -471,16 +471,13 @@
   (string-lessp (car a) (car b)))
 
 
-(defun meta-complete-symbol ()
-  "Perform completion on Metafont or MetaPost symbol preceding point."
-  ;; FIXME: Use completion-at-point-functions.
-  (interactive "*")
+(defun meta-completions-at-point ()
   (let ((list meta-complete-list)
         entry)
     (while list
       (setq entry (car list)
             list (cdr list))
-      (if (meta-looking-at-backward (car entry) 200)
+      (if (looking-back (car entry) (max (point-min) (- (point) 200)))
           (setq list nil)))
     (if (numberp (nth 1 entry))
         (let* ((sub (nth 1 entry))
@@ -488,31 +485,19 @@
                (begin (match-beginning sub))
                (end (match-end sub))
                (list (funcall (nth 2 entry))))
-          (completion-in-region
-           begin end
-           (if (zerop (length close)) list
-             (apply-partially 'completion-table-with-terminator
-                              close list))))
-      (funcall (nth 1 entry)))))
-
-
-(defun meta-looking-at-backward (regexp &optional limit)
-  ;; utility function used in `meta-complete-symbol'
-  (let ((pos (point)))
-    (save-excursion
-      (and (re-search-backward
-            regexp (if limit (max (point-min) (- (point) limit))) t)
-           (eq (match-end 0) pos)))))
-
-(defun meta-match-buffer (n)
-  ;; utility function used in `meta-complete-symbol'
-  (if (match-beginning n)
-      (let ((str (buffer-substring (match-beginning n) (match-end n))))
-        (set-text-properties 0 (length str) nil str)
-        (copy-sequence str))
-    ""))
-
-
+          (list
+           begin end list
+           :exit-function
+           (unless (zerop (length close))
+             (lambda (_s finished)
+               (when (memq finished '(sole finished))
+                 (if (looking-at (regexp-quote close))
+                     (goto-char (match-end 0))
+                   (insert close)))))))
+      (nth 1 entry))))
+
+(define-obsolete-function-alias 'meta-complete-symbol
+  'completion-at-point "24.1")
 
 ;;; Indentation.
 
@@ -906,7 +891,7 @@
     (define-key map "\C-c;"     'meta-comment-region)
     (define-key map "\C-c:"     'meta-uncomment-region)
     ;; Symbol Completion:
-    (define-key map "\M-\t"     'meta-complete-symbol)
+    (define-key map "\M-\t"     'completion-at-point)
     ;; Shell Commands:
     ;; (define-key map "\C-c\C-c"  'meta-command-file)
     ;; (define-key map "\C-c\C-k"  'meta-kill-job)
@@ -935,7 +920,7 @@
        ["Uncomment Region"              meta-uncomment-region
         :active (meta-mark-active)]
        "--"
-       ["Complete Symbol"               meta-complete-symbol t]
+       ["Complete Symbol"               completion-at-point t]
 ;      "--"
 ;      ["Command on Buffer"             meta-command-file t]
 ;      ["Kill Job"                      meta-kill-job t]
@@ -994,6 +979,7 @@
 
   (set (make-local-variable 'parse-sexp-ignore-comments) t)
 
+  (add-hook 'completion-at-point-functions #'meta-completions-at-point nil t)
   (set (make-local-variable 'comment-indent-function) #'meta-comment-indent)
   (set (make-local-variable 'indent-line-function) #'meta-indent-line)
   ;; No need to define a mode-specific 'indent-region-function.

=== modified file 'lisp/progmodes/octave-inf.el'
--- a/lisp/progmodes/octave-inf.el      2011-04-25 16:29:31 +0000
+++ b/lisp/progmodes/octave-inf.el      2011-06-20 16:02:31 +0000
@@ -267,8 +267,12 @@
          (save-excursion
            (skip-syntax-backward "w_" (comint-line-beginning-position))
             (point))))
-    (cond (inferior-octave-complete-impossible nil)
-         ((eq start end) nil)
+    (cond ((eq start end) nil)
+         (inferior-octave-complete-impossible
+           (message (concat
+                     "Your Octave does not have `completion_matches'.  "
+                     "Please upgrade to version 2.X."))
+           nil)
          (t
            (list
             start end
@@ -279,19 +283,8 @@
                (sort (delete-dups inferior-octave-output-list)
                      'string-lessp))))))))
 
-(defun inferior-octave-complete ()
-  "Perform completion on the Octave symbol preceding point.
-This is implemented using the Octave command `completion_matches' which
-is NOT available with versions of Octave prior to 2.0."
-  (interactive)
-  (if inferior-octave-complete-impossible
-      (error (concat
-              "Your Octave does not have `completion_matches'.  "
-              "Please upgrade to version 2.X."))
-    (let ((data (inferior-octave-completion-at-point)))
-      (if (null data)
-          (message "Cannot complete an empty string")
-        (apply #'completion-in-region data)))))
+(define-obsolete-function-alias 'inferior-octave-complete
+  'completion-at-point "24.1")
 
 (defun inferior-octave-dynamic-list-input-ring ()
   "List the buffer's input history in a help buffer."

=== modified file 'lisp/progmodes/octave-mod.el'
--- a/lisp/progmodes/octave-mod.el      2011-04-25 16:29:31 +0000
+++ b/lisp/progmodes/octave-mod.el      2011-06-20 16:02:31 +0000
@@ -983,12 +983,8 @@
                         (setq end (point))))
     (list beg end octave-completion-alist)))
 
-(defun octave-complete-symbol ()
-  "Perform completion on Octave symbol preceding point.
-Compare that symbol against Octave's reserved words and builtin
-variables."
-  (interactive)
-  (apply 'completion-in-region (octave-completion-at-point-function)))
+(define-obsolete-function-alias 'octave-complete-symbol
+  'completion-at-point "24.1")
 
 ;;; Electric characters && friends
 

=== modified file 'lisp/progmodes/pascal.el'
--- a/lisp/progmodes/pascal.el  2011-04-29 17:34:28 +0000
+++ b/lisp/progmodes/pascal.el  2011-06-20 16:02:31 +0000
@@ -40,7 +40,6 @@
 ;;       pascal-tab-always-indent  t
 ;;       pascal-auto-endcomments   t
 ;;       pascal-auto-lineup        '(all)
-;;       pascal-toggle-completions nil
 ;;       pascal-type-keywords      '("array" "file" "packed" "char"
 ;;                                  "integer" "real" "string" "record")
 ;;       pascal-start-keywords     '("begin" "end" "function" "procedure"
@@ -79,8 +78,8 @@
     ;; These are user preferences, so not to set by default.
     ;;(define-key map "\r"       'electric-pascal-terminate-line)
     ;;(define-key map "\t"       'electric-pascal-tab)
-    (define-key map "\M-\t"    'pascal-complete-word)
-    (define-key map "\M-?"     'pascal-show-completions)
+    (define-key map "\M-\t"    'completion-at-point)
+    (define-key map "\M-?"     'completion-help-at-point)
     (define-key map "\177"     'backward-delete-char-untabify)
     (define-key map "\M-\C-h"  'pascal-mark-defun)
     (define-key map "\C-c\C-b" 'pascal-insert-block)
@@ -232,13 +231,13 @@
              (const :tag "Case statements" case))
   :group 'pascal)
 
-(defcustom pascal-toggle-completions nil
-  "*Non-nil means \\<pascal-mode-map>\\[pascal-complete-word] should try all 
possible completions one by one.
-Repeated use of \\[pascal-complete-word] will show you all of them.
+(defvar pascal-toggle-completions nil
+  "*Non-nil meant \\<pascal-mode-map>\\[pascal-complete-word] would try all 
possible completions one by one.
+Repeated use of \\[pascal-complete-word] would show you all of them.
 Normally, when there is more than one possible completion,
-it displays a list of all possible completions."
-  :type 'boolean
-  :group 'pascal)
+it displays a list of all possible completions.")
+(make-obsolete-variable 'pascal-toggle-completions
+                        'completion-cycle-threshold "24.1")
 
 (defcustom pascal-type-keywords
   '("array" "file" "packed" "char" "integer" "real" "string" "record")
@@ -303,9 +302,9 @@
   "Major mode for editing Pascal code. \\<pascal-mode-map>
 TAB indents for Pascal code.  Delete converts tabs to spaces as it moves back.
 
-\\[pascal-complete-word] completes the word around current point with respect \
+\\[completion-at-point] completes the word around current point with respect \
 to position in code
-\\[pascal-show-completions] shows all possible completions at this point.
+\\[completion-help-at-point] shows all possible completions at this point.
 
 Other useful functions are:
 
@@ -354,6 +353,7 @@
   (set (make-local-variable 'comment-start) "{")
   (set (make-local-variable 'comment-start-skip) "(\\*+ *\\|{ *")
   (set (make-local-variable 'comment-end) "}")
+  (add-hook 'completion-at-point-functions 'pascal-completions-at-point nil t)
   ;; Font lock support
   (set (make-local-variable 'font-lock-defaults)
        '(pascal-font-lock-keywords nil t))
@@ -1287,54 +1287,17 @@
 (defvar pascal-last-word-shown nil)
 (defvar pascal-last-completions nil)
 
-(defun pascal-complete-word ()
-  "Complete word at current point.
-\(See also `pascal-toggle-completions', `pascal-type-keywords',
-`pascal-start-keywords' and `pascal-separator-keywords'.)"
-  (interactive)
+(defun pascal-completions-at-point ()
   (let* ((b (save-excursion (skip-chars-backward "a-zA-Z0-9_") (point)))
         (e (save-excursion (skip-chars-forward "a-zA-Z0-9_") (point))))
-
-    ;; Toggle-completions inserts whole labels
-    (if pascal-toggle-completions
-       (let* ((pascal-str (buffer-substring b e))
-               (allcomp (if (and pascal-toggle-completions
-                                 (string= pascal-last-word-shown pascal-str))
-                            pascal-last-completions
-                          (all-completions pascal-str 'pascal-completion))))
-         ;; Update entry number in list
-         (setq pascal-last-completions allcomp
-               pascal-last-word-numb
-               (if (>= pascal-last-word-numb (1- (length allcomp)))
-                   0
-                 (1+ pascal-last-word-numb)))
-         (setq pascal-last-word-shown (elt allcomp pascal-last-word-numb))
-         ;; Display next match or same string if no match was found
-         (if allcomp
-              (progn
-                (goto-char e)
-                (insert-before-markers pascal-last-word-shown)
-                (delete-region b e))
-           (message "(No match)")))
-      ;; The other form of completion does not necessarily do that.
-      (completion-in-region b e 'pascal-completion))))
-
-(defun pascal-show-completions ()
-  "Show all possible completions at current point."
-  (interactive)
-  (let* ((b (save-excursion (skip-chars-backward "a-zA-Z0-9_") (point)))
-        (e (save-excursion (skip-chars-forward "a-zA-Z0-9_") (point)))
-        (pascal-str (buffer-substring b e))
-        (allcomp (if (and pascal-toggle-completions
-                          (string= pascal-last-word-shown pascal-str))
-                     pascal-last-completions
-                   (all-completions pascal-str 'pascal-completion))))
-    ;; Show possible completions in a temporary buffer.
-    (with-output-to-temp-buffer "*Completions*"
-      (display-completion-list allcomp pascal-str))
-    ;; Wait for a keypress. Then delete *Completion*  window
-    (momentary-string-display "" (point))
-    (delete-window (get-buffer-window (get-buffer "*Completions*")))))
+    (when (> e b)
+      (list b e #'pascal-completion))))
+
+(define-obsolete-function-alias 'pascal-complete-word
+  'completion-at-point "24.1")
+
+(define-obsolete-function-alias 'pascal-show-completions
+  'completion-help-at-point "24.1")
 
 
 (defun pascal-get-default-symbol ()

=== modified file 'lisp/wid-edit.el'
--- a/lisp/wid-edit.el  2011-05-21 02:06:11 +0000
+++ b/lisp/wid-edit.el  2011-06-20 16:02:31 +0000
@@ -1,4 +1,4 @@
-;;; wid-edit.el --- Functions for creating and using widgets 
-*-byte-compile-dynamic: t;-*-
+;;; wid-edit.el --- Functions for creating and using widgets 
-*-byte-compile-dynamic: t; lexical-binding:t -*-
 ;;
 ;; Copyright (C) 1996-1997, 1999-2011  Free Software Foundation, Inc.
 ;;
@@ -1161,10 +1161,29 @@
   "Complete content of editable field from point.
 When not inside a field, signal an error."
   (interactive)
+  (let ((data (widget-completions-at-point)))
+    (cond
+     ((functionp data) (funcall data))
+     ((consp data)
+      (let ((completion-extra-properties (nth 3 data)))
+        (completion-in-region (nth 0 data) (nth 1 data) (nth 2 data)
+                              (plist-get completion-extra-properties
+                                         :predicate))))
+     ((widget-field-find (point))
+      ;; This defaulting used to be performed in widget-default-complete, but
+      ;; it seems more appropriate here than in widget-default-completions.
+      (call-interactively 'widget-complete-field))
+     (t
+      (error "Not in an editable field")))))
+;; We may want to use widget completion in buffers where the major mode
+;; hasn't added widget-completions-at-point to completion-at-point-functions,
+;; so it's not really obsolete (yet).
+;; (make-obsolete 'widget-complete 'completion-at-point "24.1")
+
+(defun widget-completions-at-point ()
   (let ((field (widget-field-find (point))))
-    (if field
-       (widget-apply field :complete)
-      (error "Not in an editable field"))))
+    (when field
+      (widget-apply field :completions-function))))
 
 ;;; Setting up the buffer.
 
@@ -1435,7 +1454,7 @@
   :value-to-external (lambda (_widget value) value)
   :button-prefix 'widget-button-prefix
   :button-suffix 'widget-button-suffix
-  :complete 'widget-default-complete
+  :completions-function #'widget-default-completions
   :create 'widget-default-create
   :indent nil
   :offset 0
@@ -1461,13 +1480,20 @@
 
 (defvar widget--completing-widget)
 
-(defun widget-default-complete (widget)
-  "Call the value of the :complete-function property of WIDGET.
-If that does not exist, call the value of `widget-complete-field'.
-During this call, `widget--completing-widget' is bound to WIDGET."
-  (let ((widget--completing-widget widget))
-    (call-interactively (or (widget-get widget :complete-function)
-                           widget-complete-field))))
+(defun widget-default-completions (widget)
+  "Return completion data, like `completion-at-point-functions' would."
+  (let ((completions (widget-get widget :completions)))
+    (if completions
+        (list (widget-field-start widget)
+              (max (point) (widget-field-text-end widget))
+              completions)
+      (if (widget-get widget :complete)
+          (lambda () (widget-apply widget :complete))
+        (if (widget-get widget :complete-function)
+            (lambda ()
+              (let ((widget--completing-widget widget))
+                (call-interactively
+                 (widget-get widget :complete-function)))))))))
 
 (defun widget-default-create (widget)
   "Create WIDGET at point in the current buffer."
@@ -3018,20 +3044,6 @@
   :complete-function 'ispell-complete-word
   :prompt-history 'widget-string-prompt-value-history)
 
-(defun widget-string-complete ()
-  "Complete contents of string field.
-Completions are taken from the :completion-alist property of the
-widget.  If that isn't a list, it's evalled and expected to yield a list."
-  (interactive)
-  (let* ((widget widget--completing-widget)
-        (completion-ignore-case (widget-get widget :completion-ignore-case))
-        (alist (widget-get widget :completion-alist))
-        (_ (unless (listp alist)
-             (setq alist (eval alist)))))
-    (completion-in-region (widget-field-start widget)
-                          (max (point) (widget-field-text-end widget))
-                          alist)))
-
 (define-widget 'regexp 'string
   "A regular expression."
   :match 'widget-regexp-match
@@ -3059,21 +3071,13 @@
 (define-widget 'file 'string
   "A file widget.
 It reads a file name from an editable text field."
-  :complete-function 'widget-file-complete
+  :completions #'completion-file-name-table
   :prompt-value 'widget-file-prompt-value
   :format "%{%t%}: %v"
   ;; Doesn't work well with terminating newline.
   ;; :value-face 'widget-single-line-field
   :tag "File")
 
-(defun widget-file-complete ()
-  "Perform completion on file name preceding point."
-  (interactive)
-  (let ((widget widget--completing-widget))
-    (completion-in-region (widget-field-start widget)
-                         (max (point) (widget-field-text-end widget))
-                         'completion-file-name-table)))
-
 (defun widget-file-prompt-value (widget prompt value unbound)
   ;; Read file from minibuffer.
   (abbreviate-file-name
@@ -3113,7 +3117,7 @@
   :tag "Symbol"
   :format "%{%t%}: %v"
   :match (lambda (_widget value) (symbolp value))
-  :complete-function 'lisp-complete-symbol
+  :completions obarray
   :prompt-internal 'widget-symbol-prompt-internal
   :prompt-match 'symbolp
   :prompt-history 'widget-symbol-prompt-value-history
@@ -3141,9 +3145,8 @@
 
 (define-widget 'function 'restricted-sexp
   "A Lisp function."
-  :complete-function (lambda ()
-                      (interactive)
-                      (lisp-complete-symbol 'fboundp))
+  :completions (apply-partially #'completion-table-with-predicate
+                                obarray #'fboundp 'strict)
   :prompt-value 'widget-field-prompt-value
   :prompt-internal 'widget-symbol-prompt-internal
   :prompt-match 'fboundp
@@ -3165,9 +3168,8 @@
   "A Lisp variable."
   :prompt-match 'boundp
   :prompt-history 'widget-variable-prompt-value-history
-  :complete-function (lambda ()
-                      (interactive)
-                      (lisp-complete-symbol 'boundp))
+  :completions (apply-partially #'completion-table-with-predicate
+                                obarray #'boundp 'strict)
   :tag "Variable")
 
 (define-widget 'coding-system 'symbol
@@ -3178,9 +3180,8 @@
   :prompt-history 'coding-system-value-history
   :prompt-value 'widget-coding-system-prompt-value
   :action 'widget-coding-system-action
-  :complete-function (lambda ()
-                      (interactive)
-                      (lisp-complete-symbol 'coding-system-p))
+  :completions (apply-partially #'completion-table-with-predicate
+                                obarray #'coding-system-p 'strict)
   :validate (lambda (widget)
              (unless (coding-system-p (widget-value widget))
                (widget-put widget :error (format "Invalid coding system: %S"
@@ -3317,7 +3318,7 @@
     (insert (widget-apply widget :value-get))
     (goto-char (point-min))
     (let (err)
-      (condition-case data
+      (condition-case data ;Note: We get a spurious byte-compile warning here.
          (progn
            ;; Avoid a confusing end-of-file error.
            (skip-syntax-forward "\\s-")
@@ -3685,7 +3686,7 @@
   :size 10
   :tag "Color"
   :value "black"
-  :complete 'widget-color-complete
+  :completions (or facemenu-color-alist (defined-colors))
   :sample-face-get 'widget-color-sample-face-get
   :notify 'widget-color-notify
   :action 'widget-color-action)
@@ -3711,14 +3712,6 @@
               (delete-window win)))
        (pop-to-buffer ,(current-buffer))))))
 
-(defun widget-color-complete (widget)
-  "Complete the color in WIDGET."
-  (require 'facemenu)                  ; for facemenu-color-alist
-  (completion-in-region (widget-field-start widget)
-                        (max (point) (widget-field-text-end widget))
-                        (or facemenu-color-alist
-                            (sort (defined-colors) 'string-lessp))))
-
 (defun widget-color-sample-face-get (widget)
   (let* ((value (condition-case nil
                    (widget-value widget)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]