packages feed

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 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)