diff options
| author | Josh Rahm <rahm@google.com> | 2024-08-23 15:27:57 -0600 |
|---|---|---|
| committer | Josh Rahm <rahm@google.com> | 2024-08-23 15:27:57 -0600 |
| commit | 08eacc1d437b08863ebe521446e040bc4fa219a2 (patch) | |
| tree | 79869ff756905ef36b5cf0813e855cf83bf01ef5 /src/Rahm/Desktop/PopupTerminal.hs | |
| parent | 3335b25d36d7b1d4e8f6b5a45dd459530617fe35 (diff) | |
| download | rde-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.hs | 40 |
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) |