added dwm
This commit is contained in:
parent
4666c9e3d1
commit
11405822d7
17 changed files with 3182 additions and 1 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1 +1,3 @@
|
||||||
*.swp
|
*.swp
|
||||||
|
dwm/*.o
|
||||||
|
dwm/dwm
|
||||||
|
|
32
dwm/LICENSE
Normal file
32
dwm/LICENSE
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
MIT/X Consortium License
|
||||||
|
|
||||||
|
© 2006-2012 Anselm R Garbe <anselm@garbe.us>
|
||||||
|
© 2007-2011 Peter Hartlich <sgkkr at hartlich dot com>
|
||||||
|
© 2010-2011 Connor Lane Smith <cls@lubutu.com>
|
||||||
|
© 2006-2009 Jukka Salmi <jukka at salmi dot ch>
|
||||||
|
© 2007-2009 Premysl Hruby <dfenze at gmail dot com>
|
||||||
|
© 2007-2009 Szabolcs Nagy <nszabolcs at gmail dot com>
|
||||||
|
© 2007-2009 Christof Musik <christof at sendfax dot de>
|
||||||
|
© 2009 Mate Nagy <mnagy at port70 dot net>
|
||||||
|
© 2007-2008 Enno Gottox Boland <gottox at s01 dot de>
|
||||||
|
© 2008 Martin Hurton <martin dot hurton at gmail dot com>
|
||||||
|
© 2008 Neale Pickett <neale dot woozle dot org>
|
||||||
|
© 2006-2007 Sander van Dijk <a dot h dot vandijk at gmail dot com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of this software and associated documentation files (the "Software"),
|
||||||
|
to deal in the Software without restriction, including without limitation
|
||||||
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS IN THE SOFTWARE.
|
44
dwm/MEMO_DWM
Normal file
44
dwm/MEMO_DWM
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
Alt - [1-8] - Changer vue
|
||||||
|
Ctrl - Alt - [1-8] - Changer la fenetre de vue
|
||||||
|
|
||||||
|
M+p spawn dmenu
|
||||||
|
M+S+Return spawn a terminal
|
||||||
|
M+S+c kill window
|
||||||
|
M+b toggle status bar visibility
|
||||||
|
|
||||||
|
M+Space toggle layout
|
||||||
|
|
||||||
|
|
||||||
|
M+j focus next client
|
||||||
|
M+k focus previous client
|
||||||
|
|
||||||
|
M+g decrease main window/stack ratio
|
||||||
|
M+s increase main window/stack ratio
|
||||||
|
|
||||||
|
M+a pop window from stack ("deiconify")
|
||||||
|
M+d push window to stack ("iconify")
|
||||||
|
|
||||||
|
M+C+y add new workspace
|
||||||
|
M+C+r remove current workspace (push current windows to stack)
|
||||||
|
M+Return zoom window
|
||||||
|
M+Tab focus next window
|
||||||
|
M+S+Tab focus previous window
|
||||||
|
|
||||||
|
|
||||||
|
M+l view previous workspace
|
||||||
|
M+h view next workspace
|
||||||
|
|
||||||
|
M+S+l move window to next workspace
|
||||||
|
M+S+h move window to previous workspace
|
||||||
|
M+C+l move mouse pointer to next screen (xinerama only)
|
||||||
|
M+C+h move mouse pointer to previous screen (xinerama only)
|
||||||
|
M+1 view workspace 1
|
||||||
|
M+2 view workspace 2
|
||||||
|
[...]
|
||||||
|
M+0 view workspace 10
|
||||||
|
M+S+1 move window to workspace 1
|
||||||
|
M+S+2 move window to workspace 2
|
||||||
|
[...]
|
||||||
|
M+S+0 move window to workspace 10
|
||||||
|
|
||||||
|
M+m toggle maximization
|
60
dwm/Makefile
Normal file
60
dwm/Makefile
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
# dwm - dynamic window manager
|
||||||
|
# See LICENSE file for copyright and license details.
|
||||||
|
|
||||||
|
include config.mk
|
||||||
|
|
||||||
|
SRC = drw.c dwm.c util.c
|
||||||
|
OBJ = ${SRC:.c=.o}
|
||||||
|
|
||||||
|
all: options dwm
|
||||||
|
|
||||||
|
options:
|
||||||
|
@echo dwm build options:
|
||||||
|
@echo "CFLAGS = ${CFLAGS}"
|
||||||
|
@echo "LDFLAGS = ${LDFLAGS}"
|
||||||
|
@echo "CC = ${CC}"
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
@echo CC $<
|
||||||
|
@${CC} -c ${CFLAGS} $<
|
||||||
|
|
||||||
|
${OBJ}: config.h config.mk
|
||||||
|
|
||||||
|
config.h:
|
||||||
|
@echo creating $@ from config.def.h
|
||||||
|
@cp config.def.h $@
|
||||||
|
|
||||||
|
dwm: ${OBJ}
|
||||||
|
@echo CC -o $@
|
||||||
|
@${CC} -o $@ ${OBJ} ${LDFLAGS}
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@echo cleaning
|
||||||
|
@rm -f dwm ${OBJ} dwm-${VERSION}.tar.gz
|
||||||
|
|
||||||
|
dist: clean
|
||||||
|
@echo creating dist tarball
|
||||||
|
@mkdir -p dwm-${VERSION}
|
||||||
|
@cp -R LICENSE Makefile README config.def.h config.mk \
|
||||||
|
dwm.1 ${SRC} dwm-${VERSION}
|
||||||
|
@tar -cf dwm-${VERSION}.tar dwm-${VERSION}
|
||||||
|
@gzip dwm-${VERSION}.tar
|
||||||
|
@rm -rf dwm-${VERSION}
|
||||||
|
|
||||||
|
install: all
|
||||||
|
@echo installing executable file to ${DESTDIR}${PREFIX}/bin
|
||||||
|
@mkdir -p ${DESTDIR}${PREFIX}/bin
|
||||||
|
@cp -f dwm ${DESTDIR}${PREFIX}/bin
|
||||||
|
@chmod 755 ${DESTDIR}${PREFIX}/bin/dwm
|
||||||
|
@echo installing manual page to ${DESTDIR}${MANPREFIX}/man1
|
||||||
|
@mkdir -p ${DESTDIR}${MANPREFIX}/man1
|
||||||
|
@sed "s/VERSION/${VERSION}/g" < dwm.1 > ${DESTDIR}${MANPREFIX}/man1/dwm.1
|
||||||
|
@chmod 644 ${DESTDIR}${MANPREFIX}/man1/dwm.1
|
||||||
|
|
||||||
|
uninstall:
|
||||||
|
@echo removing executable file from ${DESTDIR}${PREFIX}/bin
|
||||||
|
@rm -f ${DESTDIR}${PREFIX}/bin/dwm
|
||||||
|
@echo removing manual page from ${DESTDIR}${MANPREFIX}/man1
|
||||||
|
@rm -f ${DESTDIR}${MANPREFIX}/man1/dwm.1
|
||||||
|
|
||||||
|
.PHONY: all options clean dist install uninstall
|
109
dwm/config.def.h
Normal file
109
dwm/config.def.h
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
/* See LICENSE file for copyright and license details. */
|
||||||
|
|
||||||
|
/* appearance */
|
||||||
|
static const char font[] = "-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*";
|
||||||
|
static const char normbordercolor[] = "#444444";
|
||||||
|
static const char normbgcolor[] = "#222222";
|
||||||
|
static const char normfgcolor[] = "#bbbbbb";
|
||||||
|
static const char selbordercolor[] = "#005577";
|
||||||
|
static const char selbgcolor[] = "#005577";
|
||||||
|
static const char selfgcolor[] = "#eeeeee";
|
||||||
|
static const unsigned int borderpx = 1; /* border pixel of windows */
|
||||||
|
static const unsigned int snap = 32; /* snap pixel */
|
||||||
|
static const Bool showbar = True; /* False means no bar */
|
||||||
|
static const Bool topbar = True; /* False means bottom bar */
|
||||||
|
|
||||||
|
/* tagging */
|
||||||
|
static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
|
||||||
|
|
||||||
|
static const Rule rules[] = {
|
||||||
|
/* xprop(1):
|
||||||
|
* WM_CLASS(STRING) = instance, class
|
||||||
|
* WM_NAME(STRING) = title
|
||||||
|
*/
|
||||||
|
/* class instance title tags mask isfloating monitor */
|
||||||
|
{ "Gimp", NULL, NULL, 0, True, -1 },
|
||||||
|
{ "Firefox", NULL, NULL, 1 << 8, False, -1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
/* layout(s) */
|
||||||
|
static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
|
||||||
|
static const int nmaster = 1; /* number of clients in master area */
|
||||||
|
static const Bool resizehints = True; /* True means respect size hints in tiled resizals */
|
||||||
|
|
||||||
|
static const Layout layouts[] = {
|
||||||
|
/* symbol arrange function */
|
||||||
|
{ "[]=", tile }, /* first entry is default */
|
||||||
|
{ "><>", NULL }, /* no layout function means floating behavior */
|
||||||
|
{ "[M]", monocle },
|
||||||
|
};
|
||||||
|
|
||||||
|
/* key definitions */
|
||||||
|
#define MODKEY Mod1Mask
|
||||||
|
#define TAGKEYS(KEY,TAG) \
|
||||||
|
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \
|
||||||
|
{ MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
|
||||||
|
{ MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
|
||||||
|
{ MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
|
||||||
|
|
||||||
|
/* helper for spawning shell commands in the pre dwm-5.0 fashion */
|
||||||
|
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
|
||||||
|
|
||||||
|
/* commands */
|
||||||
|
static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
|
||||||
|
static const char *termcmd[] = { "st", "-f", font, NULL };
|
||||||
|
|
||||||
|
static Key keys[] = {
|
||||||
|
/* modifier key function argument */
|
||||||
|
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
|
||||||
|
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
|
||||||
|
{ MODKEY, XK_b, togglebar, {0} },
|
||||||
|
{ MODKEY, XK_j, focusstack, {.i = +1 } },
|
||||||
|
{ MODKEY, XK_k, focusstack, {.i = -1 } },
|
||||||
|
{ MODKEY, XK_i, incnmaster, {.i = +1 } },
|
||||||
|
{ MODKEY, XK_d, incnmaster, {.i = -1 } },
|
||||||
|
{ MODKEY, XK_h, setmfact, {.f = -0.05} },
|
||||||
|
{ MODKEY, XK_l, setmfact, {.f = +0.05} },
|
||||||
|
{ MODKEY, XK_Return, zoom, {0} },
|
||||||
|
{ MODKEY, XK_Tab, view, {0} },
|
||||||
|
{ MODKEY|ShiftMask, XK_c, killclient, {0} },
|
||||||
|
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
|
||||||
|
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
|
||||||
|
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
|
||||||
|
{ MODKEY, XK_space, setlayout, {0} },
|
||||||
|
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
|
||||||
|
{ MODKEY, XK_0, view, {.ui = ~0 } },
|
||||||
|
{ MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } },
|
||||||
|
{ MODKEY, XK_comma, focusmon, {.i = -1 } },
|
||||||
|
{ MODKEY, XK_period, focusmon, {.i = +1 } },
|
||||||
|
{ MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
|
||||||
|
{ MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
|
||||||
|
TAGKEYS( XK_1, 0)
|
||||||
|
TAGKEYS( XK_2, 1)
|
||||||
|
TAGKEYS( XK_3, 2)
|
||||||
|
TAGKEYS( XK_4, 3)
|
||||||
|
TAGKEYS( XK_5, 4)
|
||||||
|
TAGKEYS( XK_6, 5)
|
||||||
|
TAGKEYS( XK_7, 6)
|
||||||
|
TAGKEYS( XK_8, 7)
|
||||||
|
TAGKEYS( XK_9, 8)
|
||||||
|
{ MODKEY|ShiftMask, XK_q, quit, {0} },
|
||||||
|
};
|
||||||
|
|
||||||
|
/* button definitions */
|
||||||
|
/* click can be ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
|
||||||
|
static Button buttons[] = {
|
||||||
|
/* click event mask button function argument */
|
||||||
|
{ ClkLtSymbol, 0, Button1, setlayout, {0} },
|
||||||
|
{ ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
|
||||||
|
{ ClkWinTitle, 0, Button2, zoom, {0} },
|
||||||
|
{ ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
|
||||||
|
{ ClkClientWin, MODKEY, Button1, movemouse, {0} },
|
||||||
|
{ ClkClientWin, MODKEY, Button2, togglefloating, {0} },
|
||||||
|
{ ClkClientWin, MODKEY, Button3, resizemouse, {0} },
|
||||||
|
{ ClkTagBar, 0, Button1, view, {0} },
|
||||||
|
{ ClkTagBar, 0, Button3, toggleview, {0} },
|
||||||
|
{ ClkTagBar, MODKEY, Button1, tag, {0} },
|
||||||
|
{ ClkTagBar, MODKEY, Button3, toggletag, {0} },
|
||||||
|
};
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
../../dwm/config.h
|
|
131
dwm/config.h
Normal file
131
dwm/config.h
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
#include <X11/XF86keysym.h>
|
||||||
|
|
||||||
|
/* appearance */
|
||||||
|
static const char font[] = "-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*";
|
||||||
|
static const char normbordercolor[] = "#444444";
|
||||||
|
static const char normbgcolor[] = "#222222";
|
||||||
|
static const char normfgcolor[] = "#bbbbbb";
|
||||||
|
static const char selbordercolor[] = "#005577";
|
||||||
|
static const char selbgcolor[] = "#005577";
|
||||||
|
static const char selfgcolor[] = "#eeeeee";
|
||||||
|
static const unsigned int borderpx = 1; /* border pixel of windows */
|
||||||
|
static const unsigned int snap = 32; /* snap pixel */
|
||||||
|
static const Bool showbar = True; /* False means no bar */
|
||||||
|
static const Bool topbar = True; /* False means bottom bar */
|
||||||
|
|
||||||
|
/* tagging */
|
||||||
|
static const char *tags[] = { "web", "mails", "term", "chat", "media", "misc", "misc2", };
|
||||||
|
|
||||||
|
static const Rule rules[] = {
|
||||||
|
/* xprop(1):
|
||||||
|
* WM_CLASS(STRING) = instance, class
|
||||||
|
* WM_NAME(STRING) = title
|
||||||
|
*/
|
||||||
|
/* class instance title tags mask isfloating monitor */
|
||||||
|
{ "Gimp", NULL, NULL, 0, True, -1 },
|
||||||
|
{ "Firefox", NULL, NULL, 1 << 0, False, -1 },
|
||||||
|
{ "Thunderbird", NULL, NULL, 1 << 1, False, -1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
/* layout(s) */
|
||||||
|
static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
|
||||||
|
static const int nmaster = 1; /* number of clients in master area */
|
||||||
|
static const Bool resizehints = True; /* True means respect size hints in tiled resizals */
|
||||||
|
|
||||||
|
static const Layout layouts[] = {
|
||||||
|
/* symbol arrange function */
|
||||||
|
{ "[]=", tile }, /* first entry is default */
|
||||||
|
{ "><>", NULL }, /* no layout function means floating behavior */
|
||||||
|
{ "[M]", monocle },
|
||||||
|
};
|
||||||
|
|
||||||
|
/* key definitions */
|
||||||
|
/* Mod1: alt - Mod4: Super */
|
||||||
|
#define MODKEY Mod1Mask
|
||||||
|
#define TAGKEYS(KEY,TAG) \
|
||||||
|
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \
|
||||||
|
{ MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
|
||||||
|
{ MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
|
||||||
|
{ MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
|
||||||
|
|
||||||
|
/* helper for spawning shell commands in the pre dwm-5.0 fashion */
|
||||||
|
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
|
||||||
|
|
||||||
|
/* commands */
|
||||||
|
static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
|
||||||
|
static const char *termcmd[] = { "gnome-terminal", NULL };
|
||||||
|
static const char *webcmd[] = { "firefox", NULL };
|
||||||
|
static const char *mailcmd[] = { "thunderbird", NULL };
|
||||||
|
|
||||||
|
//static const char *lockcmd[] = { "xlock", "-mode", "blank", "-startCmd", "~/Programmation/Utils/monitorOff.sh", "-timeout", "15", "-dpmsoff", "1", NULL };
|
||||||
|
|
||||||
|
//static const char *volup[] = { "amixer", "-q", "set", "Master", "5%+", "unmute", NULL };
|
||||||
|
//static const char *voldown[] = { "amixer", "-q", "set", "Master", "5%-", "unmute", NULL };
|
||||||
|
//static const char *volmute[] = { "amixer", "-q", "set", "Master", "toggle", NULL };
|
||||||
|
|
||||||
|
static const char *volup[] = {"octopus.sh", "vol", "up", NULL};
|
||||||
|
static const char *voldown[] = {"octopus.sh", "vol", "down", NULL};
|
||||||
|
static const char *volmute[] = {"octopus.sh", "vol", "mute", NULL};
|
||||||
|
static const char *lockcmd[] = {"octopus.sh", "lock", NULL};
|
||||||
|
|
||||||
|
static Key keys[] = {
|
||||||
|
/* modifier key function argument */
|
||||||
|
{ MODKEY|ShiftMask, XK_p, spawn, {.v = dmenucmd } },
|
||||||
|
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
|
||||||
|
{ MODKEY|ShiftMask, XK_f, spawn, {.v = webcmd } },
|
||||||
|
{ MODKEY|ShiftMask, XK_t, spawn, {.v = mailcmd } },
|
||||||
|
{ MODKEY|ShiftMask, XK_l, spawn, {.v = lockcmd } },
|
||||||
|
{ MODKEY, XK_b, togglebar, {0} },
|
||||||
|
{ MODKEY, XK_j, focusstack, {.i = +1 } },
|
||||||
|
{ MODKEY, XK_k, focusstack, {.i = -1 } },
|
||||||
|
{ MODKEY, XK_i, incnmaster, {.i = +1 } },
|
||||||
|
{ MODKEY, XK_d, incnmaster, {.i = -1 } },
|
||||||
|
{ MODKEY, XK_h, setmfact, {.f = -0.05} },
|
||||||
|
{ MODKEY, XK_l, setmfact, {.f = +0.05} },
|
||||||
|
{ MODKEY, XK_Return, zoom, {0} },
|
||||||
|
{ MODKEY, XK_Tab, view, {0} },
|
||||||
|
{ MODKEY|ShiftMask, XK_c, killclient, {0} },
|
||||||
|
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
|
||||||
|
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
|
||||||
|
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
|
||||||
|
{ MODKEY, XK_space, setlayout, {0} },
|
||||||
|
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
|
||||||
|
{ MODKEY, XK_0, view, {.ui = ~0 } },
|
||||||
|
{ MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } },
|
||||||
|
{ MODKEY, XK_comma, focusmon, {.i = -1 } },
|
||||||
|
{ MODKEY, XK_period, focusmon, {.i = +1 } },
|
||||||
|
{ MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
|
||||||
|
{ MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
|
||||||
|
{ 0, XF86XK_AudioRaiseVolume, spawn, { .v = volup } },
|
||||||
|
{ 0, XF86XK_AudioLowerVolume, spawn, { .v = voldown } },
|
||||||
|
{ 0, XF86XK_AudioMute, spawn, { .v = volmute } },
|
||||||
|
|
||||||
|
TAGKEYS( XK_1, 0)
|
||||||
|
TAGKEYS( XK_2, 1)
|
||||||
|
TAGKEYS( XK_3, 2)
|
||||||
|
TAGKEYS( XK_4, 3)
|
||||||
|
TAGKEYS( XK_5, 4)
|
||||||
|
TAGKEYS( XK_6, 5)
|
||||||
|
TAGKEYS( XK_7, 6)
|
||||||
|
TAGKEYS( XK_8, 7)
|
||||||
|
TAGKEYS( XK_9, 8)
|
||||||
|
{ MODKEY|ShiftMask, XK_q, quit, {0} },
|
||||||
|
};
|
||||||
|
|
||||||
|
/* button definitions */
|
||||||
|
/* click can be ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
|
||||||
|
static Button buttons[] = {
|
||||||
|
/* click event mask button function argument */
|
||||||
|
{ ClkLtSymbol, 0, Button1, setlayout, {0} },
|
||||||
|
{ ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
|
||||||
|
{ ClkWinTitle, 0, Button2, zoom, {0} },
|
||||||
|
{ ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
|
||||||
|
{ ClkClientWin, MODKEY, Button1, movemouse, {0} },
|
||||||
|
{ ClkClientWin, MODKEY, Button2, togglefloating, {0} },
|
||||||
|
{ ClkClientWin, MODKEY, Button3, resizemouse, {0} },
|
||||||
|
{ ClkTagBar, 0, Button1, view, {0} },
|
||||||
|
{ ClkTagBar, 0, Button3, toggleview, {0} },
|
||||||
|
{ ClkTagBar, MODKEY, Button1, tag, {0} },
|
||||||
|
{ ClkTagBar, MODKEY, Button3, toggletag, {0} },
|
||||||
|
};
|
||||||
|
|
32
dwm/config.mk
Normal file
32
dwm/config.mk
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
# dwm version
|
||||||
|
VERSION = 6.1
|
||||||
|
|
||||||
|
# Customize below to fit your system
|
||||||
|
|
||||||
|
# paths
|
||||||
|
PREFIX = /usr/local
|
||||||
|
MANPREFIX = ${PREFIX}/share/man
|
||||||
|
|
||||||
|
X11INC = /usr/X11R6/include
|
||||||
|
X11LIB = /usr/X11R6/lib
|
||||||
|
|
||||||
|
# Xinerama, comment if you don't want it
|
||||||
|
XINERAMALIBS = -lXinerama
|
||||||
|
XINERAMAFLAGS = -DXINERAMA
|
||||||
|
|
||||||
|
# includes and libs
|
||||||
|
INCS = -I${X11INC}
|
||||||
|
LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS}
|
||||||
|
|
||||||
|
# flags
|
||||||
|
CPPFLAGS = -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
|
||||||
|
#CFLAGS = -g -std=c99 -pedantic -Wall -O0 ${INCS} ${CPPFLAGS}
|
||||||
|
CFLAGS = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os ${INCS} ${CPPFLAGS}
|
||||||
|
LDFLAGS = -s ${LIBS}
|
||||||
|
|
||||||
|
# Solaris
|
||||||
|
#CFLAGS = -fast ${INCS} -DVERSION=\"${VERSION}\"
|
||||||
|
#LDFLAGS = ${LIBS}
|
||||||
|
|
||||||
|
# compiler and linker
|
||||||
|
CC = cc
|
202
dwm/drw.c
Normal file
202
dwm/drw.c
Normal file
|
@ -0,0 +1,202 @@
|
||||||
|
/* See LICENSE file for copyright and license details. */
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
|
||||||
|
#include "drw.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
Drw *
|
||||||
|
drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h) {
|
||||||
|
Drw *drw = (Drw *)calloc(1, sizeof(Drw));
|
||||||
|
drw->dpy = dpy;
|
||||||
|
drw->screen = screen;
|
||||||
|
drw->win = win;
|
||||||
|
drw->w = w;
|
||||||
|
drw->h = h;
|
||||||
|
drw->drwable = XCreatePixmap(dpy, win, w, h, DefaultDepth(dpy, screen));
|
||||||
|
drw->gc = XCreateGC(dpy, win, 0, NULL);
|
||||||
|
XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMiter);
|
||||||
|
return drw;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
drw_resize(Drw *drw, unsigned int w, unsigned int h) {
|
||||||
|
if(!drw)
|
||||||
|
return;
|
||||||
|
drw->w = w;
|
||||||
|
drw->h = h;
|
||||||
|
XFreePixmap(drw->dpy, drw->drwable);
|
||||||
|
drw->drwable = XCreatePixmap(drw->dpy, drw->win, w, h, DefaultDepth(drw->dpy, drw->screen));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
drw_free(Drw *drw) {
|
||||||
|
XFreePixmap(drw->dpy, drw->drwable);
|
||||||
|
XFreeGC(drw->dpy, drw->gc);
|
||||||
|
free(drw);
|
||||||
|
}
|
||||||
|
|
||||||
|
Fnt *
|
||||||
|
drw_font_create(Drw *drw, const char *fontname) {
|
||||||
|
Fnt *font;
|
||||||
|
char *def, **missing;
|
||||||
|
int n;
|
||||||
|
|
||||||
|
if(!drw)
|
||||||
|
return NULL;
|
||||||
|
font = (Fnt *)calloc(1, sizeof(Fnt));
|
||||||
|
font->set = XCreateFontSet(drw->dpy, fontname, &missing, &n, &def);
|
||||||
|
if(missing) {
|
||||||
|
while(n--)
|
||||||
|
fprintf(stderr, "drw: missing fontset: %s\n", missing[n]);
|
||||||
|
XFreeStringList(missing);
|
||||||
|
}
|
||||||
|
if(font->set) {
|
||||||
|
XFontStruct **xfonts;
|
||||||
|
char **font_names;
|
||||||
|
XExtentsOfFontSet(font->set);
|
||||||
|
n = XFontsOfFontSet(font->set, &xfonts, &font_names);
|
||||||
|
while(n--) {
|
||||||
|
font->ascent = MAX(font->ascent, (*xfonts)->ascent);
|
||||||
|
font->descent = MAX(font->descent,(*xfonts)->descent);
|
||||||
|
xfonts++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(!(font->xfont = XLoadQueryFont(drw->dpy, fontname))
|
||||||
|
&& !(font->xfont = XLoadQueryFont(drw->dpy, "fixed")))
|
||||||
|
die("error, cannot load font: '%s'\n", fontname);
|
||||||
|
font->ascent = font->xfont->ascent;
|
||||||
|
font->descent = font->xfont->descent;
|
||||||
|
}
|
||||||
|
font->h = font->ascent + font->descent;
|
||||||
|
return font;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
drw_font_free(Drw *drw, Fnt *font) {
|
||||||
|
if(!drw || !font)
|
||||||
|
return;
|
||||||
|
if(font->set)
|
||||||
|
XFreeFontSet(drw->dpy, font->set);
|
||||||
|
else
|
||||||
|
XFreeFont(drw->dpy, font->xfont);
|
||||||
|
free(font);
|
||||||
|
}
|
||||||
|
|
||||||
|
Clr *
|
||||||
|
drw_clr_create(Drw *drw, const char *clrname) {
|
||||||
|
Clr *clr = (Clr *)calloc(1, sizeof(Clr));
|
||||||
|
Colormap cmap = DefaultColormap(drw->dpy, drw->screen);
|
||||||
|
XColor color;
|
||||||
|
|
||||||
|
if(!XAllocNamedColor(drw->dpy, cmap, clrname, &color, &color))
|
||||||
|
die("error, cannot allocate color '%s'\n", clrname);
|
||||||
|
clr->rgb = color.pixel;
|
||||||
|
return clr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
drw_clr_free(Drw *drw, Clr *clr) {
|
||||||
|
if(!clr)
|
||||||
|
return;
|
||||||
|
free(clr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
drw_setfont(Drw *drw, Fnt *font) {
|
||||||
|
if(!drw)
|
||||||
|
return;
|
||||||
|
drw->font = font;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
drw_setfg(Drw *drw, Clr *clr) {
|
||||||
|
if(!drw)
|
||||||
|
return;
|
||||||
|
drw->fg = clr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
drw_setbg(Drw *drw, Clr *clr) {
|
||||||
|
if(!drw)
|
||||||
|
return;
|
||||||
|
drw->bg = clr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, Bool filled, Bool empty, Bool invert) {
|
||||||
|
int dx;
|
||||||
|
|
||||||
|
if(!drw || !drw->font || !drw->fg || !drw->bg)
|
||||||
|
return;
|
||||||
|
XSetForeground(drw->dpy, drw->gc, invert ? drw->bg->rgb : drw->fg->rgb);
|
||||||
|
dx = (drw->font->ascent + drw->font->descent + 2) / 4;
|
||||||
|
if(filled)
|
||||||
|
XFillRectangle(drw->dpy, drw->drwable, drw->gc, x+1, y+1, dx+1, dx+1);
|
||||||
|
else if(empty)
|
||||||
|
XDrawRectangle(drw->dpy, drw->drwable, drw->gc, x+1, y+1, dx, dx);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *text, Bool invert) {
|
||||||
|
char buf[256];
|
||||||
|
int i, tx, ty, len, olen;
|
||||||
|
Extnts tex;
|
||||||
|
|
||||||
|
if(!drw || !drw->fg || !drw->bg)
|
||||||
|
return;
|
||||||
|
XSetForeground(drw->dpy, drw->gc, invert ? drw->fg->rgb : drw->bg->rgb);
|
||||||
|
XFillRectangle(drw->dpy, drw->drwable, drw->gc, x, y, w, h);
|
||||||
|
if(!text || !drw->font)
|
||||||
|
return;
|
||||||
|
olen = strlen(text);
|
||||||
|
drw_getexts(drw, text, olen, &tex);
|
||||||
|
ty = y + (h / 2) - tex.yOff;
|
||||||
|
tx = x + tex.xOff;
|
||||||
|
/* shorten text if necessary */
|
||||||
|
for(len = MIN(olen, sizeof buf); len && tex.w > w - tex.h; len--)
|
||||||
|
drw_getexts(drw, text, len, &tex);
|
||||||
|
if(!len)
|
||||||
|
return;
|
||||||
|
memcpy(buf, text, len);
|
||||||
|
if(len < olen)
|
||||||
|
for(i = len; i && i > len - 3; buf[--i] = '.');
|
||||||
|
XSetForeground(drw->dpy, drw->gc, invert ? drw->bg->rgb : drw->fg->rgb);
|
||||||
|
if(drw->font->set)
|
||||||
|
XmbDrawString(drw->dpy, drw->drwable, drw->font->set, drw->gc, tx, ty, buf, len);
|
||||||
|
else
|
||||||
|
XDrawString(drw->dpy, drw->drwable, drw->gc, tx, ty, buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
drw_map(Drw *drw, int x, int y, unsigned int w, unsigned int h) {
|
||||||
|
if(!drw)
|
||||||
|
return;
|
||||||
|
XCopyArea(drw->dpy, drw->drwable, drw->win, drw->gc, x, y, w, h, x, y);
|
||||||
|
XSync(drw->dpy, False);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
drw_getexts(Drw *drw, const char *text, unsigned int len, Extnts *tex) {
|
||||||
|
XRectangle r;
|
||||||
|
|
||||||
|
if(!drw || !drw->font || !text)
|
||||||
|
return;
|
||||||
|
if(drw->font->set) {
|
||||||
|
XmbTextExtents(drw->font->set, text, len, NULL, &r);
|
||||||
|
tex->xOff = r.x;
|
||||||
|
tex->yOff = r.y;
|
||||||
|
tex->w = r.width;
|
||||||
|
tex->h = r.height;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tex->h = drw->font->ascent + drw->font->descent;
|
||||||
|
tex->w = XTextWidth(drw->font->xfont, text, len);
|
||||||
|
tex->xOff = tex->h / 2;
|
||||||
|
tex->yOff = (tex->h / 2) + drw->font->ascent;
|
||||||
|
}
|
||||||
|
}
|
61
dwm/drw.h
Normal file
61
dwm/drw.h
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
/* See LICENSE file for copyright and license details. */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
unsigned long rgb;
|
||||||
|
} Clr;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int ascent;
|
||||||
|
int descent;
|
||||||
|
unsigned int h;
|
||||||
|
XFontSet set;
|
||||||
|
XFontStruct *xfont;
|
||||||
|
} Fnt;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
unsigned int w, h;
|
||||||
|
Display *dpy;
|
||||||
|
int screen;
|
||||||
|
Window win;
|
||||||
|
Drawable drwable;
|
||||||
|
GC gc;
|
||||||
|
Clr *fg;
|
||||||
|
Clr *bg;
|
||||||
|
Fnt *font;
|
||||||
|
} Drw;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
unsigned int w;
|
||||||
|
unsigned int h;
|
||||||
|
int xOff;
|
||||||
|
int yOff;
|
||||||
|
} Extnts;
|
||||||
|
|
||||||
|
/* Drawable abstraction */
|
||||||
|
Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h);
|
||||||
|
void drw_resize(Drw *drw, unsigned int w, unsigned int h);
|
||||||
|
void drw_free(Drw *drw);
|
||||||
|
|
||||||
|
/* Fnt abstraction */
|
||||||
|
Fnt *drw_font_create(Drw *drw, const char *fontname);
|
||||||
|
void drw_font_free(Drw *drw, Fnt *font);
|
||||||
|
|
||||||
|
/* Clrour abstraction */
|
||||||
|
Clr *drw_clr_create(Drw *drw, const char *clrname);
|
||||||
|
void drw_clr_free(Drw *drw, Clr *clr);
|
||||||
|
|
||||||
|
/* Drawing context manipulation */
|
||||||
|
void drw_setfont(Drw *drw, Fnt *font);
|
||||||
|
void drw_setfg(Drw *drw, Clr *clr);
|
||||||
|
void drw_setbg(Drw *drw, Clr *clr);
|
||||||
|
|
||||||
|
/* Drawing functions */
|
||||||
|
void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, Bool filled, Bool empty, Bool invert);
|
||||||
|
void drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *text, Bool invert);
|
||||||
|
|
||||||
|
/* Map functions */
|
||||||
|
void drw_map(Drw *drw, int x, int y, unsigned int w, unsigned int h);
|
||||||
|
|
||||||
|
/* Text functions */
|
||||||
|
void drw_getexts(Drw *drw, const char *text, unsigned int len, Extnts *extnts);
|
||||||
|
|
176
dwm/dwm.1
Normal file
176
dwm/dwm.1
Normal file
|
@ -0,0 +1,176 @@
|
||||||
|
.TH DWM 1 dwm\-VERSION
|
||||||
|
.SH NAME
|
||||||
|
dwm \- dynamic window manager
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B dwm
|
||||||
|
.RB [ \-v ]
|
||||||
|
.SH DESCRIPTION
|
||||||
|
dwm is a dynamic window manager for X. It manages windows in tiled, monocle
|
||||||
|
and floating layouts. Either layout can be applied dynamically, optimising the
|
||||||
|
environment for the application in use and the task performed.
|
||||||
|
.P
|
||||||
|
In tiled layouts windows are managed in a master and stacking area. The master
|
||||||
|
area contains the window which currently needs most attention, whereas the
|
||||||
|
stacking area contains all other windows. In monocle layout all windows are
|
||||||
|
maximised to the screen size. In floating layout windows can be resized and
|
||||||
|
moved freely. Dialog windows are always managed floating, regardless of the
|
||||||
|
layout applied.
|
||||||
|
.P
|
||||||
|
Windows are grouped by tags. Each window can be tagged with one or multiple
|
||||||
|
tags. Selecting certain tags displays all windows with these tags.
|
||||||
|
.P
|
||||||
|
Each screen contains a small status bar which displays all available tags, the
|
||||||
|
layout, the title of the focused window, and the text read from the root window
|
||||||
|
name property, if the screen is focused. A floating window is indicated with an
|
||||||
|
empty square and a maximised floating window is indicated with a filled square
|
||||||
|
before the windows title. The selected tags are indicated with a different
|
||||||
|
color. The tags of the focused window are indicated with a filled square in the
|
||||||
|
top left corner. The tags which are applied to one or more windows are
|
||||||
|
indicated with an empty square in the top left corner.
|
||||||
|
.P
|
||||||
|
dwm draws a small border around windows to indicate the focus state.
|
||||||
|
.SH OPTIONS
|
||||||
|
.TP
|
||||||
|
.B \-v
|
||||||
|
prints version information to standard output, then exits.
|
||||||
|
.SH USAGE
|
||||||
|
.SS Status bar
|
||||||
|
.TP
|
||||||
|
.B X root window name
|
||||||
|
is read and displayed in the status text area. It can be set with the
|
||||||
|
.BR xsetroot (1)
|
||||||
|
command.
|
||||||
|
.TP
|
||||||
|
.B Button1
|
||||||
|
click on a tag label to display all windows with that tag, click on the layout
|
||||||
|
label toggles between tiled and floating layout.
|
||||||
|
.TP
|
||||||
|
.B Button3
|
||||||
|
click on a tag label adds/removes all windows with that tag to/from the view.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-Button1
|
||||||
|
click on a tag label applies that tag to the focused window.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-Button3
|
||||||
|
click on a tag label adds/removes that tag to/from the focused window.
|
||||||
|
.SS Keyboard commands
|
||||||
|
.TP
|
||||||
|
.B Mod1\-Shift\-Return
|
||||||
|
Start
|
||||||
|
.BR st(1).
|
||||||
|
.TP
|
||||||
|
.B Mod1\-,
|
||||||
|
Focus previous screen, if any.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-.
|
||||||
|
Focus next screen, if any.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-Shift\-,
|
||||||
|
Send focused window to previous screen, if any.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-Shift\-.
|
||||||
|
Send focused window to next screen, if any.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-b
|
||||||
|
Toggles bar on and off.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-t
|
||||||
|
Sets tiled layout.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-f
|
||||||
|
Sets floating layout.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-m
|
||||||
|
Sets monocle layout.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-space
|
||||||
|
Toggles between current and previous layout.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-j
|
||||||
|
Focus next window.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-k
|
||||||
|
Focus previous window.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-i
|
||||||
|
Increase clients in master area.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-d
|
||||||
|
Decrease clients in master area.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-l
|
||||||
|
Increase master area size.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-h
|
||||||
|
Decrease master area size.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-Return
|
||||||
|
Zooms/cycles focused window to/from master area (tiled layouts only).
|
||||||
|
.TP
|
||||||
|
.B Mod1\-Shift\-c
|
||||||
|
Close focused window.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-Shift\-space
|
||||||
|
Toggle focused window between tiled and floating state.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-Tab
|
||||||
|
Toggles to the previously selected tags.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-Shift\-[1..n]
|
||||||
|
Apply nth tag to focused window.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-Shift\-0
|
||||||
|
Apply all tags to focused window.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-Control\-Shift\-[1..n]
|
||||||
|
Add/remove nth tag to/from focused window.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-[1..n]
|
||||||
|
View all windows with nth tag.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-0
|
||||||
|
View all windows with any tag.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-Control\-[1..n]
|
||||||
|
Add/remove all windows with nth tag to/from the view.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-Shift\-q
|
||||||
|
Quit dwm.
|
||||||
|
.SS Mouse commands
|
||||||
|
.TP
|
||||||
|
.B Mod1\-Button1
|
||||||
|
Move focused window while dragging. Tiled windows will be toggled to the floating state.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-Button2
|
||||||
|
Toggles focused window between floating and tiled state.
|
||||||
|
.TP
|
||||||
|
.B Mod1\-Button3
|
||||||
|
Resize focused window while dragging. Tiled windows will be toggled to the floating state.
|
||||||
|
.SH CUSTOMIZATION
|
||||||
|
dwm is customized by creating a custom config.h and (re)compiling the source
|
||||||
|
code. This keeps it fast, secure and simple.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR dmenu (1),
|
||||||
|
.BR st (1)
|
||||||
|
.SH BUGS
|
||||||
|
Java applications which use the XToolkit/XAWT backend may draw grey windows
|
||||||
|
only. The XToolkit/XAWT backend breaks ICCCM-compliance in recent JDK 1.5 and early
|
||||||
|
JDK 1.6 versions, because it assumes a reparenting window manager. Possible workarounds
|
||||||
|
are using JDK 1.4 (which doesn't contain the XToolkit/XAWT backend) or setting the
|
||||||
|
environment variable
|
||||||
|
.BR AWT_TOOLKIT=MToolkit
|
||||||
|
(to use the older Motif backend instead) or running
|
||||||
|
.B xprop -root -f _NET_WM_NAME 32a -set _NET_WM_NAME LG3D
|
||||||
|
or
|
||||||
|
.B wmname LG3D
|
||||||
|
(to pretend that a non-reparenting window manager is running that the
|
||||||
|
XToolkit/XAWT backend can recognize) or when using OpenJDK setting the environment variable
|
||||||
|
.BR _JAVA_AWT_WM_NONREPARENTING=1 .
|
||||||
|
.P
|
||||||
|
GTK 2.10.9+ versions contain a broken
|
||||||
|
.BR Save\-As
|
||||||
|
file dialog implementation,
|
||||||
|
which requests to reconfigure its window size in an endless loop. However, its
|
||||||
|
window is still respondable during this state, so you can simply ignore the flicker
|
||||||
|
until a new GTK version appears, which will fix this bug, approximately
|
||||||
|
GTK 2.10.12+ versions.
|
BIN
dwm/dwm.png
Normal file
BIN
dwm/dwm.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 373 B |
85
dwm/patches/dwm-5.8.2-fibonacci.diff
Normal file
85
dwm/patches/dwm-5.8.2-fibonacci.diff
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
diff --git a/config.def.h b/config.def.h
|
||||||
|
index cca37df..91b91aa 100644
|
||||||
|
--- a/config.def.h
|
||||||
|
+++ b/config.def.h
|
||||||
|
@@ -29,1 +29,2 @@
|
||||||
|
+#include "fibonacci.c"
|
||||||
|
static const Layout layouts[] = {
|
||||||
|
@@ -34,3 +35,5 @@
|
||||||
|
+ { "[@]", spiral },
|
||||||
|
+ { "[\\]", dwindle },
|
||||||
|
};
|
||||||
|
|
||||||
|
/* key definitions */
|
||||||
|
diff --git a/fibonacci.c b/fibonacci.c
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..fce0a57
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/fibonacci.c
|
||||||
|
@@ -0,0 +1,66 @@
|
||||||
|
+void
|
||||||
|
+fibonacci(Monitor *mon, int s) {
|
||||||
|
+ unsigned int i, n, nx, ny, nw, nh;
|
||||||
|
+ Client *c;
|
||||||
|
+
|
||||||
|
+ for(n = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next), n++);
|
||||||
|
+ if(n == 0)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ nx = mon->wx;
|
||||||
|
+ ny = 0;
|
||||||
|
+ nw = mon->ww;
|
||||||
|
+ nh = mon->wh;
|
||||||
|
+
|
||||||
|
+ for(i = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next)) {
|
||||||
|
+ if((i % 2 && nh / 2 > 2 * c->bw)
|
||||||
|
+ || (!(i % 2) && nw / 2 > 2 * c->bw)) {
|
||||||
|
+ if(i < n - 1) {
|
||||||
|
+ if(i % 2)
|
||||||
|
+ nh /= 2;
|
||||||
|
+ else
|
||||||
|
+ nw /= 2;
|
||||||
|
+ if((i % 4) == 2 && !s)
|
||||||
|
+ nx += nw;
|
||||||
|
+ else if((i % 4) == 3 && !s)
|
||||||
|
+ ny += nh;
|
||||||
|
+ }
|
||||||
|
+ if((i % 4) == 0) {
|
||||||
|
+ if(s)
|
||||||
|
+ ny += nh;
|
||||||
|
+ else
|
||||||
|
+ ny -= nh;
|
||||||
|
+ }
|
||||||
|
+ else if((i % 4) == 1)
|
||||||
|
+ nx += nw;
|
||||||
|
+ else if((i % 4) == 2)
|
||||||
|
+ ny += nh;
|
||||||
|
+ else if((i % 4) == 3) {
|
||||||
|
+ if(s)
|
||||||
|
+ nx += nw;
|
||||||
|
+ else
|
||||||
|
+ nx -= nw;
|
||||||
|
+ }
|
||||||
|
+ if(i == 0)
|
||||||
|
+ {
|
||||||
|
+ if(n != 1)
|
||||||
|
+ nw = mon->ww * mon->mfact;
|
||||||
|
+ ny = mon->wy;
|
||||||
|
+ }
|
||||||
|
+ else if(i == 1)
|
||||||
|
+ nw = mon->ww - nw;
|
||||||
|
+ i++;
|
||||||
|
+ }
|
||||||
|
+ resize(c, nx, ny, nw - 2 * c->bw, nh - 2 * c->bw, False);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+dwindle(Monitor *mon) {
|
||||||
|
+ fibonacci(mon, 1);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+spiral(Monitor *mon) {
|
||||||
|
+ fibonacci(mon, 0);
|
||||||
|
+}
|
9
dwm/patches/fibo
Normal file
9
dwm/patches/fibo
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
#include "fibonacci.c"
|
||||||
|
static Layout layout[] = { \
|
||||||
|
/* symbol function */ \
|
||||||
|
{ "[]=", tile }, /* first entry is default */ \
|
||||||
|
{ "><>", floating }, \
|
||||||
|
{ "(@)", spiral }, \
|
||||||
|
{ "[\\]", dwindle }, \
|
||||||
|
|
||||||
|
};
|
42
dwm/transient.c
Normal file
42
dwm/transient.c
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/* cc transient.c -o transient -lX11 */
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/Xutil.h>
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
Display *d;
|
||||||
|
Window r, f, t = None;
|
||||||
|
XSizeHints h;
|
||||||
|
XEvent e;
|
||||||
|
|
||||||
|
d = XOpenDisplay(NULL);
|
||||||
|
if (!d)
|
||||||
|
exit(1);
|
||||||
|
r = DefaultRootWindow(d);
|
||||||
|
|
||||||
|
f = XCreateSimpleWindow(d, r, 100, 100, 400, 400, 0, 0, 0);
|
||||||
|
h.min_width = h.max_width = h.min_height = h.max_height = 400;
|
||||||
|
h.flags = PMinSize | PMaxSize;
|
||||||
|
XSetWMNormalHints(d, f, &h);
|
||||||
|
XStoreName(d, f, "floating");
|
||||||
|
XMapWindow(d, f);
|
||||||
|
|
||||||
|
XSelectInput(d, f, ExposureMask);
|
||||||
|
while (1) {
|
||||||
|
XNextEvent(d, &e);
|
||||||
|
|
||||||
|
if (t == None) {
|
||||||
|
sleep(5);
|
||||||
|
t = XCreateSimpleWindow(d, r, 50, 50, 100, 100, 0, 0, 0);
|
||||||
|
XSetTransientForHint(d, t, f);
|
||||||
|
XStoreName(d, t, "transient");
|
||||||
|
XMapWindow(d, t);
|
||||||
|
XSelectInput(d, t, ExposureMask);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
XCloseDisplay(d);
|
||||||
|
exit(0);
|
||||||
|
}
|
17
dwm/util.c
Normal file
17
dwm/util.c
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
/* See LICENSE file for copyright and license details. */
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
void
|
||||||
|
die(const char *errstr, ...) {
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start(ap, errstr);
|
||||||
|
vfprintf(stderr, errstr, ap);
|
||||||
|
va_end(ap);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
6
dwm/util.h
Normal file
6
dwm/util.h
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
/* See LICENSE file for copyright and license details. */
|
||||||
|
|
||||||
|
#define MAX(A, B) ((A) > (B) ? (A) : (B))
|
||||||
|
#define MIN(A, B) ((A) < (B) ? (A) : (B))
|
||||||
|
|
||||||
|
void die(const char *errstr, ...);
|
Loading…
Reference in a new issue