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/
next prev 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
* 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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.