要在dwm无边框窗口中添加标题栏右键菜单,您需要编辑dwm的源代码。下面是一些步骤:

  1. 打开dwm的源代码文件,通常在/usr/local/src/dwm目录下。

  2. 找到config.h文件并打开它。

  3. 添加以下代码:

static const char *menu[] = { "Menu Item 1", "Menu Item 2", "Menu Item 3" };

这是您的右键菜单选项,可以根据您的需要进行更改。

  1. Button1事件中添加以下代码:
else if(ev->button == Button3) {
   int i, x = 0;
   for(i = 0; i < LENGTH(menu); i++) {
      x += TEXTW(menu[i]) + lrpad;
   }
   x -= lrpad;
   int y = bh / 2;
   int w = x + 2 * borderpx;
   int h = bh * LENGTH(menu) + 2 * borderpx;
   int sx = selmon->mx + (selmon->mw - w) / 2;
   int sy = selmon->my + (selmon->mh - h) / 2;
   XEvent ev;
   XSetForeground(dpy, drw->gc, scheme[SchemeNorm][ColBg].pixel);
   XFillRectangle(dpy, selmon->barwin, drw->gc, selmon->wx + x, selmon->by, w, bh);
   XDrawRectangle(dpy, selmon->barwin, drw->gc, selmon->wx + x, selmon->by, w - 1, bh - 1);
   for(i = 0; i < LENGTH(menu); i++) {
      XSetForeground(dpy, drw->gc, scheme[SchemeNorm][ColFg].pixel);
      XDrawString(dpy, selmon->barwin, drw->gc, sx + borderpx, sy + i * bh + (bh - drw->font->ascent) / 2, menu[i], strlen(menu[i]));
   }
   XMaskEvent(dpy, ButtonPressMask, &ev);
   XSetForeground(dpy, drw->gc, scheme[SchemeNorm][ColBg].pixel);
   XFillRectangle(dpy, selmon->barwin, drw->gc, selmon->wx + x, selmon->by, w, bh);
   XDrawRectangle(dpy, selmon->barwin, drw->gc, selmon->wx + x, selmon->by, w - 1, bh - 1);
   for(i = 0; i < LENGTH(menu); i++) {
      XSetForeground(dpy, drw->gc, scheme[SchemeNorm][ColFg].pixel);
      if(ev.xbutton.y >= sy + i * bh && ev.xbutton.y < sy + (i + 1) * bh) {
         XSetForeground(dpy, drw->gc, scheme[SchemeSel][ColBg].pixel);
         XFillRectangle(dpy, selmon->barwin, drw->gc, selmon->wx + x, selmon->by + i * bh, w, bh);
         XSetForeground(dpy, drw->gc, scheme[SchemeSel][ColFg].pixel);
      }
      XDrawString(dpy, selmon->barwin, drw->gc, sx + borderpx, sy + i * bh + (bh - drw->font->ascent) / 2, menu[i], strlen(menu[i]));
   }
   XFlush(dpy);
   if(ev.type == ButtonPress && ev.xbutton.button == Button1) {
      if(strcmp(menu[i], "Menu Item 1") == 0) {
         // do something
      } else if(strcmp(menu[i], "Menu Item 2") == 0) {
         // do something else
      } else if(strcmp(menu[i], "Menu Item 3") == 0) {
         // do something different
      }
   }
}

这段代码将创建一个菜单,当您右键单击标题栏时,它将显示在屏幕中央。您可以根据需要调整菜单的大小和位置。

  1. 保存并关闭文件。

  2. 编译并重新安装dwm。

sudo make clean install

现在,当您右键单击dwm窗口的标题栏时,将出现一个菜单,其中包含您之前定义的选项

dwm无边框窗口添加标题栏右键菜单

原文地址: https://www.cveoy.top/t/topic/deUO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录