效果图

-w1920

中间是通过buaq.net的api获取最近的文章,并且高亮高阅读量的文章

实现过程

前段时间折腾了一下arch+i3gaps,用了一段时间发现i3是真的爽,最吸引我的地方就是可以通过快捷键把程序发送到任何工作空间中,大大提高了效率;

然后我就寻思之前在mac上配置的yabai是不是也能达到这样的效果
最后发现是可以实现的,比如这条命令就是把当前窗口移动到space 1,并且把焦点也同时切换过去。

# 发送窗口到其他空间
yabai -m window --space 1;yabai -m space --focus 1

这个实现了之后呢,因为我有4个显示器,所有有时候开的space和程序会比较多,如果想找到程序运行在哪个space的话,要么靠记忆,要么就得一个一个找,不是很方便

然后在看yabai的wiki的时候发现可以直接查询每个space下运行了那些程序

> yabai -m query --windows --space 8
[{
    "id":95121,
    "pid":39081,
    "app":"iTerm2",
    "title":"yabai -m query --windows --space 8",
    "frame":{
        "x":-1910.0000,
        "y":40.0000,
        "w":1900.0000,
        "h":1010.0000
    },
    "level":0,
    "role":"AXWindow",
    "subrole":"AXStandardWindow",
    "movable":1,
    "resizable":1,
    "display":3,
    "space":8,
    "visible":1,
    "focused":1,
    "split":"none",
    "floating":0,
    "sticky":0,
    "minimized":0,
    "topmost":0,
    "opacity":1.0000,
    "shadow":0,
    "border":1,
    "stack-index":0,
    "zoom-parent":0,
    "zoom-fullscreen":1,
    "native-fullscreen":0
}]

这样的话就可以配合ubersicht来做一个statusbar去显示每个space中运行的程序了

    run(`/usr/local/bin/yabai -m query --windows`).then(space =>{
        if(space.length<10) return;
        windowsList={}
        space=JSON.parse(space);
        for (var key in space) {
            if (space.hasOwnProperty(key)) {
                var element = space[key];
                if(windowsList.hasOwnProperty(element.space)){
                    windowsList[element.space].push(element.app)
                    // windowsList[element.space].push(element.title)
                }else{
                    windowsList[element.space]=[element.app]
                    // windowsList[element.space]=[element.title]
                }
            }
        }
        console.log(windowsList)
    })

shkd配置文件

基本是按照i3的快捷键来的

alt - return : open -n /Applications/iTerm.app
# create new space
alt - n : yabai -m space --create
alt - d : yabai -m space --destroy


# fast focus desktop (切换空间焦点)
# cmd + alt - x : yabai -m space --focus recent
# cmd + alt - z : yabai -m space --focus prev
# cmd + alt - c : yabai -m space --focus next
alt - 1 : yabai -m space --focus 1
alt - 2 : yabai -m space --focus 2
alt - 3 : yabai -m space --focus 3
alt - 4 : yabai -m space --focus 4
alt - 5 : yabai -m space --focus 5
alt - 6 : yabai -m space --focus 6
alt - 7 : yabai -m space --focus 7
alt - 8 : yabai -m space --focus 8
alt - 9 : yabai -m space --focus 9
alt - 0 : yabai -m space --focus 10

# 发送窗口到其他空间
alt + shift - 1 : yabai -m window --space 1;yabai -m space --focus 1
alt + shift - 2 : yabai -m window --space 2;yabai -m space --focus 2
alt + shift - 3 : yabai -m window --space 3;yabai -m space --focus 3
alt + shift - 4 : yabai -m window --space 4;yabai -m space --focus 4
alt + shift - 5 : yabai -m window --space 5;yabai -m space --focus 5
alt + shift - 6 : yabai -m window --space 6;yabai -m space --focus 6
alt + shift - 7 : yabai -m window --space 7;yabai -m space --focus 7
alt + shift - 8 : yabai -m window --space 8;yabai -m space --focus 8
alt + shift - 9 : yabai -m window --space 9;yabai -m space --focus 9
alt + shift - 0 : yabai -m window --space 10;yabai -m space --focus 10

# 移动到不同的窗口上
alt - h : yabai -m window --focus west
alt - j : yabai -m window --focus south
alt - k : yabai -m window --focus north
alt - l : yabai -m window --focus east


# 调整窗口大小
alt + shift - h : \
    yabai -m window --resize left:-20:0 ; \
    yabai -m window --resize right:-20:0
 
alt + shift - j : \
    yabai -m window --resize bottom:0:20 ; \
    yabai -m window --resize top:0:20
 
alt + shift - k : \
    yabai -m window --resize top:0:-20 ; \
    yabai -m window --resize bottom:0:-20
 
alt + shift - l : \
    yabai -m window --resize right:20:0 ; \
    yabai -m window --resize left:20:0
 

# 平均分窗口布局
alt + shift - b : yabai -m space --balance

# 全屏当前窗口
alt - f         : yabai -m window --toggle zoom-fullscreen

# 旋转布局
alt - r         : yabai -m space --rotate 90
shift + alt - r : yabai -m space --rotate 270

链接

我的ubersicht的widget列表。
https://github.com/code-scan/ubersicht-widgets

标签: none