2012-04-03 2 views
4

私はハスケルの初心者です。私はxmonadを使用しています。私はときどきmod + qを偶然に打つので、終了する前に私にそれを促すようにしています。私はそれをする2つの方法を見つけましたが、どちらも私のために働いていないので、何かが間違っている必要があります: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 ] 

ありがとう!

編集:メニューは表示されますが、スポーンプロセスは動作していないようです。

+0

あなたは 'conf_quit'それを名前を付けられますが、それは、再起動を行います。確認に成功した後で終了または再開しますか? –

+0

私は両方を通過しましたが、スポーンプロセスは実行されません。コードは他の人のために働くので、私の問題は他のどこかから来ていると思っています。 –

+0

正確にはどうなりますか?あなたは 'スポーン'が起こっていないと思いますか?実際に終了するなど、スポーンよりも明白なものにキーをバインドするとどうなりますか? xmonadの実行ファイルがxmonadの 'PATH'(端末の' PATH'とコンソールの 'PATH'と異なるかもしれません)にあることを確認できますか? –

答えて

2

dMENUを使用する一般的な確認のアクションを追加する他の人がdmenuを追加すると思われることを逃しましたそれが返す文字列の末尾に空白を追加します。 @mariopが

confirm "Restart" $ spawn "xmonad --recompile && xmonad --restart" 

または

confirm "Exit" $ io (exitWith ExitSuccess) 
0

あなたは終了を確認したいが、あなたのコードは再確認を行うと言う。 これが必要な再起動であれば、私はテストしてquit_confirmが動作します。

xmonadを再コンパイルして新しい設定を確認するのが最も間違いでしょう。 このお試しください:答えに

("M-q", confirm "Confirm restart?" $ restart "xmonad" True) 

に結合

quit_confirm :: X() 
quit_confirm = do 
    let m = "confirm restart" 
    s <- dmenu [m] 
    when (m == s) (spawn "xmonad recompile && xmonad --restart") 
+0

こんにちは。残念ながら、それは動作しませんでした。メニューが表示されますが、スポーンプロセスを実行していないようです。私はそれが私が逃したフックや構成ミスを枯らしているかもしれないと思っています。 –

+0

wireless.shなどの機能が分かっているものを作成してみてください。 –

+0

それは同じです。xsession-errorsはそれに役立つものはないようです。 –

1

変更キーをそして

confirm :: String -> X() -> X() 
confirm msg f = do 
    a <- dmenu [msg,"y","n"] 
    when (a=="y") f 
+0

こんにちは、私は試みましたが、まだ動作しませんでした。メニューが表示されますが、実行されていないようで、私の.xsession-errorsに関連するものが見つかりません –

+0

xmonadを再起動しようとしたときに問題が発生しました。 Xmonadを再ロードします(たとえば、gdmを再起動します)。今私は自分で試してみましたが、私のコードはxmonad 0.10-2(debianパッケージ)に取り組んでいます。 – mariop

0

いずれかの使用を示唆したように、私は、以下のモジュールを書いた、そして

confirm :: String -> X() -> X() 
confirm m f = do 
    result <- dmenu [m] 
    when (init result == m) f 

そして:あなたは次のことを行う必要があり、それが私の作品dmenuをインストールする必要はありません。

----------------------------------------------------------------------------- 
-- | 
-- Module  : XMonad.Prompt 
-- Copyright : (C) 2015 Antoine Beaupré 
-- License  : BSD3 
-- 
-- Maintainer : Antoine Beaupré <[email protected]> 
-- Stability : unstable 
-- Portability : unportable 
-- 
-- A module for setting up simple confirmation prompts for keybindings. 
-- 
----------------------------------------------------------------------------- 
module XMonad.Prompt.ConfirmPrompt (confirmPrompt 
            -- * Usage 
            -- $usage 
            , module XMonad.Prompt 
            -- * Use case: confirming exit 
            -- $tip 
            , EnterPrompt 
            ) where 

import XMonad (X) 
import XMonad.Prompt (XPConfig, XPrompt, showXPrompt, mkXPrompt, mkComplFunFromList) 

{- $usage 

This module makes it easy to add a confirmation prompt for specific 
actions. Instead of just running the action, a simple confirmation 
prompt will be created using 'XMonad.Prompt' primitives. The action 
will then run normally if the user confirms. 
-} 

{- $tip 
This should be used something like this: 

> ... 
> , ((modm , xK_l), confirmPrompt defaultXPConfig "exit" $ io (exitWith ExitSuccess)) 
> ... 
-} 

{- | Customized 'XPrompt' prompt that will ask to confirm the given string -} 
data EnterPrompt = EnterPrompt String 
instance XPrompt EnterPrompt where 
    showXPrompt (EnterPrompt n) = "Confirm " ++ n ++ " (esc/ENTER)" 

{- | Prompt the user to confirm a given action. We offer no completion 
    and simply ask to confirm (ENTER) or cancel (ESCAPE). The actual key 
    handling is done by mkXPrompt.-} 
confirmPrompt :: XPConfig -> String -> X() -> X() 
confirmPrompt config app func = mkXPrompt (EnterPrompt app) config (mkComplFunFromList []) $ const func 

~/.xmonad/lib/XMonad/Promptディレクトリにインストールしてお楽しみください!

(I XMonadメーリングリストへsubmittedこれと私はフィードバックを待っている...)

関連する問題