Add --restart, a command line flag to cause a running xmonad process to restart

This commit is contained in:
Spencer Janssen 2009-01-17 03:49:59 +00:00
parent 5edfb1d262
commit bf8ba79090
3 changed files with 21 additions and 0 deletions

13
Main.hs
View File

@ -40,6 +40,7 @@ main = do
["--resume", _] -> launch
["--help"] -> usage
["--recompile"] -> recompile True >> return ()
["--restart"] -> sendRestart >> return ()
["--version"] -> putStrLn ("xmonad " ++ showVersion version)
#ifdef TESTING
("--run-tests":_) -> Properties.main
@ -55,6 +56,7 @@ usage = do
" --help Print this message" :
" --version Print the version number" :
" --recompile Recompile your ~/.xmonad/xmonad.hs" :
" --restart Request a running xmonad process to restart" :
#ifdef TESTING
" --run-tests Run the test suite" :
#endif
@ -83,3 +85,14 @@ buildLaunch = do
args <- getArgs
executeFile (dir ++ "/xmonad-"++arch++"-"++os) False args Nothing
return ()
sendRestart :: IO ()
sendRestart = do
dpy <- openDisplay ""
rw <- rootWindow dpy $ defaultScreen dpy
xmonad_restart <- internAtom dpy "XMONAD_RESTART" False
allocaXEvent $ \e -> do
setEventType e clientMessage
setClientMessageEvent e rw xmonad_restart 32 0 currentTime
sendEvent dpy rw False structureNotifyMask e
sync dpy False

View File

@ -280,6 +280,12 @@ handle (ConfigureEvent {ev_window = w}) = whenX (isRoot w) rescreen
handle PropertyEvent { ev_event_type = t, ev_atom = a }
| t == propertyNotify && a == wM_NAME = userCodeDef () =<< asks (logHook . config)
handle e@ClientMessageEvent { ev_message_type = mt } = do
a <- getAtom "XMONAD_RESTART"
if (mt == a)
then restart "xmonad" True
else broadcastMessage e
handle e = broadcastMessage e -- trace (eventName e) -- ignoring

View File

@ -23,6 +23,8 @@ When running with multiple monitors (Xinerama), each screen has exactly 1 worksp
.TP
\fB--recompile
Recompiles your configuration in ~/.xmonad/xmonad.hs
\fB--restart
Causes the currently running xmonad process to restart
.TP
\fB--version
Display version of \fBxmonad\fR.