doc: sync latest manual/dev guide from wiki
This commit is contained in:
		
							parent
							
								
									6b2dfb3d79
								
							
						
					
					
						commit
						b045d6b530
					
				| @ -4,23 +4,43 @@ | |||||||
| 
 | 
 | ||||||
| ## Quick links | ## Quick links | ||||||
| 
 | 
 | ||||||
| **Released version:**\\ | ^ hledger.org: ^ [[release notes|combined release notes]], [[download|pre-compiled binaries]] ^ | ||||||
| [[Release notes]], | ^ Github: ^ [code](http://github.com/simonmichael/hledger), [commits](http://github.com/simonmichael/hledger/commits), [COMMITS](http://starlogs.net/#simonmichael/hledger) (turn up your volume) \\ [commits only in master](https://github.com/simonmichael/hledger/compare/0.23...master), [commits only in release branch](https://github.com/simonmichael/hledger/compare/master...0.23) \\ [build status (hydra)](http://hydra.cryp.to/jobset/hledger/master#tabs-jobs) \\ [open bugs](https://github.com/simonmichael/hledger/issues?direction=desc&labels=BUG&page=1&sort=created&state=open), [all bugs](https://github.com/simonmichael/hledger/issues?direction=desc&labels=BUG&page=1&sort=created), [open issues](https://github.com/simonmichael/hledger/issues?direction=desc&labels=&page=1&sort=created&state=open), [all issues](https://github.com/simonmichael/hledger/issues?direction=desc&labels=&page=1&sort=created) ^ | ||||||
| [[download|Downloads]]\\ | ^ Hackage: ^ [hledger-lib](http://hackage.haskell.org/package/hledger-lib), [hledger](http://hackage.haskell.org/package/hledger), [hledger-web](http://hackage.haskell.org/package/hledger-web), [hledger-interest](http://hackage.haskell.org/package/hledger-interest), [hledger-irr](http://hackage.haskell.org/package/hledger-irr), [hledger-vty](http://hackage.haskell.org/package/hledger-vty), [hledger-chart](http://hackage.haskell.org/package/hledger-chart), [*hledger*](http://hackage.haskell.org/packages/search?terms=hledger) \\ reverse dependencies: [hledger-lib](http://packdeps.haskellers.com/reverse/hledger-lib), [hledger](http://packdeps.haskellers.com/reverse/hledger), [outdated dependencies](http://packdeps.haskellers.com/feed/?needle=hledger) \\ [download activity](http://best-haskell.herokuapp.com/#/category/Finance) ^ | ||||||
| Hackage: | ^ Stackage: ^ [hledger entry](https://github.com/fpco/stackage/blob/master/Stackage/Config.hs#L449-450), [issues](https://github.com/fpco/stackage/search?q=hledger&ref=cmdform&type=Issues) \\ [build status (jenkins)](http://jenkins.stackage.org/job/Stackage/), last build output: [7.4](http://jenkins.stackage.org/job/Stackage/ghcversion=7.4.2/lastBuild/console), [7.6](http://jenkins.stackage.org/job/Stackage/ghcversion=7.6.3/lastBuild/console), [7.8](http://jenkins.stackage.org/job/Stackage/ghcversion=7.8.2/lastBuild/console) ^ | ||||||
| [hledger-lib](http://hackage.haskell.org/package/hledger-lib), | ^ Debian: ^ source packages \\ [haskell-hledger-lib](http://packages.qa.debian.org/h/haskell-hledger-lib.html), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=haskell-hledger-lib), [haskell-hledger](http://packages.qa.debian.org/h/haskell-hledger.html), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=haskell-hledger), [haskell-hledger-web](http://packages.qa.debian.org/h/haskell-hledger-web.html), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=haskell-hledger-web) \\ binary packages \\ testing: [hledger](https://packages.debian.org/testing/hledger), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger;dist=testing), [hledger-web](https://packages.debian.org/testing/hledger-web), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger-web;dist=testing) \\ unstable: [hledger](https://packages.debian.org/unstable/hledger), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger;dist=unstable), [hledger-web](https://packages.debian.org/unstable/hledger-web), [bugs](https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=hledger-web;dist=unstable) \\ all: [*hledger*](https://packages.debian.org/search?searchon=names&keywords=hledger) \\ popularity stats: [hledger](https://qa.debian.org/popcon.php?package=haskell-hledger), [hledger-web](https://qa.debian.org/popcon.php?package=haskell-hledger-web) \\ [PTS help](https://www.debian.org/doc/manuals/developers-reference/resources.html#pkg-tracking-system) ^ | ||||||
| [hledger](http://hackage.haskell.org/package/hledger), | ^ Ubuntu: ^ source packages \\ [haskell-hledger-lib](https://launchpad.net/ubuntu/+source/haskell-hledger-lib), [bugs](https://bugs.launchpad.net/ubuntu/+source/haskell-hledger-lib), [haskell-hledger](https://launchpad.net/ubuntu/+source/haskell-hledger), [bugs](https://bugs.launchpad.net/ubuntu/+source/haskell-hledger), [haskell-hledger-web](https://launchpad.net/ubuntu/+source/haskell-hledger-web), [bugs](https://bugs.launchpad.net/ubuntu/+source/haskell-hledger-web) \\ binary packages \\ [*hledger*](http://packages.ubuntu.com/search?suite=all&searchon=names&keywords=hledger) ^ | ||||||
| [hledger-web](http://hackage.haskell.org/package/hledger-web), | ^ Gentoo: ^ [hledger](http://gpo.zugaina.org/dev-haskell/hledger), [hledger-web](http://gpo.zugaina.org/dev-haskell/hledger-web), [*hledger*](http://gpo.zugaina.org/Search?search=hledger) ^ | ||||||
| [hledger-interest](http://hackage.haskell.org/package/hledger-interest), | ^ Fedora: ^ [hledger](https://apps.fedoraproject.org/packages/hledger), [*hledger*](https://apps.fedoraproject.org/packages/s/hledger) ^ | ||||||
| [hledger-irr](http://hackage.haskell.org/package/hledger-irr), |  | ||||||
| [hledger-vty](http://hackage.haskell.org/package/hledger-vty), |  | ||||||
| [hledger-chart](http://hackage.haskell.org/package/hledger-chart)\\ |  | ||||||
| Debian: [haskell-hledger](http://packages.qa.debian.org/h/haskell-hledger.html)\\ |  | ||||||
| Ubuntu: [haskell-hledger](https://launchpad.net/ubuntu/+source/haskell-hledger)\\ |  | ||||||
| RedHat/Fedora: [hledger](http://fr2.rpmfind.net/linux/rpm2html/search.php?query=hledger&submit=Search+...)\\ |  | ||||||
| Gentoo: [hledger](http://gpo.zugaina.org/Search?search=hledger)\\ |  | ||||||
| 
 | 
 | ||||||
| <!-- | <!-- list the debian packages for clarity: | ||||||
|  | 3 source: | ||||||
|  | haskell-hledger-lib | ||||||
|  | haskell-hledger | ||||||
|  | haskell-hledger-web | ||||||
|  | 8 binary: | ||||||
|  | hledger | ||||||
|  | hledger-web | ||||||
|  | libghc-hledger-dev | ||||||
|  | libghc-hledger-doc | ||||||
|  | libghc-hledger-prof | ||||||
|  | libghc-hledger-lib-dev | ||||||
|  | libghc-hledger-lib-doc | ||||||
|  | libghc-hledger-lib-prof | ||||||
|  | --> | ||||||
|  | 
 | ||||||
|  | <!-- old/future links --> | ||||||
|  | <!-- [haddock coverage](http://hledger.org/profs/haddock-coverage), --> | ||||||
|  | <!-- [unit test coverage](http://hledger.org/profs/coverage/hpc_index_fun.html), --> | ||||||
|  | <!-- [benchmark](http://hledger.org/profs/latest.bench) --> | ||||||
|  | <!-- [profile](http://hledger.org/profs/latest.prof), --> | ||||||
|  | <!-- [heap](http://hledger.org/profs/latest.ps) --> | ||||||
|  | <!-- [developer notes](http://github.com/simonmichael/hledger/NOTES.org)\ --> | ||||||
|  | <!-- [browse dev API docs](http://hledger.org/api/frames.html) --> | ||||||
|  | <!-- [[developer-guide#set-up-for-development|How to clone it]] --> | ||||||
|  | <!-- [hledger-web dev demo](http://demo.hledger.org:5001) --> | ||||||
|  | 
 | ||||||
|  | <!-- hoogle search form | ||||||
| <script type="text/javascript" src="http://haskell.org/hoogle/datadir/resources/jquery-1.4.2.js"></script> | <script type="text/javascript" src="http://haskell.org/hoogle/datadir/resources/jquery-1.4.2.js"></script> | ||||||
| <script type="text/javascript" src="http://haskell.org/hoogle/datadir/resources/hoogle.js"></script> | <script type="text/javascript" src="http://haskell.org/hoogle/datadir/resources/hoogle.js"></script> | ||||||
| <form action="http://haskell.org/hoogle/" method="get" style="display:inline; margin:0; padding:0;"> | <form action="http://haskell.org/hoogle/" method="get" style="display:inline; margin:0; padding:0;"> | ||||||
| @ -32,28 +52,9 @@ Gentoo: [hledger](http://gpo.zugaina.org/Search?search=hledger)\\ | |||||||
| </form> | </form> | ||||||
| --> | --> | ||||||
| 
 | 
 | ||||||
| **Development version:**\\ |  | ||||||
| [Commits](http://github.com/simonmichael/hledger/commits), |  | ||||||
| [COMMITS!](http://starlogs.net/#simonmichael/hledger) (turn up your volume), |  | ||||||
| [Code](http://github.com/simonmichael/hledger), |  | ||||||
| [[developer-guide#set-up-for-development|How to clone it]] |  | ||||||
| <!-- [hledger-web dev demo](http://demo.hledger.org:5001) --> |  | ||||||
| \\ |  | ||||||
| Reports: |  | ||||||
| [build](http://hydra.cryp.to:8080/project/hledger), |  | ||||||
| [dependencies](http://packdeps.haskellers.com/feed/?needle=hledger) |  | ||||||
| <!-- [haddock coverage](http://hledger.org/profs/haddock-coverage), --> |  | ||||||
| <!-- [unit test coverage](http://hledger.org/profs/coverage/hpc_index_fun.html), --> |  | ||||||
| <!-- [benchmark](http://hledger.org/profs/latest.bench) --> |  | ||||||
| <!-- [profile](http://hledger.org/profs/latest.prof), --> |  | ||||||
| <!-- [heap](http://hledger.org/profs/latest.ps) --> |  | ||||||
| <!-- [developer notes](http://github.com/simonmichael/hledger/NOTES.org)\ --> |  | ||||||
| <!-- [browse dev API docs](http://hledger.org/api/frames.html) --> |  | ||||||
| 
 | 
 | ||||||
| --- | --- | ||||||
| 
 | 
 | ||||||
| *2014: needs an update* |  | ||||||
| 
 |  | ||||||
| ## Project overview | ## Project overview | ||||||
| 
 | 
 | ||||||
| A rough overview/blueprint for the hledger project. | A rough overview/blueprint for the hledger project. | ||||||
| @ -99,6 +100,11 @@ As of 2014/2, hledger.org is a wiki, and most docs are maintained as wiki pages. | |||||||
| Some, particularly the user manual and release notes, still exist in the main source repo as well. | Some, particularly the user manual and release notes, still exist in the main source repo as well. | ||||||
| These should probably not be updated directly, instead they are copied from the wiki before each release. | These should probably not be updated directly, instead they are copied from the wiki before each release. | ||||||
| 
 | 
 | ||||||
|  | ### Code | ||||||
|  | 
 | ||||||
|  | The hledger repo is hosted on github.com: http://github.com/simonmichael/hledger. | ||||||
|  | (You can also jump there via [hledger.org/code[/commits]](http://hledger.org/code), or code.hledger.org[/commits]). | ||||||
|  | 
 | ||||||
| ### Quality control | ### Quality control | ||||||
| 
 | 
 | ||||||
| Relevant tools include: | Relevant tools include: | ||||||
| @ -109,11 +115,17 @@ Relevant tools include: | |||||||
| - documentation tests (make haddocktest + manual) | - documentation tests (make haddocktest + manual) | ||||||
| - ui tests (manual) | - ui tests (manual) | ||||||
| - installation tests (manual) | - installation tests (manual) | ||||||
|  | - code reviews | ||||||
| 
 | 
 | ||||||
| ### Code | ### Code reviews | ||||||
|  | 
 | ||||||
|  | We held a code review party, hopefully the first of many, in July 2014 on the mail list and IRC channel. | ||||||
|  | Here's the original [proposal](http://article.gmane.org/gmane.comp.finance.ledger.hledger/1070) giving some motivation, and the discussion logs, note these are a good source of hledger development tips: | ||||||
|  | 
 | ||||||
|  | - 2014/7/21-25 **hledger-web code & UI** | ||||||
|  |   [mail thread](http://thread.gmane.org/gmane.comp.finance.ledger.hledger/1070), | ||||||
|  |   [IRC log](http://hledger.org/static/irc-20140725-code-review.html) | ||||||
| 
 | 
 | ||||||
| - the hledger repo is hosted on github.com: http://github.com/simonmichael/hledger. |  | ||||||
|   (You can also jump there via [hledger.org/code](http://hledger.org/code) or code.hledger.org). |  | ||||||
| 
 | 
 | ||||||
| <!-- ### release process --> | <!-- ### release process --> | ||||||
| 
 | 
 | ||||||
| @ -129,7 +141,23 @@ Relevant tools include: | |||||||
| 
 | 
 | ||||||
| <!-- ### contributors and credits --> | <!-- ### contributors and credits --> | ||||||
| 
 | 
 | ||||||
| ### Data model | --- | ||||||
|  | 
 | ||||||
|  | ## Implementation notes | ||||||
|  | 
 | ||||||
|  | ### hledger | ||||||
|  | 
 | ||||||
|  | There are two core cabal packages: | ||||||
|  | 
 | ||||||
|  | **[hledger-lib](http://hackage.haskell.org/package/hledger-lib)** - data model, parsing, manipulation, standard reports | ||||||
|  | ([github](https://github.com/simonmichael/hledger/tree/master/hledger-lib))\\ | ||||||
|  | **[hledger](http://hackage.haskell.org/package/hledger)** - command line interface, reusable cli options & helpers | ||||||
|  | ([github](https://github.com/simonmichael/hledger/tree/master/hledger)) | ||||||
|  | 
 | ||||||
|  | Most data types are defined in hledger-lib:Hledger.Data.Types, | ||||||
|  | while functions that operate on them are defined in | ||||||
|  | hledger-lib:Hledger.Data.TYPENAME. | ||||||
|  | Here's a diagram of the main data model: | ||||||
| 
 | 
 | ||||||
| <uml> | <uml> | ||||||
| hide empty members | hide empty members | ||||||
| @ -164,7 +192,101 @@ Amount -- Price | |||||||
| Amount -- AmountStyle | Amount -- AmountStyle | ||||||
| </uml> | </uml> | ||||||
| 
 | 
 | ||||||
|  | hledger parses the journal file into a | ||||||
|  | [Journal](http://hackage.haskell.org/package/hledger-lib-0.23.2/docs/Hledger-Data-Types.html#t:Journal), | ||||||
|  | which contains a list of | ||||||
|  | [Transactions](http://hackage.haskell.org/package/hledger-lib-0.23.2/docs/Hledger-Data-Types.html#t:Transaction), | ||||||
|  | each containing multiple | ||||||
|  | [Postings](http://hackage.haskell.org/package/hledger-lib-0.23.2/docs/Hledger-Data-Types.html#t:Posting) | ||||||
|  | of some | ||||||
|  | [MixedAmount](http://hackage.haskell.org/package/hledger-lib-0.23.2/docs/Hledger-Data-Types.html#t:MixedAmount) | ||||||
|  | (multiple | ||||||
|  | single-[Commodity](http://hackage.haskell.org/package/hledger-lib-0.23.2/docs/Hledger-Data-Types.html#t:Commodity) | ||||||
|  | [Amounts](http://hackage.haskell.org/package/hledger-lib-0.23.2/docs/Hledger-Data-Types.html#t:Amount)) | ||||||
|  | to some | ||||||
|  | [AccountName](http://hackage.haskell.org/package/hledger-lib-0.23.2/docs/Hledger-Data-Types.html#t:AccountName). | ||||||
|  | Commands get and render  | ||||||
|  | [Reports](http://hackage.haskell.org/package/hledger-lib-0.23.2/docs/Hledger-Reports.html) | ||||||
|  | from the Journal, or sometimes from a | ||||||
|  | [Ledger](http://hackage.haskell.org/package/hledger-lib-0.23.2/docs/Hledger-Data-Types.html#t:Ledger), | ||||||
|  | which contains | ||||||
|  | [Accounts](http://hackage.haskell.org/package/hledger-lib-0.23.2/docs/Hledger-Data-Types.html#t:Account) | ||||||
|  | representing the summed balances and other details of each account. | ||||||
| 
 | 
 | ||||||
|  | After surveying the packages, modules, and data types, try tracing the execution of a hledger command: | ||||||
|  | 
 | ||||||
|  | 1. CLI stuff is in [hledger:Hledger.Cli](https://github.com/simonmichael/hledger/tree/master/hledger/Hledger/Cli). | ||||||
|  | 2. [hledger:Hledger.Cli.Main:main](https://github.com/simonmichael/hledger/blob/master/hledger/Hledger/Cli/Main.hs#L179) | ||||||
|  | parses the command line to select a command, then | ||||||
|  | 3. gives it to | ||||||
|  | [hledger:Hledger.Cli.Utils:withJournalDo](https://github.com/simonmichael/hledger/blob/master/hledger/Hledger/Cli/Utils.hs#L61), | ||||||
|  | which runs it after doing all the initial parsing. | ||||||
|  | 4. Parsing code is under | ||||||
|  | [hledger-lib:Hledger.Read](https://github.com/simonmichael/hledger/tree/master/hledger-lib/Hledger/Read.hs), | ||||||
|  | eg the | ||||||
|  | [hledger-lib:Hledger.Read.JournalReader](https://github.com/simonmichael/hledger/tree/master/hledger-lib/Hledger/Read/JournalReader.hs). | ||||||
|  | 5. Commands extract useful information from the parsed data model using | ||||||
|  | [hledger-lib:Hledger.Reports](https://github.com/simonmichael/hledger/tree/master/hledger-lib/Hledger/Reports), | ||||||
|  | and | ||||||
|  | 6. render it to the console. | ||||||
|  | 7. Everything uses the types and data | ||||||
|  | utilities under | ||||||
|  | [hledger-lib:Hledger.Data](https://github.com/simonmichael/hledger/tree/master/hledger-lib/Hledger/Data), | ||||||
|  | and the general helpers from | ||||||
|  | [hledger-lib:Hledger.Utils](https://github.com/simonmichael/hledger/blob/master/hledger-lib/Hledger/Utils.hs) | ||||||
|  | and below. | ||||||
|  | 
 | ||||||
|  | ### hledger-web | ||||||
|  | 
 | ||||||
|  | hledger-web is in a third cabal package: | ||||||
|  | 
 | ||||||
|  | **[hledger-web](http://hackage.haskell.org/package/hledger-web)** - web interface | ||||||
|  | ([github](https://github.com/simonmichael/hledger/tree/master/hledger-web)) | ||||||
|  | 
 | ||||||
|  | It is a single-executable web application using the | ||||||
|  | [yesod](http://yesodweb.com) framework.  It runs a built-in web server | ||||||
|  | serving some views of the journal file, reading it at startup and | ||||||
|  | again whenever it changes. It can also append new transactions to the journal file. | ||||||
|  | There are two main views, which can be filtered with [[manual#query-arguments|query arguments]]: | ||||||
|  | 
 | ||||||
|  | - [/journal](http://demo.hledger.org/journal), showing general journal entries (like `hledger print`) | ||||||
|  | 
 | ||||||
|  | - [/register](http://demo.hledger.org/register?q=inacct:Assets:Bank:Checking), | ||||||
|  |   showing transactions affecting an account (slightly different from | ||||||
|  |   `hledger register`, which shows postings). | ||||||
|  | 
 | ||||||
|  | There is also: | ||||||
|  | 
 | ||||||
|  | - a sidebar (toggled by pressing `s`) showing the chart of accounts (like `hledger balance`) | ||||||
|  | - an [add form](http://demo.hledger.org/journal?add=1) for adding new transactions (press `a`) | ||||||
|  | - a help dialog showing quick help and keybindings (press `h` or click ?) | ||||||
|  | 
 | ||||||
|  | Most of the action is in | ||||||
|  | 
 | ||||||
|  | - [config/routes](https://github.com/simonmichael/hledger/tree/master/hledger-web/config/routes) | ||||||
|  | - [templates/default-layout-wrapper.hamlet](https://github.com/simonmichael/hledger/tree/master/hledger-web/templates/default-layout-wrapper.hamlet) | ||||||
|  | - [Foundation](https://github.com/simonmichael/hledger/tree/master/hledger-web/Foundation.hs) | ||||||
|  | - [Handler.*](https://github.com/simonmichael/hledger/tree/master/hledger-web/Handler) | ||||||
|  | - [static/hledger.js](https://github.com/simonmichael/hledger/tree/master/hledger-web/static/hledger.js) | ||||||
|  | - [static/hledger.css](https://github.com/simonmichael/hledger/tree/master/hledger-web/static/hledger.css) | ||||||
|  | 
 | ||||||
|  | Handler module and function names end with R, like the Yesod-generated route type they deal with. | ||||||
|  | 
 | ||||||
|  | Dynamically generated page content is mostly inline hamlet. | ||||||
|  | Lucius/Julius files and widgets generally are not used, except for the default layout. | ||||||
|  | 
 | ||||||
|  | The quickest way to test changes is `make ghciweb`, `:main --serve`, control-C, `:r`, repeat. | ||||||
|  | No linking is required, and changes to static files like hledger.js are visible after reloading a page. | ||||||
|  | 
 | ||||||
|  | Another way is `yesod devel`, which rebuilds automatically when files | ||||||
|  | change, including config files, templates and static files (but only in the hledger-web package). | ||||||
|  | 
 | ||||||
|  | A third way is `make autoweb`, if you can get it working (see the | ||||||
|  | makefile for instructions). This rebuilds automatically when haskell | ||||||
|  | files change in any of the hledger{-lib,,-web} packages. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | --- | ||||||
| 
 | 
 | ||||||
| ## How to.. | ## How to.. | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -249,8 +249,11 @@ commodity. Amount styles include: | |||||||
| - the decimal point character (period or comma) | - the decimal point character (period or comma) | ||||||
| - the display precision (number of decimal places displayed) | - the display precision (number of decimal places displayed) | ||||||
| 
 | 
 | ||||||
| The canonical style is generally the style of the first posting amount seen in a commodity | The canonical style is generally the style of the first posting amount seen in a commodity. | ||||||
| The precision is the highest precision seen among all posting amounts in the commmodity. | However the display precision will be the highest precision seen in all posting amounts in that commmodity. | ||||||
|  | 
 | ||||||
|  | The precisions used in a price amount, or a D directive, don't affect the canonical display precision directly, but they can affect it indirectly, eg when D's default commodity is applied to a commodity-less amount or when an amountless posting is balanced using a price's commodity (actually this last case does not influence the canonical display precision but probably should). | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| ##### Balance Assertions | ##### Balance Assertions | ||||||
| 
 | 
 | ||||||
| @ -410,14 +413,14 @@ Some examples: | |||||||
| #### Tags | #### Tags | ||||||
| 
 | 
 | ||||||
| You can include *tags* (labels), optionally with values, | You can include *tags* (labels), optionally with values, | ||||||
| in transaction and posting comments, and then [query by tag](#queries). | in transaction and posting comments, and then [[manual#query-arguments|query by tag]]. | ||||||
| This is like Ledger's [metadata](http://ledger-cli.org/3.0/doc/ledger3.html#Metadata) | This is like Ledger's [metadata](http://ledger-cli.org/3.0/doc/ledger3.html#Metadata) | ||||||
| feature, except hledger's tag values are simple strings. | feature, except hledger's tag values are simple strings. | ||||||
| 
 | 
 | ||||||
| A tag is any unspaced word immediately followed by a full colon, eg: `sometag:` . | A tag is any unspaced word immediately followed by a full colon, eg: `sometag:` . | ||||||
| A tag's *value* is the text following the colon, if any, until the next newline or comma, | A tag's *value* is the characters following the colon, if any, until the next comma or newline, | ||||||
| with leading and trailing whitespace removed. Comma may be used to write multiple | with any leading and trailing whitespace removed.  | ||||||
| tags on one line. | Comma may be used to write multiple tags on one line. | ||||||
| 
 | 
 | ||||||
| For example, here is a transaction with three tags, the posting has | For example, here is a transaction with three tags, the posting has | ||||||
| one, and all tags have values except TAG1: | one, and all tags have values except TAG1: | ||||||
| @ -426,6 +429,11 @@ one, and all tags have values except TAG1: | |||||||
|         ; TAG3: a third transaction tag |         ; TAG3: a third transaction tag | ||||||
|         a  $1  ; TAG4: a posting tag |         a  $1  ; TAG4: a posting tag | ||||||
| 
 | 
 | ||||||
|  | **Things to note:** | ||||||
|  | 
 | ||||||
|  | In the journal file, a hledger tag value can contain: text, internal whitespace, or punctuation, but not: commas, newlines, or leading/trailing whitespace (putting quotes around it doesn't work, but probably should). | ||||||
|  | 
 | ||||||
|  | In [[manual#query-arguments|tag queries]], remember the tag name must match exactly, while the value part is the usual case-insensitive infix regular expression match. | ||||||
| #### Directives | #### Directives | ||||||
| 
 | 
 | ||||||
| ##### Account aliases | ##### Account aliases | ||||||
| @ -988,6 +996,9 @@ More typically, use it to see a specific account's activity: | |||||||
| 
 | 
 | ||||||
|     $ hledger register assets:bank:checking |     $ hledger register assets:bank:checking | ||||||
| 
 | 
 | ||||||
|  | The `--historical`/`-H` flag adds the balance from any prior postings | ||||||
|  | to the running total, to show the actual running account balance. | ||||||
|  | 
 | ||||||
| The `--depth` option limits the amount of sub-account detail displayed: | The `--depth` option limits the amount of sub-account detail displayed: | ||||||
| 
 | 
 | ||||||
|     $ hledger register assets:bank:checking --depth 2 |     $ hledger register assets:bank:checking --depth 2 | ||||||
| @ -1429,6 +1440,31 @@ Examples: | |||||||
| --> | --> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | ## Editor support | ||||||
|  | 
 | ||||||
|  | Add-on modes exist for various text editors, to make working with journal | ||||||
|  | files easier. They add colour, navigation aids and helpful commands. | ||||||
|  | For hledger users who edit the journal file directly (the majority), | ||||||
|  | using one of these modes is quite recommended. | ||||||
|  | 
 | ||||||
|  | These were written with Ledger in mind, but also work with hledger files: | ||||||
|  | 
 | ||||||
|  | | Emacs          | http://www.ledger-cli.org/3.0/doc/ledger-mode.html | | ||||||
|  | | Vim            | https://github.com/ledger/ledger/wiki/Getting-started-with-Vim | | ||||||
|  | | Sublime Text   | https://github.com/ledger/ledger/wiki/Using-Sublime-Text | | ||||||
|  | | Textmate       | https://github.com/ledger/ledger/wiki/Using-TextMate-2 | | ||||||
|  | | Text Wrangler  | https://github.com/ledger/ledger/wiki/Editing-Ledger-files-with-TextWrangler | | ||||||
|  | 
 | ||||||
|  | <!-- Some related LedgerTips: | ||||||
|  | https://twitter.com/LedgerTips/status/504061626233159681 | ||||||
|  | https://twitter.com/LedgerTips/status/502820400276193280 | ||||||
|  | https://twitter.com/LedgerTips/status/502503912084361216 | ||||||
|  | https://twitter.com/LedgerTips/status/501767602067472384 | ||||||
|  | --> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| ## Known limitations | ## Known limitations | ||||||
| 
 | 
 | ||||||
| Here are some things to be aware of. | Here are some things to be aware of. | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user