]> git.eshelyaron.com Git - emacs.git/commitdiff
Add prefix arg to more isearch commands.
authorJuri Linkov <juri@jurta.org>
Thu, 13 Jun 2013 20:50:51 +0000 (23:50 +0300)
committerJuri Linkov <juri@jurta.org>
Thu, 13 Jun 2013 20:50:51 +0000 (23:50 +0300)
* lisp/isearch.el (isearch-yank-word, isearch-yank-line)
(isearch-char-by-name, isearch-quote-char)
(isearch-printing-char, isearch-process-search-char):
Add optional count prefix arg.

* lisp/international/isearch-x.el (isearch-process-search-multibyte-characters):
Add optional count prefix arg.

Fixes: debbugs:14563
etc/NEWS
lisp/ChangeLog
lisp/international/isearch-x.el
lisp/isearch.el

index 7e26c2458e8f2e5f3ea953a5dbc6c2bda78fed95..8bf1d17005e67112e652ba90ff8ab2e5bb0f3b1f 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -296,6 +296,10 @@ and opens overlays with hidden text when `search-invisible' is `open'.
 *** By default, prefix arguments do not now terminate Isearch mode.
 Set `isearch-allow-prefix' to nil to restore old behavior.
 
+*** More Isearch commands accept prefix arguments, namely
+`isearch-printing-char', `isearch-quote-char', `isearch-yank-word',
+`isearch-yank-line'.
+
 ** MH-E has been updated to MH-E version 8.5.
 See MH-E-NEWS for details.
 
index 3525568ab2d8afe1fff3f495213a9ca0d213c960..974fad3e3069fa2c0b2d16f1c11a96823ed47c1e 100644 (file)
@@ -1,3 +1,14 @@
+2013-06-13  Juri Linkov  <juri@jurta.org>
+
+       * isearch.el (isearch-yank-word, isearch-yank-line)
+       (isearch-char-by-name, isearch-quote-char)
+       (isearch-printing-char, isearch-process-search-char):
+       Add optional count prefix arg.  (Bug#14563)
+
+       * international/isearch-x.el
+       (isearch-process-search-multibyte-characters):
+       Add optional count prefix arg.
+
 2013-06-13  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * subr.el (internal-push-keymap, internal-pop-keymap): New functions.
        * progmodes/grep.el (grep-regexp-alist): Use variable grep-match-face
        instead of hard-coded default face `match'.  (Bug#9438)
 
-2012-02-01  Christopher Schmidt  <christopher@ch.ristopher.com>
+2013-02-01  Christopher Schmidt  <christopher@ch.ristopher.com>
 
        * vc/vc-arch.el (vc-arch-registered):
        * vc/vc-bzr.el (vc-bzr-registered):
index 992236ce1ad8b8ec52d21a636fcacec9a99798b9..37213b95d3ea3261eb9fb0d55a16ab2589a13cf7 100644 (file)
@@ -94,7 +94,7 @@
     (exit-minibuffer)))
 
 ;;;###autoload
-(defun isearch-process-search-multibyte-characters (last-char)
+(defun isearch-process-search-multibyte-characters (last-char &optional count)
   (if (eq this-command 'isearch-printing-char)
       (let ((overriding-terminal-local-map nil)
            (prompt (isearch-message-prefix))
 
        (if (and str (> (length str) 0))
            (let ((unread-command-events nil))
-             (isearch-process-search-string str str))
+             (if (and (integerp count) (> count 1))
+                 (let ((strs (mapconcat 'identity (make-list count str) "")))
+                   (isearch-process-search-string strs strs))
+               (isearch-process-search-string str str)))
          (isearch-update)))
-    (isearch-process-search-char last-char)))
+    (isearch-process-search-char last-char count)))
 
 ;;; isearch-x.el ends here
index d9f8b0891e4582d3ede82320145f6f203059ed32..4754f86d5d770fae558a3f1c11dad56ce83ea469 100644 (file)
@@ -1919,29 +1919,33 @@ Subword is used when `subword-mode' is activated. "
           (forward-word 1))
        (forward-char 1)) (point))))
 
-(defun isearch-yank-word ()
+(defun isearch-yank-word (&optional arg)
   "Pull next word from buffer into search string."
-  (interactive)
-  (isearch-yank-internal (lambda () (forward-word 1) (point))))
+  (interactive "p")
+  (isearch-yank-internal (lambda () (forward-word arg) (point))))
 
-(defun isearch-yank-line ()
+(defun isearch-yank-line (&optional arg)
   "Pull rest of line from buffer into search string."
-  (interactive)
+  (interactive "p")
   (isearch-yank-internal
    (lambda () (let ((inhibit-field-text-motion t))
-               (line-end-position (if (eolp) 2 1))))))
+               (line-end-position (if (eolp) (1+ arg) arg))))))
 
-(defun isearch-char-by-name ()
+(defun isearch-char-by-name (&optional count)
   "Read a character by its Unicode name and add it to the search string.
-Completion is available like in `read-char-by-name' used by `insert-char'."
-  (interactive)
+Completion is available like in `read-char-by-name' used by `insert-char'.
+With argument, add COUNT copies of the character."
+  (interactive "p")
   (with-isearch-suspended
    (let ((char (read-char-by-name "Add character to search (Unicode name or hex): ")))
      (when char
-       (setq isearch-new-string (concat isearch-string (string char))
-            isearch-new-message (concat isearch-message
-                                        (mapconcat 'isearch-text-char-description
-                                                   (string char) "")))))))
+       (let ((string (if (and (integerp count) (> count 1))
+                        (make-string count char)
+                      (char-to-string char))))
+        (setq isearch-new-string (concat isearch-string string)
+              isearch-new-message (concat isearch-message
+                                          (mapconcat 'isearch-text-char-description
+                                                     string ""))))))))
 
 (defun isearch-search-and-update ()
   ;; Do the search and update the display.
@@ -2382,9 +2386,10 @@ Isearch mode."
           (t;; otherwise nil
           (isearch-process-search-string key key)))))
 
-(defun isearch-quote-char ()
-  "Quote special characters for incremental search."
-  (interactive)
+(defun isearch-quote-char (&optional count)
+  "Quote special characters for incremental search.
+With argument, add COUNT copies of the character."
+  (interactive "p")
   (let ((char (read-quoted-char (isearch-message t))))
     ;; Assume character codes 0200 - 0377 stand for characters in some
     ;; single-byte character set, and convert them to Emacs
@@ -2392,24 +2397,26 @@ Isearch mode."
     (if (and isearch-regexp isearch-regexp-lax-whitespace (= char ?\s))
        (if (subregexp-context-p isearch-string (length isearch-string))
            (isearch-process-search-string "[ ]" " ")
-         (isearch-process-search-char char))
+         (isearch-process-search-char char count))
       (and enable-multibyte-characters
           (>= char ?\200)
           (<= char ?\377)
           (setq char (unibyte-char-to-multibyte char)))
-      (isearch-process-search-char char))))
-
-(defun isearch-printing-char ()
-  "Add this ordinary printing character to the search string and search."
-  (interactive)
-  (let ((char last-command-event))
+      (isearch-process-search-char char count))))
+
+(defun isearch-printing-char (&optional char count)
+  "Add this ordinary printing CHAR to the search string and search.
+With argument, add COUNT copies of the character."
+  (interactive (list last-command-event
+                    (prefix-numeric-value current-prefix-arg)))
+  (let ((char (or char last-command-event)))
     (if (= char ?\S-\ )
        (setq char ?\s))
     (if current-input-method
-       (isearch-process-search-multibyte-characters char)
-      (isearch-process-search-char char))))
+       (isearch-process-search-multibyte-characters char count)
+      (isearch-process-search-char char count))))
 
-(defun isearch-process-search-char (char)
+(defun isearch-process-search-char (char &optional count)
   ;; * and ? are special in regexps when not preceded by \.
   ;; } and | are special in regexps when preceded by \.
   ;; Nothing special for + because it matches at least once.
@@ -2418,12 +2425,15 @@ Isearch mode."
    ((eq   char ?\})      (isearch-fallback t t))
    ((eq   char ?|)       (isearch-fallback t nil t)))
 
-  ;; Append the char to the search string, update the message and re-search.
-  (isearch-process-search-string
-   (char-to-string char)
-   (if (>= char ?\200)
-       (char-to-string char)
-     (isearch-text-char-description char))))
+  ;; Append the char(s) to the search string,
+  ;; update the message and re-search.
+  (let* ((string (if (and (integerp count) (> count 1))
+                    (make-string count char)
+                  (char-to-string char)))
+        (message (if (>= char ?\200)
+                     string
+                   (mapconcat 'isearch-text-char-description string ""))))
+    (isearch-process-search-string string message)))
 
 (defun isearch-process-search-string (string message)
   (setq isearch-string (concat isearch-string string)