首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重启时的XMonad确认

重启时的XMonad确认
EN

Stack Overflow用户
提问于 2012-04-03 21:09:54
回答 4查看 2.2K关注 0票数 4

我是Haskell初学者,我正在使用xmonad。我正在尝试让它在退出之前提示我,因为我偶尔会意外地点击mod+q。我已经找到了两种方法,但我肯定做错了什么,因为这两种方法对我都不起作用:https://bbs.archlinux.org/viewtopic.php?id=120298 http://comments.gmane.org/gmane.comp.lang.haskell.xmonad/11699

这是我的xmonad.hs:

代码语言:javascript
复制
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 ]

谢谢!

编辑:菜单显示,但繁殖过程似乎不起作用。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-26 04:19:12

其他人给出的答案是,dmenu似乎在它返回的字符串末尾添加了额外的空格。你只需要做以下操作,它对我来说是有效的:

代码语言:javascript
复制
confirm :: String -> X () -> X ()
confirm m f = do
  result <- dmenu [m]
  when (init result == m) f

然后,正如@mariop建议的那样,使用

代码语言:javascript
复制
confirm "Restart" $ spawn "xmonad --recompile && xmonad --restart"

代码语言:javascript
复制
confirm "Exit" $ io (exitWith ExitSuccess)
票数 2
EN

Stack Overflow用户

发布于 2012-04-03 23:54:58

将键绑定更改为

代码语言:javascript
复制
("M-q", confirm "Confirm restart?" $ restart "xmonad" True)

并添加一个使用dmenu的通用确认操作。

代码语言:javascript
复制
confirm :: String -> X () -> X ()
confirm msg f = do
    a <- dmenu [msg,"y","n"]
    when (a=="y") f
票数 1
EN

Stack Overflow用户

发布于 2012-04-03 21:45:24

你说你想要一个退出确认,但是你的代码做了一个重启确认。如果这是您想要重新启动,那么我已经测试过了,并且quit_confirm工作正常。

您很可能会错过重新编译xmonad来查看新配置的过程。试试这个:

代码语言:javascript
复制
quit_confirm :: X ()
quit_confirm = do
  let m = "confirm restart"
  s <- dmenu [m]
  when (m == s) (spawn "xmonad recompile && xmonad --restart")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9993966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档