zsh-workers
 help / color / mirror / code / Atom feed
* oddity with history-incremental-{,pattern-}search-backward
@ 2008-04-30 21:42 Mikael Magnusson
  2008-04-30 23:40 ` Wayne Davison
  2008-05-01 11:29 ` Peter Stephenson
  0 siblings, 2 replies; 3+ messages in thread
From: Mikael Magnusson @ 2008-04-30 21:42 UTC (permalink / raw)
  To: zsh-workers

With the new pattern isearch thingy, if i search for whatever and
press ctrl-r a couple of times, it finds older items as it should, but
when i press backspace, it seems to somehow erase the ^r going forward
in history again. I would expect it to just delete the character right
away...

Actually it seems like the non-pattern isearch behaves in the same
way, but somehow i never noticed it. The reason i found it now is i
was experimenting with the new color hilighting and typed ?(#c10) but
wanted to change it to ?(#c80) after pressing ctrl-r a couple of
times.

Is it a bug or a feature? :)

-- 
Mikael Magnusson


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: oddity with history-incremental-{,pattern-}search-backward
  2008-04-30 21:42 oddity with history-incremental-{,pattern-}search-backward Mikael Magnusson
@ 2008-04-30 23:40 ` Wayne Davison
  2008-05-01 11:29 ` Peter Stephenson
  1 sibling, 0 replies; 3+ messages in thread
From: Wayne Davison @ 2008-04-30 23:40 UTC (permalink / raw)
  To: Mikael Magnusson; +Cc: zsh-workers

On Wed, Apr 30, 2008 at 11:42:40PM +0200, Mikael Magnusson wrote:
> when i press backspace, it seems to somehow erase the ^r going forward
> in history again.

Right, that's how incremental search works in emacs, and thus how it
works in zsh's emacs-like searching.

..wayne..


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: oddity with history-incremental-{,pattern-}search-backward
  2008-04-30 21:42 oddity with history-incremental-{,pattern-}search-backward Mikael Magnusson
  2008-04-30 23:40 ` Wayne Davison
@ 2008-05-01 11:29 ` Peter Stephenson
  1 sibling, 0 replies; 3+ messages in thread
From: Peter Stephenson @ 2008-05-01 11:29 UTC (permalink / raw)
  To: zsh-workers

On Wed, 30 Apr 2008 23:42:40 +0200
"Mikael Magnusson" <mikachu@gmail.com> wrote:
> With the new pattern isearch thingy, if i search for whatever and
> press ctrl-r a couple of times, it finds older items as it should, but
> when i press backspace, it seems to somehow erase the ^r going forward
> in history again. I would expect it to just delete the character right
> away...

It's very easy to add a way of doing this, using the backward delete/kill
word widgets (the mnemonic is obvious: they repeatedly have the effect of
backward delete character).  Much of the code change is reindentation.

I've also documented the commands in isearch better, rather than just
saying "yeah, this does stuff, too".

Index: Doc/Zsh/zle.yo
===================================================================
RCS file: /cvsroot/zsh/zsh/Doc/Zsh/zle.yo,v
retrieving revision 1.67
diff -u -r1.67 zle.yo
--- Doc/Zsh/zle.yo	1 May 2008 10:58:24 -0000	1.67
+++ Doc/Zsh/zle.yo	1 May 2008 11:24:28 -0000
@@ -1106,32 +1106,65 @@
 is available in the mini-buffer.  An interrupt signal, as defined by the stty
 setting, will stop the search and go back to the original line.  An undefined
 key will have the same effect. The supported functions are:
-tt(backward-delete-char),
-tt(vi-backward-delete-char),
-tt(clear-screen),
-tt(redisplay),
-tt(quoted-insert),
-tt(vi-quoted-insert),
-tt(accept-and-hold),
-tt(accept-and-infer-next-history),
-tt(accept-line) and
-tt(accept-line-and-down-history).
 
-tt(magic-space) just inserts a space.
-tt(vi-cmd-mode) toggles between the `tt(main)' and `tt(vicmd)' keymaps;
+startitem()
+xitem(tt(accept-and-hold))
+xitem(tt(accept-and-infer-next-history))
+xitem(tt(accept-line))
+item(tt(accept-line-and-down-history))(
+Perform the usual function after exiting incremental search.
+The command line displayed is executed.
+)
+xitem(tt(backward-delete-char))
+item(tt(vi-backward-delete-char))(
+Back up one place in the search history.  If the search has been
+repeated this does not immediately erase a character in the
+minibuffer.
+)
+xitem(tt(backward-delete-word))
+xitem(tt(backward-kill-word))
+item(tt(vi-backward-kill-word))(
+Back up one character in the minibuffer; if multiple searches
+have been performed since the character was inserted the search
+history is rewound to the point just before the character was
+entered.  Hence this has the effect of repeating
+tt(backward-delete-char).
+)
+item(tt(clear-screen))(
+Clear the screen, remaining in incremental search mode.
+)
+item(tt(history-incremental-search-backward))(
+Find the next occurrence of the contents of the mini-buffer.
+)
+item(tt(history-incremental-search-forward))(
+Invert the sense of the search.
+)
+item(tt(magic-space))(
+Inserts a non-magical space.
+)
+xitem(tt(quoted-insert))
+item(tt(vi-quoted-insert))(
+Quote the character to insert into the minibuffer.
+)
+item(tt(redisplay))(
+Redisplay the command line, remaining in incremental search mode.
+)
+item(tt(vi-cmd-mode))(
+Toggle between the `tt(main)' and `tt(vicmd)' keymaps;
 the `tt(main)' keymap (insert mode) will be selected initially.
-tt(history-incremental-search-backward) will get the
-next occurrence of the contents of the mini-buffer.
-tt(history-incremental-search-forward) inverts the sense of the search.
-tt(vi-repeat-search) and tt(vi-rev-repeat-search) are similarly supported.
-The direction of the search is indicated in the mini-buffer.
-
-Any multi-character string
-that is not bound to one of the above functions will beep and interrupt the
-search, leaving the last found line in the buffer. Any single character that
-is not bound to one of the above functions, or tt(self-insert) or
-tt(self-insert-unmeta), will have the same effect but the function will be
-executed.
+)
+xitem(tt(vi-repeat-search))
+item(tt(vi-rev-repeat-search))(
+Repeat the search.  The direction of the search is indicated in the
+mini-buffer.
+)
+enditem()
+
+Any multi-character string that is not bound to one of the above functions
+will beep and interrupt the search, leaving the last found line in the
+buffer. Any single character that is not bound to one of the above
+functions, or tt(self-insert) or tt(self-insert-unmeta), will have the same
+effect but the function will be executed.
 
 When called from a widget function by the tt(zle) command, the incremental
 search commands can take a string argument.  This will be treated as a
Index: Src/Zle/zle_hist.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/zle_hist.c,v
retrieving revision 1.53
diff -u -r1.53 zle_hist.c
--- Src/Zle/zle_hist.c	28 Apr 2008 15:45:43 -0000	1.53
+++ Src/Zle/zle_hist.c	1 May 2008 11:24:28 -0000
@@ -1445,26 +1445,37 @@
 	    if(selectkeymap(invicmdmode() ? "main" : "vicmd", 0))
 		feep = 1;
 	    goto ref;
-       } else if(cmd == Th(z_vibackwarddeletechar) ||
-               cmd == Th(z_backwarddeletechar)) {
-           if (top_spot) {
-               get_isrch_spot(--top_spot, &hl, &pos, &pat_hl, &pat_pos,
-                              &end_pos, &zlemetacs, &sbptr, &dir, &nomatch);
-               patprog = NULL;
-               nosearch = 1;
-               skip_pos = 0;
-           } else
-               feep = 1;
-           if (nomatch) {
-               memcpy(ibuf, nomatch == 2 ? INVALID_TEXT : FAILING_TEXT,
-                      BAD_TEXT_LEN);
-               statusline = ibuf;
-               skip_pos = 1;
+       } else if (cmd == Th(z_vibackwarddeletechar) ||
+		  cmd == Th(z_backwarddeletechar) ||
+		  cmd == Th(z_vibackwardkillword) ||
+		  cmd == Th(z_backwardkillword) ||
+		  cmd == Th(z_backwarddeleteword)) {
+	    int only_one = (cmd == Th(z_vibackwarddeletechar) ||
+			    cmd == Th(z_backwarddeletechar));
+	    int old_sbptr = sbptr;
+	    if (top_spot) {
+		for (;;) {
+		    get_isrch_spot(--top_spot, &hl, &pos, &pat_hl,
+				   &pat_pos,  &end_pos, &zlemetacs,
+				   &sbptr, &dir, &nomatch);
+		    if (only_one || !top_spot || old_sbptr != sbptr)
+			break;
+		}
+		patprog = NULL;
+		nosearch = 1;
+		skip_pos = 0;
+	    } else
+		feep = 1;
+	    if (nomatch) {
+		memcpy(ibuf, nomatch == 2 ? INVALID_TEXT : FAILING_TEXT,
+		       BAD_TEXT_LEN);
+		statusline = ibuf;
+		skip_pos = 1;
 	    }
 	    he = quietgethist(hl);
 	    zt = GETZLETEXT(he);
 	    /*
-	     * Set the line for the cases where we won't go passed
+	     * Set the line for the cases where we won't go past
 	     * the usual line-setting logic:  if we're not on a match,
 	     * or if we don't have enough to search for.
 	     */



-- 
Peter Stephenson <pws@csr.com>                  Software Engineer
CSR PLC, Churchill House, Cambridge Business Park, Cowley Road
Cambridge, CB4 0WZ, UK                          Tel: +44 (0)1223 692070


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2008-05-01 11:30 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-04-30 21:42 oddity with history-incremental-{,pattern-}search-backward Mikael Magnusson
2008-04-30 23:40 ` Wayne Davison
2008-05-01 11:29 ` Peter Stephenson

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

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 NNTP newsgroup(s).