diff --git a/src/complete.cpp b/src/complete.cpp index 65c21ada4..53f29ee18 100644 --- a/src/complete.cpp +++ b/src/complete.cpp @@ -1060,6 +1060,7 @@ bool completer_t::complete_param_for_command(const wcstring &cmd_orig, const wcs if (!this->condition_test(o.condition)) continue; if (o.option.empty()) { use_files = use_files && (!(o.result_mode.no_files)); + has_force = has_force || o.result_mode.force_files; complete_from_args(str, o.comp, o.localized_desc(), o.flags); } @@ -1144,7 +1145,10 @@ bool completer_t::complete_param_for_command(const wcstring &cmd_orig, const wcs } } - if (!(has_force || use_files)) { + if (has_force) { + *out_do_file = true; + } + else if (!use_files) { *out_do_file = false; } return true; diff --git a/tests/checks/complete.fish b/tests/checks/complete.fish index 412076c2e..5ba7ce08d 100644 --- a/tests/checks/complete.fish +++ b/tests/checks/complete.fish @@ -386,4 +386,13 @@ echo >$dir/target complete -C ': $dir/' # CHECK: $dir/target rm $dir/target -rmdir $dir + +cd $dir +touch yummyinmytummy +complete -c fudge -f +complete -c fudge -n '__fish_seen_subcommand_from eat' -F +complete -C'fudge eat yummyin' +# CHECK: yummyinmytummy +cd - + +rm -r $dir