hledger-ui 1.50.2 → 1.50.3
raw patch · 16 files changed
+124/−95 lines, 16 filesdep ~hledgerdep ~hledger-libPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: hledger, hledger-lib
API changes (from Hackage documentation)
Files
- CHANGES.md +17/−0
- Hledger/UI/AccountsScreen.hs +4/−4
- Hledger/UI/ErrorScreen.hs +32/−10
- Hledger/UI/Main.hs +5/−6
- Hledger/UI/MenuScreen.hs +4/−4
- Hledger/UI/RegisterScreen.hs +4/−4
- Hledger/UI/Theme.hs +1/−1
- Hledger/UI/TransactionScreen.hs +3/−3
- Hledger/UI/UIOptions.hs +1/−1
- Hledger/UI/UIScreens.hs +2/−2
- Hledger/UI/UIState.hs +1/−1
- Hledger/UI/UIUtils.hs +2/−2
- hledger-ui.1 +5/−6
- hledger-ui.cabal +11/−18
- hledger-ui.info +17/−17
- hledger-ui.txt +15/−16
CHANGES.md view
@@ -23,6 +23,23 @@ See also the hledger changelog. +# 1.50.3 2025-11-18++- `--watch` mode now also detects changes from apps which overwrite the file, such as VS Code.+ (Caleb Maclennan)++- When hledger-ui is started with --pivot, re-enabling balance assertions+ with the I key now does a full journal reload, to check assertions more accurately.+ [#2451]++- The old "threaded" build flag, which cabal could turn off, has been dropped.+ [#2495]++- Allow brick 2.10, vty 6.5.++- Uses hledger 1.50.3.++ # 1.50.2 2025-09-26 - Uses hledger 1.50.2
Hledger/UI/AccountsScreen.hs view
@@ -30,9 +30,9 @@ import Data.List hiding (reverse) #endif import Data.Maybe-import qualified Data.Text as T+import Data.Text qualified as T import Data.Time.Calendar (Day)-import qualified Data.Vector as V+import Data.Vector qualified as V import Data.Vector ((!?)) import Graphics.Vty (Event(..),Key(..),Modifier(..), Button (BLeft, BScrollDown, BScrollUp)) import Lens.Micro.Platform@@ -48,7 +48,7 @@ import Hledger.UI.UIUtils import Hledger.UI.UIScreens import Hledger.UI.Editor-import Hledger.UI.ErrorScreen (uiCheckBalanceAssertions, uiReload, uiReloadIfFileChanged)+import Hledger.UI.ErrorScreen (uiReload, uiReloadIfFileChanged, uiToggleBalanceAssertions) import Hledger.UI.RegisterScreen (rsCenterSelection) import Data.Either (fromRight) import Control.Arrow ((>>>))@@ -257,7 +257,7 @@ VtyEvent (EvKey (KLeft) [MShift]) -> modify' (previousReportPeriod journalspan >>> regenerateScreens j d) -- various toggles and settings:- VtyEvent (EvKey (KChar 'I') []) -> modify' (toggleIgnoreBalanceAssertions >>> uiCheckBalanceAssertions d)+ VtyEvent (EvKey (KChar 'I') []) -> get' >>= uiToggleBalanceAssertions d VtyEvent (EvKey (KChar 'F') []) -> modify' (toggleForecast d >>> regenerateScreens j d) VtyEvent (EvKey (KChar 'B') []) -> modify' (toggleConversionOp >>> regenerateScreens j d) VtyEvent (EvKey (KChar 'V') []) -> modify' (toggleValue >>> regenerateScreens j d)
Hledger/UI/ErrorScreen.hs view
@@ -15,6 +15,7 @@ ,uiReloadIfFileChanged ,uiReloadJournal ,uiReloadJournalIfChanged+ ,uiToggleBalanceAssertions ) where @@ -108,7 +109,7 @@ runEditor pos f esReloadIfFileChanged copts d j ui - VtyEvent (EvKey (KChar 'I') []) -> put' $ uiCheckBalanceAssertions d (popScreen $ toggleIgnoreBalanceAssertions ui)+ VtyEvent (EvKey (KChar 'I') []) -> uiToggleBalanceAssertions d (popScreen ui) VtyEvent (EvKey (KChar 'l') [MCtrl]) -> redraw VtyEvent (EvKey (KChar 'z') [MCtrl]) -> suspend ui _ -> return ()@@ -156,6 +157,10 @@ -- Defined here so it can reference the error screen: +-- | Modify some input options for hledger-ui (enable --forecast).+uiAdjustOpts :: UIOpts -> CliOpts -> CliOpts+uiAdjustOpts uopts = enableForecast uopts+ -- | Reload the journal from its input files, then update the ui app state accordingly. -- This means regenerate the entire screen stack from top level down to the current screen, using the provided today-date. -- As a convenience (usually), if journal reloading fails, this enters the error screen, or if already there, updates its message.@@ -169,8 +174,8 @@ uiReload :: CliOpts -> Day -> UIState -> EventM Name UIState UIState uiReload copts d ui = liftIO $ do ej <-- let copts' = enableForecast (astartupopts ui) copts- in runExceptT $ journalTransform copts' <$> journalReload copts'+ let copts1 = uiAdjustOpts (astartupopts ui) copts+ in runExceptT $ journalTransform copts1 <$> journalReload copts1 -- dbg1IO "uiReload before reload" (map tdescription $ jtxns $ ajournal ui) return $ case ej of Right j ->@@ -194,20 +199,24 @@ -- Also, this one runs in IO, suitable for suspendAndResume. uiReloadIfFileChanged :: CliOpts -> Day -> Journal -> UIState -> IO UIState uiReloadIfFileChanged copts d j ui = do- let copts' = enableForecast (astartupopts ui) copts- ej <- runExceptT $ journalReloadIfChanged copts' d j+ ej <-+ let copts1 = uiAdjustOpts (astartupopts ui) copts+ in runExceptT $ journalReloadIfChanged copts1 d j return $ case ej of Right (j', _) -> regenerateScreens j' d ui Left err -> case aScreen ui of ES _ -> ui{aScreen=esNew err} _ -> pushScreen (esNew err) ui --- Re-check any balance assertions in the current journal, and if any--- fail, enter (or update) the error screen. Or if balance assertions--- are disabled, do nothing.+-- Re-check any balance assertions in the current journal,+-- and if any fail, enter (or update) the error screen.+-- Or if balance assertions are disabled or pivot is active, do nothing.+-- (When pivot is active, assertions have already been checked on the pre-pivot journal,+-- and the current post-pivot journal's account names don't match the original assertions.) uiCheckBalanceAssertions :: Day -> UIState -> UIState-uiCheckBalanceAssertions _d ui@UIState{ajournal=j}- | ui^.ignore_assertions = ui+uiCheckBalanceAssertions _d ui@UIState{ajournal=j, aopts=UIOpts{uoCliOpts=CliOpts{inputopts_=InputOpts{pivot_=pval}}}}+ | ui^.ignore_assertions = ui -- user disabled checks+ | not (null pval) = ui -- post-pivot journal, assertions already checked pre-pivot | otherwise = case journalCheckBalanceAssertions j of Right () -> ui@@ -215,3 +224,16 @@ case ui of UIState{aScreen=ES sst} -> ui{aScreen=ES sst{_essError=err}} _ -> pushScreen (esNew err) ui++-- | Toggle ignoring balance assertions (when user presses I), and if no longer ignoring, recheck them.+-- Normally the recheck is done quickly on the in-memory journal.+-- But if --pivot is active, a full journal reload is done instead+-- (because we can't check balance assertions after pivoting has occurred).+-- In that case, this operation could be slower and could reveal other data changes (not just balance assertion failures).+uiToggleBalanceAssertions :: Day -> UIState -> EventM Name UIState ()+uiToggleBalanceAssertions d ui@UIState{aopts=UIOpts{uoCliOpts=copts@CliOpts{inputopts_=InputOpts{pivot_=pivotval}}}} =+ let ui' = toggleIgnoreBalanceAssertions ui+ in case (ui'^.ignore_assertions, null pivotval) of+ (True, _) -> put' ui' -- ignoring enabled, no check needed+ (False, True) -> put' $ uiCheckBalanceAssertions d ui' -- unpivoted journal, can check in memory+ (False, False) -> uiReload copts d ui' >>= put' -- pivoted journal, must reload to check it
Hledger/UI/Main.hs view
@@ -37,16 +37,16 @@ import Data.List (find) import Data.List.Extra (nubSort) import Data.Maybe (fromMaybe)-import qualified Data.Text as T+import Data.Text qualified as T import Graphics.Vty (Mode (Mouse), Vty (outputIface), Output (setMode)) import Graphics.Vty.CrossPlatform (mkVty) import Lens.Micro ((^.)) import System.Directory (canonicalizePath) import System.Environment (withProgName) import System.FilePath (takeDirectory)-import System.FSNotify (Event(Modified), watchDir, withManager, EventIsDirectory (IsFile))+import System.FSNotify (Event(Added, Modified), watchDir, withManager, EventIsDirectory (IsFile)) import Brick hiding (bsDraw)-import qualified Brick.BChan as BC+import Brick.BChan qualified as BC import Hledger import Hledger.Cli hiding (progname,prognameandversion)@@ -305,9 +305,8 @@ d -- predicate: ignore changes not involving our files (\case- Modified f _ IsFile -> f `elem` files- -- Added f _ -> f `elem` files- -- Removed f _ -> f `elem` files+ Added f _ IsFile -> f `elem` files -- for editors which write the whole file from scratch on saves+ Modified f _ IsFile -> f `elem` files -- for editors which modify existing files in place -- we don't handle adding/removing journal files right now -- and there might be some of those events from tmp files -- clogging things up so let's ignore them
Hledger/UI/MenuScreen.hs view
@@ -17,9 +17,9 @@ import Control.Monad import Control.Monad.IO.Class (liftIO) import Data.Maybe-import qualified Data.Text as T+import Data.Text qualified as T import Data.Time.Calendar (Day)-import qualified Data.Vector as V+import Data.Vector qualified as V import Data.Vector ((!?)) import Graphics.Vty (Event(..),Key(..),Modifier(..), Button (BLeft, BScrollDown, BScrollUp)) import Lens.Micro.Platform@@ -33,7 +33,7 @@ import Hledger.UI.UIState import Hledger.UI.UIUtils import Hledger.UI.UIScreens-import Hledger.UI.ErrorScreen (uiCheckBalanceAssertions, uiReload, uiReloadIfFileChanged)+import Hledger.UI.ErrorScreen (uiReload, uiReloadIfFileChanged, uiToggleBalanceAssertions) import Hledger.UI.Editor (runIadd, runEditor, endPosition) import Brick.Widgets.Edit (getEditContents, handleEditorEvent) import Control.Arrow ((>>>))@@ -156,7 +156,7 @@ where p = reportPeriod ui e | e `elem` [VtyEvent (EvKey (KChar 'g') []), AppEvent FileChange] -> uiReload copts d ui >>= put'- VtyEvent (EvKey (KChar 'I') []) -> put' $ uiCheckBalanceAssertions d (toggleIgnoreBalanceAssertions ui)+ VtyEvent (EvKey (KChar 'I') []) -> uiToggleBalanceAssertions d ui VtyEvent (EvKey (KChar 'a') []) -> suspendAndResume $ clearScreen >> setCursorPosition 0 0 >> add (cliOptsDropArgs copts) j >> uiReloadIfFileChanged copts d j ui VtyEvent (EvKey (KChar 'A') []) -> suspendAndResume $ void (runIadd (journalFilePath j)) >> uiReloadIfFileChanged copts d j ui VtyEvent (EvKey (KChar 'E') []) -> suspendAndResume $ void (runEditor endPosition (journalFilePath j)) >> uiReloadIfFileChanged copts d j ui
Hledger/UI/RegisterScreen.hs view
@@ -25,8 +25,8 @@ import Data.List #endif import Data.Maybe-import qualified Data.Text as T-import qualified Data.Vector as V+import Data.Text qualified as T+import Data.Vector qualified as V import Data.Vector ((!?)) import Graphics.Vty (Event(..),Key(..),Modifier(..), Button (BLeft, BScrollDown, BScrollUp)) import Brick@@ -43,7 +43,7 @@ import Hledger.UI.UIUtils import Hledger.UI.UIScreens import Hledger.UI.Editor-import Hledger.UI.ErrorScreen (uiCheckBalanceAssertions, uiReload, uiReloadIfFileChanged)+import Hledger.UI.ErrorScreen (uiReload, uiReloadIfFileChanged, uiToggleBalanceAssertions) rsDraw :: UIState -> [Widget Name] rsDraw UIState{aopts=_uopts@UIOpts{uoCliOpts=copts@CliOpts{reportspec_=rspec}}@@ -247,7 +247,7 @@ e | e `elem` [AppEvent FileChange, VtyEvent (EvKey (KChar 'g') [])] -> uiReload copts d ui >>= put' - VtyEvent (EvKey (KChar 'I') []) -> put' $ uiCheckBalanceAssertions d (toggleIgnoreBalanceAssertions ui)+ VtyEvent (EvKey (KChar 'I') []) -> uiToggleBalanceAssertions d ui VtyEvent (EvKey (KChar 'a') []) -> suspendAndResume $ clearScreen >> setCursorPosition 0 0 >> add (cliOptsDropArgs copts) j >> uiReloadIfFileChanged copts d j ui VtyEvent (EvKey (KChar 'A') []) -> suspendAndResume $ void (runIadd (journalFilePath j)) >> uiReloadIfFileChanged copts d j ui VtyEvent (EvKey (KChar 'T') []) -> put' $ regenerateScreens j d $ setReportPeriod (DayPeriod d) ui
Hledger/UI/Theme.hs view
@@ -17,7 +17,7 @@ ) where -import qualified Data.Map as M+import Data.Map qualified as M import Data.Maybe import Graphics.Vty import Brick
Hledger/UI/TransactionScreen.hs view
@@ -18,7 +18,7 @@ import Control.Monad.IO.Class (liftIO) import Data.List import Data.Maybe-import qualified Data.Text as T+import Data.Text qualified as T import Graphics.Vty (Event(..),Key(..),Modifier(..), Button (BLeft)) import System.Exit (ExitCode (..)) @@ -30,7 +30,7 @@ import Hledger.UI.UIUtils import Hledger.UI.UIScreens import Hledger.UI.Editor-import Hledger.UI.ErrorScreen (uiCheckBalanceAssertions, uiReload, uiReloadIfFileChanged)+import Hledger.UI.ErrorScreen (uiCheckBalanceAssertions, uiReload, uiReloadIfFileChanged, uiToggleBalanceAssertions) import Hledger.UI.RegisterScreen (rsHandle) tsDraw :: UIState -> [Widget Name]@@ -162,7 +162,7 @@ where p = reportPeriod ui - VtyEvent (EvKey (KChar 'I') []) -> put' $ uiCheckBalanceAssertions d (toggleIgnoreBalanceAssertions ui)+ VtyEvent (EvKey (KChar 'I') []) -> uiToggleBalanceAssertions d ui -- for toggles that may change the current/prev/next transactions, -- we must regenerate the transaction list, like the g handler above ? with regenerateTransactions ? TODO WIP
Hledger/UI/UIOptions.hs view
@@ -6,7 +6,7 @@ import Data.Default (def) import Data.Either (fromRight) import Data.List (intercalate)-import qualified Data.Map as M+import Data.Map qualified as M import Data.Maybe (fromMaybe) import GitHash (tGitInfoCwdTry) import Lens.Micro (set)
Hledger/UI/UIScreens.hs view
@@ -42,10 +42,10 @@ import Brick.Widgets.List (listMoveTo, listSelectedElement, list) import Data.List import Data.Maybe-import qualified Data.Text as T+import Data.Text qualified as T import Data.Time.Calendar (Day, diffDays) import Safe-import qualified Data.Vector as V+import Data.Vector qualified as V import Hledger.Cli hiding (mode, progname,prognameandversion) import Hledger.UI.UIOptions
Hledger/UI/UIState.hs view
@@ -49,7 +49,7 @@ import Data.List ((\\), sort) import Data.Maybe (fromMaybe) import Data.Semigroup (Max(..))-import qualified Data.Text as T+import Data.Text qualified as T import Data.Text.Zipper (gotoEOL) import Data.Time.Calendar (Day) import Lens.Micro ((^.), over, set)
Hledger/UI/UIUtils.hs view
@@ -56,7 +56,7 @@ import Control.Monad.IO.Class import Data.Bifunctor (second) import Data.List-import qualified Data.Text as T+import Data.Text qualified as T import Data.Time (addDays) import Graphics.Vty (Event(..),Key(..),Modifier(..),Vty(..),Color,Attr,currentAttr,refresh, displayBounds@@ -72,7 +72,7 @@ import Hledger.UI.UITypes import Data.Vector (Vector)-import qualified Data.Vector as V+import Data.Vector qualified as V -- | On posix platforms, send the system STOP signal to suspend the -- current program. On windows, does nothing.
hledger-ui.1 view
@@ -1,5 +1,5 @@ -.TH "HLEDGER\-UI" "1" "September 2025" "hledger-ui-1.50.2 " "hledger User Manuals"+.TH "HLEDGER\-UI" "1" "November 2025" "hledger-ui-1.50.3 " "hledger User Manuals" @@ -17,7 +17,7 @@ .PD \f[CR]hledger ui [OPTS] [QUERYARGS]\f[R] .SH DESCRIPTION-This manual is for hledger\[aq]s terminal interface, version 1.50.2.+This manual is for hledger\[aq]s terminal interface, version 1.50.3. See also the hledger manual for common concepts and file formats. .PP hledger is a robust, user\-friendly, cross\-platform set of programs for@@ -250,6 +250,9 @@ \f[CR]I\f[R] toggles balance assertion checking. Disabling balance assertions temporarily can be useful for troubleshooting.+(If hledger\-ui was started with a \f[CR]\-\-pivot\f[R] option,+re\-enabling balance assertions with the \f[CR]I\f[R] key also reloads+the journal, like \f[CR]g\f[R].) .PP \f[CR]a\f[R] runs command\-line hledger\[aq]s add command, and reloads the updated file.@@ -441,10 +444,6 @@ On some unix systems, increasing fs.inotify.max_user_watches or fs.file\-max parameters in /etc/sysctl.conf might help. (#836)-.IP \[bu] 2-It may not detect file changes made by certain tools, such as Jetbrains-IDEs or gedit.-(#1617) .IP \[bu] 2 It may not detect changes made from outside a virtual machine, ie by an editor running on the host system.
hledger-ui.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: hledger-ui-version: 1.50.2+version: 1.50.3 synopsis: Terminal interface for the hledger accounting system description: A simple terminal user interface for the hledger accounting system. It can be a more convenient way to browse your accounts than the CLI.@@ -39,15 +39,10 @@ location: https://github.com/simonmichael/hledger flag debug- description: Build with GHC 9.10+'s stack traces enabled+ description: Build with GHC 9.10+ stack traces enabled manual: True default: False -flag threaded- description: Build with support for multithreaded execution- manual: False- default: True- library exposed-modules: Hledger.UI@@ -74,12 +69,12 @@ hs-source-dirs: ./ ghc-options: -Wall -Wno-incomplete-uni-patterns -Wno-missing-signatures -Wno-orphans -Wno-type-defaults -Wno-unused-do-bind- cpp-options: -DVERSION="1.50.2" -DVERSION="1.50.2"+ cpp-options: -DVERSION="1.50.3" -DVERSION="1.50.3" build-depends: ansi-terminal >=0.9 , async , base >=4.18 && <4.22- , brick >=2.1.1 && <2.3.2 || >2.3.2 && <2.10+ , brick >=2.1.1 && <2.3.2 || >2.3.2 && <2.11 , cmdargs >=0.8 , containers >=0.5.9 , data-default@@ -89,8 +84,8 @@ , filepath , fsnotify >=0.4.2.0 && <0.5 , githash >=0.1.6.2- , hledger >=1.50.2 && <1.51- , hledger-lib >=1.50.2 && <1.51+ , hledger >=1.50.3 && <1.51+ , hledger-lib >=1.50.3 && <1.51 , megaparsec >=7.0.0 && <9.8 , microlens >=0.4 , microlens-platform >=0.2.3.1@@ -104,9 +99,9 @@ , time >=1.5 , transformers , vector- , vty >=6.1 && <6.5+ , vty >=6.1 && <6.6 , vty-crossplatform >=0.4.0.0 && <0.5.0.0- default-language: Haskell2010+ default-language: GHC2021 if (flag(debug)) cpp-options: -DDEBUG if os(windows)@@ -124,13 +119,11 @@ Paths_hledger_ui hs-source-dirs: app- ghc-options: -Wall -Wno-incomplete-uni-patterns -Wno-missing-signatures -Wno-orphans -Wno-type-defaults -Wno-unused-do-bind -with-rtsopts=-T- cpp-options: -DVERSION="1.50.2"+ ghc-options: -Wall -Wno-incomplete-uni-patterns -Wno-missing-signatures -Wno-orphans -Wno-type-defaults -Wno-unused-do-bind -threaded+ cpp-options: -DVERSION="1.50.3" build-depends: base >=4.18 && <4.22 , hledger-ui- default-language: Haskell2010+ default-language: GHC2021 if (flag(debug)) cpp-options: -DDEBUG- if flag(threaded)- ghc-options: -threaded
hledger-ui.info view
@@ -18,7 +18,7 @@ or 'hledger ui [OPTS] [QUERYARGS]' - This manual is for hledger's terminal interface, version 1.50.2. See+ This manual is for hledger's terminal interface, version 1.50.3. See also the hledger manual for common concepts and file formats. hledger is a robust, user-friendly, cross-platform set of programs@@ -256,7 +256,9 @@ pause.) 'I' toggles balance assertion checking. Disabling balance assertions-temporarily can be useful for troubleshooting.+temporarily can be useful for troubleshooting. (If hledger-ui was+started with a '--pivot' option, re-enabling balance assertions with the+'I' key also reloads the journal, like 'g'.) 'a' runs command-line hledger's add command, and reloads the updated file. This allows some basic data entry.@@ -503,8 +505,6 @@ configuration. On some unix systems, increasing fs.inotify.max_user_watches or fs.file-max parameters in /etc/sysctl.conf might help. (#836)- * It may not detect file changes made by certain tools, such as- Jetbrains IDEs or gedit. (#1617) * It may not detect changes made from outside a virtual machine, ie by an editor running on the host system. * It may not detect file changes on certain less common filesystems.@@ -558,19 +558,19 @@ Node: OPTIONS1869 Node: MOUSE8755 Node: KEYS9087-Node: SCREENS14091-Node: Menu screen14831-Node: Cash accounts screen15147-Node: Balance sheet accounts screen15508-Node: Income statement accounts screen15844-Node: All accounts screen16229-Node: Register screen16592-Node: Transaction screen19035-Node: Error screen20215-Node: WATCH MODE20581-Node: --watch problems21479-Node: ENVIRONMENT22832-Node: BUGS23065+Node: SCREENS14229+Node: Menu screen14969+Node: Cash accounts screen15285+Node: Balance sheet accounts screen15646+Node: Income statement accounts screen15982+Node: All accounts screen16367+Node: Register screen16730+Node: Transaction screen19173+Node: Error screen20353+Node: WATCH MODE20719+Node: --watch problems21617+Node: ENVIRONMENT22864+Node: BUGS23097 End Tag Table
hledger-ui.txt view
@@ -11,7 +11,7 @@ hledger ui [OPTS] [QUERYARGS] DESCRIPTION- This manual is for hledger's terminal interface, version 1.50.2. See+ This manual is for hledger's terminal interface, version 1.50.3. See also the hledger manual for common concepts and file formats. hledger is a robust, user-friendly, cross-platform set of programs for@@ -223,7 +223,9 @@ pause.) I toggles balance assertion checking. Disabling balance assertions- temporarily can be useful for troubleshooting.+ temporarily can be useful for troubleshooting. (If hledger-ui was+ started with a --pivot option, re-enabling balance assertions with the+ I key also reloads the journal, like g.) a runs command-line hledger's add command, and reloads the updated file. This allows some basic data entry.@@ -398,38 +400,35 @@ tify.max_user_watches or fs.file-max parameters in /etc/sysctl.conf might help. (#836) - o It may not detect file changes made by certain tools, such as Jet-- brains IDEs or gedit. (#1617)-- o It may not detect changes made from outside a virtual machine, ie by+ o It may not detect changes made from outside a virtual machine, ie by an editor running on the host system. o It may not detect file changes on certain less common filesystems. - o It may use increasing CPU and RAM over time, especially with large- files. (This is probably not --watch specific, you may be able to+ o It may use increasing CPU and RAM over time, especially with large+ files. (This is probably not --watch specific, you may be able to reproduce it by pressing g repeatedly.) (#1825) Tips/workarounds: - o If --watch won't work for you, press g to reload data manually in-+ o If --watch won't work for you, press g to reload data manually in- stead. - o If --watch is leaking resources over time, quit and restart (or sus-+ o If --watch is leaking resources over time, quit and restart (or sus- pend and resume) hledger-ui when you're not using it. - o When running hledger-ui inside a VM, also make file changes inside+ o When running hledger-ui inside a VM, also make file changes inside the VM. - o When working with files mounted from another machine, make sure the+ o When working with files mounted from another machine, make sure the system clocks on both machines are roughly in agreement. ENVIRONMENT- LEDGER_FILE The main journal file to use when not specified with+ LEDGER_FILE The main journal file to use when not specified with -f/--file. Default: $HOME/.hledger.journal. BUGS- We welcome bug reports in the hledger issue tracker+ We welcome bug reports in the hledger issue tracker (https://bugs.hledger.org), or on the hledger chat or mail list (https://hledger.org/support). @@ -437,7 +436,7 @@ -f- doesn't work (hledger-ui can't read from stdin). - --watch is not robust, especially with large files (see WATCH MODE+ --watch is not robust, especially with large files (see WATCH MODE above). If you press g with large files, there could be a noticeable pause with@@ -461,4 +460,4 @@ SEE ALSO hledger(1), hledger-ui(1), hledger-web(1), ledger(1) -hledger-ui-1.50.2 September 2025 HLEDGER-UI(1)+hledger-ui-1.50.3 November 2025 HLEDGER-UI(1)