Window-Manager
在 Xmonad 中切換全屏?
我是 Xmonad WM 的新手,haskell 對我來說是全新的,所以請耐心等待。
執行幾乎庫存的 ArcoLinux Xmonad。
我正在嘗試將 Xmonad WM 設置為能夠在任何時候在我想要的所有應用程序中全屏顯示,並將其綁定到
(modMask, xK_f)
- 基本上使用該綁定作為切換在我需要的一些應用程序中全屏顯示,尤其是瀏覽器。同時完全隱藏polybar
。這是我的
~/.xmonad/xmonad.sh
import System.IO import System.Exit import XMonad import XMonad.Hooks.SetWMName import XMonad.Hooks.DynamicLog import XMonad.Hooks.ManageDocks import XMonad.Hooks.EwmhDesktops import XMonad.Hooks.ManageHelpers(doFullFloat, doCenterFloat, isFullscreen, isDialog) import XMonad.Config.Desktop import XMonad.Config.Azerty import XMonad.Util.Run(spawnPipe) import XMonad.Actions.SpawnOn import XMonad.Util.EZConfig (additionalKeys, additionalMouseBindings) import XMonad.Actions.CycleWS import XMonad.Hooks.UrgencyHook import qualified Codec.Binary.UTF8.String as UTF8 import XMonad.Layout.Spacing import XMonad.Layout.Gaps import XMonad.Layout.ResizableTile ---import XMonad.Layout.NoBorders import XMonad.Layout.Fullscreen (fullscreenFull) import XMonad.Layout.Cross(simpleCross) import XMonad.Layout.Spiral(spiral) import XMonad.Layout.ThreeColumns import XMonad.Layout.MultiToggle import XMonad.Layout.MultiToggle.Instances import XMonad.Layout.IndependentScreens import XMonad.Layout.CenteredMaster(centerMaster) import Graphics.X11.ExtraTypes.XF86 import qualified XMonad.StackSet as W import qualified Data.Map as M import qualified Data.ByteString as B import Control.Monad (liftM2) import qualified DBus as D import qualified DBus.Client as D myStartupHook = do spawn "$HOME/.xmonad/scripts/autostart.sh" setWMName "LG3D" -- colours normBord = "#4c566a" focdBord = "#5e81ac" fore = "#DEE3E0" back = "#282c34" winType = "#c678dd" --mod4Mask= super key --mod1Mask= alt key --controlMask= ctrl key --shiftMask= shift key myModMask = mod4Mask encodeCChar = map fromIntegral . B.unpack myFocusFollowsMouse = True myBorderWidth = 2 myWorkspaces = ["\61612","\61899","\61947","\61635","\61502","\61501","\61705","\61564","\62150","\61872"] --myWorkspaces = ["1","2","3","4","5","6","7","8","9","10"] --myWorkspaces = ["I","II","III","IV","V","VI","VII","VIII","IX","X"] myBaseConfig = desktopConfig -- window manipulations myManageHook = composeAll . concat $ [ [isDialog --> doCenterFloat] , [className =? c --> doCenterFloat | c <- myCFloats] , [title =? t --> doFloat | t <- myTFloats] , [resource =? r --> doFloat | r <- myRFloats] , [resource =? i --> doIgnore | i <- myIgnores] -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61612" | x <- my1Shifts] -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61899" | x <- my2Shifts] -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61947" | x <- my3Shifts] -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61635" | x <- my4Shifts] -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61502" | x <- my5Shifts] -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61501" | x <- my6Shifts] -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61705" | x <- my7Shifts] -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61564" | x <- my8Shifts] -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\62150" | x <- my9Shifts] -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61872" | x <- my10Shifts] ] where -- doShiftAndGo = doF . liftM2 (.) W.greedyView W.shift myCFloats = ["Arandr", "Arcolinux-calamares-tool.py", "Arcolinux-tweak-tool.py", "Arcolinux-welcome-app.py", "Galculator", "feh", "mpv", "Xfce4-terminal"] myTFloats = ["Downloads", "Save As..."] myRFloats = [] myIgnores = ["desktop_window"] -- my1Shifts = ["Chromium", "Vivaldi-stable", "Firefox"] -- my2Shifts = [] -- my3Shifts = ["Inkscape"] -- my4Shifts = [] -- my5Shifts = ["Gimp", "feh"] -- my6Shifts = ["vlc", "mpv"] -- my7Shifts = ["Virtualbox"] -- my8Shifts = ["Thunar"] -- my9Shifts = [] -- my10Shifts = ["discord"] myLayout = spacingRaw True (Border 0 5 5 5) True (Border 5 5 5 5) True $ avoidStruts $ mkToggle (NBFULL ?? NOBORDERS ?? EOT) $ tiled ||| Mirror tiled ||| spiral (6/7) ||| ThreeColMid 1 (3/100) (1/2) ||| Full where tiled = Tall nmaster delta tiled_ratio nmaster = 1 delta = 3/100 tiled_ratio = 1/2 myMouseBindings (XConfig {XMonad.modMask = modMask}) = M.fromList $ -- mod-button1, Set the window to floating mode and move by dragging [ ((modMask, 1), (\w -> focus w >> mouseMoveWindow w >> windows W.shiftMaster)) -- mod-button2, Raise the window to the top of the stack , ((modMask, 2), (\w -> focus w >> windows W.shiftMaster)) -- mod-button3, Set the window to floating mode and resize by dragging , ((modMask, 3), (\w -> focus w >> mouseResizeWindow w >> windows W.shiftMaster)) ] -- keys config myKeys conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $ ---------------------------------------------------------------------- -- SUPER + FUNCTION KEYS [ ((modMask, xK_d ), spawn $ "dmenu_run -i -nb '#191919' -nf '#fea63c' -sb '#fea63c' -sf '#191919' -fn 'NotoMonoRegular:bold:pixelsize=15'") , ((modMask, xK_f), sendMessage $ Toggle NBFULL) , ((modMask, xK_Return), spawn $ "alacritty" ) , ((modMask, xK_q), kill ) , ((modMask, xK_t), spawn $ "termite" ) , ((modMask, xK_r), spawn $ "rofi -show drun" ) , ((modMask, xK_v), spawn $ "pavucontrol" ) , ((modMask, xK_x), spawn $ "arcolinux-logout" ) , ((modMask, xK_l), spawn $ "betterlockscreen -l" ) , ((modMask, xK_Escape), spawn $ "xkill" ) , ((modMask, xK_e), spawn $ "thunar" ) , ((modMask, xK_s ), spawn $ "xfce4-settings-manager") --, ((modMask, xK_c), spawn $ "conky-toggle" ) --, ((modMask, xK_y), spawn $ "polybar-msg cmd toggle" ) -- FUNCTION KEYS , ((0, xK_F12), spawn $ "xfce4-terminal --drop-down" ) -- SUPER + SHIFT KEYS , ((modMask .|. shiftMask , xK_r ), spawn $ "xmonad --recompile && xmonad --restart") , ((modMask .|. shiftMask , xK_q ), kill) -- , ((modMask .|. shiftMask , xK_x ), io (exitWith ExitSuccess)) -- CONTROL + KEYS -- CONTROL + ALT KEYS , ((controlMask .|. mod1Mask , xK_v ), spawn $ "virt-manager") , ((controlMask .|. mod1Mask , xK_Prior ), spawn $ "conky-rotate -p") , ((controlMask .|. mod1Mask , xK_a ), spawn $ "xfce4-appfinder") , ((controlMask .|. mod1Mask , xK_b ), spawn $ "thunar") , ((controlMask .|. mod1Mask , xK_c ), spawn $ "catfish") , ((controlMask .|. mod1Mask , xK_e ), spawn $ "arcolinux-tweak-tool") , ((controlMask .|. mod1Mask , xK_f ), spawn $ "firefox") , ((controlMask .|. mod1Mask , xK_i ), spawn $ "nitrogen") , ((controlMask .|. mod1Mask , xK_o ), spawn $ "$HOME/.xmonad/scripts/picom-toggle.sh") , ((controlMask .|. mod1Mask , xK_t ), spawn $ "urxvt") , ((controlMask .|. mod1Mask , xK_u ), spawn $ "pavucontrol") --, ((controlMask .|. mod1Mask , xK_r ), spawn $ "rofi-theme-selector") --, ((controlMask .|. mod1Mask , xK_k ), spawn $ "arcolinux-logout") --, ((controlMask .|. mod1Mask , xK_l ), spawn $ "arcolinux-logout") --, ((controlMask .|. mod1Mask , xK_Next ), spawn $ "conky-rotate -n") -- ALT + ... KEYS , ((mod1Mask, xK_n), spawn $ "variety -n" ) , ((mod1Mask, xK_F3), spawn $ "xfce4-appfinder" ) , ((mod1Mask, xK_p), spawn $ "variety -p" ) , ((mod1Mask, xK_r), spawn $ "xmonad --restart" ) --, ((mod1Mask, xK_f), spawn $ "variety -f" ) --, ((mod1Mask, xK_t), spawn $ "variety -t" ) --, ((mod1Mask, xK_Up), spawn $ "variety --pause" ) --, ((mod1Mask, xK_Down), spawn $ "variety --resume" ) --, ((mod1Mask, xK_Left), spawn $ "variety -p" ) --, ((mod1Mask, xK_Right), spawn $ "variety -n" ) --, ((mod1Mask, xK_F2), spawn $ "xfce4-appfinder --collapsed" ) --VARIETY KEYS WITH PYWAL --, ((mod1Mask .|. shiftMask , xK_f ), spawn $ "variety -f && wal -i $(cat $HOME/.config/variety/wallpaper/wallpaper.jpg.txt)&") --, ((mod1Mask .|. shiftMask , xK_n ), spawn $ "variety -n && wal -i $(cat $HOME/.config/variety/wallpaper/wallpaper.jpg.txt)&") --, ((mod1Mask .|. shiftMask , xK_p ), spawn $ "variety -p && wal -i $(cat $HOME/.config/variety/wallpaper/wallpaper.jpg.txt)&") --, ((mod1Mask .|. shiftMask , xK_t ), spawn $ "variety -t && wal -i $(cat $HOME/.config/variety/wallpaper/wallpaper.jpg.txt)&") --, ((mod1Mask .|. shiftMask , xK_u ), spawn $ "wal -i $(cat $HOME/.config/variety/wallpaper/wallpaper.jpg.txt)&") --CONTROL + SHIFT KEYS --SCREENSHOTS , ((0, xK_Print), spawn $ "flameshot gui") --, ((0, xK_Print), spawn $ "scrot 'ArcoLinux-%Y-%m-%d-%s_screenshot_$wx$h.jpg' -e 'mv $f $$(xdg-user-dir PICTURES)'") , ((controlMask, xK_Print), spawn $ "xfce4-screenshooter" ) , ((controlMask .|. shiftMask , xK_Print ), spawn $ "gnome-screenshot -a -c") --MULTIMEDIA KEYS -- Mute volume , ((0, xF86XK_AudioMute), spawn $ "amixer -q set Master toggle") -- Decrease volume , ((0, xF86XK_AudioLowerVolume), spawn $ "amixer -q set Master 5%-") -- Increase volume , ((0, xF86XK_AudioRaiseVolume), spawn $ "amixer -q set Master 5%+") -- Increase brightness , ((0, xF86XK_MonBrightnessUp), spawn $ "light -A 5") -- Decrease brightness , ((0, xF86XK_MonBrightnessDown), spawn $ "light -U 5") -- , ((0, xF86XK_AudioPlay), spawn $ "mpc toggle") -- , ((0, xF86XK_AudioNext), spawn $ "mpc next") -- , ((0, xF86XK_AudioPrev), spawn $ "mpc prev") -- , ((0, xF86XK_AudioStop), spawn $ "mpc stop") , ((0, xF86XK_AudioPlay), spawn $ "playerctl play-pause") , ((0, xF86XK_AudioNext), spawn $ "playerctl next") , ((0, xF86XK_AudioPrev), spawn $ "playerctl previous") , ((0, xF86XK_AudioStop), spawn $ "playerctl stop") -------------------------------------------------------------------- -- XMONAD LAYOUT KEYS -- Cycle through the available layout algorithms. , ((modMask, xK_space), sendMessage NextLayout) --Focus selected desktop , ((mod1Mask, xK_Tab), nextWS) --Focus selected desktop , ((modMask, xK_Tab), nextWS) --Focus selected desktop , ((controlMask .|. mod1Mask , xK_Left ), prevWS) --Focus selected desktop , ((controlMask .|. mod1Mask , xK_Right ), nextWS) -- Reset the layouts on the current workspace to default. , ((modMask .|. shiftMask, xK_space), setLayout $ XMonad.layoutHook conf) -- Move focus to the next window. , ((modMask, xK_j), windows W.focusDown) -- Move focus to the previous window. , ((modMask, xK_k), windows W.focusUp ) -- Move focus to the master window. , ((modMask .|. shiftMask, xK_m), windows W.focusMaster ) -- Swap the focused window with the next window. , ((modMask .|. shiftMask, xK_j), windows W.swapDown ) -- Swap the focused window with the next window. , ((controlMask .|. modMask, xK_Down), windows W.swapDown ) -- Swap the focused window with the previous window. , ((modMask .|. shiftMask, xK_k), windows W.swapUp ) -- Swap the focused window with the previous window. , ((controlMask .|. modMask, xK_Up), windows W.swapUp ) -- Shrink the master area. , ((controlMask .|. shiftMask , xK_h), sendMessage Shrink) -- Expand the master area. , ((controlMask .|. shiftMask , xK_l), sendMessage Expand) -- Push window back into tiling. , ((controlMask .|. shiftMask , xK_t), withFocused $ windows . W.sink) -- Increment the number of windows in the master area. , ((controlMask .|. modMask, xK_Left), sendMessage (IncMasterN 1)) -- Decrement the number of windows in the master area. , ((controlMask .|. modMask, xK_Right), sendMessage (IncMasterN (-1))) ] ++ -- mod-[1..9], Switch to workspace N -- mod-shift-[1..9], Move client to workspace N [((m .|. modMask, k), windows $ f i) --Keyboard layouts --qwerty users use this line | (i, k) <- zip (XMonad.workspaces conf) [xK_1,xK_2,xK_3,xK_4,xK_5,xK_6,xK_7,xK_8,xK_9,xK_0] --French Azerty users use this line -- | (i, k) <- zip (XMonad.workspaces conf) [xK_ampersand, xK_eacute, xK_quotedbl, xK_apostrophe, xK_parenleft, xK_minus, xK_egrave, xK_underscore, xK_ccedilla , xK_agrave] --Belgian Azerty users use this line -- | (i, k) <- zip (XMonad.workspaces conf) [xK_ampersand, xK_eacute, xK_quotedbl, xK_apostrophe, xK_parenleft, xK_section, xK_egrave, xK_exclam, xK_ccedilla, xK_agrave] , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask) , (\i -> W.greedyView i . W.shift i, shiftMask)]] ++ -- ctrl-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3 -- ctrl-shift-{w,e,r}, Move client to screen 1, 2, or 3 [((m .|. controlMask, key), screenWorkspace sc >>= flip whenJust (windows . f)) | (key, sc) <- zip [xK_w, xK_e] [0..] , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]] main :: IO () main = do dbus <- D.connectSession -- Request access to the DBus name D.requestName dbus (D.busName_ "org.xmonad.Log") [D.nameAllowReplacement, D.nameReplaceExisting, D.nameDoNotQueue] xmonad . ewmh $ --Keyboard layouts --qwerty users use this line myBaseConfig --French Azerty users use this line --myBaseConfig { keys = azertyKeys <+> keys azertyConfig } --Belgian Azerty users use this line --myBaseConfig { keys = belgianKeys <+> keys belgianConfig } {startupHook = myStartupHook , layoutHook = gaps [(U,35), (D,5), (R,5), (L,5)] $ myLayout ||| layoutHook myBaseConfig , manageHook = manageSpawn <+> myManageHook <+> manageHook myBaseConfig , modMask = myModMask , borderWidth = myBorderWidth , handleEventHook = handleEventHook myBaseConfig <+> fullscreenEventHook , focusFollowsMouse = myFocusFollowsMouse , workspaces = myWorkspaces , focusedBorderColor = focdBord , normalBorderColor = normBord , keys = myKeys , mouseBindings = myMouseBindings }
我不知道有一種方法可以在一個鍵綁定中完成所有這些操作,但可以分兩次完成。
從您的 myLayout 中刪除 AvoidStruts,使其如下所示:
myLayout = spacingRaw True (Border 0 5 5 5) True (Border 5 5 5 5) True $ mkToggle (NBFULL ?? NOBORDERS ?? EOT) $ tiled ||| Mirror tiled ||| spiral (6/7) ||| ThreeColMid 1 (3/100) (1/2) ||| Full where tiled = Tall nmaster delta tiled_ratio nmaster = 1 delta = 3/100 tiled_ratio = 1/2
將以下內容添加到“SUPER + FUNCTION KEYS”:
, ((modMask, xK_b), sendMessage ToggleGaps >> spawn "polybar-msg cmd toggle")
完成這些更改後,您可以執行 SUPER + F,然後執行 SUPER + B 以使應用程序全屏顯示。