dwm patch

作者: mi78108 | 来源:发表于2021-07-26 13:57 被阅读0次
  • DWM 官网 http://dwm.suckless.org/
  • 官网提供了很多增强补丁,个人用的比较顺手的有: 图片.png
  • http://dwm.suckless.org/patches/systray/ 系统状态了 几乎是必须。 图片.png
  • http://dwm.suckless.org/patches/hide_vacant_tags/ 隐藏没有应用的空Tag 图片.png
  • http://dwm.suckless.org/patches/pertag/ 用来保持 tag 切换后的窗口布局。
  • http://dwm.suckless.org/patches/tab/ 当使用全屏布局时,会显示当前tag的其他应用,类似windows的任务栏, 点击可切换。 图片.png
  • 问题
    但有点不舒服就是 文字是左对齐的,和色块没有居中。
  • 解决
    修改drawtab 方法中, 调用 drw_text 写窗口名字的部分, 改为 drw_text(drw, x, 0, w, th, lrpad / 2, c->name, 0);,把lrpad边距传下去即可居中。
for (c = m->clients; c; c = c->next) {
        if (!ISVISIBLE(c)) continue;
        if (i >= m->ntabs) break;
        if (m->tab_widths[i] > maxsize) m->tab_widths[i] = maxsize;
        w = m->tab_widths[i];
        drw_setscheme(drw, scheme[(c == m->sel) ? SchemeSel : SchemeNorm]);
        drw_text(drw, x, 0, w, th, lrpad / 2, c->name, 0);
        x += w;
        ++i;
    }
  • http://dwm.suckless.org/patches/status2d/ 用于彩色标题栏信息, 甚至可以绘制图形, 源码扩展也比较简单。 图片.png
  • 问题
    和 systray 有点点问题,会造成占位,显示不全等问题。
  • 解决
    解决也比较简单, 根本原因是drawstatusbar方法没有计算systray的宽度偏移引起的, 修改源码即可
void
drawbar(Monitor *m) {
    int x, w, sw = 0, stw = 0;
    int boxs = drw->fonts->h / 9;
    int boxw = drw->fonts->h / 6 + 2;
    unsigned int i, occ = 0, urg = 0;
    Client *c;

    if (showsystray && m == systraytomon(m) && !systrayonleft)
        stw = getsystraywidth();  //取得systray 造成的偏移

    /* draw status first so it can be overdrawn by tags later */
    if (m == selmon) { /* status is only drawn on selected monitor */
        //drw_setscheme(drw, scheme[SchemeNorm]);
        //int _sw = TEXTW(stext) - lrpad / 2 + 2; /* 2px extra right padding */
        //drw_text(drw, m->ww - sw - stw, 0, sw, bh, lrpad / 2 - 2, stext, 0);
        //printf(">>>>old sw %d\n", _sw);
        //printf(">>>>old stw %d\n", stw);

        sw = m->ww - drawstatusbar(m, bh, stw, stext); //传递过去
        //printf(">>>>now sw %d\n\n", sw);
    }
int
drawstatusbar(Monitor *m, int bh, int xoffset, char *stext) {  //把偏移传过来
    int ret, i, w, x, len;
    short isCode = 0;
    char *text;
    char *p;

    len = strlen(stext) + 1;
    if (!(text = (char *) malloc(sizeof(char) * len)))
        die("malloc");
    p = text;
    memcpy(text, stext, len);

    /* compute width of the status text */
    w = 0;
    i = -1;
    while (text[++i]) {
        if (text[i] == '^') {
            if (!isCode) {
                isCode = 1;
                text[i] = '\0';
                w += TEXTW(text) - lrpad;
                text[i] = '^';
                if (text[++i] == 'f')
                    w += atoi(text + ++i);
            } else {
                isCode = 0;
                text = text + i + 1;
                i = -1;
            }
        }
    }
    if (!isCode)
        w += TEXTW(text) - lrpad;
    else
        isCode = 0;
    text = p;

    w += 2; /* 1px padding on both sides */
    ret = x = m->ww - w;
    x -= xoffset; // 把偏移算进去
    ...

相关文章

  • dwm patch

    DWM 官网 http://dwm.suckless.org/ 官网提供了很多增强补丁,个人用的比较顺手的有: 图...

  • dwm 美化

    在之前的博客中,我们将arch linux这个系统进行了一些美化,当然也是仅仅做到能看这个地步,要说跟网上其他那些...

  • 2020-05-04

    关于双显卡卡顿,指点关闭dwm.exe进程可恢复正常,我想设置开机启动并在开机的时候启动一个bat关闭一下dwm....

  • Git Patch 操作

    Git Patch 操作 patch的方式 创建patch apply patch到某个分支上(不包含commit...

  • k8s patch 的几种方式

    序言 JSON Patch JSON Merge Patch JSON Patch 与 JSON Merge Pa...

  • Git patch

    生成patch文件 应用patch文件

  • virtual dom

    patch(container,vnode) patch(vnode,newVnode)

  • git apply、git am打补丁.diff 和 .patc

    前提: 生成patch:git format-patch -M master生成指定patch,0163bed3b...

  • Customizing, building and deploy

    1 Patch the kernel In this example, we create a patch for...

  • git format-patch

    使用git format-patch生成所需要的patch: # git format-patch -s 1bbe...

网友评论

    本文标题:dwm patch

    本文链接:https://www.haomeiwen.com/subject/tlhpmltx.html