Ich bin ein Haskell Anfänger und ich benutze xmonad. Ich versuche, mich dazu zu bringen, bevor ich aufhöre, da ich gelegentlich zufällig mod + q treffe. Ich habe zwei Möglichkeiten gefunden, das zu tun, aber ich muss etwas falsch machen, weil keiner von beiden für mich funktioniert: http://comments.gmane.org/gmane.comp.lang.haskell.xmonad/11699XMonad Bestätigung beim Neustart
Hier ist mein xmonad.hs:
import XMonad
import XMonad.Config.Gnome
import XMonad.Actions.Plane
import XMonad.Util.EZConfig
import XMonad.Util.Run(spawnPipe)
import qualified Data.Map as M
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.UrgencyHook
import System.IO(Handle, hPutStrLn)
import System.Exit
import Control.Monad
import XMonad
import XMonad.Util.EZConfig
import XMonad.Util.Dmenu
import XMonad.Util.Run
workspaces' = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
quit_confirm :: X()
quit_confirm = do
let m = "confirm restart"
s <- dmenu [m]
when (m == s) (spawn "xmonad --restart")
conf_quit = do
response <- runProcessWithInput "dmenu" ["-p", "Quit?"] "yes\nno\n"
when (response == "yes") (spawn "xmonad --restart")
main = do
dzen2Pipe <- spawnPipe "dzen2 -w 1200 -xs 1 -ta l -fn '-*-terminus-*-*-*-*-16-*-*-*-*-*-*-*' -bg black -fg #d3d7cf "
dzen2Right <- spawnPipe "~/.xmonad/status-dzen.sh"
startupProgs <- spawnPipe "~/.xmonad/startups.sh"
xmonad $ defaultConfig
{
workspaces = workspaces'
, manageHook = manageHook' <+> manageHook defaultConfig
, modMask = mod4Mask
, terminal = "gnome-terminal"
, layoutHook = layoutHook'
, logHook = logHook' dzen2Pipe
}
`additionalKeysP`
[ -- Lock Screen
("M-S-l", spawn "gnome-screensaver-command -l")
-- Sleep
, ("M-S-;", spawn "gnome-screensaver-command -l; pmi action suspend")
-- wireless
, ("M-S-C-w", spawn "~/.xmonad/wireless.sh")
-- 1 screen reconf
, ("M-S-C-1", spawn "~/.xmonad/1-screen.sh")
-- 2 screen reconf
, ("M-S-C-2", spawn "~/.xmonad/2-screen.sh")
-- confirm for quit
, ("M-q", conf_quit)
]
`additionalKeys`
M.toList (planeKeys mod4Mask GConf Finite)
layoutHook' = avoidStruts $ layoutHook defaultConfig
logHook' = dynamicLogWithPP . dzenPP'
dzenPP' h = defaultPP
{
ppOutput = hPutStrLn h
}
manageHook' = composeAll
[ className =? "Pidgin" --> doShift "1" ,
className =? "Firefox" --> doShift "2" ,
className =? "Thunderbird" --> doShift "3" ,
className =? "OpenOffice.org 3.2" --> doShift "4",
manageDocks ]
Dank!
Bearbeiten: Das Menü wird angezeigt, aber der Spawn-Prozess scheint nicht zu funktionieren.
Sie nannte es 'conf_quit', aber es macht einen Neustart. Möchten Sie, dass es nach einer erfolgreichen Bestätigung beendet oder neu gestartet wird? –
Ich ging durch beide, aber es führt den Spawn-Prozess nicht durch. Ich fange an zu denken, dass mein Problem von woanders kommt, da der Code für andere Leute funktioniert. –
Was genau passiert? Was lässt dich denken, dass der 'Spawn' nicht passiert? Was passiert, wenn Sie den Schlüssel an etwas binden, das offensichtlicher ist als ein Spawn? Kannst du überprüfen, ob deine xmonad ausführbare Datei in xmonads 'PATH' ist (was sich von dem' PATH' deines Terminals und dem 'PATH' deiner Konsole unterscheiden kann)? –