From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13136 invoked by alias); 8 Jul 2015 15:03:30 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 35737 Received: (qmail 16654 invoked from network); 8 Jul 2015 15:03:28 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2 autolearn=ham autolearn_force=no version=3.4.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.co.uk; s=s2048; t=1436367454; bh=eZzORZnWDuIvo06vOQ6YCrpzwKpfmzcJr6d7jvGeu0E=; h=In-reply-to:From:References:To:Subject:Date:From:Subject; b=V48b35EAsHKZIg9xcwDePstF0TXXie2noxp95MBVI2YRwVHOdHPg3jCCSb5tHyBD+lGhWziFv4rP6XwOIyuJ5RvXTkcD3cmU0Hpr0Bfyg+36VKB/mF7bSPI2YDn1XGlDSrnFO08MYU/LATjLS9Hw4fp+ERq3FBr7/uWlpUy+gM/s8QpjzBo3oqANjApkIIE80lD2bAoUUnZhytFxc1bW08FOFtrHDVV2A5ajHa/MCxB4nuV4OHGeqtYxnZuYZOch8irz+JhvJ7a48oPBfSFAWtkGs7wUG6RJdicV9EjGFmwO/L2W9ughhKXdnkgXOUdIQMcGAJHKz9foYP5AP6i/Sw== X-Yahoo-Newman-Id: 626148.31032.bm@smtp128.mail.ir2.yahoo.com X-Yahoo-Newman-Property: ymail-3 X-YMail-OSG: ewoRrJwVM1lpR9tY3fZCwyUzZWgFxCjAgasMkEQTkeXzvgn O45LhGNJjkBCSRPAG0u1vPJDQ4NzCFPD6FNlqLsZTAVficAcQNrrO6sr4hEP 0r6VXNONi2IBfHr7HSGlaAS7o0GFlGIpl9lq7U7Q0D4tIOtUec1lsfhgSRYb u.35QKbWYM5sTC7U3vqY8ovDl7d7M.n0vNLoZKNdMbm5P5Z6TBvPWW8Br5Gk PqmC0gEJMpg87onAEN8YEmMtUiD5WUGimDqDUPHFsbcGSgP2lrB_AMet7gzV fmYDQSDNY5FDlcRkJPEgOEK7vlFZmBwXVNkSz3JUZmVqkOEuN.zNtiKNNLI5 Ch4ihuk6xNEyqIA6qVm.beLoZ6wrK685UFNN4y9dCF5TtXAh2SqROwL9naAb 09jacCralVjwfw4otpQ8ikxtRrlxBSdeFusPxuGYXU8kHATLEhLkeoOY_X4B ATzHem7MEaErs73eTjSQjrEP5hpU6HUJ9w9_1Hded9Yfj7eZUrEJ36vruQp9 weitTTwJLn.D0A_Qn1b2.praZ.GO4ow-- X-Yahoo-SMTP: opAkk_CswBAce_kJ3nIPlH80cJI- In-reply-to: <20150706202554.02d6c73a@ntlworld.com> From: Oliver Kiddle References: <8242.1435937191@thecus.kiddle.eu> <20150706093957.33d9cb25@pwslap01u.europe.root.pri> <4900.1436183185@thecus.kiddle.eu> <20150706202554.02d6c73a@ntlworld.com> To: Zsh workers Subject: Re: Undo is also confused with narrow-to-region MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <17927.1436367453.1@thecus.kiddle.eu> Date: Wed, 08 Jul 2015 16:57:33 +0200 Message-ID: <17928.1436367453@thecus.kiddle.eu> Peter wrote: > > The example I've given shows an explicit save and restore. It should > also be possible to use the double function scope trick, though I didn't > actually try. > > I haven't imposed any arbitrary limits on the value in UNDO_LIMIT_NO as, > on thinking about it, it seemed to create hostages to fortune for no > obvious gain. Thanks. Trying to apply this in read-from-minibuffer, I found that it was necessary to add a split-undo in after the BUFFER etc were setup, otherwise it was possible to do one initial undo. Also, I wonder if the if condition should do a return 1 rather than break so that it beeps - consistently with an undo that has reached the very first change. Or is the setlastline() call needed? Oliver diff --git a/Functions/Zle/read-from-minibuffer b/Functions/Zle/read-from-minibuffer index 8fec110..2b96a36 100644 --- a/Functions/Zle/read-from-minibuffer +++ b/Functions/Zle/read-from-minibuffer @@ -20,7 +20,7 @@ done (( OPTIND > 1 )) && shift $(( OPTIND - 1 )) local readprompt="$1" lbuf_init="$2" rbuf_init="$3" -integer changeno=$UNDO_CHANGE_NO +integer savelim=$UNDO_LIMIT_NO changeno=$UNDO_CHANGE_NO { # Use anonymous function to make sure special values get restored, @@ -43,6 +43,8 @@ integer changeno=$UNDO_CHANGE_NO else local NUMERIC unset NUMERIC + zle split-undo + UNDO_LIMIT_NO=$UNDO_CHANGE_NO zle recursive-edit -K main stat=$? (( stat )) || REPLY=$BUFFER @@ -52,6 +54,7 @@ integer changeno=$UNDO_CHANGE_NO # This removes the edits relating to the read from the undo history. # These aren't useful once we get back to the main editing buffer. zle undo $changeno + UNDO_LIMIT_NO=save_limit } return $stat diff --git a/Src/Zle/zle_utils.c b/Src/Zle/zle_utils.c index 198c0ba..8b55403 100644 --- a/Src/Zle/zle_utils.c +++ b/Src/Zle/zle_utils.c @@ -1587,7 +1587,7 @@ undo(char **args) if (prev->changeno < last_change) break; if (prev->changeno < undo_limitno && !*args) - break; + return 1; if (unapplychange(prev)) curchange = prev; else