anchor.diff:     :test #'equal))
   
   (define-key *global-keymap* (kbd "M-/") 'abbrev)
  -(let ((save-words))
  -  (define-command abbrev () ()
  -    (let ((first nil))
  -      (unless (continue-flag :abbrev) (setq first t))
  -      (if first
  -          (let ((src-word (preceding-word)))
  -            (setq *abbrev-save-word* src-word)
  -            (setq save-words
  -                  (setq *abbrev-words*
  -                        (scan-all-buffer-words src-word)))
  -            (unless save-words
  -              (setq *abbrev-words* (list src-word))
  -              (setq save-words *abbrev-words*))
  -            (delete-char (- (length src-word)) nil)
  -            (insert-string (pop save-words)))
  -          (let ((src-word (preceding-word)))
  -            (unless save-words
  -              (setq save-words *abbrev-words*))
  -            (let ((dst-word (pop save-words)))
  -              (delete-char (- (length src-word)) t)
  -              (insert-string dst-word)))))))
  +(define-command abbrev () ()
  +  (let ((src-word (preceding-word)))
  +    (let ((words (scan-all-buffer-words src-word)))
  +      (start-completion (lambda (str)
  +                          (completion str words))
  +                        src-word))))
  
positive.code:   (:use :cl :lem)
    (:export :abbrev))
  (in-package :lem.abbrev)
  
  (add-continue-flag :abbrev)
  
  (defun preceding-word ()
    (let ((chars))
  
negative.code:                            j)))
                words)))
      (nreverse words)))
  
  (defun scan-buffer-words (buffer word)
    (let ((words))
  