summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--x11-wm/cwm/Makefile28
-rw-r--r--x11-wm/cwm/distinfo3
-rw-r--r--x11-wm/cwm/files/patch-Makefile14
-rw-r--r--x11-wm/cwm/files/patch-calmwm.h10
-rw-r--r--x11-wm/cwm/files/patch-conf.c18
-rw-r--r--x11-wm/cwm/files/patch-kbfunc.c75
-rw-r--r--x11-wm/cwm/pkg-descr5
7 files changed, 153 insertions, 0 deletions
diff --git a/x11-wm/cwm/Makefile b/x11-wm/cwm/Makefile
new file mode 100644
index 0000000..2fa85ef
--- /dev/null
+++ b/x11-wm/cwm/Makefile
@@ -0,0 +1,28 @@
+PORTNAME= cwm
+DISTVERSION= 6.7
+PORTREVISION= 1
+CATEGORIES= x11-wm
+MASTER_SITES= https://leahneukirchen.org/releases/
+
+MAINTAINER= me@emilengler.com
+COMMENT= Minimalistic window manager for X11 based on evilwm
+
+LICENSE= ISCL
+
+LIB_DEPENDS= libfontconfig.so:x11-fonts/fontconfig \
+ libfreetype.so:print/freetype2
+
+USES= pkgconfig xorg
+USE_XORG= x11 xft xrandr
+MAKE_ARGS= MANPREFIX="${MANPREFIX}/man"
+PLIST_FILES= bin/cwm \
+ man/man1/cwm.1.gz \
+ man/man5/cwmrc.5.gz
+
+post-patch:
+ @${REINPLACE_CMD} 's@/usr/X11R6@${LOCALBASE}@' ${WRKSRC}/cwmrc.5
+
+post-install:
+ ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/cwm
+
+.include <bsd.port.mk>
diff --git a/x11-wm/cwm/distinfo b/x11-wm/cwm/distinfo
new file mode 100644
index 0000000..126f992
--- /dev/null
+++ b/x11-wm/cwm/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1590178399
+SHA256 (cwm-6.7.tar.gz) = fdd3d5b4fe9b1b03e1fc270d3dd5a031218589a8e40170e8438d2b9c44a35f08
+SIZE (cwm-6.7.tar.gz) = 53172
diff --git a/x11-wm/cwm/files/patch-Makefile b/x11-wm/cwm/files/patch-Makefile
new file mode 100644
index 0000000..8ad8f3c
--- /dev/null
+++ b/x11-wm/cwm/files/patch-Makefile
@@ -0,0 +1,14 @@
+Prefer libc version over custom strlcpy, strlcat, reallocarray, strtonum
+
+--- Makefile.orig 2020-05-22 19:40:11 UTC
++++ Makefile
+@@ -11,8 +11,7 @@ SRCS= calmwm.c screen.c xmalloc.c client.c menu.c \
+
+ OBJS= calmwm.o screen.o xmalloc.o client.o menu.o \
+ search.o util.o xutil.o conf.o xevents.o group.o \
+- kbfunc.o strlcpy.o strlcat.o y.tab.o \
+- strtonum.o reallocarray.o
++ kbfunc.o y.tab.o
+
+ PKG_CONFIG?= pkg-config
+
diff --git a/x11-wm/cwm/files/patch-calmwm.h b/x11-wm/cwm/files/patch-calmwm.h
new file mode 100644
index 0000000..d4c1e46
--- /dev/null
+++ b/x11-wm/cwm/files/patch-calmwm.h
@@ -0,0 +1,10 @@
+--- calmwm.h.orig 2021-07-28 22:34:54 UTC
++++ calmwm.h
+@@ -533,6 +533,7 @@ void kbfunc_menu_group(void *, struct cargs *);
+ void kbfunc_menu_wm(void *, struct cargs *);
+ void kbfunc_menu_exec(void *, struct cargs *);
+ void kbfunc_menu_ssh(void *, struct cargs *);
++void kbfunc_menu_mosh(void *, struct cargs *);
+ void kbfunc_client_menu_label(void *, struct cargs *);
+ void kbfunc_exec_cmd(void *, struct cargs *);
+ void kbfunc_exec_lock(void *, struct cargs *);
diff --git a/x11-wm/cwm/files/patch-conf.c b/x11-wm/cwm/files/patch-conf.c
new file mode 100644
index 0000000..9d597b1
--- /dev/null
+++ b/x11-wm/cwm/files/patch-conf.c
@@ -0,0 +1,18 @@
+--- conf.c.orig 2021-07-28 22:34:31 UTC
++++ conf.c
+@@ -180,6 +180,7 @@ static const struct {
+ { FUNC_SC(menu-cmd, menu_cmd, 0) },
+ { FUNC_SC(menu-group, menu_group, 0) },
+ { FUNC_SC(menu-ssh, menu_ssh, 0) },
++ { FUNC_SC(menu-mosh, menu_mosh, 0) },
+ { FUNC_SC(menu-window, menu_client, CWM_MENU_WINDOW_ALL) },
+ { FUNC_SC(menu-window-hidden, menu_client, CWM_MENU_WINDOW_HIDDEN) },
+ { FUNC_SC(menu-exec, menu_exec, 0) },
+@@ -212,6 +213,7 @@ static const struct {
+ { "M-question", "menu-exec" },
+ { "CM-w", "menu-exec-wm" },
+ { "M-period", "menu-ssh" },
++ { "MS-period", "menu-mosh" },
+ { "M-Return", "window-hide" },
+ { "M-Down", "window-lower" },
+ { "M-Up", "window-raise" },
diff --git a/x11-wm/cwm/files/patch-kbfunc.c b/x11-wm/cwm/files/patch-kbfunc.c
new file mode 100644
index 0000000..20a2935
--- /dev/null
+++ b/x11-wm/cwm/files/patch-kbfunc.c
@@ -0,0 +1,75 @@
+--- kbfunc.c.orig 2021-07-28 22:35:08 UTC
++++ kbfunc.c
+@@ -753,6 +753,72 @@ out:
+ }
+
+ void
++kbfunc_menu_mosh(void *ctx, struct cargs *cargs)
++{
++ struct screen_ctx *sc = ctx;
++ struct cmd_ctx *cmd;
++ struct menu *mi;
++ struct menu_q menuq;
++ FILE *fp;
++ char *buf, *lbuf, *p;
++ char hostbuf[_POSIX_HOST_NAME_MAX+1];
++ char path[PATH_MAX];
++ int l;
++ size_t len;
++ ssize_t slen;
++ int mflags = (CWM_MENU_DUMMY);
++
++ TAILQ_FOREACH(cmd, &Conf.cmdq, entry) {
++ if (strcmp(cmd->name, "term") == 0)
++ break;
++ }
++ TAILQ_INIT(&menuq);
++
++ if ((fp = fopen(Conf.known_hosts, "r")) == NULL) {
++ warn("%s: %s", __func__, Conf.known_hosts);
++ goto menu;
++ }
++
++ lbuf = NULL;
++ len = 0;
++ while ((slen = getline(&lbuf, &len, fp)) != -1) {
++ buf = lbuf;
++ if (buf[slen - 1] == '\n')
++ buf[slen - 1] = '\0';
++
++ /* skip hashed hosts */
++ if (strncmp(buf, HASH_MARKER, strlen(HASH_MARKER)) == 0)
++ continue;
++ for (p = buf; *p != ',' && *p != ' ' && p != buf + slen; p++)
++ ;
++ /* ignore badness */
++ if (p - buf + 1 > sizeof(hostbuf))
++ continue;
++ (void)strlcpy(hostbuf, buf, p - buf + 1);
++ menuq_add(&menuq, NULL, "%s", hostbuf);
++ }
++ free(lbuf);
++ if (ferror(fp))
++ err(1, "%s", path);
++ (void)fclose(fp);
++menu:
++ if ((mi = menu_filter(sc, &menuq, "mosh", NULL, mflags,
++ search_match_text, search_print_text)) != NULL) {
++ if (mi->text[0] == '\0')
++ goto out;
++ l = snprintf(path, sizeof(path), "%s -T '[ssh] %s' -e mosh %s",
++ cmd->path, mi->text, mi->text);
++ if (l == -1 || l >= sizeof(path))
++ goto out;
++ u_spawn(path);
++ }
++out:
++ if (mi != NULL && mi->dummy)
++ free(mi);
++ menuq_clear(&menuq);
++}
++
++void
+ kbfunc_client_menu_label(void *ctx, struct cargs *cargs)
+ {
+ struct client_ctx *cc = ctx;
diff --git a/x11-wm/cwm/pkg-descr b/x11-wm/cwm/pkg-descr
new file mode 100644
index 0000000..8df9fa0
--- /dev/null
+++ b/x11-wm/cwm/pkg-descr
@@ -0,0 +1,5 @@
+cwm is a window manager for X11 initially inspired by evilwm. cwm has several
+novel features, including the ability to search for windows. it features a
+very simple and attractive aesthetic.
+
+WWW: https://github.com/leahneukirchen/cwm