From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.bugs Subject: bug#10145: 24.0.91; Word Isearch backward Date: Wed, 30 Nov 2011 11:46:38 +0200 Organization: JURTA Message-ID: <8739d6j62p.fsf@mail.jurta.org> References: <87k46jyd79.fsf@mail.jurta.org> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: dough.gmane.org 1322647769 16010 80.91.229.12 (30 Nov 2011 10:09:29 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Wed, 30 Nov 2011 10:09:29 +0000 (UTC) Cc: 10145@debbugs.gnu.org To: Andreas Schwab Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Wed Nov 30 11:09:24 2011 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([140.186.70.17]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1RVh6S-0004UJ-Go for geb-bug-gnu-emacs@m.gmane.org; Wed, 30 Nov 2011 11:09:24 +0100 Original-Received: from localhost ([::1]:37362 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RVh6R-00072r-WD for geb-bug-gnu-emacs@m.gmane.org; Wed, 30 Nov 2011 05:09:23 -0500 Original-Received: from eggs.gnu.org ([140.186.70.92]:56690) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RVh6O-0006y9-Ah for bug-gnu-emacs@gnu.org; Wed, 30 Nov 2011 05:09:21 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RVgvS-00031H-Nt for bug-gnu-emacs@gnu.org; Wed, 30 Nov 2011 04:58:21 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:45049) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RVgvQ-0002zu-Su for bug-gnu-emacs@gnu.org; Wed, 30 Nov 2011 04:58:01 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.69) (envelope-from ) id 1RVgvS-0001yW-M9 for bug-gnu-emacs@gnu.org; Wed, 30 Nov 2011 04:58:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Juri Linkov Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 30 Nov 2011 09:58:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 10145 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 10145-submit@debbugs.gnu.org id=B10145.13226470747573 (code B ref 10145); Wed, 30 Nov 2011 09:58:02 +0000 Original-Received: (at 10145) by debbugs.gnu.org; 30 Nov 2011 09:57:54 +0000 Original-Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RVgvK-0001y6-BP for submit@debbugs.gnu.org; Wed, 30 Nov 2011 04:57:54 -0500 Original-Received: from smarty.dreamhost.com ([208.113.175.8]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RVgvG-0001xl-MV for 10145@debbugs.gnu.org; Wed, 30 Nov 2011 04:57:51 -0500 Original-Received: from ps18281.dreamhostps.com (ps18281.dreamhost.com [69.163.218.105]) by smarty.dreamhost.com (Postfix) with ESMTP id 0F699684068; Wed, 30 Nov 2011 01:57:48 -0800 (PST) Original-Received: from localhost (ps18281.dreamhostps.com [69.163.218.105]) by ps18281.dreamhostps.com (Postfix) with ESMTP id 7376A451C558; Wed, 30 Nov 2011 01:57:35 -0800 (PST) In-Reply-To: (Andreas Schwab's message of "Tue, 29 Nov 2011 09:40:09 +0100") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.91 (x86_64-pc-linux-gnu) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list Resent-Date: Wed, 30 Nov 2011 04:58:02 -0500 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:54459 Archived-At: >> + doc: /* Given STRING, a string of words separated by word delimiters, > > The first line needs to be a complete sentence. In the patch below the first line is a complete sentence, and `wordify' is renamed to a better and more correct name `word-regexp': === modified file 'src/search.c' --- src/search.c 2011-11-27 18:17:40 +0000 +++ src/search.c 2011-11-30 09:41:35 +0000 @@ -2078,13 +2078,13 @@ (at your option) any later version. XSETBUFFER (last_thing_searched, current_buffer); } -/* Given STRING, a string of words separated by word delimiters, - compute a regexp that matches those exact words separated by - arbitrary punctuation. If LAX is nonzero, the end of the string - need not match a word boundary unless it ends in whitespace. */ - -static Lisp_Object -wordify (Lisp_Object string, int lax) +DEFUN ("word-regexp", Fword_regexp, Sword_regexp, 1, 2, 0, + doc: /* Return a regexp which matches words, ignoring punctuation. +Given STRING, a string of words separated by word delimiters, +compute a regexp that matches those exact words separated by +arbitrary punctuation. If LAX is non-nil, the end of the string +need not match a word boundary unless it ends in whitespace. */) + (Lisp_Object string, Lisp_Object lax) { register unsigned char *o; register EMACS_INT i, i_byte, len, punct_count = 0, word_count = 0; @@ -2125,7 +2125,7 @@ (at your option) any later version. } adjust = - punct_count + 5 * (word_count - 1) - + ((lax && !whitespace_at_end) ? 2 : 4); + + ((!NILP (lax) && !whitespace_at_end) ? 2 : 4); if (STRING_MULTIBYTE (string)) val = make_uninit_multibyte_string (len + adjust, SBYTES (string) @@ -2162,7 +2162,7 @@ (at your option) any later version. prev_c = c; } - if (!lax || whitespace_at_end) + if (NILP (lax) || whitespace_at_end) { *o++ = '\\'; *o++ = 'b'; @@ -2220,7 +2220,7 @@ (at your option) any later version. Optional fourth argument is repeat count--search for successive occurrences. */) (Lisp_Object string, Lisp_Object bound, Lisp_Object noerror, Lisp_Object count) { - return search_command (wordify (string, 0), bound, noerror, count, -1, 1, 0); + return search_command (Fword_regexp (string, Qnil), bound, noerror, count, -1, 1, 0); } DEFUN ("word-search-forward", Fword_search_forward, Sword_search_forward, 1, 4, @@ -2234,7 +2234,7 @@ (at your option) any later version. Optional fourth argument is repeat count--search for successive occurrences. */) (Lisp_Object string, Lisp_Object bound, Lisp_Object noerror, Lisp_Object count) { - return search_command (wordify (string, 0), bound, noerror, count, 1, 1, 0); + return search_command (Fword_regexp (string, Qnil), bound, noerror, count, 1, 1, 0); } DEFUN ("word-search-backward-lax", Fword_search_backward_lax, Sword_search_backward_lax, 1, 4, @@ -2252,7 +2252,7 @@ (at your option) any later version. Optional fourth argument is repeat count--search for successive occurrences. */) (Lisp_Object string, Lisp_Object bound, Lisp_Object noerror, Lisp_Object count) { - return search_command (wordify (string, 1), bound, noerror, count, -1, 1, 0); + return search_command (Fword_regexp (string, Qt), bound, noerror, count, -1, 1, 0); } DEFUN ("word-search-forward-lax", Fword_search_forward_lax, Sword_search_forward_lax, 1, 4, @@ -2270,7 +2270,7 @@ (at your option) any later version. Optional fourth argument is repeat count--search for successive occurrences. */) (Lisp_Object string, Lisp_Object bound, Lisp_Object noerror, Lisp_Object count) { - return search_command (wordify (string, 1), bound, noerror, count, 1, 1, 0); + return search_command (Fword_regexp (string, Qt), bound, noerror, count, 1, 1, 0); } DEFUN ("re-search-backward", Fre_search_backward, Sre_search_backward, 1, 4, @@ -3229,6 +3229,7 @@ (at your option) any later version. defsubr (&Sposix_string_match); defsubr (&Ssearch_forward); defsubr (&Ssearch_backward); + defsubr (&Sword_regexp); defsubr (&Sword_search_forward); defsubr (&Sword_search_backward); defsubr (&Sword_search_forward_lax); === modified file 'lisp/isearch.el' --- lisp/isearch.el 2011-11-29 18:39:16 +0000 +++ lisp/isearch.el 2011-11-30 09:41:35 +0000 @@ -1438,12 +1447,7 @@ (defun isearch-occur (regexp &optional n (interactive (list (cond - (isearch-word (concat "\\b" (replace-regexp-in-string - "\\W+" "\\W+" - (replace-regexp-in-string - "^\\W+\\|\\W+$" "" isearch-string) - nil t) - "\\b")) + (isearch-word (word-regexp isearch-string)) (isearch-regexp isearch-string) (t (regexp-quote isearch-string))) (if current-prefix-arg (prefix-numeric-value current-prefix-arg)))) @@ -1642,8 +1646,10 @@ (defun isearch-search-and-update () (if (and (eq case-fold-search t) search-upper-case) (setq case-fold-search (isearch-no-upper-case-p isearch-string isearch-regexp))) - (looking-at (if isearch-regexp isearch-string - (regexp-quote isearch-string)))) + (looking-at (cond + (isearch-regexp isearch-string) + (isearch-word (word-regexp isearch-string t)) + (t (regexp-quote isearch-string))))) (error nil)) (or isearch-yank-flag (<= (match-end 0)