From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Andrea Greselin Newsgroups: gmane.emacs.bugs Subject: bug#52356: 27.2; Isearch prompt changes unexpectedly with char folding enabled Date: Fri, 17 Dec 2021 20:35:50 +0100 Message-ID: References: <868rwwdxrq.fsf@mail.linkov.net> <86tufkch63.fsf@mail.linkov.net> <86tufelxg8.fsf@mail.linkov.net> <86r1ahopzb.fsf@mail.linkov.net> Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="000000000000a8520805d35ca750" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="24201"; mail-complaints-to="usenet@ciao.gmane.io" To: 52356@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri Dec 17 20:38:44 2021 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1myJ3z-0006D5-Ju for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 17 Dec 2021 20:38:43 +0100 Original-Received: from localhost ([::1]:55798 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1myJ3y-0006Oz-Ia for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 17 Dec 2021 14:38:42 -0500 Original-Received: from eggs.gnu.org ([209.51.188.92]:59926) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1myJ2M-0004uI-Cf for bug-gnu-emacs@gnu.org; Fri, 17 Dec 2021 14:37:02 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:57356) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1myJ2M-0006bn-2w for bug-gnu-emacs@gnu.org; Fri, 17 Dec 2021 14:37:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1myJ2L-0004Ir-TP for bug-gnu-emacs@gnu.org; Fri, 17 Dec 2021 14:37:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Andrea Greselin Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 17 Dec 2021 19:37:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 52356 X-GNU-PR-Package: emacs Original-Received: via spool by 52356-submit@debbugs.gnu.org id=B52356.163976979416501 (code B ref 52356); Fri, 17 Dec 2021 19:37:01 +0000 Original-Received: (at 52356) by debbugs.gnu.org; 17 Dec 2021 19:36:34 +0000 Original-Received: from localhost ([127.0.0.1]:40669 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1myJ1u-0004I4-1h for submit@debbugs.gnu.org; Fri, 17 Dec 2021 14:36:34 -0500 Original-Received: from mail-qt1-f181.google.com ([209.85.160.181]:41850) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1myJ1s-0004Hp-IJ for 52356@debbugs.gnu.org; Fri, 17 Dec 2021 14:36:33 -0500 Original-Received: by mail-qt1-f181.google.com with SMTP id v22so3710506qtx.8 for <52356@debbugs.gnu.org>; Fri, 17 Dec 2021 11:36:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=dekeJOcfE/Tr22+d+OfpwW3T2hDXMQ20cKOM3xoQ8zs=; b=ohofqXsT37bSHkz6WazydWuF1ScaJuoj9WtlEWHt22EGNZBoNclkdDEEzAfKimegM0 DsAaUuFFGWDj0SEPB8dZ0ofHjgNf5lVNP14CwBJFSZDSv7yBd3jCWmhQhlteqmr/tN6p d42K4ROLK8XlszWgFWw/41vVCJ2GPpwBwFlmh2Xgarc5YQTGzxHWxKStuJzty4FIQtx+ +bp20m70p0w77DnFJ3N/89vZdZHyn/DZlX2k9OKnW138BVHbeSIKYZXky6lkykA3lg1J ltspsUcWnmE7SoSrOuA9BSsqcv7z8elOV+/DsZmJZN/H5Ph72YTR7iuxizeuWbw3gOwa +chg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=dekeJOcfE/Tr22+d+OfpwW3T2hDXMQ20cKOM3xoQ8zs=; b=rfTl/XYjfS1zf7dv7+t7q1wnVi4dp6Iwfr52oMb55ScVaLiX6LC5OO9eu3k8/BOKFF g/5BAiB586YiofJIXj+IDuXRYu9CuCrIuBrFd4WOhfymvaId9rQfBWkXgJKtXXVQQpfa r8lFBp4CdX5IFdzK+lcINMQlq8QHe8wujGRFidvrhAG/tKR3am6EmG0nKJi03QIHzmzo 30w/sM0F3z1xQGQphfqaQG1uDhIEqgiJQdpiBCQMOxMuqyopMdU9wxhT0hWo25DAJiwg x6ZxRtkodls6tv8g8neAzf3SScEG1ZYUzGvecZ7+p95+TRQt/LFOJY89O0h+7DcJA+h7 gJ3g== X-Gm-Message-State: AOAM533fFrNf3KsOvkCx/ATfYcj39EOkgngfHKGoE0A/t6di+wPCQaXV s067I7AH68tULmdQad87G5WyEKs3czNumO8mQdidXCqKBlk= X-Google-Smtp-Source: ABdhPJwjazcsVrqWZT71gRB+zunUFjXDPHDN/ZHRADdho0I0Ln/3qU/gLxoMt/bzMxiRyOpQ5BsSmgm0WlJCABrQ9Io= X-Received: by 2002:a05:622a:5ca:: with SMTP id d10mr3743727qtb.603.1639769786830; Fri, 17 Dec 2021 11:36:26 -0800 (PST) In-Reply-To: <86r1ahopzb.fsf@mail.linkov.net> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list 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-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:222582 Archived-At: --000000000000a8520805d35ca750 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Juri, thanks for your help. I=E2=80=99ve tested your latest patch in two ways and in both tests the pro= mpt didn=E2=80=99t flicker on adding letters to the search string. So it looks fine to me. > A possible variant would be not to flicker too much by > transitioning from the message: > > Pending char-fold I-search: string > > to > > 1/20 Pending char-fold I-search: string If I understand it correctly the jittering there is all due to =E2=80=98lazy-count-prefix-format=E2=80=99 being non-nil. If you set it to = nil (and use =E2=80=98lazy-count-suffix-format=E2=80=99 to display the counter) then= you have no jittering at all. > But maybe better not to display "Pending" at all? I personally don=E2=80=99t like delayed changes to graphical elements, so I= =E2=80=99d say yes. Now I'm curious though, what=E2=80=98s the meaning of =E2=80=9Cpending=E2= =80=9D in the context of Isearch? Anyway, these were my tests: 1) Run =E2=80=98emacs -Q=E2=80=99, evaluate functions with your patch. At e= ach step on the left I get the prompt on the right: C-s =E2=86=92 I-search: M-s ' =E2=86=92 Pending char-fold I-search: Type smth =E2=86=92 Char-fold I-search: Type smth 2) Run =E2=80=98emacs -Q=E2=80=99, evaluate my settings and the functions w= ith your patch. Result: C-s =E2=86=92 I-search: (At this point the search is already being done with char-folding enabled because of my settings.) Type smth =E2=86=92 I-search: Type smth [0/0] Here are my settings and the patched functions, for convenience. (setq isearch-lazy-count t) (setq lazy-count-prefix-format nil lazy-count-suffix-format " [%s/%s]") (setq-local search-default-mode 'char-fold-to-regexp) (electric-quote-local-mode) (defun isearch-message-prefix (&optional ellipsis nonincremental) ;; If about to search, and previous search regexp was invalid, ;; check that it still is. If it is valid now, ;; let the message we display while searching say that it is valid. (and isearch-error ellipsis (condition-case () (progn (re-search-forward isearch-string (point) t) (setq isearch-error nil)) (error nil))) ;; If currently failing, display no ellipsis. (or isearch-success (setq ellipsis nil)) (let ((m (concat (if isearch-success "" "failing ") (if (eq isearch-adjusted t) "pending " "") (if (and isearch-wrapped (not isearch-wrap-function) (if isearch-forward (> (point) isearch-opoint) (< (point) isearch-opoint))) "over") (if isearch-wrapped "wrapped ") (if (and (not isearch-success) (not isearch-case-fold-search)) "case-sensitive ") (let ((prefix "")) (advice-function-mapc (lambda (_ props) (let ((np (cdr (assq 'isearch-message-prefix props)))) (if np (setq prefix (concat np prefix))))) isearch-filter-predicate) prefix) (isearch--describe-regexp-mode isearch-regexp-function) (cond (multi-isearch-file-list "multi-file ") (multi-isearch-buffer-list "multi-buffer ") (t "")) (or isearch-message-prefix-add "") (if nonincremental "search" "I-search") (if isearch-forward "" " backward") (if current-input-method ;; Input methods for RTL languages use RTL ;; characters for their title, and that messes ;; up the display of search text after the prompt. (bidi-string-mark-left-to-right (concat " [" current-input-method-title "]: ")) ": ") ))) (apply #'propertize (concat (isearch-lazy-count-format) (upcase (substring m 0 1)) (substring m 1)) isearch-message-properties))) (defun isearch-search-fun-default () "Return default functions to use for the search." (lambda (string &optional bound noerror count) (let (;; Evaluate this before binding `search-spaces-regexp' which ;; can break all sorts of regexp searches. In particular, ;; calling `isearch-regexp-function' can trigger autoloading ;; (Bug#35802). (regexp (cond (isearch-regexp-function (let ((lax (and (not bound) (isearch--lax-regexp-function-p)))) (when lax (setq isearch-adjusted 'lax)) (if (functionp isearch-regexp-function) (funcall isearch-regexp-function string lax) (word-search-regexp string lax)))) (isearch-regexp string) (t (regexp-quote string)))) ;; Use lax versions to not fail at the end of the word while ;; the user adds and removes characters in the search string ;; (or when using nonincremental word isearch) (search-spaces-regexp (when (if isearch-regexp isearch-regexp-lax-whitespace isearch-lax-whitespace) search-whitespace-regexp))) (funcall (if isearch-forward #'re-search-forward #'re-search-backward) regexp bound noerror count)))) --000000000000a8520805d35ca750 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Juri, thanks for your help.
I=E2=80=99ve tested your= latest patch in two ways and in both tests the prompt
didn=E2=80=99t fl= icker on adding letters to the search string. So it looks
fine to me.
> A possible variant would be not to flicker too much by
> tr= ansitioning from the message:
>
> =C2=A0 Pending char-fold I-se= arch: string
>
> to
>
> =C2=A0 1/20 Pending char-fo= ld I-search: string

If I understand it correctly the jittering there= is all due to
=E2=80=98lazy-count-prefix-format=E2=80=99 being non-nil.= If you set it to nil (and
use =E2=80=98lazy-count-suffix-format=E2=80= =99 to display the counter) then you have
no jittering at all.

&g= t; But maybe better not to display "Pending" at all?

I per= sonally don=E2=80=99t like delayed changes to graphical elements, so I=E2= =80=99d
say yes.

Now I'm curious though, what=E2=80=98s the m= eaning of =E2=80=9Cpending=E2=80=9D in the context
of Isearch?

An= yway, these were my tests:

1) Run =E2=80=98emacs -Q=E2=80=99, evalua= te functions with your patch. At each step on
=C2=A0 =C2=A0the left I ge= t the prompt on the right:

=C2=A0 =C2=A0C-s =C2=A0 =C2=A0 =C2=A0 =E2= =86=92 I-search:
=C2=A0 =C2=A0M-s ' =C2=A0 =C2=A0 =E2=86=92 Pending = char-fold I-search:
=C2=A0 =C2=A0Type smth =E2=86=92 Char-fold I-search:= Type smth

2) Run =E2=80=98emacs -Q=E2=80=99, evaluate my settings a= nd the functions with your
=C2=A0 =C2=A0patch. Result:

=C2=A0 =C2= =A0C-s =C2=A0 =C2=A0 =C2=A0 =E2=86=92 I-search:

=C2=A0 =C2=A0(At thi= s point the search is already being done with char-folding
=C2=A0 =C2=A0= enabled because of my settings.)

=C2=A0 =C2=A0Type smth =E2=86=92 I-= search: Type smth [0/0]

Here are my settings and the patched functio= ns, for convenience.

=C2=A0 =C2=A0 (setq isearch-lazy-count t)
= =C2=A0 =C2=A0 (setq lazy-count-prefix-format nil
=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 lazy-count-suffix-format " [%s/%s]")
=C2=A0 =C2= =A0 (setq-local search-default-mode 'char-fold-to-regexp)
=C2=A0 =C2= =A0 (electric-quote-local-mode)

=C2=A0 =C2=A0 (defun isearch-message= -prefix (&optional ellipsis nonincremental)
=C2=A0 =C2=A0 =C2=A0 ;; = If about to search, and previous search regexp was invalid,
=C2=A0 =C2= =A0 =C2=A0 ;; check that it still is.=C2=A0 If it is valid now,
=C2=A0 = =C2=A0 =C2=A0 ;; let the message we display while searching say that it is = valid.
=C2=A0 =C2=A0 =C2=A0 (and isearch-error ellipsis
=C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0(condition-case ()
=C2=A0 =C2=A0 =C2=A0 (pro= gn (re-search-forward isearch-string (point) t)
=C2=A0 =C2=A0 =C2=A0(set= q isearch-error nil))
=C2=A0 =C2=A0 (error nil)))
=C2=A0 =C2=A0 =C2= =A0 ;; If currently failing, display no ellipsis.
=C2=A0 =C2=A0 =C2=A0 (= or isearch-success (setq ellipsis nil))
=C2=A0 =C2=A0 =C2=A0 (let ((m (c= oncat (if isearch-success "" "failing ")
=C2=A0 =C2= =A0 =C2=A0 (if (eq isearch-adjusted t) "pending " "")=C2=A0 =C2=A0 (if (and isearch-wrapped
=C2=A0 =C2=A0 =C2=A0 =C2=A0(not= isearch-wrap-function)
=C2=A0 =C2=A0 =C2=A0 =C2=A0(if isearch-forward=C2=A0 =C2=A0 (> (point) isearch-opoint)
=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0(< (point) isearch-opoint)))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 "over")
=C2=A0 =C2=A0 =C2=A0 (if isearch-wrapped "= wrapped ")
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0(if (and (not isearch-success) (not isearch-case= -fold-search))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"case-sensitive ")
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0(let ((prefix ""))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(advice-function= -mapc
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 (lambda (_ props)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (let = ((np (cdr (assq 'isearch-message-prefix props))))
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 (if np (setq prefix (concat np prefix)))))
=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 isearch-filter-predicate)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0prefix)
=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(isear= ch--describe-regexp-mode isearch-regexp-function)
=C2=A0 =C2=A0 =C2=A0 (= cond
=C2=A0 =C2=A0 =C2=A0 =C2=A0(multi-isearch-file-list "multi-fil= e ")
=C2=A0 =C2=A0 =C2=A0 =C2=A0(multi-isearch-buffer-list "mu= lti-buffer ")
=C2=A0 =C2=A0 =C2=A0 =C2=A0(t ""))
=C2= =A0 =C2=A0 =C2=A0 (or isearch-message-prefix-add "")
=C2=A0 = =C2=A0 =C2=A0 (if nonincremental "search" "I-search")=C2=A0 =C2=A0 =C2=A0 (if isearch-forward "" " backward&quo= t;)
=C2=A0 =C2=A0 =C2=A0 (if current-input-method
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 ;; Input methods for RTL languages use RTL
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 ;; characters for their title, and that messes
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; up the display of search text after t= he prompt.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (bidi-string-mark-left-to-= right
=C2=A0 =C2=A0 (concat " [" current-input-method-title &q= uot;]: "))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 ": ")
=C2=A0 = =C2=A0 =C2=A0 )))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 (apply #'propertize (c= oncat (isearch-lazy-count-format)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (upcase (substr= ing m 0 1)) (substring m 1))
=C2=A0 =C2=A0 =C2=A0 isearch-message-proper= ties)))

=C2=A0 =C2=A0 (defun isearch-search-fun-default ()
=C2=A0= =C2=A0 =C2=A0 "Return default functions to use for the search."<= br>=C2=A0 =C2=A0 =C2=A0 (lambda (string &optional bound noerror count)<= br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 (let (;; Evaluate this before binding `searc= h-spaces-regexp' which
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 ;; can break all sorts of regexp searches.=C2=A0 In particular,
=C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; calling `isearch-regexp-fu= nction' can trigger autoloading
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 ;; (Bug#35802).
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 (regexp
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(c= ond (isearch-regexp-function
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (let ((lax (and (not bound)
=C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (isearch--lax-regexp-f= unction-p))))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 (when lax
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setq isearch-adju= sted 'lax))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 (if (functionp isearch-regexp-function)
=C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 (funcall isearch-regexp-function string lax)
=C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 (word-search-regexp string lax))))
=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(isearch-regexp string)=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0(t (regexp-quote string))))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 ;; Use lax versions to not fail at the end of the word while
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; the user adds and remov= es characters in the search string
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 ;; (or when using nonincremental word isearch)
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (search-spaces-regexp (when (if isea= rch-regexp
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 isearch-regexp-lax-whitespace
=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 isearch-= lax-whitespace)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 search-whitespace-regexp)))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (func= all
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(if isearch-forward #'r= e-search-forward #'re-search-backward)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0regexp bound noerror count))))
--000000000000a8520805d35ca750--