XMobar를 사용하면 테두리 위치와 너비를 구성할 수 있습니다.
{ border = BottomB
, borderColor = "#4F5B66"
, borderWidth = 1 }
XMonad에서도 동일한 작업을 수행하고 싶지만 다음 속성을 통해서만 테두리를 구성할 수 있는 것 같습니다.
{ borderWidth = 1
, normalBorderColor = "#4F5B66"
, focusedBorderColor = "#96B5B4" }
가능하더라도 XMonad.Layout.NoBorders
이는 선택 사항이 아닌 것 같습니다(또는 쉬운 옵션이 아닌 것 같습니다).
마지막으로 항상 그려지고 초점에 따라 색상이 변경되는 픽셀 아래쪽 테두리를 갖고 싶습니다. 현재 이것이 가능합니까? 이것을 설정하려면 어떻게 해야 합니까?
답변1
이 질문에 대한 답변이 완전히 완료되었습니다.GitHub 문제이 문제가 거의 관심을 받지 못한 후에 열어보았습니다.
이것의 문제는 xmonad가 자체 경계를 그리지 않는다는 것입니다. 단지 X에게 경계가 얼마나 두껍고 어떤 색상인지 알려줄 뿐입니다.
[할 수 있음] X에게 구조
border_pixmap
의 요소에 특정 패턴을 사용하도록 지시할 수 있습니다XSetWindowAttributes
.[에 설명된 모든 경고를 가정하면https://tronche.com/gui/x/xlib/window/attributes/border.html]실제로 존재하지 않거나 의미가 없는 경우 [...] 전체 창을 둘러싸는 매우 큰 픽스맵을 지정하여 아래쪽 테두리를 설정할 수 있다고 결론을 내릴 수 있습니다.
[현재 상태로는] 그래픽 드라이버 작성자는 이제 xmonad와 dwm만 서버 측 경계를 사용하기 때문에 계속해서 서버 측 경계를 허물고 있습니다. 그리고 둘 다 borderPixmap을 사용하지 않으므로 거기에 많은 버그가 숨어 있을 수 있습니다.
여기서 중요한 점은 이를 달성하기 위해 창 속성을 사용하는 것이 이론적으로는 가능하지만 좋은 생각은 아니라는 것입니다. 더 나은 대안이 있을 수 있습니다.
xmonad에서 이 결과를 얻으려면 너비가 0인 테두리가 있어야 하며 "테두리"를 원하는 위치에 색상 막대를 배치하는 창 장식을 구현해야 합니다.
실제로 창 한쪽에 테두리 같은 장식을 배치하는 DecorStyle 클래스의 인스턴스를 작성하는 것은 매우 쉽습니다. 해당 면이 상단 또는 하단이면 막대가 충분히 넓어지고 창의 제목 텍스트가 그 안에 렌더링되지만 텍스트를 막대와 동일한 색상으로 설정하거나 빈 글꼴을 제공하면 이 문제를 해결할 수 있습니다.
{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-} import qualified XMonad.StackSet as W import XMonad.Layout.Decoration import XMonad.Util.Types data SideDecoration a = SideDecoration Direction2D deriving (Show, Read) instance Eq a => DecorationStyle SideDecoration a where shrink b (Rectangle _ _ dw dh) (Rectangle x y w h) | SideDecoration U <- b = Rectangle x (y + fi dh) w (h - dh) | SideDecoration R <- b = Rectangle x y (w - dw) h | SideDecoration D <- b = Rectangle x y w (h - dh) | SideDecoration L <- b = Rectangle (x + fi dw) y (w - dw) h pureDecoration b dw dh _ st _ (win, Rectangle x y w h) | win `elem` W.integrate st && dw < w && dh < h = Just $ case b of SideDecoration U -> Rectangle x y w dh SideDecoration R -> Rectangle (x + fi (w - dw)) y dw h SideDecoration D -> Rectangle x (y + fi (h - dh)) w dh SideDecoration L -> Rectangle x y dw h | otherwise = Nothing