diff --git a/share/functions/eval.fish b/share/functions/eval.fish index f54dee69b..34c4e3aa3 100644 --- a/share/functions/eval.fish +++ b/share/functions/eval.fish @@ -1,4 +1,26 @@ function eval -S -d "Evaluate parameters as a command" + + # If we are in an interactive shell, eval should enable full + # job control since it should behave like the real code was + # executed. If we don't do this, commands that expect to be + # used interactively, like less, wont work using eval. + + set -l mode + if status --is-interactive-job-control + set mode interactive + else + if status --is-full-job-control + set mode full + else + set mode none + end + end + if status --is-interactive + status --job-control full + end + echo begin\; $argv \;end eval2_inner \<\&3 3\<\&- | . 3<&0 + + status --job-control $mode end