aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--builtin.cpp9
-rw-r--r--share/functions/__fish_print_help.fish17
2 files changed, 22 insertions, 4 deletions
diff --git a/builtin.cpp b/builtin.cpp
index a01c2519..e4f276f9 100644
--- a/builtin.cpp
+++ b/builtin.cpp
@@ -220,7 +220,14 @@ wcstring builtin_help_get(parser_t &parser, const wchar_t *name)
wcstring_list_t lst;
wcstring out;
const wcstring name_esc = escape_string(name, 1);
- const wcstring cmd = format_string(L"__fish_print_help %ls", name_esc.c_str());
+ wcstring cmd = format_string(L"__fish_print_help %ls", name_esc.c_str());
+ if (!builtin_out_redirect && isatty(1))
+ {
+ // since we're using a subshell, __fish_print_help can't tell we're in
+ // a terminal. Tell it ourselves.
+ int cols = common_get_width();
+ cmd = format_string(L"__fish_print_help --tty-width %d %ls", cols, name_esc.c_str());
+ }
if (exec_subshell(cmd, lst, false /* don't apply exit status */) >= 0)
{
for (size_t i=0; i<lst.size(); i++)
diff --git a/share/functions/__fish_print_help.fish b/share/functions/__fish_print_help.fish
index 46246e34..0af723ba 100644
--- a/share/functions/__fish_print_help.fish
+++ b/share/functions/__fish_print_help.fish
@@ -1,4 +1,11 @@
function __fish_print_help --description "Print help message for the specified fish function or builtin" --argument item
+ # special support for builtin_help_get()
+ set -l tty_width
+ if test "$item" = "--tty-width"
+ set tty_width $argv[2]
+ set item $argv[3]
+ end
+
if test "$item" = '.'
set item source
end
@@ -12,19 +19,23 @@ function __fish_print_help --description "Print help message for the specified f
# Render help output, save output into the variable 'help'
set -l help
+ set -l cols
set -l rLL
- if command test -t 1
+ if test "$tty_width" -gt 0
+ set cols $tty_width
+ else if command test -t 1
# We want to simulate `man`'s dynamic line length, because
# defaulting to 80 kind of sucks.
# Note: using `command test` instead of `test` because `test -t 1`
# doesn't seem to work right.
# Note: grab the size from the stdout terminal in case it's somehow
# different than the stdin of fish.
- set -l cols
+ # use fd 3 to copy our stdout because we need to pipe the output of stty
begin
- # use fd 3 to copy our stdout because we need to pipe the output of stty
stty size 0<&3 | read _ cols
end 3<&1
+ end
+ if test -n "$cols"
set cols (expr $cols - 4) # leave a bit of space on the right
set rLL -rLL=$cols[1]n
end