我是一名Haskell初学者,我正在使用xmonad。我试图在退出之前提醒我,因为偶尔偶然碰到mod + q。我发现了两种方法,但我必须做错事,因为它们都不适合我: https://bbs.archlinux.org/viewtopic.php?id=120298 http://comments.gmane.org/gmane.comp.lang.haskell.xmonad/11699重新启动时XMonad确认
这里是我的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 ]
谢谢!
编辑:显示菜单,但生成过程似乎不起作用。
你把它命名为'conf_quit',但它重新启动。您想在成功确认后退出或重新启动吗? – 2012-04-03 15:59:16
我经历了两次,但它不执行产卵过程。自从代码适用于其他人以来,我开始认为我的问题来自其他地方。 – 2012-04-03 16:34:43
究竟发生了什么?是什么让你认为'spawn'没有发生?当你把钥匙绑定到一个比产卵更明显的东西时会发生什么,比如实际退出?你能检查你的xmonad可执行文件是否在xmonad的'PATH'中(它可能与你的终端的'PATH'和你的控制台的PATH有所不同)? – 2012-04-03 16:49:53