dwm窗口管理器使用记录

开发组织:suckless

三种窗口布局模式:平铺、单片和浮动

其他窗口管理器

与ion,larswm和wmii相比,dwm更小、更快、更简单。

窗口布局

平铺布局(tiled layout)

平铺布局中的窗口在主窗口和堆叠区域中进行管理。主区域包含当前最需要关注的窗口,而堆叠区域包含所有其他窗口。

    +------+----------------------------------+--------+
    | tags | title                            | status |
    +------+---------------------+------------+--------+
    |                            |                     |
    |                            |                     |
    |                            |                     |
    |                            |                     |
    |          master            |        stack        |
    |                            |                     |
    |                            |                     |
    |                            |                     |
    |                            |                     |
    +----------------------------+---------------------+
一个新的终端出现在主窗口上。现有的窗口被推到屏幕右侧的堆栈上。默认使用[Mod]+[Enter]在主窗口和堆栈之间切换窗口。

单片布局(monocle layout)

在单片布局中,所有窗口都最大化为屏幕大小。

浮动布局(floating layout)

浮动布局中的窗口可以自由调整大小和移动。

对话框窗口始终是浮动管理的,在所有窗口布局中

Windows用户将熟悉浮动布局。使用[Mod]+[鼠标右键]调整浮动窗口的大小,使用[Mod]+[鼠标左键]移动浮动窗口。这也可以用于升起浮动窗口。

有几种方法可以将特定窗口作为浮动窗口进行管理,尽管平铺布局已被激活:

  1. [Mod]+[Shift]+[space],它将在活动窗口上切换浮动模式。
  2. 使用[Mod]+[鼠标右键]调整窗口大小。
  3. 在窗口上[Mod]+[鼠标中键],将其切换为浮动。

当一些应用程序为了美观或简单地使用而需要这些浮动窗口时,这些浮动窗口可以用来强制特定的窗口尺寸。

如果您想将某种类型的窗口设置为始终浮动,请查看config.def.h和rules数组,其中除一个元素外的最后一个元素定义了这种行为。

窗口分组-tag

指的是窗口标签吧,就是默认状态上的1234这些

窗口按标记分组。每个窗口都可以使用一个或多个标记进行标记。选择某些标记会显示带有这些标记的所有窗口。

桌面显示布局

每个屏幕都包含一个小的状态栏,其中显示所有可用的标签、布局、可见窗口的数量、聚焦窗口的标题以及从根窗口名称属性读取的文本(如果屏幕是聚焦的)。
浮动窗口用空正方形表示,最大化的浮动窗口用窗口标题前的填充正方形表示。所选标签用不同的颜色表示。聚焦窗口的标签在左上角用一个填充的正方形表示。应用于一个或多个窗口的标签在左上角用一个空正方形表示。

窗口聚焦

dwm在窗口周围绘制一个可自定义的小边框,以指示焦点状态。

特点

  • dwm没有Lua集成,没有9P支持,没有基于外壳的配置,没有远程控制,并且没有任何额外的工具,例如打印选择或扭曲鼠标。
  • dwm只是一个二进制文件,它的源代码保持较小。
  • dwm不区分层:没有浮动层或平铺层。无论当前所选标签的客户端是否处于平铺布局,您都可以动态重新排列它们。然而,弹出窗口和固定大小的窗口总是浮动的。
  • dwm是通过编辑其源代码进行定制的,这使得它非常快速和安全——它不处理任何在编译时未知的输入数据,除了从根窗口名称读取的窗口标题和状态文本。除了C之外,您不必学习Lua/sh/ruby或一些奇怪的配置文件格式(如X资源文件),就可以根据您的需求进行自定义:您只需要学习C(至少为了编辑头文件)。
  • 因为dwm是通过编辑其源代码来定制的,所以制作二进制包是毫无意义的。这使得它的用户群很小,而且很精英。没有新手问愚蠢的问题。不过,也有一些发行版提供二进制包。
  • dwm从根窗口的名称中读取,以打印任意状态文本(如日期、负载、电池电量)。这比larsremote、wmiir和其他什么都简单得多。。。
  • dwm为每个Xinerama屏幕创建一个视图。

配置dwm

修改config.h

  1. 窗口边界宽度-boarderpx
  2. 开机默认隐藏状态栏-showbar=0
规则数组

规则数组允许对某些应用程序(客户端)进行唯一处理。规则有一个匹配部分和一个操作部分。

//规则数组定义示例
static Rule rules[] = {
	/* class      instance    title       tags mask     isfloating   monitor */
	{ "Gimp",     NULL,       NULL,       0,            1,           -1 },
	{ "Firefox",  NULL,       NULL,       1 << 8,       1,           -1 },
	{ "deadbeef", NULL,       NULL,       1 << 7,       0             0 }
};

这些规则使每个Gimp和Firefox窗口都是浮动的,并使Firefox窗口显示在标签9上,而不是当前查看的标签上。deadbeef类似地将其窗口显示在标签8上用于辅助显示监视器。

当新客户端出现(发送映射请求)时,将根据其类、实例(WM_class)和标题(WM_NAME)属性的规则进行匹配,然后执行给定的标记和浮动模式设置操作。默认标记掩码为0,这意味着当前查看的标记和默认模式是平铺的,因此isfloating为False或0。

如果客户端的属性包含作为子字符串的给定字符串(区分大小写)或给定NULL(这意味着任何内容都匹配),则客户端匹配。
一个客户端可以应用多个规则,规则按顺序匹配。

获取窗口信息:xprop实用程序可用于获取以下信息:WM_CLASS是(实例、类)WM_NAME(或_NET_WM_NAME)是标题。

# shell脚本打印所选客户端的相关属性(如果属性不包含“=”或“,”)
xprop | awk '
	/^WM_CLASS/{sub(/.* =/, "instance:"); sub(/,/, "\nclass:"); print}
	/^WM_NAME/{sub(/.* =/, "title:"); print}'
标签掩码

1<<8 = 1 0000 0000 表示标签9
1<<8-1 = 0 1111 1111 表示标签1到标签8

启动时配置

设置状态栏

dwm的状态栏文本存储在根窗口的WM_NAME(X11属性)中,该属性由dwm管理

默认情况下,dwm在其状态栏中显示dwm-X.X。通过设置根窗口的WM_NAME属性来更改此文本。

  1. 使用下面的命令设置状态栏
xsetroot -name "Some Text"
xprop -root -set WM_NAME "Some Text"
  1. 使用suckless的slstatus工具
  2. 使用dwmstatus工具,与suckless编写的工具用法相似
git clone git://git.suckless.org/dwmstatus
cd dwmstatus
make
make PREFIX=/usr install
# add »dwmstatus 2>&1 >/dev/null &« to your .xinitrc
  1. 其他人的dwm状态栏工具, shell脚本和C程序

使用shell脚本很容易产生大型脚本,从而引入不必要的依赖项。对此的一个解决方案是用C编写所有内容,这样效率会高得多。

使用dwm

右键点击标签,可以选中多个标签,执行的命令在每个标签都会打开窗口。

测试换行符自动转换
测试中文显示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值