hledger-1.3: Command-line interface for the hledger accounting tool

Safe Haskell | None
Language | Haskell2010

Hledger.Cli.Main

Description

hledger - a ledger-compatible accounting tool. Copyright (c) 2007-2011 Simon Michael simon@joyful.com Released under GPL version 3 or later.

hledger is a partial haskell clone of John Wiegley's "ledger". It generates ledger-compatible register & balance reports from a plain text journal, and demonstrates a functional implementation of ledger. For more information, see http://hledger.org .

This module provides the main function for the hledger command-line executable. It is exposed here so that it can be imported by eg benchmark scripts.

You can use the command line:

    $ hledger --help

or ghci:

    $ ghci hledger
    > j <- readJournalFile Nothing Nothing True "examples/sample.journal"
    > register [] ["income","expenses"] j
    2008/01/01 income               income:salary                   $-1          $-1
    2008/06/01 gift                 income:gifts                    $-1          $-2
    2008/06/03 eat & shop           expenses:food                    $1          $-1
                                    expenses:supplies                $1            0
    > balance [Depth "1"] [] l
                     $-1  assets
                      $2  expenses
                     $-2  income
                      $1  liabilities
    > l <- myLedger

See Hledger.Data.Ledger for more examples.

Synopsis

- mainmode :: [Name] -> Mode RawOpts
- oldconvertmode :: Mode RawOpts
- builtinCommands :: [Mode RawOpts]
- builtinCommandNames :: [String]
- argsToCliOpts :: [String] -> [String] -> IO CliOpts
- moveFlagsAfterCommand :: [String] -> [String]
- isMovableNoArgFlag :: [Char] -> Bool
- isMovableReqArgFlag :: [Char] -> Bool
- isMovableReqArgFlagAndValue :: [Char] -> Bool
- isValue :: [Char] -> Bool
- flagstomove :: [Flag RawOpts]
- noargflagstomove :: [Name]
- reqargflagstomove :: [Name]
- commandsListTemplate :: String
- knownCommands :: [String]
- commandsFromCommandsList :: String -> [String]
- printCommandsList :: [String] -> IO ()
- main :: IO ()

# Documentation

mainmode :: [Name] -> Mode RawOpts #

The overall cmdargs mode describing command-line options for hledger.

oldconvertmode :: Mode RawOpts #

builtinCommands :: [Mode RawOpts] #

builtinCommandNames :: [String] #

argsToCliOpts :: [String] -> [String] -> IO CliOpts #

Parse hledger CLI options from these command line arguments and add-on command names, or raise any error.

moveFlagsAfterCommand :: [String] -> [String] #

A hacky workaround for cmdargs not accepting flags before the subcommand name: try to detect and move such flags after the command. This allows the user to put them in either position. The order of options is not preserved, but this should be ok.

Since we're not parsing flags as precisely as cmdargs here, this is imperfect. We make a decent effort to: - move all no-argument helpinputreport flags - move all required-argument helpinputreport flags along with their values, space-separated or not - not confuse things further or cause misleading errors.

isMovableNoArgFlag :: [Char] -> Bool #

isMovableReqArgFlag :: [Char] -> Bool #

isMovableReqArgFlagAndValue :: [Char] -> Bool #

isValue :: [Char] -> Bool #

flagstomove :: [Flag RawOpts] #

noargflagstomove :: [Name] #

reqargflagstomove :: [Name] #

commandsListTemplate :: String #

Template for the commands list. Includes an entry for known (or hypothetical) builtin and addon commands; these will be filtered based on the commands found at runtime. COUNT is replaced with the number of commands found. OTHERCMDS is replaced with an entry for each unknown addon command found. The command descriptions here should be synced with the commands' builtin help and the command list in the hledger manual.

knownCommands :: [String] #

commandsFromCommandsList :: String -> [String] #

Extract the command names from a commands list like the above: the first word (or words separated by |) of lines beginning with a space.

printCommandsList :: [String] -> IO () #

Print the commands list, modifying the template above based on the currently available addons. Missing addons will be removed, and extra addons will be added under Misc.

main :: IO () #

Let's go.