From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.devel Subject: Re: Calling occur from within isearch Date: Thu, 06 Dec 2007 00:16:27 +0200 Organization: JURTA Message-ID: <87lk884wjp.fsf@jurta.org> References: <47448DB2.60402@gmail.com> <87hcjf2wot.fsf@jurta.org> <871wairv6n.fsf@jurta.org> <871waf7ikx.fsf@jurta.org> <878x4bgv86.fsf@jurta.org> <87zlwq3wtw.fsf@jurta.org> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1196893533 18712 80.91.229.12 (5 Dec 2007 22:25:33 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 5 Dec 2007 22:25:33 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Dec 05 23:25:43 2007 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1J02gW-00029y-BL for ged-emacs-devel@m.gmane.org; Wed, 05 Dec 2007 23:25:40 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1J02gF-0003Xi-EL for ged-emacs-devel@m.gmane.org; Wed, 05 Dec 2007 17:25:23 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1J02g9-0003Tg-KG for emacs-devel@gnu.org; Wed, 05 Dec 2007 17:25:17 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1J02g5-0003LF-T2 for emacs-devel@gnu.org; Wed, 05 Dec 2007 17:25:16 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1J02g5-0003L4-OU for emacs-devel@gnu.org; Wed, 05 Dec 2007 17:25:13 -0500 Original-Received: from relay03.kiev.sovam.com ([62.64.120.201]) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1J02g4-0004W5-9H for emacs-devel@gnu.org; Wed, 05 Dec 2007 17:25:13 -0500 Original-Received: from [83.170.232.243] (helo=smtp.svitonline.com) by relay03.kiev.sovam.com with esmtp (Exim 4.67) (envelope-from ) id 1J02fu-000OPV-JI for emacs-devel@gnu.org; Thu, 06 Dec 2007 00:25:05 +0200 In-Reply-To: ("Johan =?iso-8859-1?Q?Bockg=E5rd=22's?= message of "Wed, 05 Dec 2007 00:59:12 +0100") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.50 (gnu/linux) X-Scanner-Signature: 187c1e8f85aa2873c46c23e7719cc4c5 X-DrWeb-checked: yes X-SpamTest-Envelope-From: juri@jurta.org X-SpamTest-Group-ID: 00000000 X-SpamTest-Header: Not Detected X-SpamTest-Info: Profiles 1857 [Dec 05 2007] X-SpamTest-Info: helo_type=3 X-SpamTest-Info: {HEADERS: header Content-Type found without required header Content-Transfer-Encoding} X-SpamTest-Method: none X-SpamTest-Rate: 19 X-SpamTest-Status: Not detected X-SpamTest-Status-Extended: not_detected X-SpamTest-Version: SMTP-Filter Version 3.0.0 [0255], KAS30/Release X-detected-kernel: by monty-python.gnu.org: FreeBSD 4.7-5.2 (or MacOS X 10.2-10.4) (2) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:84753 Archived-At: >>> In the case of occur from within isearch, the current value of >>> isearch-case-fold-search will make searching find the right matches--if >>> occur does *not* look at the case of the input again >>> >>> (let ((case-fold-search isearch-case-fold-search) >>> (search-upper-case nil)) >>> (occur regexp nlines)) >> >> What code in occur for this case do you have in mind? > > isearch-occur should do this. Isearch has already decided if the search > should be case-sensitive or not, so occur should not consider input case. Setting `search-upper-case' to nil in `isearch-occur' just to skip the `isearch-no-upper-case-p' test in occur can be named ugly too. But perhaps this is less ugly that testing for `(eq case-fold-search t)' in occur. So I am not against using this approach that produces the same results with the following patch: Index: lisp/isearch.el =================================================================== RCS file: /sources/emacs/emacs/lisp/isearch.el,v retrieving revision 1.306 diff -c -r1.306 isearch.el *** lisp/isearch.el 10 Nov 2007 23:03:24 -0000 1.306 --- lisp/isearch.el 5 Dec 2007 22:16:03 -0000 *************** *** 1230,1236 **** (interactive) (barf-if-buffer-read-only) (if regexp-flag (setq isearch-regexp t)) ! (let ((case-fold-search isearch-case-fold-search)) (isearch-done) (isearch-clean-overlays) (if (and isearch-other-end --- 1231,1238 ---- (interactive) (barf-if-buffer-read-only) (if regexp-flag (setq isearch-regexp t)) ! (let ((case-fold-search isearch-case-fold-search) ! (search-upper-case nil)) (isearch-done) (isearch-clean-overlays) (if (and isearch-other-end *************** *** 1256,1265 **** --- 1258,1275 ---- (interactive) (isearch-query-replace t)) + (defun isearch-occur (regexp &optional nlines) + "Run `occur' with regexp to search from the current search string. + Interactively, REGEXP is the current search regexp or a quoted search + string. NLINES has the same meaning as in `occur'." + (interactive + (list + (if isearch-regexp isearch-string (regexp-quote isearch-string)) + (if current-prefix-arg (prefix-numeric-value current-prefix-arg)))) + (let ((case-fold-search isearch-case-fold-search) + (search-upper-case nil)) + (occur regexp nlines))) + (defun isearch-delete-char () "Discard last input item and move point back. Index: lisp/replace.el =================================================================== RCS file: /sources/emacs/emacs/lisp/replace.el,v retrieving revision 1.263 diff -c -r1.263 replace.el *** lisp/replace.el 22 Nov 2007 03:01:36 -0000 1.263 --- lisp/replace.el 5 Dec 2007 22:16:09 -0000 *************** *** 552,559 **** When called from Lisp (and usually interactively as well, see below) applies to all lines starting after point. ! If REGEXP contains upper case characters (excluding those preceded by `\\'), ! the matching is case-sensitive. Second and third arg RSTART and REND specify the region to operate on. This command operates on (the accessible part of) all lines whose --- 552,559 ---- When called from Lisp (and usually interactively as well, see below) applies to all lines starting after point. ! If REGEXP contains upper case characters (excluding those preceded by `\\') ! and `search-upper-case' is non-nil, the matching is case-sensitive. Second and third arg RSTART and REND specify the region to operate on. This command operates on (the accessible part of) all lines whose *************** *** 597,604 **** (save-excursion (or (bolp) (forward-line 1)) (let ((start (point)) ! (case-fold-search (and case-fold-search ! (isearch-no-upper-case-p regexp t)))) (while (< (point) rend) ;; Start is first char not preserved by previous match. (if (not (re-search-forward regexp rend 'move)) --- 597,606 ---- (save-excursion (or (bolp) (forward-line 1)) (let ((start (point)) ! (case-fold-search ! (if (and case-fold-search search-upper-case) ! (isearch-no-upper-case-p regexp t) ! case-fold-search))) (while (< (point) rend) ;; Start is first char not preserved by previous match. (if (not (re-search-forward regexp rend 'move)) *************** *** 626,633 **** The line point is in is deleted if and only if it contains a match for regexp starting after point. ! If REGEXP contains upper case characters (excluding those preceded by `\\'), ! the matching is case-sensitive. Second and third arg RSTART and REND specify the region to operate on. Lines partially contained in this region are deleted if and only if --- 628,635 ---- The line point is in is deleted if and only if it contains a match for regexp starting after point. ! If REGEXP contains upper case characters (excluding those preceded by `\\') ! and `search-upper-case' is non-nil, the matching is case-sensitive. Second and third arg RSTART and REND specify the region to operate on. Lines partially contained in this region are deleted if and only if *************** *** 657,664 **** (setq rstart (point) rend (point-max-marker))) (goto-char rstart)) ! (let ((case-fold-search (and case-fold-search ! (isearch-no-upper-case-p regexp t)))) (save-excursion (while (and (< (point) rend) (re-search-forward regexp rend t)) --- 659,668 ---- (setq rstart (point) rend (point-max-marker))) (goto-char rstart)) ! (let ((case-fold-search ! (if (and case-fold-search search-upper-case) ! (isearch-no-upper-case-p regexp t) ! case-fold-search))) (save-excursion (while (and (< (point) rend) (re-search-forward regexp rend t)) *************** *** 676,683 **** the number, do not print it; if INTERACTIVE is t, the function behaves in all respects has if it had been called interactively. ! If REGEXP contains upper case characters (excluding those preceded by `\\'), ! the matching is case-sensitive. Second and third arg RSTART and REND specify the region to operate on. --- 680,687 ---- the number, do not print it; if INTERACTIVE is t, the function behaves in all respects has if it had been called interactively. ! If REGEXP contains upper case characters (excluding those preceded by `\\') ! and `search-upper-case' is non-nil, the matching is case-sensitive. Second and third arg RSTART and REND specify the region to operate on. *************** *** 704,711 **** (goto-char rstart)) (let ((count 0) opoint ! (case-fold-search (and case-fold-search ! (isearch-no-upper-case-p regexp t)))) (while (and (< (point) rend) (progn (setq opoint (point)) (re-search-forward regexp rend t))) --- 708,717 ---- (goto-char rstart)) (let ((count 0) opoint ! (case-fold-search ! (if (and case-fold-search search-upper-case) ! (isearch-no-upper-case-p regexp t) ! case-fold-search))) (while (and (< (point) rend) (progn (setq opoint (point)) (re-search-forward regexp rend t))) *************** *** 1030,1037 **** It serves as a menu to find any of the occurrences in this buffer. \\\\[describe-mode] in that buffer will explain how. ! If REGEXP contains upper case characters (excluding those preceded by `\\'), ! the matching is case-sensitive." (interactive (occur-read-primary-args)) (occur-1 regexp nlines (list (current-buffer)))) --- 1042,1049 ---- It serves as a menu to find any of the occurrences in this buffer. \\\\[describe-mode] in that buffer will explain how. ! If REGEXP contains upper case characters (excluding those preceded by `\\') ! and `search-upper-case' is non-nil, the matching is case-sensitive." (interactive (occur-read-primary-args)) (occur-1 regexp nlines (list (current-buffer)))) *************** *** 1119,1126 **** (let ((count (occur-engine regexp active-bufs occur-buf (or nlines list-matching-lines-default-context-lines) ! (and case-fold-search ! (isearch-no-upper-case-p regexp t)) list-matching-lines-buffer-name-face nil list-matching-lines-face (not (eq occur-excluded-properties t))))) --- 1131,1139 ---- (let ((count (occur-engine regexp active-bufs occur-buf (or nlines list-matching-lines-default-context-lines) ! (if (and case-fold-search search-upper-case) ! (isearch-no-upper-case-p regexp t) ! case-fold-search) list-matching-lines-buffer-name-face nil list-matching-lines-face (not (eq occur-excluded-properties t))))) *************** *** 1459,1466 **** (and query-flag minibuffer-auto-raise (raise-frame (window-frame (minibuffer-window)))) (let* ((case-fold-search ! (and case-fold-search ! (isearch-no-upper-case-p from-string regexp-flag))) (nocasify (not (and case-replace case-fold-search))) (literal (or (not regexp-flag) (eq regexp-flag 'literal))) (search-function (if regexp-flag 're-search-forward 'search-forward)) --- 1472,1480 ---- (and query-flag minibuffer-auto-raise (raise-frame (window-frame (minibuffer-window)))) (let* ((case-fold-search ! (if (and case-fold-search search-upper-case) ! (isearch-no-upper-case-p from-string regexp-flag) ! case-fold-search)) (nocasify (not (and case-replace case-fold-search))) (literal (or (not regexp-flag) (eq regexp-flag 'literal))) (search-function (if regexp-flag 're-search-forward 'search-forward)) -- Juri Linkov http://www.jurta.org/emacs/