subtle:有趣的伪平铺式窗口管理器
Author:吴吉庆
email: jiqingwu@gmail.com
home:http://hi.baidu.com/jiqing0925
create:2011-02-19
update:2011-02-20
自从发现 Musca 后,大部分时间都在用 Musca ,用它可以方便地构建我的集成工作环境。可惜作者已经很久很久没有继续开发了,等我有时间了,要好好研究一下 Musca 的代码。
在网上乱逛,偶然发现了一个窗口管理器的截图,它自称是手动平铺的窗口管理器,叫subtle。这个东西在我以前写的 《平铺式窗口管理器Musca初体验》 一文中曾提了一下,但当时我也是道听途说。
这次,嘿嘿,又让我撞见它,我的手又痒了。于是我搜索到它的 主页 ,看见它的开发很活跃,于是想体验一下,看看它会不会比 Musca 更好用。
体验的结果令我惊讶,subtle虽然也号称是手动平铺的管理器,但和 Musca 与 ion 的思想完全不同,可以说是一款很有特色的窗口管理器。果然有点 subtle 的意思。如何有特色,且听我与诸位看官分解。
既然要体验,就先装一个吧。
subtle是C开发的,本身很小巧,不过它选用了ruby做配置和扩展语言。大概作者很喜欢ruby吧。不过,这绑定推广ruby的行为,让对 ruby 不感冒的用户有点为难。而且要安装体积比较大的ruby1.9以上的版本。
好了,不再多愁善感了,开始行动。在 这里 上下载一个源码包,我下载了最新的,解开后,第一步居然不是 make 而是 rake ,好吧,安装rake和ruby::
sudo apt-get install rake ruby1.9.1
然后rape一下,哦,不对,是rake一下::
rake(in /home/jiqing/subtle-0.9.2573-lambda)rake aborted!no such file to load -- mkmf/home/jiqing/subtle-0.9.2573-lambda/Rakefile:12:in `require'(See full trace by running task with --trace)
google之,原来要ruby1.8-dev,真是得寸进尺::
sudo apt-get install ruby1.8-dev
再rake::
rake(in /home/jiqing/subtle-0.9.2573-lambda)rake aborted!Ruby 1.9.0 or higher required/home/jiqing/subtle-0.9.2573-lambda/Rakefile:176(See full trace by running task with --trace)
真想rape之了,都装了ruby1.9.1还叫什么叫。:
ls -l /usr/bin/ruby
发现居然是到ruby1.8的符号链接。rape!
sudo ln -sf /usr/bin/ruby1.9.1 /usr/bin/ruby
然后你就可以顺利地rake它了。:
rakesudo rake install
rake出来的执行文件除了subtle,还有:
- subtler - 一个subtle的命令行接口,怎么用,man subtler吧。
- subtlext - ruby扩展接口,读取subtle的配置文件就靠它了。
在你的 .xinitrc 中添加 exec /usr/bin/subtle ,startx就进入了 subtle。如果你使用某种登录管理器,要把subtle加入可选择的会话列表中,我不会,嘿嘿,欢迎会的同鞋补充吧。
进入subtle后,先别动,冷静观察,上面有个细长状态栏,其它就是一片广袤的黑色屏幕。
状态栏左边有四个标签,每一个标签代表一个view,其实就是工作区(虚拟桌面),你可以通过小键盘上的 + 切换到下一个 view,通过小键盘上的 - 切换到上一个view。也可以通过Win+n 切换到第n个view。
为了给大家直观的印象,先放张图片吧,不过这是我改了配置后的截图。
W+Enter,W表示windows键,会启动一个终端。:
cp /etc/xdg/subtle/subtle.rb ~/.config/subtle/
这就生成咱自己的subtle.rb配置文件了,用你喜欢的编辑器打开它,它是配置文件,同时也是咱的帮助。
vim ~/.config/subtle/subtle.rb
搜索 == Grabs ,找到 Grabs 一节,这是绑定键盘和鼠标按键的部分,如何使用,有详细的解说。:
grab "W-Return", "urxvt"
这表示按 Win+Enter,会打开一个urxvt的终端,如果你用的不是rxvt,就改成你的终端模拟器的名称,保存然后Win+Ctrl+r,让subtle重新载入配置。幸好我用的也是rxvt,不然按了Win+Enter还没反应。作者也太不考虑广大用户的感受了,如果把urxvt换成 x-terminal-emulator ,不就能适用各种终端了吗。
现在默认的终端窗口是最大化的,跟我来体验一下:
- 按Win+KeyPad_4(小键盘上的7),终端窗口占据了左半边屏幕;
- 按Win+KeyPad_6(小键盘上的6),终端窗口占据了右半边屏幕;
- 按Win+KeyPad_8(小键盘上的8),终端窗口占据了上半边屏幕;
- 按Win+KeyPad_2(小键盘上的2),终端窗口占据了下半边屏幕;
- 按Win+KeyPad_7(小键盘上的7),终端窗口占据了左上四分之一的屏幕;
- 按Win+KeyPad_9(小键盘上的9),终端窗口占据了右上四分之一的屏幕;
- 按Win+KeyPad_1(小键盘上的1),终端窗口占据了左下四分之一的屏幕;
- 按Win+KeyPad_3(小键盘上的3),终端窗口占据了右下四分之一的屏幕;
- 按Win+KeyPad_5(小键盘上的5),终端窗口又占据了整个屏幕。
聪明的你,早就发现了,小键盘上9个键直观地对应着9个方位。
接着按 Win+KeyPad_5 ,发现终端窗口变小了,占据了屏幕中间某个区域;再接着按,发现终端窗口的大小又变了,不过还是在屏幕中间。再按的话,又变成最大化了。不只Win+KeyPad_5,连续Win+其它的小键盘数字键,也会改变窗口的位置和大小,不过相对位置还是对应于小键盘数字键所在的方位。
这是怎么做到的,在subtle.rb的Grabs一节中有这样的键绑定::
grab "W-KP_7", [ :top_left, :top_left66, :top_left33 ]grab "W-KP_8", [ :top, :top66, :top33 ]grab "W-KP_9", [ :top_right, :top_right66, :top_right33 ]grab "W-KP_4", [ :left, :left66, :left33 ]grab "W-KP_5", [ :center, :center66, :center33 ]grab "W-KP_6", [ :right, :right66, :right33 ]grab "W-KP_1", [ :bottom_left, :bottom_left66, :bottom_left33 ]grab "W-KP_2", [ :bottom, :bottom66, :bottom33 ]grab "W-KP_3", [ :bottom_right, :bottom_right66, :bottom_right33 ]
那里的 :top , :top_left 都是什么玩意,哈哈,这就要提到subtle里很有特色的一个概念: gravity 。
什么是gravity,就是窗口的位置和大小。在subtle.rb中搜索 == Gravities ,找到那一节,可以看到详细的说明。
往下看,就发现了那些 :top 、 :top_left 之类的定义,以 :top 为例,:
gravity :top, [ 0, 0, 100, 50 ]gravity :top66, [ 0, 0, 100, 66 ]gravity :top33, [ 0, 0, 100, 34 ]
后面的四个值都不是像素值,而是比例,以 gravity :top, [ 0, 0, 100, 50 ] 为例,可以这样理解,窗口在最左边,最上边,宽度100%的屏幕,高度占 50%的屏幕。
回头再看看, grab "W-KP_8", [ :top, :top66, :top33 ] 原来Win+KeyPad_8对应了一个gravity的列表,难怪连续按会改变窗口的大小和位置呢。
现在我们已经有一个终端窗口了,按Win+KeyPad_4,让它靠左边呆着。按Win+Return,再打开一个终端窗口,按Win+KeyPad_6,让它靠右边呆着。看,严丝合缝地平铺了吧。
你可以按Win+方向键遍历各个平铺在表面的窗口,如果窗口多了,被盖住的看不见的窗口你是遍历不了的,怎么办?对上层的窗口按Win+l,让它降到下一层,被盖住的窗口就上来了。
居然没有提供一个遍历当前工作区所有窗口的快捷键,多少有些可恶吧。
对于平铺的两个终端窗口,我们聚焦在左边的终端窗口,再次按 Win+KeyPad4,改变它的大小,它变大了,但右边的终端没有改变,这样右边终端的一部分区域就被盖住了。再按 Win+KeyPad4,左边终端又变小了,屏幕中间空出一部分区域,右边的终端并没有变大来填充。
当一个窗口的大小改变时,有其它窗口的大小也会跟着改变,这才是平铺式窗口管理器的本质吧?而当一个窗口的位置和大小的改变独立于其它窗口时,它就是浮动式窗口管理器吧?我想这就是平铺与浮动的本质区别,从这个意义上看,subtle是真的平铺式窗口管理器吗?
subtle中也有浮动的概念,你对聚焦的窗口按Win+f,它就有了浮动的属性,但是有什么分别吗?即使被你平铺的窗口,你按住窗口键,用鼠标左键同样能自由地改变它的位置,用鼠标右键同样能改变它的大小。
要说subtle的特色,我看就在于它是一个提供了一组快捷键,能快速改变窗口布局的浮动式窗口管理器。
除了Grab和Gravity,还有一个Tag值得一提。 Tag的主要作用是控制窗口放在哪个view中。看下面的例子::
tag "terms" do match "xterm|[u]?rxvt" gravity :rightendview "dev", "terms"
这表示如果我启动rxvt,就会匹配到terms这个Tag,而匹配terms这个 Tag的窗口都会放入dev这个view中。也就是说,不管我在哪个view中启动rxvt,都必定放入dev这个view中,这算什么。
文档中还说,每个应用程序的窗口必定关联到一个view,如果没有显式关联,就会关联到default view。如果你没有显式指定default view,第一个 view就是default view。
也就是说,如果我没有把gvim匹配到某个tag,也没有关联到某个view,我想在第三个view中,启动gvim,结果gvim会被放入第一个view,我还得去第一个view找它。这算什么特性?
窗口又不能在view之间移动,只能通过Win+s,让它具有stick属性,从而在所有view中可见。这个……,俺非常不喜欢。
Tags这个特性,有些stupid,请作者看见不要生气,请心平气和地把这当作用户的反馈,认真对待吧。
除了Grab、Gravity、views、Tags,还有Hooks属性,用户可以通过这个定义subtle中的行为会触发一些什么事件。我却不知道如何在subtle启动时触发外部的程序(如conky等)启动,不知道有没有这个功能呢?
另外,依赖ruby也不是白依赖的,你可以安装用ruby写的sublets,加一些时钟、cpu利用率之类的插件,不过我没弄成功。我耳边不禁响起《色戒》中梁朝伟的声音:有这么难吗?有兴趣的朋友有时间玩玩看。
体验完,我又用回 Musca 啦,小声告诉你:我现在写这篇文档,也不是在用subtle,哈哈。不过,subtle体现了一种新的思想,推荐朋友们尝试一下,尤其是喜欢ruby的同学。尽管我不喜欢它的风格,没有坚持用下去,我想应该会有人喜欢的。
(全文完)
subtle:有趣的伪平铺式窗口管理器的更多相关文章
- 平铺式窗口管理器 Musca 初体验
作者: 吴吉庆 Version: 1.0 release: 2009-11-04 update: 2009-11-04 为什么用平铺式窗口管理器? 什么是平铺式窗口管理器(tiling window ...
- blfs(systemv版本)学习笔记-编译安装i3-wm平铺式窗口管理器
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! i3-wm项目的官网:https://i3wm.org/ 首先需要lfs基础上编译安装完整的xorg服务 我的xorg服务编译安 ...
- dvtm: 平铺式终端管理器 — LinuxTOY
dvtm: 平铺式终端管理器 — LinuxTOY LinuxTOY 是一个致力于提供 Linux 相关资讯的专题站点.如果您发现了好用好玩的 Linux 东东并愿意发扬自由.分享的精神,可以点击顶部 ...
- Dvtm -- 平铺式终端
Dvtm -- 平铺式终端_Linux伊甸园开源社区-24小时滚动更新开源资讯,全年无休! Dvtm -- 平铺式终端 关注我们: 如果你使用过 Dwn 或 Awesome 这种平铺式窗口管理器,一定 ...
- labview中层叠式顺序结构与平铺式顺序结构有什么不同?
也就看着不同,平铺式看着直观,但比较占地方,程序复杂了就显得过大.二者可互相转换,从这点也可以看出它们没有本质不同!
- Terminix:基于 GTK3 的平铺式 Linux 终端模拟器
现在,你可以很容易的找到大量的 Linux 终端模拟器,每一个都可以给用户留下深刻的印象.但是,很多时候,我们会很难根据我们的喜好来找到一款心仪的日常使用的终端模拟器.这篇文章中,我们将会推荐一款叫做 ...
- Mac下的平铺式桌面 - Yabai
Mac下的平铺式桌面 - Yabai 近来无事,凑着周末休息的时间,想折腾一下 Mac.很久之前就有朋友给我推荐过一款名为"Yabai"的平铺式桌面管理软件,今天,就折腾起来了. ...
- 后台返回平铺数据,如何转换成树形json并渲染树形结构,ant tree 异步加载
如何后台返回对象数组(平铺式) 1.根据字段标识(板块)获取根节点 ### initTreeData(dataOrg){ var resultArr=dataOrg[0] var secArr=[]; ...
- 躺平吧,平铺的窗口「GitHub 热点速览 v.21.47」
作者:HelloGitHub-小鱼干 用 macOS 系统经常会遇到的一个问题便是多开窗口如何快速找寻的问题,本周特推项目 yabai 便是来解决这个问题的.直接把所有窗口平铺,是不是很"正 ...
随机推荐
- 区别mouseover与mouseenter?
区别mouseover与mouseenter? * mouseover: 在移入子元素时也会触发, 对应mouseout,进入子元素的时候,父元素显示离开状态 * mouseenter: 只在移入当前 ...
- Scrum 项目7.0——第一个Sprint的总结和读后感
总结: 通过这一次的Sprint,我了解了Sprint的整个流程,也学会了编制backlog,也了解了在软件工程中,一个团队的任务是怎么样分配和一个项目是怎么样开展的.从对软件工程的认识只 ...
- VNC Server (Ubuntu 16.04.3 GNOME)
1. 安装VNC服务 sudo apt-get install vnc4server -y 2. 启动VNC服务 vncserver :1 3. 此时客户端连上后你会发现灰屏,原因出在~/.vnc/x ...
- 计算机网络【6】—— 从浏览器输入URL到显示页面发生了什么
当在浏览器地址栏输入网址,如:www.baidu.com后浏览器是怎么把最终的页面呈现出来的呢?这个过程可以大致分为两个部分:网络通信和页面渲染. 一.网络通信 互联网内各网络设备间的通信都遵循TCP ...
- 是否升级IOS11?IOS11不支持32位程序 查看手机哪些APP不支持
查看苹果32位APP具体步骤:设置-通用-关于本机-应用程序.如果手机中下载了32位应用的话,苹果会给出应用兼容性提醒:如果手机里没有安装32位应用,右侧没有小三角,点击“应用程序”也会没有反应. I ...
- 2018 南京icpc现场赛总结
Day 0 提前5个小时从学校出发,在登机口坐下时,飞机还有1个多小时起飞. 航班准时起飞,到了南京以后直接坐地铁到学校附近(南京地铁票也太精致了吧). 因为天已经黑了,就只在学校附近转了一圈就回酒店 ...
- P2234 [HNOI2002]营业额统计
题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是 ...
- PHP 字符串数组按照拼音排序的问题
拼音排序的规则: 字符串包括特殊字符.数字.英文字符.中文字符等等,排序结果要求,特殊字符排在第一梯队,将其按照首个字符ascii码表进行排序,数字字符排在第二梯队,将首个字符数字按照数字大小排序,英 ...
- All flavors must now belong to a named flavor dimension
FAQ: All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/ ...
- android studio 怎么做屏幕适配?
一.关于布局适配建议1.不要使用绝对布局2.尽量使用match_parent 而不是fill_parent .3.能够使用权重的地方尽量使用权重(android:layout_weight)4.如果是 ...