From 6de825a6092d8a70c1d4d45f184d41c147262690 Mon Sep 17 00:00:00 2001 From: WanderingPenwing Date: Thu, 1 Aug 2024 15:11:45 +0200 Subject: [PATCH] first draft --- config.h | 23 +++++++++++++++++++++++ dmenu.1 | 5 ++++- dmenu.c | 21 +++++++++++++++++---- dmenu.o | Bin 0 -> 33016 bytes dmenu_path | 13 ------------- dmenu_run | 2 -- drw.o | Bin 0 -> 11368 bytes shell.nix | 15 +++++++++++++++ stest | Bin 0 -> 16576 bytes stest.o | Bin 0 -> 5328 bytes util.o | Bin 0 -> 2248 bytes 11 files changed, 59 insertions(+), 20 deletions(-) create mode 100644 config.h create mode 100644 dmenu.o delete mode 100755 dmenu_path delete mode 100755 dmenu_run create mode 100644 drw.o create mode 100644 shell.nix create mode 100755 stest create mode 100644 stest.o create mode 100644 util.o diff --git a/config.h b/config.h new file mode 100644 index 0000000..7138df7 --- /dev/null +++ b/config.h @@ -0,0 +1,23 @@ +/* See LICENSE file for copyright and license details. */ +/* Default settings; can be overriden by command line. */ + +static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */ +/* -fn option overrides fonts[0]; default X11 font or font set */ +static const char *fonts[] = { + "Mononoki Nerd Font:size=16" +}; +static const char *prompt = NULL; /* -p option; prompt to the left of input field */ +static const char *colors[SchemeLast][2] = { + /* fg bg */ + [SchemeNorm] = { "#bbbbbb", "#222222" }, + [SchemeSel] = { "#eeeeee", "#318d56" }, + [SchemeOut] = { "#000000", "#00ffff" }, +}; +/* -l option; if nonzero, dmenu uses vertical list with given number of lines */ +static unsigned int lines = 0; + +/* + * Characters not considered part of a word while deleting words + * for example: " /?\"&[]" + */ +static const char worddelimiters[] = " "; diff --git a/dmenu.1 b/dmenu.1 index 323f93c..762f707 100644 --- a/dmenu.1 +++ b/dmenu.1 @@ -3,7 +3,7 @@ dmenu \- dynamic menu .SH SYNOPSIS .B dmenu -.RB [ \-bfiv ] +.RB [ \-bfivP ] .RB [ \-l .IR lines ] .RB [ \-m @@ -47,6 +47,9 @@ is faster, but will lock up X until stdin reaches end\-of\-file. .B \-i dmenu matches menu items case insensitively. .TP +.B \-P +dmenu will not directly display the keyboard input, but instead replace it with dots. All data from stdin will be ignored. +.TP .BI \-l " lines" dmenu lists items vertically, with the given number of lines. .TP diff --git a/dmenu.c b/dmenu.c index 40f93e0..164a853 100644 --- a/dmenu.c +++ b/dmenu.c @@ -36,7 +36,7 @@ struct item { static char text[BUFSIZ] = ""; static char *embed; static int bh, mw, mh; -static int inputw = 0, promptw; +static int inputw = 0, promptw, passwd = 0; static int lrpad; /* sum of left and right padding */ static size_t cursor; static struct item *items = NULL; @@ -148,6 +148,7 @@ drawmenu(void) unsigned int curpos; struct item *item; int x = 0, y = 0, w; + char *censort; drw_setscheme(drw, scheme[SchemeNorm]); drw_rect(drw, 0, 0, mw, mh, 1, 1); @@ -159,7 +160,12 @@ drawmenu(void) /* draw input field */ w = (lines > 0 || !matches) ? mw - x : inputw; drw_setscheme(drw, scheme[SchemeNorm]); - drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0); + if (passwd) { + censort = ecalloc(1, sizeof(text)); + memset(censort, '.', strlen(text)); + drw_text(drw, x, 0, w, bh, lrpad / 2, censort, 0); + free(censort); + } else drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0); curpos = TEXTW(text) - TEXTW(&text[cursor]); if ((curpos += lrpad / 2 - 1) < w) { @@ -552,6 +558,11 @@ readstdin(void) size_t i, itemsiz = 0, linesiz = 0; ssize_t len; + if(passwd){ + inputw = lines = 0; + return; + } + /* read each line from stdin and add it to the item list */ for (i = 0; (len = getline(&line, &linesiz, stdin)) != -1; i++) { if (i + 1 >= itemsiz) { @@ -715,7 +726,7 @@ setup(void) static void usage(void) { - die("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" + die("usage: dmenu [-bfivP] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]"); } @@ -737,7 +748,9 @@ main(int argc, char *argv[]) else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */ fstrncmp = strncasecmp; fstrstr = cistrstr; - } else if (i + 1 == argc) + } else if (!strcmp(argv[i], "-P")) /* is the input a password */ + passwd = 1; + else if (i + 1 == argc) usage(); /* these options take one argument */ else if (!strcmp(argv[i], "-l")) /* number of lines in vertical list */ diff --git a/dmenu.o b/dmenu.o new file mode 100644 index 0000000000000000000000000000000000000000..b69321bf8d7bdd421de44510a896d482627f6060 GIT binary patch literal 33016 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 Wkp4rP21@_r4LZdRPDp2&{{H|tk{&7m literal 0 HcmV?d00001 diff --git a/dmenu_path b/dmenu_path deleted file mode 100755 index 3a7cda7..0000000 --- a/dmenu_path +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -cachedir="${XDG_CACHE_HOME:-"$HOME/.cache"}" -cache="$cachedir/dmenu_run" - -[ ! -e "$cachedir" ] && mkdir -p "$cachedir" - -IFS=: -if stest -dqr -n "$cache" $PATH; then - stest -flx $PATH | sort -u | tee "$cache" -else - cat "$cache" -fi diff --git a/dmenu_run b/dmenu_run deleted file mode 100755 index 834ede5..0000000 --- a/dmenu_run +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -dmenu_path | dmenu "$@" | ${SHELL:-"/bin/sh"} & diff --git a/drw.o b/drw.o new file mode 100644 index 0000000000000000000000000000000000000000..b09b4537ac9d66892b912ff1e90bd94157a5c9e6 GIT binary patch literal 11368 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 YV>RM^1|Ay=Yx6c*EII2_dE5K{AE-w+%m4rY literal 0 HcmV?d00001 diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..b70b9c8 --- /dev/null +++ b/shell.nix @@ -0,0 +1,15 @@ +{ pkgs ? import {} }: + +pkgs.mkShell { + buildInputs = [ + pkgs.gnumake + pkgs.gcc + pkgs.pkg-config + pkgs.xorg.libX11 + pkgs.xorg.libXft + pkgs.xorg.libXinerama + pkgs.xorg.libXext + pkgs.fontconfig + pkgs.freetype + ]; +} diff --git a/stest b/stest new file mode 100755 index 0000000000000000000000000000000000000000..0e4ccb5c9ccfcc14635e38b2e44667b821a5ab96 GIT binary patch literal 16576 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 RRJdrmQ`5Lfih`Eg{|`V?onHU| literal 0 HcmV?d00001 diff --git a/stest.o b/stest.o new file mode 100644 index 0000000000000000000000000000000000000000..27f2c5e6b523acec7972def72b6187b996e7bee2 GIT binary patch literal 5328 zcmbW4Z){sv6~M3Kv~ip5+5JNZj1G5lARWtF+zm)Kb;?Ve_GP#%TAQIYO&!;MPC^_z z*w0Hk%9<*6!82|v)@h_pRG#6DEwUx5)kb?wTup@M`EAId*fqrsb2J}it4&75=J zJ@(CO9v?W;^S$SH&pG$LbI*P6`RG7+SCh-dNL=h8*3gJDcGcJD_wsHp^D!?Q(o1Vl z)yp5jX0ZwTB@fY3Pq1^D-`%ShKhTf8)dMrd^-^<3Cwdk0fldIyie5GY z9&THxm@UD|(q+I4J24E)t)2fGQ_X(})%2A@0e=U($=FUd2E)HyZNLu$7gihSg@H2^ zxs@!oRW}8f_2Qpt34dRjtJP}KMDvV!3vpoN(YhQ8Y;E@DhZ-zb4>wQ^>g68=zRmC+ zDX6y)z?k{KdB9@*-@~xC1FpV8`P&f+jCoJ|`@_am8&?dK|0E4dh(rz_r{RA3HX z3HAFmUt78lV(j3>V%|lGYYEnPmS5%Eiu4XAI^+h+A+CSMstm(#VqdikIS%C-}dtC!kVRBk&ks9ftXgo~ko2Y-Be(WjT( zdZFUY*I>2tJzd_yGIX9Ea^-*L%~z4V-<8`iKi9-^t@^@6PwkDR-viZamBHdQz32{B z_LOpL;igM_x(!^OeK~){n?DB@gFCKy3umAc@-F^OD~AH#T6oVj8`I{Wae|{HgA12D^Y5qhvN*Dz1#cEE{!90UZfXl}Mfb$6b8}cO-^Ko7^9#8a zzR%Tr!Hy4B-w74p)UDib0C#782i;+*vFrV>Hot)TI9MBCOBxh2Oj{oHEWHc6UwAvW zPA_f2S*u&aaLU`OU)IZ^mfC#J`kebRX7xzGqZdE4;+8h)Wz@mYCkU#A%F)-jx>SHb zyf;|9gsYee7e(^}ZpQFr`r*PIf&tdVToq)PQWTd>-)v##dh$``n)A8t zxUI!=3XEYU_6aez9a~NDbwUGEa2dp#1$MkCq_i)%A6Bk5xj)~ev;)!<4`T;l7%!9r z+V&~FlTBfz{e-(u@t2$Xl+JIi(Uk7vYeP!ULdzGFzxdskUCIsr!^%zn0cbTKVBZ5a zn$ihAeM&pT=)>UuL-0PE*+22H+#>FJ7FG_qdDd34b)Z7->X7FEG}uVaN#}V0hIw>B zoH5}t0XoXZ;6m<41>}^~Ff3x^6`>Q~D) ziWzg0CX2>mMmEcmSu<*~nVgvgBk0Gb&?J(GP9|Zt$rPIb|8xcdWnvT9#DR?)W^yuR zutdf%SbD}t#V0c?V?^WF#**o*fgOmKl4gZ_rgL&P^zn@T2j3hZtcNAJL&HIe7%h~K{9mj3_IiY{w#?J`-MH?qO{#=&g7|AolooIq;z1l!x;o&JG)YUhsY?j$DWI9-=rEVLvR{x52t-U#2DgQHj&@ zo#Gr2aUR5*0IcgX4Bgc0s#SaLMbKWNL zZIV5nak4)sIIjN=i64{VU@SW4RF60>uASnXmEz+&oH*4R+TSVhmn8d7O8nOn_e=Z_ z(t0p&UndlCk6pU2yB+xb632Njig||w$M|xc_(4a(VPV4c z`}uE!(|6LC#Mg^HZ`ADJX)}6=sqh-G+6n4qjAT?bjX9I4@u(SP>LGZmsF^e>XdYDI zHB~nP63v*o8K%b4)6+%@yi#e?P~j`Mi@$w@KAy^{GZ}cbWX!|D-I$0ZGSO*6Uf2KG z_k$m%&iC}a^%n)(; zg>7Eq_WAFD0gP$)uL%FwZ4Q14BwGBwL=)O~8Ych82#A)#Q9A$}`}X{`i3QPj8igT0 z(tDw^TK=wL!azF3eV~eS*z>m+7{=^|OO_*REDhiBve5k0;(s3M%XTM)zs#_2w@m_T zfy=&Kr-Z+KU9^6Tg_4I0W7_>I!v6vqNn-au3S+C~?>+pe0@1C8*B^dQkw4YnYICE@ xoY>HAv5yKcyzKt?zsp{GfY>=40HN;~OS?6H_|3MOe=mOIft;|K`ma6z{{?*jeSrV~ literal 0 HcmV?d00001 diff --git a/util.o b/util.o new file mode 100644 index 0000000000000000000000000000000000000000..4b569ab3cf3d20cbdf0c56dd2448b4cd6d4ad19a GIT binary patch literal 2248 zcmbuAO=whC6vxk-j5XRgld8plE=IVunNlA!cA=!UOw1&?l}EKrVq1!R9Vag)IGGvW zyeY9CXweEo2)K0N!bKNdw9rLYrI-O1cIQsSjkqa=cA+3eP)N`J%{|HEG2=r2aNfE1 zch0%@=6+1hk2@0y%Oa6Q@6$$4D3RW@(Jq9|0;Omh%}nXmQ~mwFcbVx{poVp8TIF=h zQHPvXQ576+=}Yb4U^-h=$J1FyeVNWqt9m+nO!JTm{Tli|RGa;* zUQWI-%ni+>4dvT6J_BA@^=1_;V|%`Vm?FF3j!MD@B#LRaD7bm|s+b ze{+K_yi378-MZiDeA~A+(%hw&o3xtYU$h*sz_L!K~-| z>Q?z6lqLg_qjL zCVaqf^?h_r!Upc9c9Zk^!&Lbv)q&HBGt&+Ihf_5TAH6B4ih literal 0 HcmV?d00001