emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

C-f in isearch's non-incremental minibuffer edit


From: Stefan Monnier
Subject: C-f in isearch's non-incremental minibuffer edit
Date: Sat, 16 Apr 2005 08:53:13 -0400
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (gnu/linux)

If you hit M-e in isearch (isearch-eidt-string), you're put in a normal
minibuffer where you can edit your search string with the usual command (but
not incrementally any more).  This comes in handy at times.

But I recently noticed that it behaves very strangely: if I move point
towards the end with something like C-f, when I reach the end of the
minibuffer instead of getting the usual beep I see chars from the main
buffer being added.

It seems like it's a new "feature", but it looks much more like a bug to me.
It was introduced as part of:

        * isearch.el (isearch-mode-map): Bind C-M-w to isearch-del-char,
        C-M-y to isearch-yank-char.  Bind M-% to isearch-query-replace,
        C-M-% to isearch-query-replace-regexp.
        (minibuffer-local-isearch-map): Add arrow key bindings.
        Bind C-f to isearch-yank-char-in-minibuffer.
        (isearch-forward): Doc fix.
        (isearch-edit-string): Doc fix.
        (isearch-query-replace, isearch-query-replace-regexp): New funs.
        (isearch-del-char): Add optional arg.  Set isearch-yank-flag to t.
        (isearch-yank-char): Add optional arg.
        (isearch-yank-char-in-minibuffer): New fun.

and I strongly suggest we revert this part of the change: the point of the
isearch-edit-string functionality is to get back a *normal* minibuffer.

While I'm at it, I also suggest we make isearch-edit-string use the usual
history functionality, so it behaves even more normally.

See patch below.  The important part is the one concerning
isearch-yank-char-in-minibuffer: I think it is important to remove those
surprising bindings.

If you object to this patch, please specify if you object to both changes
(the isearch-yank-char-in-minibuffer and the history part) or to only one of
the two.


        Stefan


--- orig/lisp/isearch.el
+++ mod/lisp/isearch.el
@@ -403,17 +403,9 @@
   (let ((map (make-sparse-keymap)))
     (set-keymap-parent map minibuffer-local-map)
     (define-key map "\r"    'isearch-nonincremental-exit-minibuffer)
-    (define-key map "\M-n"  'isearch-ring-advance-edit)
-    (define-key map [next]  'isearch-ring-advance-edit)
-    (define-key map [down]  'isearch-ring-advance-edit)
-    (define-key map "\M-p"  'isearch-ring-retreat-edit)
-    (define-key map [prior] 'isearch-ring-retreat-edit)
-    (define-key map [up]    'isearch-ring-retreat-edit)
     (define-key map "\M-\t" 'isearch-complete-edit)
     (define-key map "\C-s"  'isearch-forward-exit-minibuffer)
     (define-key map "\C-r"  'isearch-reverse-exit-minibuffer)
-    (define-key map "\C-f"  'isearch-yank-char-in-minibuffer)
-    (define-key map [right] 'isearch-yank-char-in-minibuffer)
     map)
   "Keymap for editing isearch strings in the minibuffer.")
 
@@ -911,8 +903,6 @@
 \\[isearch-nonincremental-exit-minibuffer] to do one nonincremental search.
 \\[isearch-forward-exit-minibuffer] to resume isearching forward.
 \\[isearch-reverse-exit-minibuffer] to resume isearching backward.
-\\[isearch-ring-advance-edit] to replace the search string with the next item 
in the search ring.
-\\[isearch-ring-retreat-edit] to replace the search string with the previous 
item in the search ring.
 \\[isearch-complete-edit] to complete the search string using the search ring.
 \\<isearch-mode-map>
 If first char entered is \\[isearch-yank-word-or-char], then do word search 
instead."
@@ -998,12 +988,12 @@
                  (isearch-unread e))
                (setq cursor-in-echo-area nil)
                (setq isearch-new-string
-                     (let (junk-ring)
-                       (read-from-minibuffer
-                        (isearch-message-prefix nil isearch-nonincremental)
-                        isearch-string
-                        minibuffer-local-isearch-map nil
-                        'junk-ring nil t))
+                      (read-from-minibuffer
+                       (isearch-message-prefix nil isearch-nonincremental)
+                       isearch-string
+                       minibuffer-local-isearch-map nil
+                       (if isearch-regexp 'regexp-search-ring 'search-ring)
+                       nil t)
                      isearch-new-message
                      (mapconcat 'isearch-text-char-description
                                 isearch-new-string "")))
@@ -1358,17 +1348,6 @@
          (goto-char isearch-other-end))
      (buffer-substring-no-properties (point) (funcall jumpform)))))
 
-(defun isearch-yank-char-in-minibuffer (&optional arg)
-  "Pull next character from buffer into end of search string in minibuffer."
-  (interactive "p")
-  (if (eobp)
-      (insert
-       (save-excursion
-         (set-buffer (cadr (buffer-list)))
-         (buffer-substring-no-properties
-          (point) (progn (forward-char arg) (point)))))
-    (forward-char arg)))
-
 (defun isearch-yank-char (&optional arg)
   "Pull next character from buffer into search string."
   (interactive "p")
@@ -1912,49 +1891,6 @@
   (interactive)
   (isearch-ring-adjust nil))
 
-(defun isearch-ring-advance-edit (n)
-  "Insert the next element of the search history into the minibuffer.
-With prefix arg N, insert the Nth element."
-  (interactive "p")
-  (let* ((yank-pointer-name (if isearch-regexp
-                               'regexp-search-ring-yank-pointer
-                             'search-ring-yank-pointer))
-        (yank-pointer (eval yank-pointer-name))
-        (ring (if isearch-regexp regexp-search-ring search-ring))
-        (length (length ring)))
-    (if (zerop length)
-       ()
-      (set yank-pointer-name
-          (setq yank-pointer
-                (mod (- (or yank-pointer 0) n)
-                     length)))
-
-      (delete-field)
-      (insert (nth yank-pointer ring))
-      (goto-char (point-max)))))
-
-(defun isearch-ring-retreat-edit (n)
-  "Insert the previous element of the search history into the minibuffer.
-With prefix arg N, insert the Nth element."
-  (interactive "p")
-  (isearch-ring-advance-edit (- n)))
-
-;;(defun isearch-ring-adjust-edit (advance)
-;;  "Use the next or previous search string in the ring while in minibuffer."
-;;  (isearch-ring-adjust1 advance)
-;;  (erase-buffer)
-;;  (insert isearch-string))
-
-;;(defun isearch-ring-advance-edit ()
-;;  (interactive)
-;;  (isearch-ring-adjust-edit 'advance))
-
-;;(defun isearch-ring-retreat-edit ()
-;;  "Retreat to the previous search string in the ring while in the 
minibuffer."
-;;  (interactive)
-;;  (isearch-ring-adjust-edit nil))
-
-
 (defun isearch-complete1 ()
   ;; Helper for isearch-complete and isearch-complete-edit
   ;; Return t if completion OK, nil if no completion exists.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]