From fe4346f0da7e8cc578eb60813bfc8e4e36c62c34 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 25 Nov 2009 04:59:02 +0000 Subject: [PATCH] (abbrev--before-point): Use word-motion functions if :regexp is not specified (bug#5031). --- lisp/ChangeLog | 3 +++ lisp/abbrev.el | 18 +++++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d02dbadd9ca..3049fbea5f0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2009-11-25 Stefan Monnier + * 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. diff --git a/lisp/abbrev.el b/lisp/abbrev.el index 88c87dafa77..91c510694b0 100644 --- a/lisp/abbrev.el +++ b/lisp/abbrev.el @@ -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 -- 2.39.5