unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Juri Linkov <juri@jurta.org>
To: emacs-devel@gnu.org
Subject: Re: Yanking isearch to highlight-regexp
Date: Sun, 29 Jun 2008 01:02:03 +0300	[thread overview]
Message-ID: <878wwp1an8.fsf@jurta.org> (raw)
In-Reply-To: <87k5gql900.fsf@jurta.org> (Juri Linkov's message of "Sun, 15 Jun 2008 23:48:47 +0300")

Below is a patch that unifies two similar regexp-reading functions
`keep-lines-read-args' and `occur-read-primary-args' into the general
function `read-regexp'.  It reads a regexp using the regexp history
and provides some useful defaults.  Like `keep-lines-read-args'
it accepts the prompt as its argument, but without the trailing colon
to be able to add the default value in parentheses.

But now the prompt for `keep-lines' doesn't look nice since
it displays parentheses twice as:

  Keep lines (containing match for regexp) (default regexp): 

maybe a better format would be:

  Keep lines, containing match for regexp (default regexp): 

This new function could be used later in other packages like hi-lock.

Index: lisp/replace.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/replace.el,v
retrieving revision 1.272
diff -c -r1.272 replace.el
*** lisp/replace.el	6 Jun 2008 20:32:11 -0000	1.272
--- lisp/replace.el	28 Jun 2008 22:00:32 -0000
***************
*** 522,527 ****
--- 522,559 ----
  Maximum length of the history list is determined by the value
  of `history-length', which see.")
  
+ (defun read-regexp (prompt)
+   "Read regexp as a string using the regexp history and some useful defaults.
+ Prompt for a regular expression with PROMPT.  Provide the last element
+ of the regexp history as the basic default, and return it on typing RET.
+ Additional defaults are the string under point, the last search regexp,
+ the last search string, and the last replacement regexp.
+ Return the regexp as a string."
+   (let* ((default (car regexp-history))
+ 	 (defaults
+ 	   (list (regexp-quote
+ 		  (or (funcall (or find-tag-default-function
+ 				   (get major-mode 'find-tag-default-function)
+ 				   'find-tag-default))
+ 		      ""))
+ 		 (car regexp-search-ring)
+ 		 (regexp-quote (or (car search-ring) ""))
+ 		 (car (symbol-value
+ 		       query-replace-from-history-variable))))
+ 	 (defaults (delete-dups (delq nil (delete "" defaults))))
+ 	 ;; Don't add automatically the car of defaults for empty input
+ 	 (history-add-new-input nil)
+ 	 (input
+ 	  (read-from-minibuffer
+ 	   (if default
+ 	       (format "%s (default %s): " prompt (query-replace-descr default))
+ 	     (format "%s: " prompt))
+ 	   nil nil nil 'regexp-history defaults t)))
+     (if (equal input "")
+ 	default
+       (prog1 input
+ 	(add-to-history 'regexp-history input)))))
+ 
  
  (defalias 'delete-non-matching-lines 'keep-lines)
  (defalias 'delete-matching-lines 'flush-lines)
***************
*** 532,551 ****
    "Read arguments for `keep-lines' and friends.
  Prompt for a regexp with PROMPT.
  Value is a list, (REGEXP)."
!   (let* ((default (list
! 		   (regexp-quote
! 		    (or (funcall (or find-tag-default-function
! 				     (get major-mode 'find-tag-default-function)
! 				     'find-tag-default))
! 			""))
! 		   (car regexp-search-ring)
! 		   (regexp-quote (or (car search-ring) ""))
! 		   (car (symbol-value
! 			 query-replace-from-history-variable))))
! 	 (default (delete-dups (delq nil (delete "" default)))))
!     (list (read-from-minibuffer prompt nil nil nil
! 				'regexp-history default t)
! 	  nil nil t)))
  
  (defun keep-lines (regexp &optional rstart rend interactive)
    "Delete all lines except those containing matches for REGEXP.
--- 564,570 ----
    "Read arguments for `keep-lines' and friends.
  Prompt for a regexp with PROMPT.
  Value is a list, (REGEXP)."
!   (list (read-regexp prompt) nil nil t))
  
  (defun keep-lines (regexp &optional rstart rend interactive)
    "Delete all lines except those containing matches for REGEXP.
***************
*** 574,580 ****
    (interactive
     (progn
       (barf-if-buffer-read-only)
!      (keep-lines-read-args "Keep lines (containing match for regexp): ")))
    (if rstart
        (progn
  	(goto-char (min rstart rend))
--- 593,599 ----
    (interactive
     (progn
       (barf-if-buffer-read-only)
!      (keep-lines-read-args "Keep lines (containing match for regexp)")))
    (if rstart
        (progn
  	(goto-char (min rstart rend))
***************
*** 649,655 ****
    (interactive
     (progn
       (barf-if-buffer-read-only)
!      (keep-lines-read-args "Flush lines (containing match for regexp): ")))
    (if rstart
        (progn
  	(goto-char (min rstart rend))
--- 668,674 ----
    (interactive
     (progn
       (barf-if-buffer-read-only)
!      (keep-lines-read-args "Flush lines (containing match for regexp)")))
    (if rstart
        (progn
  	(goto-char (min rstart rend))
***************
*** 695,701 ****
  a previously found match."
  
    (interactive
!    (keep-lines-read-args "How many matches for (regexp): "))
    (save-excursion
      (if rstart
  	(progn
--- 714,720 ----
  a previously found match."
  
    (interactive
!    (keep-lines-read-args "How many matches for (regexp)"))
    (save-excursion
      (if rstart
  	(progn
***************
*** 1003,1040 ****
        (nreverse result))))
  
  (defun occur-read-primary-args ()
!   (let* ((default (car regexp-history))
! 	 (defaults
! 	   (list (and transient-mark-mode mark-active
! 		      (regexp-quote
! 		       (buffer-substring-no-properties
! 			(region-beginning) (region-end))))
! 		 (regexp-quote
! 		  (or (funcall
! 		       (or find-tag-default-function
! 			   (get major-mode 'find-tag-default-function)
! 			   'find-tag-default))
! 		      ""))
! 		 (car regexp-search-ring)
! 		 (regexp-quote (or (car search-ring) ""))
! 		 (car (symbol-value
! 		       query-replace-from-history-variable))))
! 	 (defaults (delete-dups (delq nil (delete "" defaults))))
! 	 ;; Don't add automatically the car of defaults for empty input
! 	 (history-add-new-input nil)
! 	 (input
! 	  (read-from-minibuffer
! 	   (if default
! 	       (format "List lines matching regexp (default %s): "
! 		       (query-replace-descr default))
! 	     "List lines matching regexp: ")
! 	   nil nil nil 'regexp-history defaults)))
!     (list (if (equal input "")
! 	      default
! 	    (prog1 input
! 	      (add-to-history 'regexp-history input)))
! 	  (when current-prefix-arg
! 	    (prefix-numeric-value current-prefix-arg)))))
  
  (defun occur-rename-buffer (&optional unique-p interactive-p)
    "Rename the current *Occur* buffer to *Occur: original-buffer-name*.
--- 1022,1030 ----
        (nreverse result))))
  
  (defun occur-read-primary-args ()
!   (list (read-regexp "List lines matching regexp")
! 	(when current-prefix-arg
! 	  (prefix-numeric-value current-prefix-arg))))
  
  (defun occur-rename-buffer (&optional unique-p interactive-p)
    "Rename the current *Occur* buffer to *Occur: original-buffer-name*.

-- 
Juri Linkov
http://www.jurta.org/emacs/




  parent reply	other threads:[~2008-06-28 22:02 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-14 16:57 Yanking isearch to highlight-regexp Lennart Borgman (gmail)
2008-06-14 21:42 ` Mathias Dahl
2008-06-14 21:50   ` Stefan Monnier
2008-06-14 21:54     ` Mathias Dahl
2008-06-15  0:32       ` Juri Linkov
2008-06-15  0:08     ` Lennart Borgman (gmail)
2008-06-15  0:33       ` Juri Linkov
2008-06-15  1:48       ` Stefan Monnier
2008-06-15  9:47         ` Lennart Borgman (gmail)
2008-06-15 20:48           ` Juri Linkov
2008-06-15 21:10             ` Lennart Borgman (gmail)
2008-06-15 22:54               ` Juri Linkov
2008-06-15 23:09                 ` Lennart Borgman (gmail)
2008-06-16  9:34                   ` Juri Linkov
2008-06-16 11:13                     ` Lennart Borgman
2008-06-16 21:48                       ` Juri Linkov
2008-06-16 18:50             ` David Koppelman
2008-06-16 19:08               ` Lennart Borgman (gmail)
2008-06-16 21:50               ` Juri Linkov
2008-06-17 18:50                 ` David Koppelman
2008-06-24 23:09                   ` Juri Linkov
2008-06-25  1:43                     ` Stefan Monnier
2008-06-25 20:32                       ` Juri Linkov
2008-06-25 22:16                         ` Miles Bader
2008-06-25 22:22                           ` Lennart Borgman (gmail)
2008-06-25 22:58                             ` Miles Bader
2008-06-27 23:15                           ` Global keymaps [was: Yanking isearch to highlight-regexp] Juri Linkov
2008-06-27 23:20                             ` Lennart Borgman (gmail)
2008-06-27 23:32                               ` Juri Linkov
2008-06-28  0:28                             ` Global keymaps Miles Bader
2008-06-28  1:25                               ` Stefan Monnier
2008-06-28 19:45                               ` Juri Linkov
2008-06-28 22:51                                 ` Stefan Monnier
2008-06-29 16:17                                   ` Juri Linkov
2008-06-29 18:03                                     ` Stefan Monnier
2008-06-29 19:28                                       ` Juri Linkov
2008-06-29 20:03                                         ` Stefan Monnier
2008-06-29 20:52                                           ` Juri Linkov
2008-06-29 21:24                                             ` Lennart Borgman (gmail)
2008-06-30  1:00                                               ` Stefan Monnier
2008-06-28 22:02             ` Juri Linkov [this message]
2008-06-28 22:23               ` Yanking isearch to highlight-regexp Stefan Monnier
2008-06-29 16:19                 ` Juri Linkov
2008-06-29 18:07                   ` Stefan Monnier
2008-06-29 19:29                     ` Juri Linkov
2008-06-29 20:05                       ` Stefan Monnier
2008-06-29 20:55                         ` Juri Linkov
2008-06-30  1:01                           ` Stefan Monnier
2008-06-30 19:59                             ` Juri Linkov
2008-07-01 21:34                               ` Grep key bindings (was: Yanking isearch to highlight-regexp) Juri Linkov
2008-07-01 21:44                                 ` Grep key bindings Miles Bader
2008-07-01 21:54                                   ` Juri Linkov
2008-07-01 22:11                                     ` Miles Bader
2008-07-02 22:42                                       ` Juri Linkov
2008-07-03  6:53                                         ` joakim
2008-07-03  7:07                                           ` Miles Bader
2008-07-03 13:18                                         ` Ted Zlatanov
2008-07-03 22:06                                           ` Stefan Monnier
2008-07-03 14:50                                         ` Dan Nicolaescu
2008-07-03 15:37                                       ` Phil Jackson
2008-07-03 16:59                                         ` Drew Adams
2008-07-04 10:46                                       ` Eli Zaretskii
2008-07-04 10:59                                         ` Miles Bader
2008-07-30 17:49                               ` Yanking isearch to highlight-regexp Juri Linkov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=878wwp1an8.fsf@jurta.org \
    --to=juri@jurta.org \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).