aboutsummaryrefslogtreecommitdiffhomepage
path: root/share/functions/eval.fish
diff options
context:
space:
mode:
Diffstat (limited to 'share/functions/eval.fish')
-rw-r--r--share/functions/eval.fish22
1 files changed, 22 insertions, 0 deletions
diff --git a/share/functions/eval.fish b/share/functions/eval.fish
index f54dee69..34c4e3aa 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