Подтвердить что ты не робот

Удалить границу только из полноэкранных плавающих окон (конфигурация XMonad)

Я хотел бы

  • удалить границы (только) из плавающих окон, охватывающих весь экран (например, mplayer), и
  • используйте другой цвет рамки (normalBorderColor), когда в рабочей области есть только одно окно.

В настоящее время я использую smartBorders из XMonad.Layout.NoBorders для удаления границы из mplayer и для удаления границы окна, когда это окно является единственным окном в рабочей области. Однако, когда я переключаюсь между двумя рабочими пространствами, у которых есть одно неплавающее окно (независимо от режима (высокий/зеркальный/полный)), тогда я вижу окно (в рабочей области, в которую я перехожу) немного "прыгает", по мере того, как его граница нарисована, а затем удаляется через некоторое время (эффект более заметен, если вы установите для параметра borderWidth большое число).

Соответствующая часть моего ~/.xmonad/xmonad.hs приведена ниже.

import XMonad.Hooks.ManageDocks
import XMonad.Layout.NoBorders
myLayout = tiled ||| Mirror tiled ||| Full
  where
    tiled   = Tall 1 (3/100) (3/5)                                 
main = xmonad $ defaultConfig 
                 { layoutHook = avoidStruts $ smartBorders $ myLayout 
                 , borderWidth = 4
                 , normalBorderColor  = "#000000" -- black
                 , focusedBorderColor = "#ff3f3f" -- reddish
                 }

Вы знаете, как я могу добиться этого эффекта? (возможно ли это часть 2.)? Предложения и указатели на расширения и/или существующие конфигурации, которые достигают такого же эффекта, очень ценятся.

4b9b3361

Ответ 1

Я решил pt. 1, используя конструктор Ambiguity с именем OnlyFloat из XMonad.Layout.NoBorders.

import XMonad.Hooks.ManageDocks
import XMonad.Layout.NoBorders
myLayout = tiled ||| Mirror tiled ||| Full
  where
    tiled   = Tall 1 (3/100) (3/5)                                 
main = xmonad $ defaultConfig 
                 { layoutHook = lessBorders OnlyFloat $ avoidStruts $ myLayout 
                 , borderWidth = 4
                 , normalBorderColor  = "#000000" -- black
                 , focusedBorderColor = "#ff3f3f" -- reddish
                 }

Я не обращался к pt. 2. Кроме того, когда я переключаюсь в рабочую область, цвет границы сфокусированного окна "мерцает", так как изначально окно не сфокусировано (при этом его граница окрашена в соответствии с нормальным цветом), после чего окно становится сфокусированным (и, следовательно, его граница получает цвет сфокусированныйBorderColor).