diff --git a/tests/rules/test_man.py b/tests/rules/test_man.py index 01eab173..c4714881 100644 --- a/tests/rules/test_man.py +++ b/tests/rules/test_man.py @@ -23,7 +23,8 @@ def test_not_match(command): @pytest.mark.parametrize('command, new_command', [ - (Command('man read'), ['man 3 read', 'man 2 read']), + (Command('man read'), ['man 3 read', 'man 2 read', 'read --help']), + (Command('man missing', stderr="No manual entry for missing\n"), ['missing --help']), (Command('man 2 read'), 'man 3 read'), (Command('man 3 read'), 'man 2 read'), (Command('man -s2 read'), 'man -s3 read'), diff --git a/thefuck/rules/man.py b/thefuck/rules/man.py index ead1361b..e4ec54d9 100644 --- a/thefuck/rules/man.py +++ b/thefuck/rules/man.py @@ -12,10 +12,22 @@ def get_new_command(command): if '2' in command.script: return command.script.replace("2", "3") + last_arg = command.script_parts[-1] + help_command = last_arg + ' --help' + + # If there are no man pages for last_arg, suggest `last_arg --help` instead. + # Otherwise, suggest `--help` after suggesting other man page sections. + if command.stderr.strip() == 'No manual entry for ' + last_arg: + return [help_command] + split_cmd2 = command.script_parts split_cmd3 = split_cmd2[:] split_cmd2.insert(1, ' 2 ') split_cmd3.insert(1, ' 3 ') - return ["".join(split_cmd3), "".join(split_cmd2)] + return [ + "".join(split_cmd3), + "".join(split_cmd2), + help_command, + ]