zsh-users
 help / color / mirror / code / Atom feed
From: "Lawrence Velázquez" <larryv@zsh.org>
To: "Anthony Heading" <ajrh@ajrh.net>
Cc: zsh-users@zsh.org
Subject: Re: view onto command pipeline?
Date: Wed, 20 Jul 2022 23:15:32 -0400	[thread overview]
Message-ID: <9fb183bb-8478-4eea-b543-124fb2181f10@www.fastmail.com> (raw)
In-Reply-To: <9310fc4a-8db9-48d8-873b-c50a63f9aea5@www.fastmail.com>

On Wed, Jul 20, 2022, at 10:11 PM, Anthony Heading wrote:
> On Wed, Jul 20, 2022, at 9:35 PM, Lawrence Velázquez wrote:
>> Leaving $opts[@] unquoted still elides empty elements in this
>> context; that behavior is not limited to $@.  (If this is what you
>> actually want, go for it.  Just don't think that fiddling with
>> options has an effect.)
>>
>
> Yes indeed!  Though recall the context here was a *fixed* *literal* array:
>     opts=(-c color.ui=always)
>     command git $opts "$@"
>
> Quoting "$@" agreed, but writing "${opts[@]}" instead here seems
> a little bit like self-flagellation, no?

Sure, it doesn't matter for this particular case.  I didn't notice
that you were hardcoding the array contents.


>> It's better to run ''emulate -L zsh'' inside the function itself
>> (or localize and [un]set options individually as desired) to achieve
>> a known state, rather than relying on a specific method of invocation.
>
> Oh, interesting!  why is that?  Certainly want to get the most
> stable state. I do vaguely remember tricky corner cases being discussed
> on zsh-workers maybe decades ago, but it seems to work great now.
> And, unless I picked up this autoload idiom from the mailing list,
> I think it's from the man pages somewhere.   If you're advising that
> it's sub-optimal, should it be removed or caveated in the documentation?

I assume you're referring to this
(https://zsh.sourceforge.io/Doc/Release/Shell-Builtin-Commands.html#index-autoload):

    Note that the autoload command makes no attempt to ensure the shell
    options set during the loading or execution of the file have any
    particular value.  For this, the emulate command can be used:

        emulate zsh -c 'autoload -Uz func'

    arranges that when func is loaded the shell is in native zsh
    emulation, and this emulation is also applied when func is run.

I'm not saying there's anything incorrect here.  I imagine it's
useful if you're using functions written by others that break due
to options you've set or unset in your own environment.

What I'm saying is that if you are writing your own functions, you
should try to write them so they proactively establish whatever
state they require, instead of punting that responsibility to the
caller.  (This is just common sense.)  If you need many options to
have their zsh-native default values, then it generally suffices
to call

    emulate -L zsh

at the beginning of the function.


-- 
vq


  reply	other threads:[~2022-07-21  3:17 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-16 16:15 Anthony Heading
2022-07-16 21:30 ` Bart Schaefer
2022-07-20 11:23   ` Anthony Heading
2022-07-20 11:37     ` Dominik Vogt
2022-07-20 12:22       ` Vincent Bernat
2022-07-20 12:35         ` Dominik Vogt
2022-07-20 19:07           ` Lawrence Velázquez
2022-07-21  0:15       ` Anthony Heading
2022-07-21  1:35         ` Lawrence Velázquez
2022-07-21  2:11           ` Anthony Heading
2022-07-21  3:15             ` Lawrence Velázquez [this message]
2022-07-21  6:43             ` Dominik Vogt
2022-08-04 21:12             ` Felipe Contreras
2022-07-20 19:27     ` Phil Pennock
2022-07-21  0:18       ` Anthony Heading

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=9fb183bb-8478-4eea-b543-124fb2181f10@www.fastmail.com \
    --to=larryv@zsh.org \
    --cc=ajrh@ajrh.net \
    --cc=zsh-users@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).