Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: bracketed paste - chopping trailing newlines



Bart Schaefer wrote on Tue, Sep 01, 2015 at 16:44:48 -0700:
> On Aug 31,  5:47am, Daniel Shahaf wrote:
> } The problem of user not realizing the command hasn't started to run
> } could be solved by having zle_highlight=(paste:...) and/or a 'zle -M'
> } message by default.
> 
> On further reflection I don't think highlighting the paste is sufficient
> to solve this.  Yes, it lets you know that a paste has occurred, but it
> doesn't help with realizing that a paste doesn't result in accept-line
> if you aren't already familiar with that.
> 

The purpose of the standout isn't to tell people that a paste occurred,
but to alert them to the changed behaviour of the shell.  The standout
should serve as a clue that the shell is waiting for input.  It may also
serve as a "concomitant unexplained phenomenon" — "My command isn't
executing, and the text I pasted is in reverse video" — which might
assist the user in debugging the unforeseen behaviour.

> } As I've stated in other threads, my preferred option is to simply never
> } munge the user data at all, to minimize surprising behaviour and
> } maximize compatibility with other places that accept pastes.
> 
> Of course the problem is that "least surprise" for a current user of zsh
> is for the newlines to be accept-line, whereas for a person expecting
> the behavior of a text editor the newlines should just be inserted.
> 

An argument that the "least surprise" for a current user of zsh is the
status quo can be used to argue against any change whatsoever.

> My suggestion of accept-line for a final newline only when RBUFFER is
> empty was meant as the least objectionable hybrid of the two.
> 
> } Is there any other place accepting pastes that removes the final
> } newline?  Everywhere I can think of just pastes the final newline if it
> } was part of the copied text.
> 
> This is also considered by my hybrid suggestion -- the newline is not
> removed; it is part of the paste.  It just means something different at
> the end of the line (it means what a newline usually means at the end
> of a line).

I actually quite like the New World Order, in which nothing gets
executed until I press <Enter>.  The only time it irks me is when I run

    zsh -f
    source ./minimal-repro-recipe.zsh

repeatedly, which I do when debugging the shell... but that doesn't
count as a use-case :)

---

In the meantime, I've reverted the strip-final-newline patch (35834)
locally, and I'll keep an eye on my use patterns to see how well
Carsten's suggestion would work for me.  As to Bart's idea, I expect
I will sometimes try to paste a multiline string and _not_ want it to be
executed (e.g., because I'll want to edit it first); perhaps <^V><paste>
could be used to disable newline-stripping.

Cheers,

Daniel



Messages sorted by: Reverse Date, Date, Thread, Author