mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-04 11:40:22 +00:00
* lisp/minibuffer.el (completion-table-with-context): Fix inf-loop.
Reported by Aaron S. Hawley <aaron.s.hawley@gmail.com>.
This commit is contained in:
parent
371fb83399
commit
b291b57241
@ -1,3 +1,8 @@
|
||||
2012-02-23 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* minibuffer.el (completion-table-with-context): Fix inf-loop.
|
||||
Reported by Aaron S. Hawley <aaron.s.hawley@gmail.com>.
|
||||
|
||||
2012-02-23 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* emacs-lisp/authors.el (authors-aliases, authors-fixed-case)
|
||||
|
@ -226,30 +226,31 @@ case sensitive instead."
|
||||
|
||||
(defun completion-table-with-context (prefix table string pred action)
|
||||
;; TODO: add `suffix' maybe?
|
||||
;; Notice that `pred' may not be a function in some abusive cases.
|
||||
(when (functionp pred)
|
||||
(setq pred
|
||||
;; Predicates are called differently depending on the nature of
|
||||
;; the completion table :-(
|
||||
(cond
|
||||
((vectorp table) ;Obarray.
|
||||
(lambda (sym) (funcall pred (concat prefix (symbol-name sym)))))
|
||||
((hash-table-p table)
|
||||
(lambda (s _v) (funcall pred (concat prefix s))))
|
||||
((functionp table)
|
||||
(lambda (s) (funcall pred (concat prefix s))))
|
||||
(t ;Lists and alists.
|
||||
(lambda (s)
|
||||
(funcall pred (concat prefix (if (consp s) (car s) s))))))))
|
||||
(if (eq (car-safe action) 'boundaries)
|
||||
(let* ((len (length prefix))
|
||||
(bound (completion-boundaries string table pred (cdr action))))
|
||||
(list* 'boundaries (+ (car bound) len) (cdr bound)))
|
||||
(let ((comp (complete-with-action action table string pred)))
|
||||
(cond
|
||||
;; In case of try-completion, add the prefix.
|
||||
((stringp comp) (concat prefix comp))
|
||||
(t comp)))))
|
||||
(let ((pred
|
||||
(if (not (functionp pred))
|
||||
;; Notice that `pred' may not be a function in some abusive cases.
|
||||
pred
|
||||
;; Predicates are called differently depending on the nature of
|
||||
;; the completion table :-(
|
||||
(cond
|
||||
((vectorp table) ;Obarray.
|
||||
(lambda (sym) (funcall pred (concat prefix (symbol-name sym)))))
|
||||
((hash-table-p table)
|
||||
(lambda (s _v) (funcall pred (concat prefix s))))
|
||||
((functionp table)
|
||||
(lambda (s) (funcall pred (concat prefix s))))
|
||||
(t ;Lists and alists.
|
||||
(lambda (s)
|
||||
(funcall pred (concat prefix (if (consp s) (car s) s)))))))))
|
||||
(if (eq (car-safe action) 'boundaries)
|
||||
(let* ((len (length prefix))
|
||||
(bound (completion-boundaries string table pred (cdr action))))
|
||||
(list* 'boundaries (+ (car bound) len) (cdr bound)))
|
||||
(let ((comp (complete-with-action action table string pred)))
|
||||
(cond
|
||||
;; In case of try-completion, add the prefix.
|
||||
((stringp comp) (concat prefix comp))
|
||||
(t comp))))))
|
||||
|
||||
(defun completion-table-with-terminator (terminator table string pred action)
|
||||
"Construct a completion table like TABLE but with an extra TERMINATOR.
|
||||
|
Loading…
Reference in New Issue
Block a user