aboutsummaryrefslogtreecommitdiff
path: root/src/Rahm/Desktop/PopupTerminal.hs
diff options
context:
space:
mode:
authorJosh Rahm <rahm@google.com>2024-08-23 15:27:57 -0600
committerJosh Rahm <rahm@google.com>2024-08-23 15:27:57 -0600
commit08eacc1d437b08863ebe521446e040bc4fa219a2 (patch)
tree79869ff756905ef36b5cf0813e855cf83bf01ef5 /src/Rahm/Desktop/PopupTerminal.hs
parent3335b25d36d7b1d4e8f6b5a45dd459530617fe35 (diff)
downloadrde-08eacc1d437b08863ebe521446e040bc4fa219a2.tar.gz
rde-08eacc1d437b08863ebe521446e040bc4fa219a2.tar.bz2
rde-08eacc1d437b08863ebe521446e040bc4fa219a2.zip
Add popup terminal when the "explode" happends
Diffstat (limited to 'src/Rahm/Desktop/PopupTerminal.hs')
-rw-r--r--src/Rahm/Desktop/PopupTerminal.hs40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/Rahm/Desktop/PopupTerminal.hs b/src/Rahm/Desktop/PopupTerminal.hs
new file mode 100644
index 0000000..fb38563
--- /dev/null
+++ b/src/Rahm/Desktop/PopupTerminal.hs
@@ -0,0 +1,40 @@
+module Rahm.Desktop.PopupTerminal where
+
+import XMonad
+import qualified XMonad.Util.ExtensibleState as XS
+import Data.Monoid
+import Control.Monad.Trans
+import qualified XMonad.StackSet as W
+import Data.Foldable (forM_)
+import XMonad.Util.SpawnOnce (spawnOnce)
+
+newtype PopupTerminalState = PopupTerminalState
+ {
+ popupTerminalWindow :: Maybe Window
+ } deriving (Show, Read)
+
+instance ExtensionClass PopupTerminalState where
+ initialValue = PopupTerminalState Nothing
+ extensionType = PersistentExtension
+
+getPopupTerminalWindow :: X (Maybe Window)
+getPopupTerminalWindow = XS.gets popupTerminalWindow
+
+movePopupToCurrentWorkspace :: X ()
+movePopupToCurrentWorkspace = do
+ mWin <- getPopupTerminalWindow
+ forM_ mWin $ \win -> do
+ windows $ \ws ->
+ W.focusWindow win $
+ W.shiftWin (W.tag (W.workspace (W.current ws))) win ws
+
+movePopupToHiddenWorkspace :: X ()
+movePopupToHiddenWorkspace = do
+ mWin <- getPopupTerminalWindow
+ forM_ mWin $ \win -> windows $ \ws -> W.shiftWin "*" win ws
+
+updatePopupTerminalHook :: ManageHook
+updatePopupTerminalHook = Query $ do
+ win <- ask
+ lift $ XS.put $ PopupTerminalState (Just win)
+ return (Endo id)