AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 413095
Accepted
Avaq
Avaq
Asked: 2017-12-27 03:04:59 +0800 CST2017-12-27 03:04:59 +0800 CST 2017-12-27 03:04:59 +0800 CST

在 XMonad 中的特定一侧渲染窗口边框

  • 772

XMobar 允许配置边框位置以及宽度:

{ border = BottomB
, borderColor = "#4F5B66"
, borderWidth = 1 }

我希望在 XMonad 中做同样的事情,但似乎边界只能通过以下属性进行配置:

{ borderWidth = 1
, normalBorderColor = "#4F5B66"
, focusedBorderColor = "#96B5B4" }

即使使用XMonad.Layout.NoBorders,这似乎也不是一个选项(或不是一个简单的选项)。

最后,我想要一个像素的底部边框,它总是被绘制并根据焦点改变颜色。这目前是否可行,我将如何进行这样的设置?

xmonad haskell
  • 1 1 个回答
  • 1372 Views

1 个回答

  • Voted
  1. Best Answer
    Avaq
    2018-06-18T01:00:13+08:002018-06-18T01:00:13+08:00

    在这个问题很少受到关注之后,我打开的 GitHub 问题已经充分回答了这个问题。

    这样做的问题是 xmonad 不绘制自己的边界。它只是告诉 X 它们应该有多厚和什么颜色。

    [可以] 告诉 X [with]结构border_pixmap中的元素使用某些模式XSetWindowAttributes。

    如果您假设 [ https://tronche.com/gui/x/xlib/window/attributes/border.html]中的所有警告 [描述]实际上并不存在或没有任何意义,那么您可能会得出结论[...] 可以通过指定一个环绕整个窗口的非常大的像素图来设置仅底部边框。

    [就目前而言,] 图形驱动程序编写者不断打破服务器端边界,因为现在只有 xmonad 和 dwm 使用它们。而且两者都没有使用borderPixmap,所以那里可能隐藏了很多错误。

    这里的要点是,虽然理论上应该可以为此使用窗口属性,但这不是一个好主意。有一种替代方法可能更好:

    要在 xmonad 中获得此结果,您需要有宽度为 0 的边框,然后实现窗口装饰,在您想要“边框”的位置放置一个彩色条。

    实际上很容易编写一个装饰样式类的实例,它将在窗口的一侧放置一个类似边框的装饰。如果那一侧是顶部或底部,那么栏将足够宽,并且窗口的标题文本将在其中呈现,但可以通过将文本设置为与栏相同的颜色或提供空白来解决问题字体。

    {-# 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
    
    • 1

相关问题

  • 如何使用 XMonad 打开应用程序并将其移动到特定的窗口堆栈位置?

  • 导航到 xmonad 中先前聚焦的窗口

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    JSON数组使用jq来bash变量

    • 4 个回答
  • Marko Smith

    日期可以为 GMT 时区格式化当前时间吗?[复制]

    • 2 个回答
  • Marko Smith

    bash + 通过 bash 脚本从文件中读取变量和值

    • 4 个回答
  • Marko Smith

    如何复制目录并在同一命令中重命名它?

    • 4 个回答
  • Marko Smith

    ssh 连接。X11 连接因身份验证错误而被拒绝

    • 3 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Marko Smith

    systemctl 命令在 RHEL 6 中不起作用

    • 3 个回答
  • Marko Smith

    rsync 端口 22 和 873 使用

    • 2 个回答
  • Marko Smith

    以 100% 的利用率捕捉 /dev/loop -- 没有可用空间

    • 1 个回答
  • Marko Smith

    jq 打印子对象中所有的键和值

    • 2 个回答
  • Martin Hope
    EHerman JSON数组使用jq来bash变量 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux 日期可以为 GMT 时区格式化当前时间吗?[复制] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC 如何复制目录并在同一命令中重命名它? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve “root”用户的文件权限如何工作? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe 将默认编辑器更改为 vim for _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey 如何下载软件包而不是使用 apt-get 命令安装它? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao 为什么目录 /home、/usr、/var 等都具有相同的 inode 编号 (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg —list-keys 命令在将私钥导入全新安装后输出 uid [未知] 2017-11-26 18:26:02 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve