cli: make --help/--version always CMD-specific
This simplifies the --help/-h and --version flags by making them position independent: no matter where they appear in the command line, if there is a command argument they will show the command's help or version (where applicable), instead of the hledger executable's.
This commit is contained in:
		
							parent
							
								
									12447ffab7
								
							
						
					
					
						commit
						4330427f6b
					
				| @ -55,16 +55,16 @@ m4_dnl Should be kept synced with CliOptions.hs etc. | ||||
| m4_define({{_helpoptions_}}, {{ | ||||
| 
 | ||||
| `-h --help` | ||||
| : show general help (or after COMMAND, command help) | ||||
| : show general or COMMAND help | ||||
| 
 | ||||
| `--man` | ||||
| : show user manual with man | ||||
| : show general or COMMAND user manual with man | ||||
| 
 | ||||
| `--info` | ||||
| : show user manual with info | ||||
| : show general or COMMAND user manual with info | ||||
| 
 | ||||
| `--version` | ||||
| : show version | ||||
| : show general or ADDONCOMMAND version | ||||
| 
 | ||||
| `--debug[=N]` | ||||
| : show debug output (levels 1-9, default: 1) | ||||
|  | ||||
| @ -164,12 +164,14 @@ main = do | ||||
|     journallesserror = error $ cmd++" tried to read the journal but is not supposed to" | ||||
|     runHledgerCommand | ||||
|       -- high priority flags and situations. -h, then --help, then --info are highest priority. | ||||
|       | hasHelpFlag argsbeforecmd = dbgIO "" "-h/--help before command, showing general usage" >> printUsage | ||||
|       | hasInfoFlag argsbeforecmd = dbgIO "" "--info before command, showing general info manual" >> runInfoForTopic "hledger" Nothing | ||||
|       | hasManFlag argsbeforecmd  = dbgIO "" "--man before command, showing general man page" >> runManForTopic "hledger" Nothing | ||||
|       | not (hasHelpFlag argsaftercmd || hasInfoFlag argsaftercmd || hasManFlag argsaftercmd) && (hasVersion argsbeforecmd || (hasVersion argsaftercmd && isInternalCommand)) | ||||
|       | isNullCommand && hasHelpFlag args = dbgIO "" "-h/--help with no command, showing general help" >> printUsage | ||||
|       | isNullCommand && hasInfoFlag args = dbgIO "" "--info with no command, showing general info manual" >> runInfoForTopic "hledger" Nothing | ||||
|       | isNullCommand && hasManFlag args  = dbgIO "" "--man with no command, showing general man page" >> runManForTopic "hledger" Nothing | ||||
|       | not (isExternalCommand || hasHelpFlag args || hasInfoFlag args || hasManFlag args) | ||||
|         && (hasVersion args) --  || (hasVersion argsaftercmd && isInternalCommand)) | ||||
|                                  = putStrLn prognameandversion | ||||
|       | not (hasHelpFlag argsaftercmd || hasInfoFlag argsaftercmd || hasManFlag argsaftercmd) && (hasDetailedVersion argsbeforecmd || (hasDetailedVersion argsaftercmd && isInternalCommand)) | ||||
|       | not (isExternalCommand || hasHelpFlag args || hasInfoFlag args || hasManFlag args)  | ||||
|         && (hasDetailedVersion argsbeforecmd)  --  || (hasDetailedVersion argsaftercmd && isInternalCommand)) | ||||
|                                  = putStrLn prognameanddetailedversion | ||||
|       -- \| (null externalcmd) && "binary-filename" `inRawOpts` rawopts = putStrLn $ binaryfilename progname | ||||
|       -- \| "--browse-args" `elem` args     = System.Console.CmdArgs.Helper.execute "cmdargs-browser" mainmode' args >>= (putStr . show) | ||||
|  | ||||
| @ -1357,8 +1357,7 @@ $ hledger web --serve | ||||
| ``` | ||||
| (because the `--serve` flag belongs to `hledger-web`, not `hledger`). | ||||
| 
 | ||||
| The `-h/--help` and `--version` flags work without `--`, with their position deciding which program they refer to.  | ||||
| Eg `hledger -h web` shows hledger's help, `hledger web -h` shows hledger-web's help. | ||||
| The `-h/--help` and `--version` flags don't require `--`. | ||||
| 
 | ||||
| If you have any trouble with this, remember you can always run the add-on program directly, eg: | ||||
| ```shell | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user