Linux Manjaro Neovim

dwm patch

2021-07-26  本文已影响0人  mi78108
  • 官网提供了很多增强补丁,个人用的比较顺手的有: 图片.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; // 把偏移算进去
    ...
上一篇 下一篇

猜你喜欢

热点阅读