(abbrev--before-point): Use word-motion functions
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 25 Nov 2009 04:59:02 +0000 (04:59 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 25 Nov 2009 04:59:02 +0000 (04:59 +0000)
if :regexp is not specified (bug#5031).

lisp/ChangeLog
lisp/abbrev.el

index d02dbad..3049fbe 100644 (file)
@@ -1,5 +1,8 @@
 2009-11-25  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * abbrev.el (abbrev--before-point): Use word-motion functions
+       if :regexp is not specified (bug#5031).
+
        * subr.el (string-prefix-p): New function.
 
        * man.el (Man-completion-cache): New var.
index 88c87da..91c5106 100644 (file)
@@ -671,11 +671,19 @@ then ABBREV is looked up in that table only."
           (setq tables (append (abbrev-table-get table :parents) tables))
           (setq res
                 (and (or (not enable-fun) (funcall enable-fun))
-                     (looking-back (or (abbrev-table-get table :regexp)
-                                       "\\<\\(\\w+\\)\\W*")
-                                   (line-beginning-position))
-                     (setq start (match-beginning 1))
-                     (setq end   (match-end 1))
+                     (let ((re (abbrev-table-get table :regexp)))
+                       (if (null re)
+                           ;; We used to default `re' to "\\<\\(\\w+\\)\\W*"
+                           ;; but when words-include-escapes is set, that
+                           ;; is not right and fixing it is boring.
+                           (let ((lim (point)))
+                             (backward-word 1)
+                             (setq start (point))
+                             (forward-word 1)
+                             (setq end (min (point) lim)))
+                         (when (looking-back re (line-beginning-position))
+                           (setq start (match-beginning 1))
+                           (setq end   (match-end 1)))))
                      (setq name  (buffer-substring start end))
                      (let ((abbrev (abbrev-symbol name table)))
                        (when abbrev