mirror of
https://github.com/fish-shell/fish-shell
synced 2024-11-10 23:24:39 +00:00
A little extra tweaking so builtin_print_help looks better
The terminal width magic that __fish_print_help learned doesn't help when builtin_print_help runs it in a subshell. Instead, add an undocumented --tty-width flag to __fish_print_help that's used to pass the terminal width.
This commit is contained in:
parent
ac8c5910eb
commit
76c6985f82
2 changed files with 22 additions and 4 deletions
|
@ -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++)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue