mirror of
https://gitlab.com/dwt1/dotfiles.git
synced 2023-02-13 20:55:19 -05:00
Adding new dmenu build.
This commit is contained in:
parent
2505e6ba56
commit
55e3aabada
29 changed files with 139 additions and 107 deletions
|
@ -290,8 +290,8 @@ colors:
|
|||
#
|
||||
# Window opacity as a floating point number from `0.0` to `1.0`.
|
||||
# The value `0.0` is completely transparent and `1.0` is opaque.
|
||||
# background_opacity: 1.0
|
||||
background_opacity: 0.95
|
||||
background_opacity: 1.0
|
||||
# background_opacity: 0.95
|
||||
|
||||
#selection:
|
||||
#semantic_escape_chars: ",│`|:\"' ()[]{}<>\t"
|
||||
|
|
|
@ -38,8 +38,7 @@ opacity-rule = [ "99:name *?= 'Call'",
|
|||
"95:name *?= 'nmon'",
|
||||
"95:name *?= 'httping'",
|
||||
"96:name *?= 'xmobar'",
|
||||
"95:class_g *?= 'emacs'",
|
||||
"95:class_g *?= 'alacritty'",
|
||||
"100:class_g *?= 'emacs'",
|
||||
"95:class_g *?= 'surf' && name *?='suckless.org'",
|
||||
"95:class_g *?= 'tabbed'",
|
||||
"95:name *?= 'newsboat'",
|
||||
|
|
|
@ -13,7 +13,7 @@ Config { font = "xft:Mononoki Nerd Font:pixelsize=12:antialias=true:hinting=t
|
|||
, persistent = True
|
||||
, iconRoot = "/home/dt/.xmonad/xpm/" -- default: "."
|
||||
, commands = [ Run Date "%a, %b %d %Y, %H:%M:%S" "date" 10
|
||||
, Run Network "enp4s0" ["-t", "<icon=net_up_20.xpm/>up <rxbar> <icon=net_down_20.xpm/>dn <txbar>"] 10
|
||||
, Run Network "enp6s0" ["-t", "<icon=net_up_20.xpm/>up <rxbar> <icon=net_down_20.xpm/>dn <txbar>"] 10
|
||||
, Run Cpu ["-t", "<icon=cpu_20.xpm/> cpu <bar> (<total>%)","-H","50","--high","red"] 10
|
||||
, Run Memory ["-t", "<icon=memory-icon_20.xpm/> mem <usedbar> (<usedratio>%)"] 10
|
||||
, Run DiskU [("/", "<icon=harddisk-icon_20.xpm/> hdd <usedbar> (<used>)")] [] 3600
|
||||
|
@ -21,5 +21,5 @@ Config { font = "xft:Mononoki Nerd Font:pixelsize=12:antialias=true:hinting=t
|
|||
]
|
||||
, sepChar = "%"
|
||||
, alignSep = "}{"
|
||||
, template = " <icon=haskell_20.xpm/> <fc=#666666>|</fc> %UnsafeStdinReader% }{ <fc=#FFB86C>%cpu%</fc> <fc=#FF5555>%memory%</fc> <fc=#82AAFF>%disku%</fc> <fc=#c3e88d>%enp4s0%</fc> <icon=calendar-clock-icon_20.xpm/> <fc=#8BE9FD>%date%</fc> "
|
||||
, template = " <icon=haskell_20.xpm/> <fc=#666666>|</fc> %UnsafeStdinReader% }{ <fc=#FFB86C>%cpu%</fc> <fc=#FF5555>%memory%</fc> <fc=#82AAFF>%disku%</fc> <fc=#c3e88d>%enp6s0%</fc> <icon=calendar-clock-icon_20.xpm/> <fc=#8BE9FD>%date%</fc> "
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ Config { font = "xft:Mononoki Nerd Font:pixelsize=12:antialias=true:hinting=t
|
|||
, persistent = True
|
||||
, iconRoot = "/home/dt/.xmonad/xpm/" -- default: "."
|
||||
, commands = [ Run Date "%a, %b %d %Y, %H:%M:%S" "date" 10
|
||||
, Run Network "enp4s0" ["-t", "<icon=net_up_20.xpm/>up <rxbar> <icon=net_down_20.xpm/>dn <txbar>"] 10
|
||||
, Run Network "enp6s0" ["-t", "<icon=net_up_20.xpm/>up <rxbar> <icon=net_down_20.xpm/>dn <txbar>"] 10
|
||||
, Run Cpu ["-t", "<icon=cpu_20.xpm/> cpu <bar> (<total>%)","-H","50","--high","red"] 10
|
||||
, Run Memory ["-t", "<icon=memory-icon_20.xpm/> mem <usedbar> (<usedratio>%)"] 10
|
||||
, Run DiskU [("/", "<icon=harddisk-icon_20.xpm/> hdd <usedbar> (<used>)")] [] 3600
|
||||
|
@ -21,5 +21,5 @@ Config { font = "xft:Mononoki Nerd Font:pixelsize=12:antialias=true:hinting=t
|
|||
]
|
||||
, sepChar = "%"
|
||||
, alignSep = "}{"
|
||||
, template = " <icon=haskell_20.xpm/> <fc=#666666>|</fc> %UnsafeStdinReader% }{ <fc=#FFB86C>%cpu%</fc> <fc=#FF5555>%memory%</fc> <fc=#82AAFF>%disku%</fc> <fc=#c3e88d>%enp4s0%</fc> <icon=calendar-clock-icon_20.xpm/> <fc=#8BE9FD>%date%</fc> "
|
||||
, template = " <icon=haskell_20.xpm/> <fc=#666666>|</fc> %UnsafeStdinReader% }{ <fc=#FFB86C>%cpu%</fc> <fc=#FF5555>%memory%</fc> <fc=#82AAFF>%disku%</fc> <fc=#c3e88d>%enp6s0%</fc> <icon=calendar-clock-icon_20.xpm/> <fc=#8BE9FD>%date%</fc> "
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ Config { font = "xft:Mononoki Nerd Font:pixelsize=12:antialias=true:hinting=t
|
|||
, persistent = True
|
||||
, iconRoot = "/home/dt/.xmonad/xpm/" -- default: "."
|
||||
, commands = [ Run Date "%a, %b %d %Y, %H:%M:%S" "date" 10
|
||||
, Run Network "enp4s0" ["-t", "<icon=net_up_20.xpm/>up <rxbar> <icon=net_down_20.xpm/>dn <txbar>"] 10
|
||||
, Run Network "enp6s0" ["-t", "<icon=net_up_20.xpm/>up <rxbar> <icon=net_down_20.xpm/>dn <txbar>"] 10
|
||||
, Run Cpu ["-t", "<icon=cpu_20.xpm/> cpu <bar> (<total>%)","-H","50","--high","red"] 10
|
||||
, Run Memory ["-t", "<icon=memory-icon_20.xpm/> mem <usedbar> (<usedratio>%)"] 10
|
||||
, Run DiskU [("/", "<icon=harddisk-icon_20.xpm/> hdd <usedbar> (<used>)")] [] 3600
|
||||
|
@ -21,5 +21,5 @@ Config { font = "xft:Mononoki Nerd Font:pixelsize=12:antialias=true:hinting=t
|
|||
]
|
||||
, sepChar = "%"
|
||||
, alignSep = "}{"
|
||||
, template = " <icon=haskell_20.xpm/> <fc=#666666>|</fc> %UnsafeStdinReader% }{ <fc=#FFB86C>%cpu%</fc> <fc=#FF5555>%memory%</fc> <fc=#82AAFF>%disku%</fc> <fc=#c3e88d>%enp4s0%</fc> <icon=calendar-clock-icon_20.xpm/> <fc=#8BE9FD>%date%</fc> "
|
||||
, template = " <icon=haskell_20.xpm/> <fc=#666666>|</fc> %UnsafeStdinReader% }{ <fc=#FFB86C>%cpu%</fc> <fc=#FF5555>%memory%</fc> <fc=#82AAFF>%disku%</fc> <fc=#c3e88d>%enp6s0%</fc> <icon=calendar-clock-icon_20.xpm/> <fc=#8BE9FD>%date%</fc> "
|
||||
}
|
||||
|
|
|
@ -172,3 +172,15 @@
|
|||
:config
|
||||
;;literate
|
||||
(default +bindings +smartparens))
|
||||
(custom-set-variables
|
||||
;; custom-set-variables was added by Custom.
|
||||
;; If you edit it by hand, you could mess it up, so be careful.
|
||||
;; Your init file should contain only one such instance.
|
||||
;; If there is more than one, they won't work right.
|
||||
'(org-agenda-files (quote ("~/org-basics.org" "~/Documents/org/orgmode.org"))))
|
||||
(custom-set-faces
|
||||
;; custom-set-faces was added by Custom.
|
||||
;; If you edit it by hand, you could mess it up, so be careful.
|
||||
;; Your init file should contain only one such instance.
|
||||
;; If there is more than one, they won't work right.
|
||||
)
|
||||
|
|
2
dmenu/LICENSE
Executable file → Normal file
2
dmenu/LICENSE
Executable file → Normal file
|
@ -9,7 +9,7 @@ MIT/X Consortium License
|
|||
© 2009 Evan Gates <evan.gates@gmail.com>
|
||||
© 2010-2012 Connor Lane Smith <cls@lubutu.com>
|
||||
© 2014-2019 Hiltjo Posthuma <hiltjo@codemadness.org>
|
||||
© 2015-2019 Quentin Rameau <quinq@fifth.space>
|
||||
© 2015-2018 Quentin Rameau <quinq@fifth.space>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
|
|
0
dmenu/Makefile
Executable file → Normal file
0
dmenu/Makefile
Executable file → Normal file
0
dmenu/README
Executable file → Normal file
0
dmenu/README
Executable file → Normal file
0
dmenu/arg.h
Executable file → Normal file
0
dmenu/arg.h
Executable file → Normal file
7
dmenu/config.def.h
Executable file → Normal file
7
dmenu/config.def.h
Executable file → Normal file
|
@ -2,6 +2,8 @@
|
|||
/* Default settings; can be overriden by command line. */
|
||||
|
||||
static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */
|
||||
static int centered = 0; /* -c option; centers dmenu on screen */
|
||||
static int min_width = 500; /* minimum width when centered */
|
||||
/* -fn option overrides fonts[0]; default X11 font or font set */
|
||||
static const char *fonts[] = {
|
||||
"monospace:size=10"
|
||||
|
@ -11,6 +13,8 @@ static const char *colors[SchemeLast][2] = {
|
|||
/* fg bg */
|
||||
[SchemeNorm] = { "#bbbbbb", "#222222" },
|
||||
[SchemeSel] = { "#eeeeee", "#005577" },
|
||||
[SchemeSelHighlight] = { "#ffc978", "#005577" },
|
||||
[SchemeNormHighlight] = { "#ffc978", "#222222" },
|
||||
[SchemeOut] = { "#000000", "#00ffff" },
|
||||
};
|
||||
/* -l option; if nonzero, dmenu uses vertical list with given number of lines */
|
||||
|
@ -22,3 +26,6 @@ static unsigned int lineheight = 0; /* -h option; minimum height of a me
|
|||
* for example: " /?\"&[]"
|
||||
*/
|
||||
static const char worddelimiters[] = " ";
|
||||
|
||||
/* Size of the window border */
|
||||
static const unsigned int border_width = 5;
|
||||
|
|
11
dmenu/config.h
Executable file → Normal file
11
dmenu/config.h
Executable file → Normal file
|
@ -2,6 +2,8 @@
|
|||
/* Default settings; can be overriden by command line. */
|
||||
|
||||
static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */
|
||||
static int centered = 0; /* -c option; centers dmenu on screen */
|
||||
static int min_width = 500; /* minimum width when centered */
|
||||
/* -fn option overrides fonts[0]; default X11 font or font set */
|
||||
static const char *fonts[] = {
|
||||
"Mononoki Nerd Font:size=10"
|
||||
|
@ -9,8 +11,10 @@ static const char *fonts[] = {
|
|||
static const char *prompt = NULL; /* -p option; prompt to the left of input field */
|
||||
static const char *colors[SchemeLast][2] = {
|
||||
/* fg bg */
|
||||
[SchemeNorm] = { "#bbc5ff", "#292d3e" },
|
||||
[SchemeSel] = { "#292d3e", "#82aaff" },
|
||||
[SchemeNorm] = { "#bbc5ff", "#282a36" },
|
||||
[SchemeSel] = { "#282a36", "#82aaff" },
|
||||
[SchemeSelHighlight] = { "#82aaff", "#000000" },
|
||||
[SchemeNormHighlight] = { "#f1fa8c", "#000000" },
|
||||
[SchemeOut] = { "#000000", "#00ffff" },
|
||||
};
|
||||
/* -l option; if nonzero, dmenu uses vertical list with given number of lines */
|
||||
|
@ -22,3 +26,6 @@ static unsigned int lineheight = 22; /* -h option; minimum height of a m
|
|||
* for example: " /?\"&[]"
|
||||
*/
|
||||
static const char worddelimiters[] = " ";
|
||||
|
||||
/* Size of the window border */
|
||||
static const unsigned int border_width = 0;
|
||||
|
|
0
dmenu/config.mk
Executable file → Normal file
0
dmenu/config.mk
Executable file → Normal file
BIN
dmenu/dmenu
BIN
dmenu/dmenu
Binary file not shown.
|
@ -1,76 +0,0 @@
|
|||
diff --git a/config.def.h b/config.def.h
|
||||
index a9122f7..6d936b7 100644
|
||||
--- a/config.def.h
|
||||
+++ b/config.def.h
|
||||
@@ -16,4 +16,5 @@
|
||||
/* -l option; if nonzero, dmenu uses vertical list with given number of lines */
|
||||
static unsigned int lines = 0;
|
||||
+static unsigned int lineheight = 0; /* -h option; minimum height of a menu line */
|
||||
|
||||
/*
|
||||
diff --git a/dmenu.1 b/dmenu.1
|
||||
index d3ab805..9fe4434 100644
|
||||
--- a/dmenu.1
|
||||
+++ b/dmenu.1
|
||||
@@ -50,6 +50,9 @@ dmenu matches menu items case insensitively.
|
||||
.BI \-l " lines"
|
||||
dmenu lists items vertically, with the given number of lines.
|
||||
.TP
|
||||
+.BI \-h " height"
|
||||
+dmenu uses a menu line of at least 'height' pixels tall, but no less than 8.
|
||||
+.TP
|
||||
.BI \-m " monitor"
|
||||
dmenu is displayed on the monitor number supplied. Monitor numbers are starting
|
||||
from 0.
|
||||
diff --git a/dmenu.c b/dmenu.c
|
||||
index a07f8e3..25832a7 100644
|
||||
--- a/dmenu.c
|
||||
+++ b/dmenu.c
|
||||
@@ -130,7 +130,7 @@ drawmenu(void)
|
||||
{
|
||||
unsigned int curpos;
|
||||
struct item *item;
|
||||
- int x = 0, y = 0, w;
|
||||
+ int x = 0, y = 0, fh = drw->fonts->h, w;
|
||||
|
||||
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||
drw_rect(drw, 0, 0, mw, mh, 1, 1);
|
||||
@@ -145,9 +145,9 @@ drawmenu(void)
|
||||
drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0);
|
||||
|
||||
drw_font_getexts(drw->fonts, text, cursor, &curpos, NULL);
|
||||
if ((curpos += lrpad / 2 - 1) < w) {
|
||||
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||
- drw_rect(drw, x + curpos, 2, 2, bh - 4, 1, 0);
|
||||
+ drw_rect(drw, x + curpos, 2 + (bh-fh)/2, 2, fh - 4, 1, 0);
|
||||
}
|
||||
|
||||
if (lines > 0) {
|
||||
@@ -676,7 +676,8 @@ setup(void)
|
||||
utf8 = XInternAtom(dpy, "UTF8_STRING", False);
|
||||
|
||||
/* calculate menu geometry */
|
||||
bh = drw->fonts->h + 2;
|
||||
+ bh = MAX(bh,lineheight); /* make a menu line AT LEAST 'lineheight' tall */
|
||||
lines = MAX(lines, 0);
|
||||
mh = (lines + 1) * bh;
|
||||
#ifdef XINERAMA
|
||||
@@ -754,6 +755,7 @@ setup(void)
|
||||
usage(void)
|
||||
{
|
||||
fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
|
||||
+ " [-h height]\n"
|
||||
" [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr);
|
||||
exit(1);
|
||||
}
|
||||
@@ -787,6 +789,10 @@ main(int argc, char *argv[])
|
||||
prompt = argv[++i];
|
||||
else if (!strcmp(argv[i], "-fn")) /* font or font set */
|
||||
fonts[0] = argv[++i];
|
||||
+ else if(!strcmp(argv[i], "-h")) { /* minimum height of one menu line */
|
||||
+ lineheight = atoi(argv[++i]);
|
||||
+ lineheight = MAX(lineheight,8); /* reasonable default in case of value too small/negative */
|
||||
+ }
|
||||
else if (!strcmp(argv[i], "-nb")) /* normal background color */
|
||||
normbgcolor = argv[++i];
|
||||
else if (!strcmp(argv[i], "-nf")) /* normal foreground color */
|
3
dmenu/dmenu.1
Executable file → Normal file
3
dmenu/dmenu.1
Executable file → Normal file
|
@ -40,6 +40,9 @@ which lists programs in the user's $PATH and runs the result in their $SHELL.
|
|||
.B \-b
|
||||
dmenu appears at the bottom of the screen.
|
||||
.TP
|
||||
.B \-c
|
||||
dmenu appears centered on the screen.
|
||||
.TP
|
||||
.B \-f
|
||||
dmenu grabs the keyboard before reading stdin if not reading from a tty. This
|
||||
is faster, but will lock up X until stdin reaches end\-of\-file.
|
||||
|
|
116
dmenu/dmenu.c
Executable file → Normal file
116
dmenu/dmenu.c
Executable file → Normal file
|
@ -24,9 +24,11 @@
|
|||
* MAX(0, MIN((y)+(h),(r).y_org+(r).height) - MAX((y),(r).y_org)))
|
||||
#define LENGTH(X) (sizeof X / sizeof X[0])
|
||||
#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
|
||||
#define NUMBERSMAXDIGITS 100
|
||||
#define NUMBERSBUFSIZE (NUMBERSMAXDIGITS * 2) + 1
|
||||
|
||||
/* enums */
|
||||
enum { SchemeNorm, SchemeSel, SchemeOut, SchemeLast }; /* color schemes */
|
||||
enum { SchemeNorm, SchemeSel, SchemeOut, SchemeNormHighlight, SchemeSelHighlight, SchemeLast }; /* color schemes */
|
||||
|
||||
struct item {
|
||||
char *text;
|
||||
|
@ -34,6 +36,7 @@ struct item {
|
|||
int out;
|
||||
};
|
||||
|
||||
static char numbers[NUMBERSBUFSIZE] = "";
|
||||
static char text[BUFSIZ] = "";
|
||||
static char *embed;
|
||||
static int bh, mw, mh;
|
||||
|
@ -89,6 +92,15 @@ calcoffsets(void)
|
|||
break;
|
||||
}
|
||||
|
||||
static int
|
||||
max_textw(void)
|
||||
{
|
||||
int len = 0;
|
||||
for (struct item *item = items; item && item->text; item++)
|
||||
len = MAX(TEXTW(item->text), len);
|
||||
return len;
|
||||
}
|
||||
|
||||
static void
|
||||
cleanup(void)
|
||||
{
|
||||
|
@ -113,6 +125,42 @@ cistrstr(const char *s, const char *sub)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
drawhighlights(struct item *item, int x, int y, int maxw)
|
||||
{
|
||||
char restorechar, tokens[sizeof text], *highlight, *token;
|
||||
int indentx, highlightlen;
|
||||
|
||||
drw_setscheme(drw, scheme[item == sel ? SchemeSelHighlight : SchemeNormHighlight]);
|
||||
strcpy(tokens, text);
|
||||
for (token = strtok(tokens, " "); token; token = strtok(NULL, " ")) {
|
||||
highlight = fstrstr(item->text, token);
|
||||
while (highlight) {
|
||||
// Move item str end, calc width for highlight indent, & restore
|
||||
highlightlen = highlight - item->text;
|
||||
restorechar = *highlight;
|
||||
item->text[highlightlen] = '\0';
|
||||
indentx = TEXTW(item->text);
|
||||
item->text[highlightlen] = restorechar;
|
||||
|
||||
// Move highlight str end, draw highlight, & restore
|
||||
restorechar = highlight[strlen(token)];
|
||||
highlight[strlen(token)] = '\0';
|
||||
drw_text(
|
||||
drw,
|
||||
x + indentx - (lrpad / 2) - 1,
|
||||
y,
|
||||
MIN(maxw - indentx, TEXTW(highlight) - lrpad),
|
||||
bh, 0, highlight, 0
|
||||
);
|
||||
highlight[strlen(token)] = restorechar;
|
||||
|
||||
if (strlen(highlight) - strlen(token) < strlen(token)) break;
|
||||
highlight = fstrstr(highlight + strlen(token), token);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
drawitem(struct item *item, int x, int y, int w)
|
||||
{
|
||||
|
@ -123,7 +171,24 @@ drawitem(struct item *item, int x, int y, int w)
|
|||
else
|
||||
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||
|
||||
return drw_text(drw, x, y, w, bh, lrpad / 2, item->text, 0);
|
||||
int r = drw_text(drw, x, y, w, bh, lrpad / 2, item->text, 0);
|
||||
drawhighlights(item, x, y, w);
|
||||
return r;
|
||||
}
|
||||
|
||||
static void
|
||||
recalculatenumbers()
|
||||
{
|
||||
unsigned int numer = 0, denom = 0;
|
||||
struct item *item;
|
||||
if (matchend) {
|
||||
numer++;
|
||||
for (item = matchend; item && item->left; item = item->left)
|
||||
numer++;
|
||||
}
|
||||
for (item = items; item && item->text; item++)
|
||||
denom++;
|
||||
snprintf(numbers, NUMBERSBUFSIZE, "%d/%d", numer, denom);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -151,6 +216,7 @@ drawmenu(void)
|
|||
drw_rect(drw, x + curpos, 2 + (bh-fh)/2, 2, fh - 4, 1, 0);
|
||||
}
|
||||
|
||||
recalculatenumbers();
|
||||
if (lines > 0) {
|
||||
/* draw vertical list */
|
||||
for (item = curr; item != next; item = item->right)
|
||||
|
@ -165,13 +231,15 @@ drawmenu(void)
|
|||
}
|
||||
x += w;
|
||||
for (item = curr; item != next; item = item->right)
|
||||
x = drawitem(item, x, 0, MIN(TEXTW(item->text), mw - x - TEXTW(">")));
|
||||
x = drawitem(item, x, 0, MIN(TEXTW(item->text), mw - x - TEXTW(">") - TEXTW(numbers)));
|
||||
if (next) {
|
||||
w = TEXTW(">");
|
||||
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||
drw_text(drw, mw - w, 0, w, bh, lrpad / 2, ">", 0);
|
||||
drw_text(drw, mw - w - TEXTW(numbers), 0, w, bh, lrpad / 2, ">", 0);
|
||||
}
|
||||
}
|
||||
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||
drw_text(drw, mw - TEXTW(numbers), 0, TEXTW(numbers), bh, lrpad / 2, numbers, 0);
|
||||
drw_map(drw, win, 0, 0, mw, mh);
|
||||
}
|
||||
|
||||
|
@ -556,11 +624,6 @@ run(void)
|
|||
if (XFilterEvent(&ev, None))
|
||||
continue;
|
||||
switch(ev.type) {
|
||||
case DestroyNotify:
|
||||
if (ev.xdestroywindow.window != win)
|
||||
break;
|
||||
cleanup();
|
||||
exit(1);
|
||||
case Expose:
|
||||
if (ev.xexpose.count == 0)
|
||||
drw_map(drw, win, 0, 0, mw, mh);
|
||||
|
@ -612,6 +675,7 @@ setup(void)
|
|||
bh = MAX(bh,lineheight); /* make a menu line AT LEAST 'lineheight' tall */
|
||||
lines = MAX(lines, 0);
|
||||
mh = (lines + 1) * bh;
|
||||
promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
|
||||
#ifdef XINERAMA
|
||||
i = 0;
|
||||
if (parentwin == root && (info = XineramaQueryScreens(dpy, &n))) {
|
||||
|
@ -638,9 +702,16 @@ setup(void)
|
|||
if (INTERSECT(x, y, 1, 1, info[i]))
|
||||
break;
|
||||
|
||||
x = info[i].x_org;
|
||||
y = info[i].y_org + (topbar ? 0 : info[i].height - mh);
|
||||
mw = info[i].width;
|
||||
if (centered) {
|
||||
mw = MIN(MAX(max_textw() + promptw, min_width), info[i].width);
|
||||
x = info[i].x_org + ((info[i].width - mw) / 2);
|
||||
y = info[i].y_org + ((info[i].height - mh) / 2);
|
||||
} else {
|
||||
x = info[i].x_org;
|
||||
y = info[i].y_org + (topbar ? 0 : info[i].height - mh);
|
||||
mw = info[i].width;
|
||||
}
|
||||
|
||||
XFree(info);
|
||||
} else
|
||||
#endif
|
||||
|
@ -648,11 +719,17 @@ setup(void)
|
|||
if (!XGetWindowAttributes(dpy, parentwin, &wa))
|
||||
die("could not get embedding window attributes: 0x%lx",
|
||||
parentwin);
|
||||
x = 0;
|
||||
y = topbar ? 0 : wa.height - mh;
|
||||
mw = wa.width;
|
||||
|
||||
if (centered) {
|
||||
mw = MIN(MAX(max_textw() + promptw, min_width), wa.width);
|
||||
x = (wa.width - mw) / 2;
|
||||
y = (wa.height - mh) / 2;
|
||||
} else {
|
||||
x = 0;
|
||||
y = topbar ? 0 : wa.height - mh;
|
||||
mw = wa.width;
|
||||
}
|
||||
}
|
||||
promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
|
||||
inputw = MIN(inputw, mw/3);
|
||||
match();
|
||||
|
||||
|
@ -660,9 +737,10 @@ setup(void)
|
|||
swa.override_redirect = True;
|
||||
swa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
|
||||
swa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask;
|
||||
win = XCreateWindow(dpy, parentwin, x, y, mw, mh, 0,
|
||||
win = XCreateWindow(dpy, parentwin, x, y, mw, mh, border_width,
|
||||
CopyFromParent, CopyFromParent, CopyFromParent,
|
||||
CWOverrideRedirect | CWBackPixel | CWEventMask, &swa);
|
||||
XSetWindowBorder(dpy, win, scheme[SchemeSel][ColBg].pixel);
|
||||
XSetClassHint(dpy, win, &ch);
|
||||
|
||||
/* open input methods */
|
||||
|
@ -673,7 +751,7 @@ setup(void)
|
|||
XMapRaised(dpy, win);
|
||||
XSetInputFocus(dpy, win, RevertToParent, CurrentTime);
|
||||
if (embed) {
|
||||
XSelectInput(dpy, parentwin, FocusChangeMask | SubstructureNotifyMask);
|
||||
XSelectInput(dpy, parentwin, FocusChangeMask);
|
||||
if (XQueryTree(dpy, parentwin, &dw, &w, &dws, &du) && dws) {
|
||||
for (i = 0; i < du && dws[i] != win; ++i)
|
||||
XSelectInput(dpy, dws[i], FocusChangeMask);
|
||||
|
@ -709,6 +787,8 @@ main(int argc, char *argv[])
|
|||
topbar = 0;
|
||||
else if (!strcmp(argv[i], "-f")) /* grabs keyboard before reading stdin */
|
||||
fast = 1;
|
||||
else if (!strcmp(argv[i], "-c")) /* centers dmenu on screen */
|
||||
centered = 1;
|
||||
else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */
|
||||
fstrncmp = strncasecmp;
|
||||
fstrstr = cistrstr;
|
||||
|
|
BIN
dmenu/dmenu.o
BIN
dmenu/dmenu.o
Binary file not shown.
0
dmenu/dmenu_path
Executable file → Normal file
0
dmenu/dmenu_path
Executable file → Normal file
0
dmenu/drw.c
Executable file → Normal file
0
dmenu/drw.c
Executable file → Normal file
0
dmenu/drw.h
Executable file → Normal file
0
dmenu/drw.h
Executable file → Normal file
BIN
dmenu/drw.o
BIN
dmenu/drw.o
Binary file not shown.
BIN
dmenu/stest
BIN
dmenu/stest
Binary file not shown.
0
dmenu/stest.1
Executable file → Normal file
0
dmenu/stest.1
Executable file → Normal file
0
dmenu/stest.c
Executable file → Normal file
0
dmenu/stest.c
Executable file → Normal file
BIN
dmenu/stest.o
BIN
dmenu/stest.o
Binary file not shown.
0
dmenu/util.c
Executable file → Normal file
0
dmenu/util.c
Executable file → Normal file
0
dmenu/util.h
Executable file → Normal file
0
dmenu/util.h
Executable file → Normal file
BIN
dmenu/util.o
BIN
dmenu/util.o
Binary file not shown.
Loading…
Reference in a new issue