Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

prompts: fix pipestatus for jobs prefixed with "not" #6566

Merged
merged 1 commit into from Feb 6, 2020

Conversation

krobelus
Copy link
Member

@krobelus krobelus commented Feb 3, 2020

6902459 was an attempt to not print
$status twice in the prompt. As a result we print $pipestatus but
not $status, which usually is the same as $pipestatus[-1] --- unless
the builtin "not" is used, which inverts the $status of a job (it does
not alter $pipestatus).

As a result, the default prompt prints unexpected status codes:

~ > not false
~ [1]> not true
~ > not true | true
~ > not false | false
~ [1|1]>

This commit reintroduces printing of $status after $pipestatus, but only
if it is different from $pipestatus[-1].
Additionally, we only print anything at all if the $status is nonzero,
to avoid confusing output on not false | false

~ > not false
~ > not true
~ [0] 1> not true | true
~ [0|0] 1> not false | false
~ >

I think this is closer to users' expectations for those cases; they should
not have to think about this implementation detail of the not-statement.

6902459 was an attempt to not print
$status twice in the prompt. As a result we print $pipestatus but
not $status, which /usually/ is the same as $pipestatus[-1] --- unless
the builtin "not" is used, which inverts the $status of a job (it does
not alter $pipestatus).

As a result, the default prompt prints unexpected status codes:

	~ > not false
	~ [1]> not true
	~ > not true | true
	~ > not false | false
	~ [1|1]>

This commit reintroduces printing of $status after $pipestatus, but only
if it is different from $pipestatus[-1].
Additionally, we only print anything at all if the $status is nonzero,
to avoid confusing output on `not false | false`

	~ > not false
	~ > not true
	~ [0] 1> not true | true
	~ [0|0] 1> not false | false
	~ >

I think this is closer to users' expectations for those cases; they should
not have to think about this implementation detail of the not-statement.
Copy link
Member

@ridiculousfish ridiculousfish left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This LGTM. I really like the new default prompt.

# SIGPIPE (141 = 128 + 13) is usually not a failure, see #6375.
if string match -qvr '^(0|141)$' $argv
# Only print status codes if the job failed.
if test $last_status -ne 0
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably best to quote this due to test's parsing quirks. "$last_status"

@mqudsi
Copy link
Contributor

mqudsi commented Feb 3, 2020

I agree with the idea, but I think it needs to be a bit more intuitive.
e.g. it is not clear why the number of entries in pipestatus differs for these two:

~ [0] 1> not true | true
~ [0|0] 1> not false | false

@krobelus
Copy link
Member Author

krobelus commented Feb 3, 2020

I agree with the idea, but I think it needs to be a bit more intuitive.
e.g. it is not clear why the number of entries in pipestatus differs for these two:

[0] 1> is the prompt for the previous command, let me format it in a
more obvious to way:

~ > not false
~ >

~ > not true
~ [0] 1>

~ > not true | true
~ [0|0] 1>

~ > not false | false
~ >

For the record, an alternative I was considering is to replace $pipestatus[-1] with $status, like so:

~ > not true
~ [1]>

~ > not true | true
~ [0|1]>

Which would avoid the trailing status when using not, however it is probably not as intuitive when using pipes.

@zanchey zanchey added this to the fish-future milestone Feb 4, 2020
@krobelus krobelus merged commit 5d135d5 into fish-shell:master Feb 6, 2020
@zanchey zanchey modified the milestones: fish-future, fish 3.2.0 Feb 6, 2020
@krobelus krobelus deleted the not-pipestatus branch February 7, 2020 16:53
@github-actions github-actions bot locked as resolved and limited conversation to collaborators May 7, 2020
@faho faho added the bug Something that's not working as intended label Jun 12, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Something that's not working as intended
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants