summaryrefslogtreecommitdiff
path: root/Messages/Concurrent.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Messages/Concurrent.hs')
-rw-r--r--Messages/Concurrent.hs24
1 files changed, 22 insertions, 2 deletions
diff --git a/Messages/Concurrent.hs b/Messages/Concurrent.hs
index 41153d067..78eed3bb1 100644
--- a/Messages/Concurrent.hs
+++ b/Messages/Concurrent.hs
@@ -1,6 +1,6 @@
{- git-annex output messages, including concurrent output to display regions
-
- - Copyright 2010-2016 Joey Hess <id@joeyh.name>
+ - Copyright 2010-2017 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -10,8 +10,9 @@
module Messages.Concurrent where
-import Annex
+import Types
import Types.Messages
+import qualified Annex
#ifdef WITH_CONCURRENTOUTPUT
import Common
@@ -136,3 +137,22 @@ concurrentOutputSupported = return True -- Windows is always unicode
#else
concurrentOutputSupported = return False
#endif
+
+{- Hide any currently displayed console regions while running the action,
+ - so that the action can use the console itself.
+ - This needs a new enough version of concurrent-output; otherwise
+ - the regions will not be hidden, but the action still runs, garbling the
+ - display. -}
+hideRegionsWhile :: Annex a -> Annex a
+#if MIN_VERSION_concurrent_output(1,9,0)
+hideRegionsWhile a = bracketIO setup cleanup go
+ where
+ setup = Regions.waitDisplayChange $ swapTMVar Regions.regionList []
+ cleanup = void . atomically . swapTMVar Regions.regionList
+ go _ = do
+ liftIO $ hFlush stdout
+ a
+#else
+#warning Building with concurrent-output older than 1.9.0 so expect some display glitches when password prompts occur in concurrent mode
+hideRegionsWhile = id
+#endif