imp: bin: hledger-addon-example.hs script template
This commit is contained in:
		
							parent
							
								
									bb95693779
								
							
						
					
					
						commit
						860cccad70
					
				| @ -149,6 +149,15 @@ $ hledger pijul status | |||||||
| $ hledger pijul record [MSG] | $ hledger pijul record [MSG] | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
|  | ### hledger-addon-example | ||||||
|  | 
 | ||||||
|  | [`hledger-addon-example.hs`](https://github.com/simonmichael/hledger/blob/master/bin/hledger-addon-example.hs) | ||||||
|  | is a starter template for a hledger add-on command. | ||||||
|  | It has the same structure as most of the other add-ons here: | ||||||
|  | - implemented as a stack script for robustness | ||||||
|  | - includes command line help | ||||||
|  | - accepts common hledger options | ||||||
|  | 
 | ||||||
| ### hledger-print-location | ### hledger-print-location | ||||||
| 
 | 
 | ||||||
| [`hledger-print-location.hs`](https://github.com/simonmichael/hledger/blob/master/bin/hledger-print-location.hs) | [`hledger-print-location.hs`](https://github.com/simonmichael/hledger/blob/master/bin/hledger-print-location.hs) | ||||||
|  | |||||||
							
								
								
									
										77
									
								
								bin/hledger-addon-example.hs
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										77
									
								
								bin/hledger-addon-example.hs
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,77 @@ | |||||||
|  | #!/usr/bin/env stack | ||||||
|  | -- stack runghc --verbosity info --package hledger --package string-qq | ||||||
|  | --resolver nightly-2022-07-10 | ||||||
|  | 
 | ||||||
|  | {- | ||||||
|  | hledger-addon-example - a hledger addon command template. | ||||||
|  | 
 | ||||||
|  | This an example of an addon command (an executable named hledger-*). | ||||||
|  | By default it reads your default journal and prints the number of | ||||||
|  | transactions. It supports many of the usual hledger options; run it | ||||||
|  | with -h/--help to see them. When you want to create a new hledger | ||||||
|  | command, save this script under a new name, somewhere in $PATH, | ||||||
|  | keeping it executable, and start tweaking the code. | ||||||
|  | 
 | ||||||
|  | Requirements: | ||||||
|  | 
 | ||||||
|  | This is a stack script, requiring stack to run. hledger addons do not | ||||||
|  | have to be stack scripts, but this one is, as they work well for this. | ||||||
|  | If you prefer you can adapt it to be a cabal script, or you can | ||||||
|  | install the required haskell libraries (see above) and then | ||||||
|  | run/compile it with a suitable runghc/ghc command. | ||||||
|  | 
 | ||||||
|  | The script may require specific versions of the libraries. | ||||||
|  | If run/compiled from inside the hledger source tree, it will use that hledger | ||||||
|  | version and the libs of the stackage resolver in stack.yaml. | ||||||
|  | If run/compiled from outside the hledger source tree, it will use the hledger | ||||||
|  | and libs of the resolver in ~/.stack/global-project/stack.yaml. | ||||||
|  | Or you can uncomment --resolver above to use another resolver. | ||||||
|  | 
 | ||||||
|  | Usage: | ||||||
|  | 
 | ||||||
|  | Executing this script will cause stack to run it in interpreted mode: | ||||||
|  | 
 | ||||||
|  | $ hledger-addon-example.hs | ||||||
|  | 
 | ||||||
|  | Or you can compile first: | ||||||
|  | 
 | ||||||
|  | $ stack ghc hledger-addon-example.hs --package hledger --package string-qq | ||||||
|  | $ hledger-addon-example | ||||||
|  | 
 | ||||||
|  | Whether compiled or not, you can also run it as a hledger subcommand, if it is in $PATH: | ||||||
|  | 
 | ||||||
|  | $ hledger addon-example | ||||||
|  | 
 | ||||||
|  | -} | ||||||
|  | 
 | ||||||
|  | {-# LANGUAGE NamedFieldPuns #-} | ||||||
|  | {-# LANGUAGE QuasiQuotes #-} | ||||||
|  | {-# LANGUAGE RecordWildCards #-} | ||||||
|  | 
 | ||||||
|  | import Data.String.QQ (s) | ||||||
|  | import Text.Printf | ||||||
|  | import Hledger | ||||||
|  | import Hledger.Cli | ||||||
|  | 
 | ||||||
|  | ------------------------------------------------------------------------------ | ||||||
|  | cmdmode = hledgerCommandMode | ||||||
|  |   [s| addon-example | ||||||
|  | Print the number of transactions in the journal. | ||||||
|  | 
 | ||||||
|  | _FLAGS | ||||||
|  |   |] | ||||||
|  |   []  | ||||||
|  |   [generalflagsgroup1] | ||||||
|  |   [] | ||||||
|  |   ([], Nothing) -- Just $ argsFlag "[QUERY]") | ||||||
|  | ------------------------------------------------------------------------------ | ||||||
|  | 
 | ||||||
|  | main :: IO () | ||||||
|  | main = do | ||||||
|  |   opts@CliOpts{reportspec_=rspec} <- getHledgerCliOpts cmdmode | ||||||
|  |   withJournalDo opts $ \j -> do | ||||||
|  |     d <- getCurrentDay | ||||||
|  |     let | ||||||
|  |       q = _rsQuery rspec | ||||||
|  |       ts = filter (q `matchesTransaction`) $ jtxns $ journalApplyValuationFromOpts rspec j | ||||||
|  |     printf "File %s: %d transactions\n" (journalFilePath j) (length ts) | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user