From d95218cf97d0ce64912c84ae443ed0442ee2ff89 Mon Sep 17 00:00:00 2001 From: fuzzysh Date: Thu, 28 Oct 2021 01:23:34 -0500 Subject: [PATCH] fixing stuff --- Xresources/.Xresources | 17 + Xresources/.xinitrc | 40 + dcal/.local/share/dcal/.travis.yml | 2 + dcal/.local/share/dcal/LICENSE | 32 + dcal/.local/share/dcal/Makefile | 55 + dcal/.local/share/dcal/PKGBUILD | 23 + dcal/.local/share/dcal/README.md | 29 + dcal/.local/share/dcal/config.mk | 25 + dcal/.local/share/dcal/dcal | Bin 0 -> 23144 bytes dcal/.local/share/dcal/dcal.1 | 117 + dcal/.local/share/dcal/dcal.c | 408 +++ dcal/.local/share/dcal/dcal.o | Bin 0 -> 16088 bytes dcal/.local/share/dcal/draw.c | 177 ++ dcal/.local/share/dcal/draw.h | 35 + dcal/.local/share/dcal/draw.o | Bin 0 -> 7688 bytes dcal/.local/share/dcal/screenshot.png | Bin 0 -> 955 bytes dmenu/.local/share/dmenu/LICENSE | 30 + dmenu/.local/share/dmenu/Makefile | 64 + dmenu/.local/share/dmenu/README | 24 + dmenu/.local/share/dmenu/arg.h | 49 + dmenu/.local/share/dmenu/config.def.h | 28 + dmenu/.local/share/dmenu/config.def.h.orig | 25 + dmenu/.local/share/dmenu/config.h | 28 + dmenu/.local/share/dmenu/config.mk | 31 + dmenu/.local/share/dmenu/dmenu | Bin 0 -> 48408 bytes dmenu/.local/share/dmenu/dmenu.1 | 197 ++ dmenu/.local/share/dmenu/dmenu.c | 846 ++++++ dmenu/.local/share/dmenu/dmenu.c.orig | 808 ++++++ dmenu/.local/share/dmenu/dmenu.c.rej | 11 + dmenu/.local/share/dmenu/dmenu.o | Bin 0 -> 35784 bytes dmenu/.local/share/dmenu/dmenu_path | 13 + dmenu/.local/share/dmenu/dmenu_run | 2 + dmenu/.local/share/dmenu/drw.c | 436 +++ dmenu/.local/share/dmenu/drw.h | 57 + dmenu/.local/share/dmenu/drw.o | Bin 0 -> 10632 bytes ...menu-caseinsensitive-20200523-db6093f.diff | 42 + .../dmenu-center-20200111-8cd37e1.diff | 120 + .../dmenu-highlight-20201211-fcdc159.diff | 97 + dmenu/.local/share/dmenu/stest | Bin 0 -> 22104 bytes dmenu/.local/share/dmenu/stest.1 | 90 + dmenu/.local/share/dmenu/stest.c | 109 + dmenu/.local/share/dmenu/stest.o | Bin 0 -> 5296 bytes dmenu/.local/share/dmenu/util.c | 35 + dmenu/.local/share/dmenu/util.h | 8 + dmenu/.local/share/dmenu/util.o | Bin 0 -> 2272 bytes dwm/.local/share/dwm/LICENSE | 37 + dwm/.local/share/dwm/Makefile | 51 + dwm/.local/share/dwm/README | 48 + dwm/.local/share/dwm/config.def.h.orig | 156 ++ dwm/.local/share/dwm/config.h | 170 ++ dwm/.local/share/dwm/config.mk | 38 + dwm/.local/share/dwm/drw.c | 436 +++ dwm/.local/share/dwm/drw.h | 57 + dwm/.local/share/dwm/drw.o | Bin 0 -> 10632 bytes dwm/.local/share/dwm/dwm | Bin 0 -> 83512 bytes ...bar-polybar-tray-fix-20200810-bb2e722.diff | 445 ++++ .../share/dwm/dwm-cool-autostart-6.2.diff | 116 + dwm/.local/share/dwm/dwm-vanitygaps-6.2.diff | 971 +++++++ dwm/.local/share/dwm/dwm.1 | 176 ++ dwm/.local/share/dwm/dwm.c | 2349 +++++++++++++++++ dwm/.local/share/dwm/dwm.c.orig | 2187 +++++++++++++++ dwm/.local/share/dwm/dwm.c.rej | 392 +++ dwm/.local/share/dwm/dwm.o | Bin 0 -> 67512 bytes dwm/.local/share/dwm/dwm.png | Bin 0 -> 373 bytes dwm/.local/share/dwm/transient.c | 42 + dwm/.local/share/dwm/util.c | 35 + dwm/.local/share/dwm/util.h | 8 + dwm/.local/share/dwm/util.o | Bin 0 -> 2272 bytes dwm/.local/share/dwm/vanitygaps.c | 809 ++++++ fish/.config/fish/config.fish | 16 + fish/.config/fish/fish_variables | 47 + .../.config/fish/functions/fish_greeting.fish | 3 + fish/.config/fish/functions/fish_prompt.fish | 84 + flexget/.flexget/config.yml | 85 + himalaya/.config/himalaya/config.toml | 26 + mpv/.config/mpv/mpv.conf | 9 + neomutt/.config/neomutt/neomuttrc | 8 + nvim/.config/nvim/init.vim | 228 ++ picom/.config/picom.conf | 29 + polybar/.config/polybar/fuzzy.conf | 163 ++ polybar/.config/polybar/launch.sh | 12 + redshift/.config/redshift/redshift.conf | 70 + st/.local/share/st | 1 + startpage/Documents/startpage/index.html | 32 + startpage/Documents/startpage/koguma.png | Bin 0 -> 863787 bytes startpage/Documents/startpage/style.css | 155 ++ xmenu/.local/share/xmenu/CHANGELOG | 167 ++ xmenu/.local/share/xmenu/LICENSE | 37 + xmenu/.local/share/xmenu/Makefile | 32 + xmenu/.local/share/xmenu/README.md | 88 + xmenu/.local/share/xmenu/config.h | 62 + xmenu/.local/share/xmenu/config.mk | 31 + xmenu/.local/share/xmenu/icons/gimp.png | Bin 0 -> 2976 bytes xmenu/.local/share/xmenu/icons/web.png | Bin 0 -> 4870 bytes xmenu/.local/share/xmenu/xmenu | Bin 0 -> 57120 bytes xmenu/.local/share/xmenu/xmenu.1 | 221 ++ xmenu/.local/share/xmenu/xmenu.c | 1578 +++++++++++ xmenu/.local/share/xmenu/xmenu.h | 110 + xmenu/.local/share/xmenu/xmenu.o | Bin 0 -> 49184 bytes xmenu/.local/share/xmenu/xmenu.sh | 13 + xnotify/.local/share/xnotify/LICENSE | 21 + xnotify/.local/share/xnotify/Makefile | 29 + xnotify/.local/share/xnotify/README.md | 114 + xnotify/.local/share/xnotify/config.h | 38 + xnotify/.local/share/xnotify/config.mk | 27 + xnotify/.local/share/xnotify/xnotify | Bin 0 -> 52528 bytes xnotify/.local/share/xnotify/xnotify.1 | 333 +++ xnotify/.local/share/xnotify/xnotify.c | 1326 ++++++++++ xnotify/.local/share/xnotify/xnotify.h | 130 + xnotify/.local/share/xnotify/xnotify.o | Bin 0 -> 45976 bytes 110 files changed, 17958 insertions(+) create mode 100644 Xresources/.Xresources create mode 100644 Xresources/.xinitrc create mode 100644 dcal/.local/share/dcal/.travis.yml create mode 100644 dcal/.local/share/dcal/LICENSE create mode 100644 dcal/.local/share/dcal/Makefile create mode 100644 dcal/.local/share/dcal/PKGBUILD create mode 100644 dcal/.local/share/dcal/README.md create mode 100644 dcal/.local/share/dcal/config.mk create mode 100755 dcal/.local/share/dcal/dcal create mode 100644 dcal/.local/share/dcal/dcal.1 create mode 100644 dcal/.local/share/dcal/dcal.c create mode 100644 dcal/.local/share/dcal/dcal.o create mode 100644 dcal/.local/share/dcal/draw.c create mode 100644 dcal/.local/share/dcal/draw.h create mode 100644 dcal/.local/share/dcal/draw.o create mode 100644 dcal/.local/share/dcal/screenshot.png create mode 100644 dmenu/.local/share/dmenu/LICENSE create mode 100644 dmenu/.local/share/dmenu/Makefile create mode 100644 dmenu/.local/share/dmenu/README create mode 100644 dmenu/.local/share/dmenu/arg.h create mode 100644 dmenu/.local/share/dmenu/config.def.h create mode 100644 dmenu/.local/share/dmenu/config.def.h.orig create mode 100644 dmenu/.local/share/dmenu/config.h create mode 100644 dmenu/.local/share/dmenu/config.mk create mode 100755 dmenu/.local/share/dmenu/dmenu create mode 100644 dmenu/.local/share/dmenu/dmenu.1 create mode 100644 dmenu/.local/share/dmenu/dmenu.c create mode 100644 dmenu/.local/share/dmenu/dmenu.c.orig create mode 100644 dmenu/.local/share/dmenu/dmenu.c.rej create mode 100644 dmenu/.local/share/dmenu/dmenu.o create mode 100755 dmenu/.local/share/dmenu/dmenu_path create mode 100755 dmenu/.local/share/dmenu/dmenu_run create mode 100644 dmenu/.local/share/dmenu/drw.c create mode 100644 dmenu/.local/share/dmenu/drw.h create mode 100644 dmenu/.local/share/dmenu/drw.o create mode 100644 dmenu/.local/share/dmenu/patches/dmenu-caseinsensitive-20200523-db6093f.diff create mode 100644 dmenu/.local/share/dmenu/patches/dmenu-center-20200111-8cd37e1.diff create mode 100644 dmenu/.local/share/dmenu/patches/dmenu-highlight-20201211-fcdc159.diff create mode 100755 dmenu/.local/share/dmenu/stest create mode 100644 dmenu/.local/share/dmenu/stest.1 create mode 100644 dmenu/.local/share/dmenu/stest.c create mode 100644 dmenu/.local/share/dmenu/stest.o create mode 100644 dmenu/.local/share/dmenu/util.c create mode 100644 dmenu/.local/share/dmenu/util.h create mode 100644 dmenu/.local/share/dmenu/util.o create mode 100644 dwm/.local/share/dwm/LICENSE create mode 100644 dwm/.local/share/dwm/Makefile create mode 100644 dwm/.local/share/dwm/README create mode 100644 dwm/.local/share/dwm/config.def.h.orig create mode 100644 dwm/.local/share/dwm/config.h create mode 100644 dwm/.local/share/dwm/config.mk create mode 100644 dwm/.local/share/dwm/drw.c create mode 100644 dwm/.local/share/dwm/drw.h create mode 100644 dwm/.local/share/dwm/drw.o create mode 100755 dwm/.local/share/dwm/dwm create mode 100644 dwm/.local/share/dwm/dwm-anybar-polybar-tray-fix-20200810-bb2e722.diff create mode 100644 dwm/.local/share/dwm/dwm-cool-autostart-6.2.diff create mode 100644 dwm/.local/share/dwm/dwm-vanitygaps-6.2.diff create mode 100644 dwm/.local/share/dwm/dwm.1 create mode 100644 dwm/.local/share/dwm/dwm.c create mode 100644 dwm/.local/share/dwm/dwm.c.orig create mode 100644 dwm/.local/share/dwm/dwm.c.rej create mode 100644 dwm/.local/share/dwm/dwm.o create mode 100644 dwm/.local/share/dwm/dwm.png create mode 100644 dwm/.local/share/dwm/transient.c create mode 100644 dwm/.local/share/dwm/util.c create mode 100644 dwm/.local/share/dwm/util.h create mode 100644 dwm/.local/share/dwm/util.o create mode 100644 dwm/.local/share/dwm/vanitygaps.c create mode 100755 fish/.config/fish/config.fish create mode 100644 fish/.config/fish/fish_variables create mode 100644 fish/.config/fish/functions/fish_greeting.fish create mode 100644 fish/.config/fish/functions/fish_prompt.fish create mode 100755 flexget/.flexget/config.yml create mode 100644 himalaya/.config/himalaya/config.toml create mode 100644 mpv/.config/mpv/mpv.conf create mode 100644 neomutt/.config/neomutt/neomuttrc create mode 100644 nvim/.config/nvim/init.vim create mode 100644 picom/.config/picom.conf create mode 100644 polybar/.config/polybar/fuzzy.conf create mode 100755 polybar/.config/polybar/launch.sh create mode 100644 redshift/.config/redshift/redshift.conf create mode 160000 st/.local/share/st create mode 100644 startpage/Documents/startpage/index.html create mode 100644 startpage/Documents/startpage/koguma.png create mode 100644 startpage/Documents/startpage/style.css create mode 100644 xmenu/.local/share/xmenu/CHANGELOG create mode 100644 xmenu/.local/share/xmenu/LICENSE create mode 100644 xmenu/.local/share/xmenu/Makefile create mode 100644 xmenu/.local/share/xmenu/README.md create mode 100644 xmenu/.local/share/xmenu/config.h create mode 100644 xmenu/.local/share/xmenu/config.mk create mode 100644 xmenu/.local/share/xmenu/icons/gimp.png create mode 100644 xmenu/.local/share/xmenu/icons/web.png create mode 100755 xmenu/.local/share/xmenu/xmenu create mode 100644 xmenu/.local/share/xmenu/xmenu.1 create mode 100644 xmenu/.local/share/xmenu/xmenu.c create mode 100644 xmenu/.local/share/xmenu/xmenu.h create mode 100644 xmenu/.local/share/xmenu/xmenu.o create mode 100755 xmenu/.local/share/xmenu/xmenu.sh create mode 100644 xnotify/.local/share/xnotify/LICENSE create mode 100644 xnotify/.local/share/xnotify/Makefile create mode 100644 xnotify/.local/share/xnotify/README.md create mode 100644 xnotify/.local/share/xnotify/config.h create mode 100644 xnotify/.local/share/xnotify/config.mk create mode 100755 xnotify/.local/share/xnotify/xnotify create mode 100644 xnotify/.local/share/xnotify/xnotify.1 create mode 100644 xnotify/.local/share/xnotify/xnotify.c create mode 100644 xnotify/.local/share/xnotify/xnotify.h create mode 100644 xnotify/.local/share/xnotify/xnotify.o diff --git a/Xresources/.Xresources b/Xresources/.Xresources new file mode 100644 index 0000000..201170d --- /dev/null +++ b/Xresources/.Xresources @@ -0,0 +1,17 @@ +/**Xft**/ +Xft.dpi: 96 +Xft.antialias: 1 +Xft.hinting: 1 +Xft.autohint: 0 +Xft.hintstyle: hintslight +Xft.rgba: rgb +Xft.lcdfilter: lcddefault + +/**Xcursor**/ +Xcursor.size: 24 +/**xmenu**/ + +/**sxiv**/ +Sxiv.background: #181819 +Sxiv.foreground: #e2e2e3 +Sxiv.font: xft:SF Pro:pixelsize:30 diff --git a/Xresources/.xinitrc b/Xresources/.xinitrc new file mode 100644 index 0000000..26cb9bf --- /dev/null +++ b/Xresources/.xinitrc @@ -0,0 +1,40 @@ +#!/bin/sh + +userresources=$HOME/.Xresources +usermodmap=$HOME/.Xmodmap +sysresources=/etc/X11/xinit/.Xresources +sysmodmap=/etc/X11/xinit/.Xmodmap + +# merge in defaults and keymaps + +if [ -f $sysresources ]; then + + xrdb -merge $sysresources + +fi + +if [ -f $sysmodmap ]; then + xmodmap $sysmodmap +fi + +if [ -f "$userresources" ]; then + + xrdb -merge "$userresources" + +fi + +if [ -f "$usermodmap" ]; then + xmodmap "$usermodmap" +fi + +# start some nice programs + +if [ -d /etc/X11/xinit/xinitrc.d ] ; then + for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do + [ -x "$f" ] && . "$f" + done + unset f +fi + +dwm + diff --git a/dcal/.local/share/dcal/.travis.yml b/dcal/.local/share/dcal/.travis.yml new file mode 100644 index 0000000..ffec9e6 --- /dev/null +++ b/dcal/.local/share/dcal/.travis.yml @@ -0,0 +1,2 @@ +language: c +script: make diff --git a/dcal/.local/share/dcal/LICENSE b/dcal/.local/share/dcal/LICENSE new file mode 100644 index 0000000..4cd5796 --- /dev/null +++ b/dcal/.local/share/dcal/LICENSE @@ -0,0 +1,32 @@ +MIT/X Consortium License + +© 2016 Google Inc. +© 2013 Alan Berndt + +Based on code from dmenu + +© 2010-2011 Connor Lane Smith +© 2006-2011 Anselm R Garbe +© 2009 Gottox +© 2009 Markus Schnalke +© 2009 Evan Gates +© 2006-2008 Sander van Dijk +© 2006-2007 Michał Janeczek + +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. diff --git a/dcal/.local/share/dcal/Makefile b/dcal/.local/share/dcal/Makefile new file mode 100644 index 0000000..aaf2232 --- /dev/null +++ b/dcal/.local/share/dcal/Makefile @@ -0,0 +1,55 @@ +# dcal - dynamic menu +# See LICENSE file for copyright and license details. + +include config.mk + +SRC = dcal.c draw.c +OBJ = ${SRC:.c=.o} + +all: options dcal + +options: + @echo dcal build options: + @echo "CFLAGS = ${CFLAGS}" + @echo "LDFLAGS = ${LDFLAGS}" + @echo "CC = ${CC}" + +.c.o: + @echo CC -c $< + @${CC} -c $< ${CFLAGS} + +${OBJ}: config.mk draw.h + +dcal: dcal.o draw.o + @echo CC -o $@ + @${CC} -o $@ dcal.o draw.o ${LDFLAGS} + +clean: + @echo cleaning + @rm -f dcal ${OBJ} dcal-${VERSION}.tar.gz + +dist: clean + @echo creating dist tarball + @mkdir -p dcal-${VERSION} + @cp LICENSE Makefile README.md config.mk dcal.1 draw.h ${SRC} dcal-${VERSION} + @tar -cf dcal-${VERSION}.tar dcal-${VERSION} + @gzip dcal-${VERSION}.tar + @rm -rf dcal-${VERSION} + +install: all + @echo installing executables to ${DESTDIR}${PREFIX}/bin + @mkdir -p ${DESTDIR}${PREFIX}/bin + @cp -f dcal ${DESTDIR}${PREFIX}/bin + @chmod 755 ${DESTDIR}${PREFIX}/bin/dcal + @echo installing manual pages to ${DESTDIR}${MANPREFIX}/man1 + @mkdir -p ${DESTDIR}${MANPREFIX}/man1 + @sed "s/VERSION/${VERSION}/g" < dcal.1 > ${DESTDIR}${MANPREFIX}/man1/dcal.1 + @chmod 644 ${DESTDIR}${MANPREFIX}/man1/dcal.1 + +uninstall: + @echo removing executables from ${DESTDIR}${PREFIX}/bin + @rm -f ${DESTDIR}${PREFIX}/bin/dcal + @echo removing manual page from ${DESTDIR}${MANPREFIX}/man1 + @rm -f ${DESTDIR}${MANPREFIX}/man1/dcal.1 + +.PHONY: all options clean dist install uninstall diff --git a/dcal/.local/share/dcal/PKGBUILD b/dcal/.local/share/dcal/PKGBUILD new file mode 100644 index 0000000..74084e2 --- /dev/null +++ b/dcal/.local/share/dcal/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Alan Berndt +pkgname=dcal +pkgver=1.1 +pkgrel=1 +pkgdesc="A generic calendar for X" +url="http://dcal.eatabrick.org" +license='MIT' +arch=('i686' 'x86_64') +depends=('libx11') +provides=('dcal') +source=('https://github.com/bentglasstube/dcal/archive/v1.1.tar.gz') +sha1sums=('2278bad1b01c9735c3bbfa5f2870ace6f0e9b447') + +build() { + cd "$srcdir/$pkgname-$pkgver" + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir/" install + install -D -m644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" +} diff --git a/dcal/.local/share/dcal/README.md b/dcal/.local/share/dcal/README.md new file mode 100644 index 0000000..bdad6e5 --- /dev/null +++ b/dcal/.local/share/dcal/README.md @@ -0,0 +1,29 @@ +dcal - dynamic calendar +==================== +dcal is a minimalistic calendar for X. + +Requirements +------------ +In order to build dcal you need the Xlib header files. + + +Installation +------------ +Edit config.mk to match your local setup (dcal is installed into +the /usr namespace by default). + +Afterwards enter the following command to build and install dcal +(if necessary as root): + + make clean install + +Running dcal +------------ +See the man page for details. + +Screenshot +---------- + +![screenshot](https://raw.github.com/bentglasstube/dcal/master/screenshot.png) + +This is what mine looks like, but it's quite configurable diff --git a/dcal/.local/share/dcal/config.mk b/dcal/.local/share/dcal/config.mk new file mode 100644 index 0000000..fed7150 --- /dev/null +++ b/dcal/.local/share/dcal/config.mk @@ -0,0 +1,25 @@ +# dcal version +VERSION = 1.1 + +# paths +PREFIX = /usr +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 -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS} +CFLAGS = -ansi -pedantic -Wall -Os ${INCS} ${CPPFLAGS} +LDFLAGS = -s ${LIBS} + +# compiler and linker +CC = cc diff --git a/dcal/.local/share/dcal/dcal b/dcal/.local/share/dcal/dcal new file mode 100755 index 0000000000000000000000000000000000000000..60c238ea2cdbe44e93a31a5829d2df23d2b842ee GIT binary patch literal 23144 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef XINERAMA +#include +#endif +#include "draw.h" + +#define HILIGHT_MAX 32 + +#define INTERSECT(x,y,w,h,r) (MAX(0, MIN((x)+(w),(r).x_org+(r).width) - MAX((x),(r).x_org)) \ + * MAX(0, MIN((y)+(h),(r).y_org+(r).height) - MAX((y),(r).y_org))) +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#define MAX(a,b) ((a) > (b) ? (a) : (b)) + +static void adddays(time_t *d, int count); +static void addmonths(time_t *d, int count); +static void drawcal(void); +static void grabkeyboard(void); +static void keypress(XKeyEvent *ev); +static void run(void); +static void setup(void); +static void usage(void); +static unsigned long* pickcolor(const char *date, const char *current); + +static int ch, cw; /* Calendar height and width */ +static time_t current; /* Currently displayed time */ +static const char *font = NULL; /* font */ +static const char *bgcolor = "#cccccc"; /* colors */ +static const char *bdcolor = "#000000"; +static const char *curfgcolor = "#000000"; +static const char *othfgcolor = "#ffffff"; +static const char *todfgcolor = "#ff0000"; +static const char *hltfgcolor = "#0000ff"; +static unsigned long curcol[ColLast]; +static unsigned long othcol[ColLast]; +static unsigned long todcol[ColLast]; +static unsigned long hltcol[ColLast]; +static unsigned long invcol[ColLast]; +static Atom utf8; +static Bool topbar = True; /* Draw on top */ +static Bool leftbar = False; /* Draw on left */ +static Bool keyboard = True; /* Use keyboard controls */ +static int offset_x = 0; /* x offset */ +static int offset_y = 0; /* y offset */ +static DC *dc; /* Drawing context */ +static Window win; /* Window */ +static XIC xic; +static char today[9]; /* Current date when run */ +static char hilight[HILIGHT_MAX][9]; /* Date for hilighting */ +static int hilight_count = 0; /* Number of dates to hilight */ + +int main(int argc, char *argv[]) { + int i; + + for(i = 1; i < argc; i++) { + /* these options take no arguments */ + if(!strcmp(argv[i], "-v")) { /* prints version information */ + puts("dcal-"VERSION", © 2012 Alan Berndt, see LICENSE for details"); + exit(EXIT_SUCCESS); + } + else if(!strcmp(argv[i], "-h")) { /* prints usage information */ + usage(); + exit(EXIT_SUCCESS); + } + else if(!strcmp(argv[i], "-b")) /* appears at the bottom of the screen */ + topbar = False; + else if(!strcmp(argv[i], "-l")) /* appears at the left of the screen */ + leftbar = True; + else if(!strcmp(argv[i], "-k")) /* suppress keyboard controls */ + keyboard = False; + /* these options take one argument */ + else if(!strcmp(argv[i], "-fn")) /* font or font set */ + font = argv[++i]; + else if(!strcmp(argv[i], "-bg")) /* background color */ + bgcolor = argv[++i]; + else if(!strcmp(argv[i], "-bd")) /* border color */ + bdcolor = argv[++i]; + else if(!strcmp(argv[i], "-cf")) /* current month foreground color */ + curfgcolor = argv[++i]; + else if(!strcmp(argv[i], "-of")) /* other month foreground color */ + othfgcolor = argv[++i]; + else if(!strcmp(argv[i], "-tf")) /* today foreground color */ + todfgcolor = argv[++i]; + else if(!strcmp(argv[i], "-hf")) /* hilight foreground color */ + hltfgcolor = argv[++i]; + else if(!strcmp(argv[i], "-x")) /* x offset */ + offset_x = atoi(argv[++i]); + else if(!strcmp(argv[i], "-y")) /* y offset */ + offset_y = atoi(argv[++i]); + /* the rest are dates to hilight */ + else if(hilight_count < HILIGHT_MAX) + strncpy(hilight[hilight_count++], argv[i], 9); + } + + dc = initdc(); + initfont(dc, font); + + if (keyboard) grabkeyboard(); + setup(); + run(); + + return EXIT_FAILURE; /* unreachable */ +} + +void adddays(time_t *d, int count) { + struct tm *t; + + t = localtime(d); + t->tm_mday += count; + *d = mktime(t); +} + +void addmonths(time_t *d, int count) { + struct tm *t; + + t = localtime(d); + t->tm_mon += count; + *d = mktime(t); +} + +void drawcal(void) { + time_t day, end; + struct tm *ti; + unsigned long *color; + char text[20]; + char curdate[10]; + + /* set up drawing context */ + dc->x = 0; + dc->y = 0; + dc->h = ch; + dc->w = cw; + + /* clear background and draw border */ + drawrect(dc, 0, 0, cw, ch, True, BG(dc, curcol)); + + /* draw header */ + ti = localtime(¤t); + strftime(text, 20, "%B %Y", ti); + dc->x = cw / 2 - textw(dc, text) / 2; + dc->y = 1; + drawtext(dc, text, curcol); + + /* save selected date */ + strftime(curdate, 10, "%Y%m%d", ti); + + /* find first of month */ + ti->tm_mday = 1; + mktime(ti); + + /* find first day of first week */ + ti->tm_mday -= ti->tm_wday; + + day = mktime(ti); + fprintf(stderr, "Drawing from %s", asctime(ti)); + + ti->tm_mday += 42; + end = mktime(ti); + fprintf(stderr, "Drawing thru %s", asctime(ti)); + + /* draw the calendar */ + dc->y = 9; + while (day < end) { + ti = localtime(&day); + + /* new line on sunday */ + if (ti->tm_wday == 0) { + dc->x = 1; + dc->y += dc->font.height + 2; + } + + /* pick color */ + strftime(text, 20, "%Y%m%d", ti); + color = pickcolor(text, curdate); + + /* write the date */ + strftime(text, 20, "%d", ti); + drawtext(dc, text, color); + + /* increment */ + dc->x += 3 * (dc->font.width + 2); + adddays(&day, 1); + } + + /* draw border */ + dc->x = 0; + dc->y = 0; + drawrect(dc, 0, 0, cw, ch, False, getcolor(dc, bdcolor)); + + mapdc(dc, win, cw, ch); +} + +void grabkeyboard(void) { + int i; + + /* try to grab keyboard, we may have to wait for another process to ungrab */ + for(i = 0; i < 1000; i++) { + if(XGrabKeyboard(dc->dpy, DefaultRootWindow(dc->dpy), True, + GrabModeAsync, GrabModeAsync, CurrentTime) == GrabSuccess) + return; + usleep(1000); + } + eprintf("cannot grab keyboard\n"); +} + +void keypress(XKeyEvent *ev) { + char buf[32]; + KeySym ksym = NoSymbol; + Status status; + + XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status); + if(status == XBufferOverflow) + return; + + switch(ksym) { + case XK_Return: + case XK_KP_Enter: + case XK_Escape: + case XK_Q: + case XK_q: + exit(EXIT_SUCCESS); + case XK_space: /* jump to today */ + time(¤t); + break; + case XK_Left: /* back one day */ + case XK_h: + adddays(¤t, -1); + break; + case XK_Right: /* forward one day */ + case XK_l: + adddays(¤t, 1); + break; + case XK_Up: /* back one week */ + case XK_k: + adddays(¤t, -7); + break; + case XK_Down: /* forward one week */ + case XK_j: + adddays(¤t, 7); + break; + case XK_K: /* back one month */ + addmonths(¤t, -1); + break; + case XK_J: /* forward one month */ + addmonths(¤t, 1); + break; + } + drawcal(); +} + +void buttonpress(XButtonEvent *ev) { + switch (ev->button) { + case Button1: + exit(EXIT_SUCCESS); + case Button4: + addmonths(¤t, -1); + break; + case Button5: + addmonths(¤t, 1); + break; + } + drawcal(); +} + +void run(void) { + XEvent ev; + + while(!XNextEvent(dc->dpy, &ev)) { + if(XFilterEvent(&ev, win)) + continue; + switch(ev.type) { + case Expose: + if(ev.xexpose.count == 0) + mapdc(dc, win, cw, ch); + break; + case KeyPress: + keypress(&ev.xkey); + break; + case ButtonPress: + buttonpress(&ev.xbutton); + break; + case VisibilityNotify: + if(ev.xvisibility.state != VisibilityUnobscured) + XRaiseWindow(dc->dpy, win); + break; + } + } +} + +void setup(void) { + int x, y, screen = DefaultScreen(dc->dpy); + struct tm* ti; + Window root = RootWindow(dc->dpy, screen); + XSetWindowAttributes swa; + XIM xim; +#ifdef XINERAMA + int n; + XineramaScreenInfo *info; +#endif + + curcol[ColBG] = getcolor(dc, bgcolor); + curcol[ColFG] = getcolor(dc, curfgcolor); + othcol[ColBG] = getcolor(dc, bgcolor); + othcol[ColFG] = getcolor(dc, othfgcolor); + todcol[ColFG] = getcolor(dc, todfgcolor); + todcol[ColBG] = getcolor(dc, bgcolor); + hltcol[ColFG] = getcolor(dc, hltfgcolor); + hltcol[ColBG] = getcolor(dc, bgcolor); + invcol[ColBG] = getcolor(dc, curfgcolor); + invcol[ColFG] = getcolor(dc, bgcolor); + + utf8 = XInternAtom(dc->dpy, "UTF8_STRING", False); + + /* default to and save current time */ + time(¤t); + ti = localtime(¤t); + strftime(today, 9, "%Y%m%d", ti); + + /* calculate calendar geometry */ + ch = 7 * (dc->font.height + 2) + 10; + cw = 21 * (dc->font.width + 2) + 2; + +#ifdef XINERAMA + if((info = XineramaQueryScreens(dc->dpy, &n))) { + int a, j, di, i = 0, area = 0; + unsigned int du; + Window w, pw, dw, *dws; + XWindowAttributes wa; + + XGetInputFocus(dc->dpy, &w, &di); + if(w != root && w != PointerRoot && w != None) { + /* find top-level window containing current input focus */ + do { + if(XQueryTree(dc->dpy, (pw = w), &dw, &w, &dws, &du) && dws) + XFree(dws); + } while(w != root && w != pw); + /* find xinerama screen with which the window intersects most */ + if(XGetWindowAttributes(dc->dpy, pw, &wa)) + for(j = 0; j < n; j++) + if((a = INTERSECT(wa.x, wa.y, wa.width, wa.height, info[j])) > area) { + area = a; + i = j; + } + } + /* no focused window is on screen, so use pointer location instead */ + if(!area && XQueryPointer(dc->dpy, root, &dw, &dw, &x, &y, &di, &di, &du)) + for(i = 0; i < n; i++) + if(INTERSECT(x, y, 1, 1, info[i])) + break; + + x = info[i].x_org + (leftbar ? 0 : info[i].width - cw); + y = info[i].y_org + (topbar ? 0 : info[i].height - ch); + XFree(info); + } + else +#endif + { + x = leftbar ? 0 : DisplayWidth( dc->dpy, screen) - cw; + y = topbar ? 0 : DisplayHeight(dc->dpy, screen) - ch; + } + + /* apply offsets */ + x += offset_x; + y += offset_y; + + /* create calendar window */ + swa.override_redirect = True; + swa.background_pixmap = ParentRelative; + swa.event_mask = ExposureMask | KeyPressMask | ButtonPressMask | VisibilityChangeMask; + win = XCreateWindow(dc->dpy, root, x, y, cw, ch, 0, + DefaultDepth(dc->dpy, screen), CopyFromParent, + DefaultVisual(dc->dpy, screen), + CWOverrideRedirect | CWBackPixmap | CWEventMask, &swa); + + /* open input methods */ + xim = XOpenIM(dc->dpy, NULL, NULL, NULL); + xic = XCreateIC(xim, XNInputStyle, XIMPreeditNothing | XIMStatusNothing, + XNClientWindow, win, XNFocusWindow, win, NULL); + + XMapRaised(dc->dpy, win); + resizedc(dc, cw, ch); + drawcal(); +} + +void usage(void) { + fputs("usage: dcal [-b] [-l] [-fn font] [-bg color] [-cf color] [-of color] [-tf color] [-hf color] [-v]\n", stderr); + exit(EXIT_FAILURE); +} + +unsigned long* pickcolor(const char *date, const char *current) { + int i; + + if (keyboard && !strcmp(date, current)) return invcol; + for (i = 0; i < hilight_count; ++i) + if (!strcmp(date, hilight[i])) return hltcol; + if (!strcmp(date, today)) return todcol; + if (!strncmp(date, current, 6)) return curcol; + return othcol; +} diff --git a/dcal/.local/share/dcal/dcal.o b/dcal/.local/share/dcal/dcal.o new file mode 100644 index 0000000000000000000000000000000000000000..cbcc712d724d30465abc2ae2dde7ae55aa9c6d99 GIT binary patch literal 16088 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 +#include +#include +#include +#include +#include +#include "draw.h" + +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#define DEFAULTFN "fixed" + +static Bool loadfont(DC *dc, const char *fontstr); + +void +drawrect(DC *dc, int x, int y, unsigned int w, unsigned int h, Bool fill, unsigned long color) { + XSetForeground(dc->dpy, dc->gc, color); + if(fill) + XFillRectangle(dc->dpy, dc->canvas, dc->gc, dc->x + x, dc->y + y, w, h); + else + XDrawRectangle(dc->dpy, dc->canvas, dc->gc, dc->x + x, dc->y + y, w-1, h-1); +} + +void +drawtext(DC *dc, const char *text, unsigned long col[ColLast]) { + char buf[BUFSIZ]; + size_t mn, n = strlen(text); + + /* shorten text if necessary */ + for(mn = MIN(n, sizeof buf); textnw(dc, text, mn) + dc->font.height/2 > dc->w; mn--) + if(mn == 0) + return; + memcpy(buf, text, mn); + if(mn < n) + for(n = MAX(mn-3, 0); n < mn; buf[n++] = '.'); + + drawrect(dc, 0, 0, dc->w, dc->h, True, BG(dc, col)); + drawtextn(dc, buf, mn, col); +} + +void +drawtextn(DC *dc, const char *text, size_t n, unsigned long col[ColLast]) { + int x = dc->x + dc->font.height/2; + int y = dc->y + dc->font.ascent+1; + + XSetForeground(dc->dpy, dc->gc, FG(dc, col)); + if(dc->font.set) + XmbDrawString(dc->dpy, dc->canvas, dc->font.set, dc->gc, x, y, text, n); + else { + XSetFont(dc->dpy, dc->gc, dc->font.xfont->fid); + XDrawString(dc->dpy, dc->canvas, dc->gc, x, y, text, n); + } +} + +void +eprintf(const char *fmt, ...) { + va_list ap; + + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + + if(fmt[0] != '\0' && fmt[strlen(fmt)-1] == ':') { + fputc(' ', stderr); + perror(NULL); + } + exit(EXIT_FAILURE); +} + +void +freedc(DC *dc) { + if(dc->font.set) + XFreeFontSet(dc->dpy, dc->font.set); + if(dc->font.xfont) + XFreeFont(dc->dpy, dc->font.xfont); + if(dc->canvas) + XFreePixmap(dc->dpy, dc->canvas); + XFreeGC(dc->dpy, dc->gc); + XCloseDisplay(dc->dpy); + free(dc); +} + +unsigned long +getcolor(DC *dc, const char *colstr) { + Colormap cmap = DefaultColormap(dc->dpy, DefaultScreen(dc->dpy)); + XColor color; + + if(!XAllocNamedColor(dc->dpy, cmap, colstr, &color, &color)) + eprintf("cannot allocate color '%s'\n", colstr); + return color.pixel; +} + +DC * +initdc(void) { + DC *dc; + + if(!setlocale(LC_CTYPE, "") || !XSupportsLocale()) + fputs("no locale support\n", stderr); + if(!(dc = calloc(1, sizeof *dc))) + eprintf("cannot malloc %u bytes:", sizeof *dc); + if(!(dc->dpy = XOpenDisplay(NULL))) + eprintf("cannot open display\n"); + + dc->gc = XCreateGC(dc->dpy, DefaultRootWindow(dc->dpy), 0, NULL); + XSetLineAttributes(dc->dpy, dc->gc, 1, LineSolid, CapButt, JoinMiter); + return dc; +} + +void +initfont(DC *dc, const char *fontstr) { + if(!loadfont(dc, fontstr ? fontstr : DEFAULTFN)) { + if(fontstr != NULL) + fprintf(stderr, "cannot load font '%s'\n", fontstr); + if(fontstr == NULL || !loadfont(dc, DEFAULTFN)) + eprintf("cannot load font '%s'\n", DEFAULTFN); + } + dc->font.height = dc->font.ascent + dc->font.descent; +} + +Bool +loadfont(DC *dc, const char *fontstr) { + char *def, **missing, **names; + int i, n; + XFontStruct **xfonts; + + if(!*fontstr) + return False; + if((dc->font.set = XCreateFontSet(dc->dpy, fontstr, &missing, &n, &def))) { + n = XFontsOfFontSet(dc->font.set, &xfonts, &names); + for(i = 0; i < n; i++) { + dc->font.ascent = MAX(dc->font.ascent, xfonts[i]->ascent); + dc->font.descent = MAX(dc->font.descent, xfonts[i]->descent); + dc->font.width = MAX(dc->font.width, xfonts[i]->max_bounds.width); + } + } + else if((dc->font.xfont = XLoadQueryFont(dc->dpy, fontstr))) { + dc->font.ascent = dc->font.xfont->ascent; + dc->font.descent = dc->font.xfont->descent; + dc->font.width = dc->font.xfont->max_bounds.width; + } + if(missing) + XFreeStringList(missing); + return dc->font.set || dc->font.xfont; +} + +void +mapdc(DC *dc, Window win, unsigned int w, unsigned int h) { + XCopyArea(dc->dpy, dc->canvas, win, dc->gc, 0, 0, w, h, 0, 0); +} + +void +resizedc(DC *dc, unsigned int w, unsigned int h) { + if(dc->canvas) + XFreePixmap(dc->dpy, dc->canvas); + + dc->w = w; + dc->h = h; + dc->canvas = XCreatePixmap(dc->dpy, DefaultRootWindow(dc->dpy), w, h, + DefaultDepth(dc->dpy, DefaultScreen(dc->dpy))); +} + +int +textnw(DC *dc, const char *text, size_t len) { + if(dc->font.set) { + XRectangle r; + + XmbTextExtents(dc->font.set, text, len, NULL, &r); + return r.width; + } + return XTextWidth(dc->font.xfont, text, len); +} + +int +textw(DC *dc, const char *text) { + return textnw(dc, text, strlen(text)) + dc->font.height; +} diff --git a/dcal/.local/share/dcal/draw.h b/dcal/.local/share/dcal/draw.h new file mode 100644 index 0000000..43a57bf --- /dev/null +++ b/dcal/.local/share/dcal/draw.h @@ -0,0 +1,35 @@ +/* See LICENSE file for copyright and license details. */ + +#define FG(dc, col) ((col)[(dc)->invert ? ColBG : ColFG]) +#define BG(dc, col) ((col)[(dc)->invert ? ColFG : ColBG]) + +enum { ColBG, ColFG, ColBorder, ColLast }; + +typedef struct { + int x, y, w, h; + Bool invert; + Display *dpy; + GC gc; + Pixmap canvas; + struct { + int ascent; + int descent; + int height; + int width; + XFontSet set; + XFontStruct *xfont; + } font; +} DC; /* draw context */ + +void drawrect(DC *dc, int x, int y, unsigned int w, unsigned int h, Bool fill, unsigned long color); +void drawtext(DC *dc, const char *text, unsigned long col[ColLast]); +void drawtextn(DC *dc, const char *text, size_t n, unsigned long col[ColLast]); +void eprintf(const char *fmt, ...); +void freedc(DC *dc); +unsigned long getcolor(DC *dc, const char *colstr); +DC *initdc(void); +void initfont(DC *dc, const char *fontstr); +void mapdc(DC *dc, Window win, unsigned int w, unsigned int h); +void resizedc(DC *dc, unsigned int w, unsigned int h); +int textnw(DC *dc, const char *text, size_t len); +int textw(DC *dc, const char *text); diff --git a/dcal/.local/share/dcal/draw.o b/dcal/.local/share/dcal/draw.o new file mode 100644 index 0000000000000000000000000000000000000000..18ba6955875b6efdba7992316a3345ab6b34daa2 GIT binary patch literal 7688 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 DP_a+2 literal 0 HcmV?d00001 diff --git a/dcal/.local/share/dcal/screenshot.png b/dcal/.local/share/dcal/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..401b4c44d309053929e1acc8d706978759699560 GIT binary patch literal 955 zcmV;s14R6ZP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000F zP)t-s*#7_`A|kuHyZ-1j0004EOGiWmk7(IZ0009XNklA&LR2^-$gIg? zDPZ|VtSK^!RMlcN61ERs&8v(vU|E;;$k!?>&rqC|G)Yoss|+HwiF|z($XnLddszRp zx-8bk`qx|44G&+JniDr?XX>@giy4Pd{=y8jBRCcL{5HLvka?JYb$Zo}wP zS;H1W!^j#`o0q}}ZLFPrZ}COmVXPalZZLXl=HBiyFk}s?kTZudJZGQH7O=+Gv7Gg| zvQB)4Rkl{_V$H01lb2&*~OE$12MCl^+NQw0GN zDPj@u(IG}wfip`Q$_)!(mWu0qbU2UAtPHFjuCX#?&lwrYh7C_cCltwtKPE)&FoLU4GF5+W1VQz^qZSptU6vdvvuZKsWZ0> z;9K)po6x5{o13mFd)DdNS039hb?uh*R;d~6+_B1cSw%6&I^SoVE9FAJN-x&qwPF|R zZDl<^52D>p8$Uk};@A@t1cXO(p_7khZzA16GUhxi0yCMz&d?2sB-DEl!pk;kD+BdKRwr+XE0eZ!_Z%Y3n zH&)-kceuv7K{m`@HOplH@`?@r4KU_--#fe1ucpat1?^^HG+X^Fnr2Na>&bt5pt4pE dzRLGIu77AjL0j}CR+In$002ovPDHLkV1ni+#1sGk literal 0 HcmV?d00001 diff --git a/dmenu/.local/share/dmenu/LICENSE b/dmenu/.local/share/dmenu/LICENSE new file mode 100644 index 0000000..3afd28e --- /dev/null +++ b/dmenu/.local/share/dmenu/LICENSE @@ -0,0 +1,30 @@ +MIT/X Consortium License + +© 2006-2019 Anselm R Garbe +© 2006-2008 Sander van Dijk +© 2006-2007 Michał Janeczek +© 2007 Kris Maglione +© 2009 Gottox +© 2009 Markus Schnalke +© 2009 Evan Gates +© 2010-2012 Connor Lane Smith +© 2014-2020 Hiltjo Posthuma +© 2015-2019 Quentin Rameau + +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. diff --git a/dmenu/.local/share/dmenu/Makefile b/dmenu/.local/share/dmenu/Makefile new file mode 100644 index 0000000..a03a95c --- /dev/null +++ b/dmenu/.local/share/dmenu/Makefile @@ -0,0 +1,64 @@ +# dmenu - dynamic menu +# See LICENSE file for copyright and license details. + +include config.mk + +SRC = drw.c dmenu.c stest.c util.c +OBJ = $(SRC:.c=.o) + +all: options dmenu stest + +options: + @echo dmenu build options: + @echo "CFLAGS = $(CFLAGS)" + @echo "LDFLAGS = $(LDFLAGS)" + @echo "CC = $(CC)" + +.c.o: + $(CC) -c $(CFLAGS) $< + +config.h: + cp config.def.h $@ + +$(OBJ): arg.h config.h config.mk drw.h + +dmenu: dmenu.o drw.o util.o + $(CC) -o $@ dmenu.o drw.o util.o $(LDFLAGS) + +stest: stest.o + $(CC) -o $@ stest.o $(LDFLAGS) + +clean: + rm -f dmenu stest $(OBJ) dmenu-$(VERSION).tar.gz + +dist: clean + mkdir -p dmenu-$(VERSION) + cp LICENSE Makefile README arg.h config.def.h config.mk dmenu.1\ + drw.h util.h dmenu_path dmenu_run stest.1 $(SRC)\ + dmenu-$(VERSION) + tar -cf dmenu-$(VERSION).tar dmenu-$(VERSION) + gzip dmenu-$(VERSION).tar + rm -rf dmenu-$(VERSION) + +install: all + mkdir -p $(DESTDIR)$(PREFIX)/bin + cp -f dmenu dmenu_path dmenu_run stest $(DESTDIR)$(PREFIX)/bin + chmod 755 $(DESTDIR)$(PREFIX)/bin/dmenu + chmod 755 $(DESTDIR)$(PREFIX)/bin/dmenu_path + chmod 755 $(DESTDIR)$(PREFIX)/bin/dmenu_run + chmod 755 $(DESTDIR)$(PREFIX)/bin/stest + mkdir -p $(DESTDIR)$(MANPREFIX)/man1 + sed "s/VERSION/$(VERSION)/g" < dmenu.1 > $(DESTDIR)$(MANPREFIX)/man1/dmenu.1 + sed "s/VERSION/$(VERSION)/g" < stest.1 > $(DESTDIR)$(MANPREFIX)/man1/stest.1 + chmod 644 $(DESTDIR)$(MANPREFIX)/man1/dmenu.1 + chmod 644 $(DESTDIR)$(MANPREFIX)/man1/stest.1 + +uninstall: + rm -f $(DESTDIR)$(PREFIX)/bin/dmenu\ + $(DESTDIR)$(PREFIX)/bin/dmenu_path\ + $(DESTDIR)$(PREFIX)/bin/dmenu_run\ + $(DESTDIR)$(PREFIX)/bin/stest\ + $(DESTDIR)$(MANPREFIX)/man1/dmenu.1\ + $(DESTDIR)$(MANPREFIX)/man1/stest.1 + +.PHONY: all options clean dist install uninstall diff --git a/dmenu/.local/share/dmenu/README b/dmenu/.local/share/dmenu/README new file mode 100644 index 0000000..a8fcdfe --- /dev/null +++ b/dmenu/.local/share/dmenu/README @@ -0,0 +1,24 @@ +dmenu - dynamic menu +==================== +dmenu is an efficient dynamic menu for X. + + +Requirements +------------ +In order to build dmenu you need the Xlib header files. + + +Installation +------------ +Edit config.mk to match your local setup (dmenu is installed into +the /usr/local namespace by default). + +Afterwards enter the following command to build and install dmenu +(if necessary as root): + + make clean install + + +Running dmenu +------------- +See the man page for details. diff --git a/dmenu/.local/share/dmenu/arg.h b/dmenu/.local/share/dmenu/arg.h new file mode 100644 index 0000000..e94e02b --- /dev/null +++ b/dmenu/.local/share/dmenu/arg.h @@ -0,0 +1,49 @@ +/* + * Copy me if you can. + * by 20h + */ + +#ifndef ARG_H__ +#define ARG_H__ + +extern char *argv0; + +/* use main(int argc, char *argv[]) */ +#define ARGBEGIN for (argv0 = *argv, argv++, argc--;\ + argv[0] && argv[0][0] == '-'\ + && argv[0][1];\ + argc--, argv++) {\ + char argc_;\ + char **argv_;\ + int brk_;\ + if (argv[0][1] == '-' && argv[0][2] == '\0') {\ + argv++;\ + argc--;\ + break;\ + }\ + for (brk_ = 0, argv[0]++, argv_ = argv;\ + argv[0][0] && !brk_;\ + argv[0]++) {\ + if (argv_ != argv)\ + break;\ + argc_ = argv[0][0];\ + switch (argc_) + +#define ARGEND }\ + } + +#define ARGC() argc_ + +#define EARGF(x) ((argv[0][1] == '\0' && argv[1] == NULL)?\ + ((x), abort(), (char *)0) :\ + (brk_ = 1, (argv[0][1] != '\0')?\ + (&argv[0][1]) :\ + (argc--, argv++, argv[0]))) + +#define ARGF() ((argv[0][1] == '\0' && argv[1] == NULL)?\ + (char *)0 :\ + (brk_ = 1, (argv[0][1] != '\0')?\ + (&argv[0][1]) :\ + (argc--, argv++, argv[0]))) + +#endif diff --git a/dmenu/.local/share/dmenu/config.def.h b/dmenu/.local/share/dmenu/config.def.h new file mode 100644 index 0000000..f84ff43 --- /dev/null +++ b/dmenu/.local/share/dmenu/config.def.h @@ -0,0 +1,28 @@ +/* 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 */ +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" +}; +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", "#005577" }, + [SchemeSelHighlight] = { "#ffc978", "#005577" }, + [SchemeNormHighlight] = { "#ffc978", "#222222" }, + [SchemeOut] = { "#000000", "#00ffff" }, + [SchemeOutHighlight] = { "#ffc978", "#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/.local/share/dmenu/config.def.h.orig b/dmenu/.local/share/dmenu/config.def.h.orig new file mode 100644 index 0000000..88ef264 --- /dev/null +++ b/dmenu/.local/share/dmenu/config.def.h.orig @@ -0,0 +1,25 @@ +/* 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 */ +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" +}; +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", "#005577" }, + [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/.local/share/dmenu/config.h b/dmenu/.local/share/dmenu/config.h new file mode 100644 index 0000000..f5720cd --- /dev/null +++ b/dmenu/.local/share/dmenu/config.h @@ -0,0 +1,28 @@ +/* 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 */ +static int centered = 1; /* -c option; centers dmenu on screen */ +static int min_width = 650; /* minimum width when centered */ +/* -fn option overrides fonts[0]; default X11 font or font set */ +static const char *fonts[] = { + "SF Pro Sans:size=13" +}; +static const char *prompt = NULL; /* -p option; prompt to the left of input field */ +static const char *colors[SchemeLast][2] = { + /* fg bg */ + [SchemeNorm] = { "#d3d3d3", "#111111" }, + [SchemeSel] = { "#111111", "#8f6f8f" }, + [SchemeSelHighlight] = { "#111111", "#8f6f8f" }, + [SchemeNormHighlight] = { "#8f6f8f", "#111111" }, + [SchemeOut] = { "#000000", "#00ffff" }, + [SchemeOutHighlight] = { "#8f8f8f", "#111111" }, +}; +/* -l option; if nonzero, dmenu uses vertical list with given number of lines */ +static unsigned int lines = 20; + +/* + * Characters not considered part of a word while deleting words + * for example: " /?\"&[]" + */ +static const char worddelimiters[] = " "; diff --git a/dmenu/.local/share/dmenu/config.mk b/dmenu/.local/share/dmenu/config.mk new file mode 100644 index 0000000..05d5a3e --- /dev/null +++ b/dmenu/.local/share/dmenu/config.mk @@ -0,0 +1,31 @@ +# dmenu version +VERSION = 5.0 + +# 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 + +# freetype +FREETYPELIBS = -lfontconfig -lXft +FREETYPEINC = /usr/include/freetype2 +# OpenBSD (uncomment) +#FREETYPEINC = $(X11INC)/freetype2 + +# includes and libs +INCS = -I$(X11INC) -I$(FREETYPEINC) +LIBS = -L$(X11LIB) -lX11 $(XINERAMALIBS) $(FREETYPELIBS) + +# flags +CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L -DVERSION=\"$(VERSION)\" $(XINERAMAFLAGS) +CFLAGS = -std=c99 -pedantic -Wall -Os $(INCS) $(CPPFLAGS) +LDFLAGS = $(LIBS) + +# compiler and linker +CC = cc diff --git a/dmenu/.local/share/dmenu/dmenu b/dmenu/.local/share/dmenu/dmenu new file mode 100755 index 0000000000000000000000000000000000000000..10cc714c5490f957ee618b2e70f6ca2dd1b46c19 GIT binary patch literal 48408 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 +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#ifdef XINERAMA +#include +#endif +#include + +#include "drw.h" +#include "util.h" + +/* macros */ +#define INTERSECT(x,y,w,h,r) (MAX(0, MIN((x)+(w),(r).x_org+(r).width) - MAX((x),(r).x_org)) \ + * 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) + +/* enums */ +enum { SchemeNorm, SchemeSel, SchemeOut, SchemeNormHighlight, SchemeSelHighlight, SchemeOutHighlight, SchemeLast }; /* color schemes */ +struct item { + char *text; + struct item *left, *right; + int out; +}; + +static char text[BUFSIZ] = ""; +static char *embed; +static int bh, mw, mh; +static int inputw = 0, promptw; +static int lrpad; /* sum of left and right padding */ +static size_t cursor; +static struct item *items = NULL; +static struct item *matches, *matchend; +static struct item *prev, *curr, *next, *sel; +static int mon = -1, screen; + +static Atom clip, utf8; +static Display *dpy; +static Window root, parentwin, win; +static XIC xic; + +static Drw *drw; +static Clr *scheme[SchemeLast]; + +#include "config.h" + +static char * cistrstr(const char *s, const char *sub); +static int (*fstrncmp)(const char *, const char *, size_t) = strncasecmp; +static char *(*fstrstr)(const char *, const char *) = cistrstr; + +static void +appenditem(struct item *item, struct item **list, struct item **last) +{ + if (*last) + (*last)->right = item; + else + *list = item; + + item->left = *last; + item->right = NULL; + *last = item; +} + +static void +calcoffsets(void) +{ + int i, n; + + if (lines > 0) + n = lines * bh; + else + n = mw - (promptw + inputw + TEXTW("<") + TEXTW(">")); + /* calculate which items will begin the next page and previous page */ + for (i = 0, next = curr; next; next = next->right) + if ((i += (lines > 0) ? bh : MIN(TEXTW(next->text), n)) > n) + break; + for (i = 0, prev = curr; prev && prev->left; prev = prev->left) + if ((i += (lines > 0) ? bh : MIN(TEXTW(prev->left->text), n)) > n) + 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) +{ + size_t i; + + XUngrabKey(dpy, AnyKey, AnyModifier, root); + for (i = 0; i < SchemeLast; i++) + free(scheme[i]); + drw_free(drw); + XSync(dpy, False); + XCloseDisplay(dpy); +} + +static char * +cistrstr(const char *s, const char *sub) +{ + size_t len; + + for (len = strlen(sub); *s; s++) + if (!strncasecmp(s, sub, len)) + return (char *)s; + 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 : item->out ? SchemeOutHighlight : 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'; + if (indentx - (lrpad / 2) - 1 < maxw) + 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) +{ + if (item == sel) + drw_setscheme(drw, scheme[SchemeSel]); + else if (item->out) + drw_setscheme(drw, scheme[SchemeOut]); + else + drw_setscheme(drw, scheme[SchemeNorm]); + + int r = drw_text(drw, x, y, w, bh, lrpad / 2, item->text, 0); + drawhighlights(item, x, y, w); + return r; +} + +static void +drawmenu(void) +{ + unsigned int curpos; + struct item *item; + int x = 0, y = 0, w; + + drw_setscheme(drw, scheme[SchemeNorm]); + drw_rect(drw, 0, 0, mw, mh, 1, 1); + + if (prompt && *prompt) { + drw_setscheme(drw, scheme[SchemeSel]); + x = drw_text(drw, x, 0, promptw, bh, lrpad / 2, prompt, 0); + } + /* 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); + + curpos = TEXTW(text) - TEXTW(&text[cursor]); + if ((curpos += lrpad / 2 - 1) < w) { + drw_setscheme(drw, scheme[SchemeNorm]); + drw_rect(drw, x + curpos, 2, 2, bh - 4, 1, 0); + } + + if (lines > 0) { + /* draw vertical list */ + for (item = curr; item != next; item = item->right) + drawitem(item, x, y += bh, mw - x); + } else if (matches) { + /* draw horizontal list */ + x += inputw; + w = TEXTW("<"); + if (curr->left) { + drw_setscheme(drw, scheme[SchemeNorm]); + drw_text(drw, x, 0, w, bh, lrpad / 2, "<", 0); + } + x += w; + for (item = curr; item != next; item = item->right) + x = drawitem(item, x, 0, MIN(TEXTW(item->text), mw - x - TEXTW(">"))); + if (next) { + w = TEXTW(">"); + drw_setscheme(drw, scheme[SchemeNorm]); + drw_text(drw, mw - w, 0, w, bh, lrpad / 2, ">", 0); + } + } + drw_map(drw, win, 0, 0, mw, mh); +} + +static void +grabfocus(void) +{ + struct timespec ts = { .tv_sec = 0, .tv_nsec = 10000000 }; + Window focuswin; + int i, revertwin; + + for (i = 0; i < 100; ++i) { + XGetInputFocus(dpy, &focuswin, &revertwin); + if (focuswin == win) + return; + XSetInputFocus(dpy, win, RevertToParent, CurrentTime); + nanosleep(&ts, NULL); + } + die("cannot grab focus"); +} + +static void +grabkeyboard(void) +{ + struct timespec ts = { .tv_sec = 0, .tv_nsec = 1000000 }; + int i; + + if (embed) + return; + /* try to grab keyboard, we may have to wait for another process to ungrab */ + for (i = 0; i < 1000; i++) { + if (XGrabKeyboard(dpy, DefaultRootWindow(dpy), True, GrabModeAsync, + GrabModeAsync, CurrentTime) == GrabSuccess) + return; + nanosleep(&ts, NULL); + } + die("cannot grab keyboard"); +} + +static void +match(void) +{ + static char **tokv = NULL; + static int tokn = 0; + + char buf[sizeof text], *s; + int i, tokc = 0; + size_t len, textsize; + struct item *item, *lprefix, *lsubstr, *prefixend, *substrend; + + strcpy(buf, text); + /* separate input text into tokens to be matched individually */ + for (s = strtok(buf, " "); s; tokv[tokc - 1] = s, s = strtok(NULL, " ")) + if (++tokc > tokn && !(tokv = realloc(tokv, ++tokn * sizeof *tokv))) + die("cannot realloc %u bytes:", tokn * sizeof *tokv); + len = tokc ? strlen(tokv[0]) : 0; + + matches = lprefix = lsubstr = matchend = prefixend = substrend = NULL; + textsize = strlen(text) + 1; + for (item = items; item && item->text; item++) { + for (i = 0; i < tokc; i++) + if (!fstrstr(item->text, tokv[i])) + break; + if (i != tokc) /* not all tokens match */ + continue; + /* exact matches go first, then prefixes, then substrings */ + if (!tokc || !fstrncmp(text, item->text, textsize)) + appenditem(item, &matches, &matchend); + else if (!fstrncmp(tokv[0], item->text, len)) + appenditem(item, &lprefix, &prefixend); + else + appenditem(item, &lsubstr, &substrend); + } + if (lprefix) { + if (matches) { + matchend->right = lprefix; + lprefix->left = matchend; + } else + matches = lprefix; + matchend = prefixend; + } + if (lsubstr) { + if (matches) { + matchend->right = lsubstr; + lsubstr->left = matchend; + } else + matches = lsubstr; + matchend = substrend; + } + curr = sel = matches; + calcoffsets(); +} + +static void +insert(const char *str, ssize_t n) +{ + if (strlen(text) + n > sizeof text - 1) + return; + /* move existing text out of the way, insert new text, and update cursor */ + memmove(&text[cursor + n], &text[cursor], sizeof text - cursor - MAX(n, 0)); + if (n > 0) + memcpy(&text[cursor], str, n); + cursor += n; + match(); +} + +static size_t +nextrune(int inc) +{ + ssize_t n; + + /* return location of next utf8 rune in the given direction (+1 or -1) */ + for (n = cursor + inc; n + inc >= 0 && (text[n] & 0xc0) == 0x80; n += inc) + ; + return n; +} + +static void +movewordedge(int dir) +{ + if (dir < 0) { /* move cursor to the start of the word*/ + while (cursor > 0 && strchr(worddelimiters, text[nextrune(-1)])) + cursor = nextrune(-1); + while (cursor > 0 && !strchr(worddelimiters, text[nextrune(-1)])) + cursor = nextrune(-1); + } else { /* move cursor to the end of the word */ + while (text[cursor] && strchr(worddelimiters, text[cursor])) + cursor = nextrune(+1); + while (text[cursor] && !strchr(worddelimiters, text[cursor])) + cursor = nextrune(+1); + } +} + +static void +keypress(XKeyEvent *ev) +{ + char buf[32]; + int len; + KeySym ksym; + Status status; + + len = XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status); + switch (status) { + default: /* XLookupNone, XBufferOverflow */ + return; + case XLookupChars: + goto insert; + case XLookupKeySym: + case XLookupBoth: + break; + } + + if (ev->state & ControlMask) { + switch(ksym) { + case XK_a: ksym = XK_Home; break; + case XK_b: ksym = XK_Left; break; + case XK_c: ksym = XK_Escape; break; + case XK_d: ksym = XK_Delete; break; + case XK_e: ksym = XK_End; break; + case XK_f: ksym = XK_Right; break; + case XK_g: ksym = XK_Escape; break; + case XK_h: ksym = XK_BackSpace; break; + case XK_i: ksym = XK_Tab; break; + case XK_j: /* fallthrough */ + case XK_J: /* fallthrough */ + case XK_m: /* fallthrough */ + case XK_M: ksym = XK_Return; ev->state &= ~ControlMask; break; + case XK_n: ksym = XK_Down; break; + case XK_p: ksym = XK_Up; break; + + case XK_k: /* delete right */ + text[cursor] = '\0'; + match(); + break; + case XK_u: /* delete left */ + insert(NULL, 0 - cursor); + break; + case XK_w: /* delete word */ + while (cursor > 0 && strchr(worddelimiters, text[nextrune(-1)])) + insert(NULL, nextrune(-1) - cursor); + while (cursor > 0 && !strchr(worddelimiters, text[nextrune(-1)])) + insert(NULL, nextrune(-1) - cursor); + break; + case XK_y: /* paste selection */ + case XK_Y: + XConvertSelection(dpy, (ev->state & ShiftMask) ? clip : XA_PRIMARY, + utf8, utf8, win, CurrentTime); + return; + case XK_Left: + case XK_KP_Left: + movewordedge(-1); + goto draw; + case XK_Right: + case XK_KP_Right: + movewordedge(+1); + goto draw; + case XK_Return: + case XK_KP_Enter: + break; + case XK_bracketleft: + cleanup(); + exit(1); + default: + return; + } + } else if (ev->state & Mod1Mask) { + switch(ksym) { + case XK_b: + movewordedge(-1); + goto draw; + case XK_f: + movewordedge(+1); + goto draw; + case XK_g: ksym = XK_Home; break; + case XK_G: ksym = XK_End; break; + case XK_h: ksym = XK_Up; break; + case XK_j: ksym = XK_Next; break; + case XK_k: ksym = XK_Prior; break; + case XK_l: ksym = XK_Down; break; + default: + return; + } + } + + switch(ksym) { + default: +insert: + if (!iscntrl(*buf)) + insert(buf, len); + break; + case XK_Delete: + case XK_KP_Delete: + if (text[cursor] == '\0') + return; + cursor = nextrune(+1); + /* fallthrough */ + case XK_BackSpace: + if (cursor == 0) + return; + insert(NULL, nextrune(-1) - cursor); + break; + case XK_End: + case XK_KP_End: + if (text[cursor] != '\0') { + cursor = strlen(text); + break; + } + if (next) { + /* jump to end of list and position items in reverse */ + curr = matchend; + calcoffsets(); + curr = prev; + calcoffsets(); + while (next && (curr = curr->right)) + calcoffsets(); + } + sel = matchend; + break; + case XK_Escape: + cleanup(); + exit(1); + case XK_Home: + case XK_KP_Home: + if (sel == matches) { + cursor = 0; + break; + } + sel = curr = matches; + calcoffsets(); + break; + case XK_Left: + case XK_KP_Left: + if (cursor > 0 && (!sel || !sel->left || lines > 0)) { + cursor = nextrune(-1); + break; + } + if (lines > 0) + return; + /* fallthrough */ + case XK_Up: + case XK_KP_Up: + if (sel && sel->left && (sel = sel->left)->right == curr) { + curr = prev; + calcoffsets(); + } + break; + case XK_Next: + case XK_KP_Next: + if (!next) + return; + sel = curr = next; + calcoffsets(); + break; + case XK_Prior: + case XK_KP_Prior: + if (!prev) + return; + sel = curr = prev; + calcoffsets(); + break; + case XK_Return: + case XK_KP_Enter: + puts((sel && !(ev->state & ShiftMask)) ? sel->text : text); + if (!(ev->state & ControlMask)) { + cleanup(); + exit(0); + } + if (sel) + sel->out = 1; + break; + case XK_Right: + case XK_KP_Right: + if (text[cursor] != '\0') { + cursor = nextrune(+1); + break; + } + if (lines > 0) + return; + /* fallthrough */ + case XK_Down: + case XK_KP_Down: + if (sel && sel->right && (sel = sel->right) == next) { + curr = next; + calcoffsets(); + } + break; + case XK_Tab: + if (!sel) + return; + strncpy(text, sel->text, sizeof text - 1); + text[sizeof text - 1] = '\0'; + cursor = strlen(text); + match(); + break; + } + +draw: + drawmenu(); +} + +static void +paste(void) +{ + char *p, *q; + int di; + unsigned long dl; + Atom da; + + /* we have been given the current selection, now insert it into input */ + if (XGetWindowProperty(dpy, win, utf8, 0, (sizeof text / 4) + 1, False, + utf8, &da, &di, &dl, &dl, (unsigned char **)&p) + == Success && p) { + insert(p, (q = strchr(p, '\n')) ? q - p : (ssize_t)strlen(p)); + XFree(p); + } + drawmenu(); +} + +static void +readstdin(void) +{ + char buf[sizeof text], *p; + size_t i, imax = 0, size = 0; + unsigned int tmpmax = 0; + + /* read each line from stdin and add it to the item list */ + for (i = 0; fgets(buf, sizeof buf, stdin); i++) { + if (i + 1 >= size / sizeof *items) + if (!(items = realloc(items, (size += BUFSIZ)))) + die("cannot realloc %u bytes:", size); + if ((p = strchr(buf, '\n'))) + *p = '\0'; + if (!(items[i].text = strdup(buf))) + die("cannot strdup %u bytes:", strlen(buf) + 1); + items[i].out = 0; + drw_font_getexts(drw->fonts, buf, strlen(buf), &tmpmax, NULL); + if (tmpmax > inputw) { + inputw = tmpmax; + imax = i; + } + } + if (items) + items[i].text = NULL; + inputw = items ? TEXTW(items[imax].text) : 0; + lines = MIN(lines, i); +} + +static void +run(void) +{ + XEvent ev; + + while (!XNextEvent(dpy, &ev)) { + if (XFilterEvent(&ev, win)) + 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); + break; + case FocusIn: + /* regrab focus from parent window */ + if (ev.xfocus.window != win) + grabfocus(); + break; + case KeyPress: + keypress(&ev.xkey); + break; + case SelectionNotify: + if (ev.xselection.property == utf8) + paste(); + break; + case VisibilityNotify: + if (ev.xvisibility.state != VisibilityUnobscured) + XRaiseWindow(dpy, win); + break; + } + } +} + +static void +setup(void) +{ + int x, y, i, j; + unsigned int du; + XSetWindowAttributes swa; + XIM xim; + Window w, dw, *dws; + XWindowAttributes wa; + XClassHint ch = {"dmenu", "dmenu"}; +#ifdef XINERAMA + XineramaScreenInfo *info; + Window pw; + int a, di, n, area = 0; +#endif + /* init appearance */ + for (j = 0; j < SchemeLast; j++) + scheme[j] = drw_scm_create(drw, colors[j], 2); + + clip = XInternAtom(dpy, "CLIPBOARD", False); + utf8 = XInternAtom(dpy, "UTF8_STRING", False); + + /* calculate menu geometry */ + bh = drw->fonts->h + 2; + 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))) { + XGetInputFocus(dpy, &w, &di); + if (mon >= 0 && mon < n) + i = mon; + else if (w != root && w != PointerRoot && w != None) { + /* find top-level window containing current input focus */ + do { + if (XQueryTree(dpy, (pw = w), &dw, &w, &dws, &du) && dws) + XFree(dws); + } while (w != root && w != pw); + /* find xinerama screen with which the window intersects most */ + if (XGetWindowAttributes(dpy, pw, &wa)) + for (j = 0; j < n; j++) + if ((a = INTERSECT(wa.x, wa.y, wa.width, wa.height, info[j])) > area) { + area = a; + i = j; + } + } + /* no focused window is on screen, so use pointer location instead */ + if (mon < 0 && !area && XQueryPointer(dpy, root, &dw, &dw, &x, &y, &di, &di, &du)) + for (i = 0; i < n; i++) + if (INTERSECT(x, y, 1, 1, info[i])) + break; + + 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 + { + if (!XGetWindowAttributes(dpy, parentwin, &wa)) + die("could not get embedding window attributes: 0x%lx", + parentwin); + + 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; + } + } + inputw = MIN(inputw, mw/3); + match(); + + /* create menu window */ + 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, + CopyFromParent, CopyFromParent, CopyFromParent, + CWOverrideRedirect | CWBackPixel | CWEventMask, &swa); + XSetClassHint(dpy, win, &ch); + + + /* input methods */ + if ((xim = XOpenIM(dpy, NULL, NULL, NULL)) == NULL) + die("XOpenIM failed: could not open input device"); + + xic = XCreateIC(xim, XNInputStyle, XIMPreeditNothing | XIMStatusNothing, + XNClientWindow, win, XNFocusWindow, win, NULL); + + XMapRaised(dpy, win); + if (embed) { + XSelectInput(dpy, parentwin, FocusChangeMask | SubstructureNotifyMask); + if (XQueryTree(dpy, parentwin, &dw, &w, &dws, &du) && dws) { + for (i = 0; i < du && dws[i] != win; ++i) + XSelectInput(dpy, dws[i], FocusChangeMask); + XFree(dws); + } + grabfocus(); + } + drw_resize(drw, mw, mh); + drawmenu(); +} + +static void +usage(void) +{ + fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" + " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr); + exit(1); +} + +int +main(int argc, char *argv[]) +{ + XWindowAttributes wa; + int i, fast = 0; + + for (i = 1; i < argc; i++) + /* these options take no arguments */ + if (!strcmp(argv[i], "-v")) { /* prints version information */ + puts("dmenu-"VERSION); + exit(0); + } else if (!strcmp(argv[i], "-b")) /* appears at the bottom of the screen */ + 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], "-s")) { /* case-sensitive item matching */ + fstrncmp = strncmp; + fstrstr = strstr; + } else if (i + 1 == argc) + usage(); + /* these options take one argument */ + else if (!strcmp(argv[i], "-l")) /* number of lines in vertical list */ + lines = atoi(argv[++i]); + else if (!strcmp(argv[i], "-m")) + mon = atoi(argv[++i]); + else if (!strcmp(argv[i], "-p")) /* adds prompt to left of input field */ + prompt = argv[++i]; + else if (!strcmp(argv[i], "-fn")) /* font or font set */ + fonts[0] = argv[++i]; + else if (!strcmp(argv[i], "-nb")) /* normal background color */ + colors[SchemeNorm][ColBg] = argv[++i]; + else if (!strcmp(argv[i], "-nf")) /* normal foreground color */ + colors[SchemeNorm][ColFg] = argv[++i]; + else if (!strcmp(argv[i], "-sb")) /* selected background color */ + colors[SchemeSel][ColBg] = argv[++i]; + else if (!strcmp(argv[i], "-sf")) /* selected foreground color */ + colors[SchemeSel][ColFg] = argv[++i]; + else if (!strcmp(argv[i], "-w")) /* embedding window id */ + embed = argv[++i]; + else + usage(); + + if (!setlocale(LC_CTYPE, "") || !XSupportsLocale()) + fputs("warning: no locale support\n", stderr); + if (!(dpy = XOpenDisplay(NULL))) + die("cannot open display"); + screen = DefaultScreen(dpy); + root = RootWindow(dpy, screen); + if (!embed || !(parentwin = strtol(embed, NULL, 0))) + parentwin = root; + if (!XGetWindowAttributes(dpy, parentwin, &wa)) + die("could not get embedding window attributes: 0x%lx", + parentwin); + drw = drw_create(dpy, screen, root, wa.width, wa.height); + if (!drw_fontset_create(drw, fonts, LENGTH(fonts))) + die("no fonts could be loaded."); + lrpad = drw->fonts->h; + +#ifdef __OpenBSD__ + if (pledge("stdio rpath", NULL) == -1) + die("pledge"); +#endif + + if (fast && !isatty(0)) { + grabkeyboard(); + readstdin(); + } else { + readstdin(); + grabkeyboard(); + } + setup(); + run(); + + return 1; /* unreachable */ +} diff --git a/dmenu/.local/share/dmenu/dmenu.c.orig b/dmenu/.local/share/dmenu/dmenu.c.orig new file mode 100644 index 0000000..cd63cca --- /dev/null +++ b/dmenu/.local/share/dmenu/dmenu.c.orig @@ -0,0 +1,808 @@ +/* See LICENSE file for copyright and license details. */ +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#ifdef XINERAMA +#include +#endif +#include + +#include "drw.h" +#include "util.h" + +/* macros */ +#define INTERSECT(x,y,w,h,r) (MAX(0, MIN((x)+(w),(r).x_org+(r).width) - MAX((x),(r).x_org)) \ + * 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) + +/* enums */ +enum { SchemeNorm, SchemeSel, SchemeOut, SchemeLast }; /* color schemes */ + +struct item { + char *text; + struct item *left, *right; + int out; +}; + +static char text[BUFSIZ] = ""; +static char *embed; +static int bh, mw, mh; +static int inputw = 0, promptw; +static int lrpad; /* sum of left and right padding */ +static size_t cursor; +static struct item *items = NULL; +static struct item *matches, *matchend; +static struct item *prev, *curr, *next, *sel; +static int mon = -1, screen; + +static Atom clip, utf8; +static Display *dpy; +static Window root, parentwin, win; +static XIC xic; + +static Drw *drw; +static Clr *scheme[SchemeLast]; + +#include "config.h" + +static char * cistrstr(const char *s, const char *sub); +static int (*fstrncmp)(const char *, const char *, size_t) = strncasecmp; +static char *(*fstrstr)(const char *, const char *) = cistrstr; + +static void +appenditem(struct item *item, struct item **list, struct item **last) +{ + if (*last) + (*last)->right = item; + else + *list = item; + + item->left = *last; + item->right = NULL; + *last = item; +} + +static void +calcoffsets(void) +{ + int i, n; + + if (lines > 0) + n = lines * bh; + else + n = mw - (promptw + inputw + TEXTW("<") + TEXTW(">")); + /* calculate which items will begin the next page and previous page */ + for (i = 0, next = curr; next; next = next->right) + if ((i += (lines > 0) ? bh : MIN(TEXTW(next->text), n)) > n) + break; + for (i = 0, prev = curr; prev && prev->left; prev = prev->left) + if ((i += (lines > 0) ? bh : MIN(TEXTW(prev->left->text), n)) > n) + 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) +{ + size_t i; + + XUngrabKey(dpy, AnyKey, AnyModifier, root); + for (i = 0; i < SchemeLast; i++) + free(scheme[i]); + drw_free(drw); + XSync(dpy, False); + XCloseDisplay(dpy); +} + +static char * +cistrstr(const char *s, const char *sub) +{ + size_t len; + + for (len = strlen(sub); *s; s++) + if (!strncasecmp(s, sub, len)) + return (char *)s; + return NULL; +} + +static int +drawitem(struct item *item, int x, int y, int w) +{ + if (item == sel) + drw_setscheme(drw, scheme[SchemeSel]); + else if (item->out) + drw_setscheme(drw, scheme[SchemeOut]); + else + drw_setscheme(drw, scheme[SchemeNorm]); + + return drw_text(drw, x, y, w, bh, lrpad / 2, item->text, 0); +} + +static void +drawmenu(void) +{ + unsigned int curpos; + struct item *item; + int x = 0, y = 0, w; + + drw_setscheme(drw, scheme[SchemeNorm]); + drw_rect(drw, 0, 0, mw, mh, 1, 1); + + if (prompt && *prompt) { + drw_setscheme(drw, scheme[SchemeSel]); + x = drw_text(drw, x, 0, promptw, bh, lrpad / 2, prompt, 0); + } + /* 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); + + curpos = TEXTW(text) - TEXTW(&text[cursor]); + if ((curpos += lrpad / 2 - 1) < w) { + drw_setscheme(drw, scheme[SchemeNorm]); + drw_rect(drw, x + curpos, 2, 2, bh - 4, 1, 0); + } + + if (lines > 0) { + /* draw vertical list */ + for (item = curr; item != next; item = item->right) + drawitem(item, x, y += bh, mw - x); + } else if (matches) { + /* draw horizontal list */ + x += inputw; + w = TEXTW("<"); + if (curr->left) { + drw_setscheme(drw, scheme[SchemeNorm]); + drw_text(drw, x, 0, w, bh, lrpad / 2, "<", 0); + } + x += w; + for (item = curr; item != next; item = item->right) + x = drawitem(item, x, 0, MIN(TEXTW(item->text), mw - x - TEXTW(">"))); + if (next) { + w = TEXTW(">"); + drw_setscheme(drw, scheme[SchemeNorm]); + drw_text(drw, mw - w, 0, w, bh, lrpad / 2, ">", 0); + } + } + drw_map(drw, win, 0, 0, mw, mh); +} + +static void +grabfocus(void) +{ + struct timespec ts = { .tv_sec = 0, .tv_nsec = 10000000 }; + Window focuswin; + int i, revertwin; + + for (i = 0; i < 100; ++i) { + XGetInputFocus(dpy, &focuswin, &revertwin); + if (focuswin == win) + return; + XSetInputFocus(dpy, win, RevertToParent, CurrentTime); + nanosleep(&ts, NULL); + } + die("cannot grab focus"); +} + +static void +grabkeyboard(void) +{ + struct timespec ts = { .tv_sec = 0, .tv_nsec = 1000000 }; + int i; + + if (embed) + return; + /* try to grab keyboard, we may have to wait for another process to ungrab */ + for (i = 0; i < 1000; i++) { + if (XGrabKeyboard(dpy, DefaultRootWindow(dpy), True, GrabModeAsync, + GrabModeAsync, CurrentTime) == GrabSuccess) + return; + nanosleep(&ts, NULL); + } + die("cannot grab keyboard"); +} + +static void +match(void) +{ + static char **tokv = NULL; + static int tokn = 0; + + char buf[sizeof text], *s; + int i, tokc = 0; + size_t len, textsize; + struct item *item, *lprefix, *lsubstr, *prefixend, *substrend; + + strcpy(buf, text); + /* separate input text into tokens to be matched individually */ + for (s = strtok(buf, " "); s; tokv[tokc - 1] = s, s = strtok(NULL, " ")) + if (++tokc > tokn && !(tokv = realloc(tokv, ++tokn * sizeof *tokv))) + die("cannot realloc %u bytes:", tokn * sizeof *tokv); + len = tokc ? strlen(tokv[0]) : 0; + + matches = lprefix = lsubstr = matchend = prefixend = substrend = NULL; + textsize = strlen(text) + 1; + for (item = items; item && item->text; item++) { + for (i = 0; i < tokc; i++) + if (!fstrstr(item->text, tokv[i])) + break; + if (i != tokc) /* not all tokens match */ + continue; + /* exact matches go first, then prefixes, then substrings */ + if (!tokc || !fstrncmp(text, item->text, textsize)) + appenditem(item, &matches, &matchend); + else if (!fstrncmp(tokv[0], item->text, len)) + appenditem(item, &lprefix, &prefixend); + else + appenditem(item, &lsubstr, &substrend); + } + if (lprefix) { + if (matches) { + matchend->right = lprefix; + lprefix->left = matchend; + } else + matches = lprefix; + matchend = prefixend; + } + if (lsubstr) { + if (matches) { + matchend->right = lsubstr; + lsubstr->left = matchend; + } else + matches = lsubstr; + matchend = substrend; + } + curr = sel = matches; + calcoffsets(); +} + +static void +insert(const char *str, ssize_t n) +{ + if (strlen(text) + n > sizeof text - 1) + return; + /* move existing text out of the way, insert new text, and update cursor */ + memmove(&text[cursor + n], &text[cursor], sizeof text - cursor - MAX(n, 0)); + if (n > 0) + memcpy(&text[cursor], str, n); + cursor += n; + match(); +} + +static size_t +nextrune(int inc) +{ + ssize_t n; + + /* return location of next utf8 rune in the given direction (+1 or -1) */ + for (n = cursor + inc; n + inc >= 0 && (text[n] & 0xc0) == 0x80; n += inc) + ; + return n; +} + +static void +movewordedge(int dir) +{ + if (dir < 0) { /* move cursor to the start of the word*/ + while (cursor > 0 && strchr(worddelimiters, text[nextrune(-1)])) + cursor = nextrune(-1); + while (cursor > 0 && !strchr(worddelimiters, text[nextrune(-1)])) + cursor = nextrune(-1); + } else { /* move cursor to the end of the word */ + while (text[cursor] && strchr(worddelimiters, text[cursor])) + cursor = nextrune(+1); + while (text[cursor] && !strchr(worddelimiters, text[cursor])) + cursor = nextrune(+1); + } +} + +static void +keypress(XKeyEvent *ev) +{ + char buf[32]; + int len; + KeySym ksym; + Status status; + + len = XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status); + switch (status) { + default: /* XLookupNone, XBufferOverflow */ + return; + case XLookupChars: + goto insert; + case XLookupKeySym: + case XLookupBoth: + break; + } + + if (ev->state & ControlMask) { + switch(ksym) { + case XK_a: ksym = XK_Home; break; + case XK_b: ksym = XK_Left; break; + case XK_c: ksym = XK_Escape; break; + case XK_d: ksym = XK_Delete; break; + case XK_e: ksym = XK_End; break; + case XK_f: ksym = XK_Right; break; + case XK_g: ksym = XK_Escape; break; + case XK_h: ksym = XK_BackSpace; break; + case XK_i: ksym = XK_Tab; break; + case XK_j: /* fallthrough */ + case XK_J: /* fallthrough */ + case XK_m: /* fallthrough */ + case XK_M: ksym = XK_Return; ev->state &= ~ControlMask; break; + case XK_n: ksym = XK_Down; break; + case XK_p: ksym = XK_Up; break; + + case XK_k: /* delete right */ + text[cursor] = '\0'; + match(); + break; + case XK_u: /* delete left */ + insert(NULL, 0 - cursor); + break; + case XK_w: /* delete word */ + while (cursor > 0 && strchr(worddelimiters, text[nextrune(-1)])) + insert(NULL, nextrune(-1) - cursor); + while (cursor > 0 && !strchr(worddelimiters, text[nextrune(-1)])) + insert(NULL, nextrune(-1) - cursor); + break; + case XK_y: /* paste selection */ + case XK_Y: + XConvertSelection(dpy, (ev->state & ShiftMask) ? clip : XA_PRIMARY, + utf8, utf8, win, CurrentTime); + return; + case XK_Left: + case XK_KP_Left: + movewordedge(-1); + goto draw; + case XK_Right: + case XK_KP_Right: + movewordedge(+1); + goto draw; + case XK_Return: + case XK_KP_Enter: + break; + case XK_bracketleft: + cleanup(); + exit(1); + default: + return; + } + } else if (ev->state & Mod1Mask) { + switch(ksym) { + case XK_b: + movewordedge(-1); + goto draw; + case XK_f: + movewordedge(+1); + goto draw; + case XK_g: ksym = XK_Home; break; + case XK_G: ksym = XK_End; break; + case XK_h: ksym = XK_Up; break; + case XK_j: ksym = XK_Next; break; + case XK_k: ksym = XK_Prior; break; + case XK_l: ksym = XK_Down; break; + default: + return; + } + } + + switch(ksym) { + default: +insert: + if (!iscntrl(*buf)) + insert(buf, len); + break; + case XK_Delete: + case XK_KP_Delete: + if (text[cursor] == '\0') + return; + cursor = nextrune(+1); + /* fallthrough */ + case XK_BackSpace: + if (cursor == 0) + return; + insert(NULL, nextrune(-1) - cursor); + break; + case XK_End: + case XK_KP_End: + if (text[cursor] != '\0') { + cursor = strlen(text); + break; + } + if (next) { + /* jump to end of list and position items in reverse */ + curr = matchend; + calcoffsets(); + curr = prev; + calcoffsets(); + while (next && (curr = curr->right)) + calcoffsets(); + } + sel = matchend; + break; + case XK_Escape: + cleanup(); + exit(1); + case XK_Home: + case XK_KP_Home: + if (sel == matches) { + cursor = 0; + break; + } + sel = curr = matches; + calcoffsets(); + break; + case XK_Left: + case XK_KP_Left: + if (cursor > 0 && (!sel || !sel->left || lines > 0)) { + cursor = nextrune(-1); + break; + } + if (lines > 0) + return; + /* fallthrough */ + case XK_Up: + case XK_KP_Up: + if (sel && sel->left && (sel = sel->left)->right == curr) { + curr = prev; + calcoffsets(); + } + break; + case XK_Next: + case XK_KP_Next: + if (!next) + return; + sel = curr = next; + calcoffsets(); + break; + case XK_Prior: + case XK_KP_Prior: + if (!prev) + return; + sel = curr = prev; + calcoffsets(); + break; + case XK_Return: + case XK_KP_Enter: + puts((sel && !(ev->state & ShiftMask)) ? sel->text : text); + if (!(ev->state & ControlMask)) { + cleanup(); + exit(0); + } + if (sel) + sel->out = 1; + break; + case XK_Right: + case XK_KP_Right: + if (text[cursor] != '\0') { + cursor = nextrune(+1); + break; + } + if (lines > 0) + return; + /* fallthrough */ + case XK_Down: + case XK_KP_Down: + if (sel && sel->right && (sel = sel->right) == next) { + curr = next; + calcoffsets(); + } + break; + case XK_Tab: + if (!sel) + return; + strncpy(text, sel->text, sizeof text - 1); + text[sizeof text - 1] = '\0'; + cursor = strlen(text); + match(); + break; + } + +draw: + drawmenu(); +} + +static void +paste(void) +{ + char *p, *q; + int di; + unsigned long dl; + Atom da; + + /* we have been given the current selection, now insert it into input */ + if (XGetWindowProperty(dpy, win, utf8, 0, (sizeof text / 4) + 1, False, + utf8, &da, &di, &dl, &dl, (unsigned char **)&p) + == Success && p) { + insert(p, (q = strchr(p, '\n')) ? q - p : (ssize_t)strlen(p)); + XFree(p); + } + drawmenu(); +} + +static void +readstdin(void) +{ + char buf[sizeof text], *p; + size_t i, imax = 0, size = 0; + unsigned int tmpmax = 0; + + /* read each line from stdin and add it to the item list */ + for (i = 0; fgets(buf, sizeof buf, stdin); i++) { + if (i + 1 >= size / sizeof *items) + if (!(items = realloc(items, (size += BUFSIZ)))) + die("cannot realloc %u bytes:", size); + if ((p = strchr(buf, '\n'))) + *p = '\0'; + if (!(items[i].text = strdup(buf))) + die("cannot strdup %u bytes:", strlen(buf) + 1); + items[i].out = 0; + drw_font_getexts(drw->fonts, buf, strlen(buf), &tmpmax, NULL); + if (tmpmax > inputw) { + inputw = tmpmax; + imax = i; + } + } + if (items) + items[i].text = NULL; + inputw = items ? TEXTW(items[imax].text) : 0; + lines = MIN(lines, i); +} + +static void +run(void) +{ + XEvent ev; + + while (!XNextEvent(dpy, &ev)) { + if (XFilterEvent(&ev, win)) + 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); + break; + case FocusIn: + /* regrab focus from parent window */ + if (ev.xfocus.window != win) + grabfocus(); + break; + case KeyPress: + keypress(&ev.xkey); + break; + case SelectionNotify: + if (ev.xselection.property == utf8) + paste(); + break; + case VisibilityNotify: + if (ev.xvisibility.state != VisibilityUnobscured) + XRaiseWindow(dpy, win); + break; + } + } +} + +static void +setup(void) +{ + int x, y, i, j; + unsigned int du; + XSetWindowAttributes swa; + XIM xim; + Window w, dw, *dws; + XWindowAttributes wa; + XClassHint ch = {"dmenu", "dmenu"}; +#ifdef XINERAMA + XineramaScreenInfo *info; + Window pw; + int a, di, n, area = 0; +#endif + /* init appearance */ + for (j = 0; j < SchemeLast; j++) + scheme[j] = drw_scm_create(drw, colors[j], 2); + + clip = XInternAtom(dpy, "CLIPBOARD", False); + utf8 = XInternAtom(dpy, "UTF8_STRING", False); + + /* calculate menu geometry */ + bh = drw->fonts->h + 2; + 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))) { + XGetInputFocus(dpy, &w, &di); + if (mon >= 0 && mon < n) + i = mon; + else if (w != root && w != PointerRoot && w != None) { + /* find top-level window containing current input focus */ + do { + if (XQueryTree(dpy, (pw = w), &dw, &w, &dws, &du) && dws) + XFree(dws); + } while (w != root && w != pw); + /* find xinerama screen with which the window intersects most */ + if (XGetWindowAttributes(dpy, pw, &wa)) + for (j = 0; j < n; j++) + if ((a = INTERSECT(wa.x, wa.y, wa.width, wa.height, info[j])) > area) { + area = a; + i = j; + } + } + /* no focused window is on screen, so use pointer location instead */ + if (mon < 0 && !area && XQueryPointer(dpy, root, &dw, &dw, &x, &y, &di, &di, &du)) + for (i = 0; i < n; i++) + if (INTERSECT(x, y, 1, 1, info[i])) + break; + + 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 + { + if (!XGetWindowAttributes(dpy, parentwin, &wa)) + die("could not get embedding window attributes: 0x%lx", + parentwin); + + 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; + } + } + inputw = MIN(inputw, mw/3); + match(); + + /* create menu window */ + 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, + CopyFromParent, CopyFromParent, CopyFromParent, + CWOverrideRedirect | CWBackPixel | CWEventMask, &swa); + XSetClassHint(dpy, win, &ch); + + + /* input methods */ + if ((xim = XOpenIM(dpy, NULL, NULL, NULL)) == NULL) + die("XOpenIM failed: could not open input device"); + + xic = XCreateIC(xim, XNInputStyle, XIMPreeditNothing | XIMStatusNothing, + XNClientWindow, win, XNFocusWindow, win, NULL); + + XMapRaised(dpy, win); + if (embed) { + XSelectInput(dpy, parentwin, FocusChangeMask | SubstructureNotifyMask); + if (XQueryTree(dpy, parentwin, &dw, &w, &dws, &du) && dws) { + for (i = 0; i < du && dws[i] != win; ++i) + XSelectInput(dpy, dws[i], FocusChangeMask); + XFree(dws); + } + grabfocus(); + } + drw_resize(drw, mw, mh); + drawmenu(); +} + +static void +usage(void) +{ + fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" + " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr); + exit(1); +} + +int +main(int argc, char *argv[]) +{ + XWindowAttributes wa; + int i, fast = 0; + + for (i = 1; i < argc; i++) + /* these options take no arguments */ + if (!strcmp(argv[i], "-v")) { /* prints version information */ + puts("dmenu-"VERSION); + exit(0); + } else if (!strcmp(argv[i], "-b")) /* appears at the bottom of the screen */ + 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], "-s")) { /* case-sensitive item matching */ + fstrncmp = strncmp; + fstrstr = strstr; + } else if (i + 1 == argc) + usage(); + /* these options take one argument */ + else if (!strcmp(argv[i], "-l")) /* number of lines in vertical list */ + lines = atoi(argv[++i]); + else if (!strcmp(argv[i], "-m")) + mon = atoi(argv[++i]); + else if (!strcmp(argv[i], "-p")) /* adds prompt to left of input field */ + prompt = argv[++i]; + else if (!strcmp(argv[i], "-fn")) /* font or font set */ + fonts[0] = argv[++i]; + else if (!strcmp(argv[i], "-nb")) /* normal background color */ + colors[SchemeNorm][ColBg] = argv[++i]; + else if (!strcmp(argv[i], "-nf")) /* normal foreground color */ + colors[SchemeNorm][ColFg] = argv[++i]; + else if (!strcmp(argv[i], "-sb")) /* selected background color */ + colors[SchemeSel][ColBg] = argv[++i]; + else if (!strcmp(argv[i], "-sf")) /* selected foreground color */ + colors[SchemeSel][ColFg] = argv[++i]; + else if (!strcmp(argv[i], "-w")) /* embedding window id */ + embed = argv[++i]; + else + usage(); + + if (!setlocale(LC_CTYPE, "") || !XSupportsLocale()) + fputs("warning: no locale support\n", stderr); + if (!(dpy = XOpenDisplay(NULL))) + die("cannot open display"); + screen = DefaultScreen(dpy); + root = RootWindow(dpy, screen); + if (!embed || !(parentwin = strtol(embed, NULL, 0))) + parentwin = root; + if (!XGetWindowAttributes(dpy, parentwin, &wa)) + die("could not get embedding window attributes: 0x%lx", + parentwin); + drw = drw_create(dpy, screen, root, wa.width, wa.height); + if (!drw_fontset_create(drw, fonts, LENGTH(fonts))) + die("no fonts could be loaded."); + lrpad = drw->fonts->h; + +#ifdef __OpenBSD__ + if (pledge("stdio rpath", NULL) == -1) + die("pledge"); +#endif + + if (fast && !isatty(0)) { + grabkeyboard(); + readstdin(); + } else { + readstdin(); + grabkeyboard(); + } + setup(); + run(); + + return 1; /* unreachable */ +} diff --git a/dmenu/.local/share/dmenu/dmenu.c.rej b/dmenu/.local/share/dmenu/dmenu.c.rej new file mode 100644 index 0000000..57cd09a --- /dev/null +++ b/dmenu/.local/share/dmenu/dmenu.c.rej @@ -0,0 +1,11 @@ +--- dmenu.c ++++ dmenu.c +@@ -732,6 +755,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; diff --git a/dmenu/.local/share/dmenu/dmenu.o b/dmenu/.local/share/dmenu/dmenu.o new file mode 100644 index 0000000000000000000000000000000000000000..0f1c0332794cf0653a24414c379a8bc657f8a92a GIT binary patch literal 35784 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 OWlua$)q8zo{l5UJ$7L!2 literal 0 HcmV?d00001 diff --git a/dmenu/.local/share/dmenu/dmenu_path b/dmenu/.local/share/dmenu/dmenu_path new file mode 100755 index 0000000..3a7cda7 --- /dev/null +++ b/dmenu/.local/share/dmenu/dmenu_path @@ -0,0 +1,13 @@ +#!/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/.local/share/dmenu/dmenu_run b/dmenu/.local/share/dmenu/dmenu_run new file mode 100755 index 0000000..834ede5 --- /dev/null +++ b/dmenu/.local/share/dmenu/dmenu_run @@ -0,0 +1,2 @@ +#!/bin/sh +dmenu_path | dmenu "$@" | ${SHELL:-"/bin/sh"} & diff --git a/dmenu/.local/share/dmenu/drw.c b/dmenu/.local/share/dmenu/drw.c new file mode 100644 index 0000000..4cdbcbe --- /dev/null +++ b/dmenu/.local/share/dmenu/drw.c @@ -0,0 +1,436 @@ +/* See LICENSE file for copyright and license details. */ +#include +#include +#include +#include +#include + +#include "drw.h" +#include "util.h" + +#define UTF_INVALID 0xFFFD +#define UTF_SIZ 4 + +static const unsigned char utfbyte[UTF_SIZ + 1] = {0x80, 0, 0xC0, 0xE0, 0xF0}; +static const unsigned char utfmask[UTF_SIZ + 1] = {0xC0, 0x80, 0xE0, 0xF0, 0xF8}; +static const long utfmin[UTF_SIZ + 1] = { 0, 0, 0x80, 0x800, 0x10000}; +static const long utfmax[UTF_SIZ + 1] = {0x10FFFF, 0x7F, 0x7FF, 0xFFFF, 0x10FFFF}; + +static long +utf8decodebyte(const char c, size_t *i) +{ + for (*i = 0; *i < (UTF_SIZ + 1); ++(*i)) + if (((unsigned char)c & utfmask[*i]) == utfbyte[*i]) + return (unsigned char)c & ~utfmask[*i]; + return 0; +} + +static size_t +utf8validate(long *u, size_t i) +{ + if (!BETWEEN(*u, utfmin[i], utfmax[i]) || BETWEEN(*u, 0xD800, 0xDFFF)) + *u = UTF_INVALID; + for (i = 1; *u > utfmax[i]; ++i) + ; + return i; +} + +static size_t +utf8decode(const char *c, long *u, size_t clen) +{ + size_t i, j, len, type; + long udecoded; + + *u = UTF_INVALID; + if (!clen) + return 0; + udecoded = utf8decodebyte(c[0], &len); + if (!BETWEEN(len, 1, UTF_SIZ)) + return 1; + for (i = 1, j = 1; i < clen && j < len; ++i, ++j) { + udecoded = (udecoded << 6) | utf8decodebyte(c[i], &type); + if (type) + return j; + } + if (j < len) + return 0; + *u = udecoded; + utf8validate(u, len); + + return len; +} + +Drw * +drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h) +{ + Drw *drw = ecalloc(1, sizeof(Drw)); + + drw->dpy = dpy; + drw->screen = screen; + drw->root = root; + drw->w = w; + drw->h = h; + drw->drawable = XCreatePixmap(dpy, root, w, h, DefaultDepth(dpy, screen)); + drw->gc = XCreateGC(dpy, root, 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; + if (drw->drawable) + XFreePixmap(drw->dpy, drw->drawable); + drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, DefaultDepth(drw->dpy, drw->screen)); +} + +void +drw_free(Drw *drw) +{ + XFreePixmap(drw->dpy, drw->drawable); + XFreeGC(drw->dpy, drw->gc); + drw_fontset_free(drw->fonts); + free(drw); +} + +/* This function is an implementation detail. Library users should use + * drw_fontset_create instead. + */ +static Fnt * +xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern) +{ + Fnt *font; + XftFont *xfont = NULL; + FcPattern *pattern = NULL; + + if (fontname) { + /* Using the pattern found at font->xfont->pattern does not yield the + * same substitution results as using the pattern returned by + * FcNameParse; using the latter results in the desired fallback + * behaviour whereas the former just results in missing-character + * rectangles being drawn, at least with some fonts. */ + if (!(xfont = XftFontOpenName(drw->dpy, drw->screen, fontname))) { + fprintf(stderr, "error, cannot load font from name: '%s'\n", fontname); + return NULL; + } + if (!(pattern = FcNameParse((FcChar8 *) fontname))) { + fprintf(stderr, "error, cannot parse font name to pattern: '%s'\n", fontname); + XftFontClose(drw->dpy, xfont); + return NULL; + } + } else if (fontpattern) { + if (!(xfont = XftFontOpenPattern(drw->dpy, fontpattern))) { + fprintf(stderr, "error, cannot load font from pattern.\n"); + return NULL; + } + } else { + die("no font specified."); + } + + /* Do not allow using color fonts. This is a workaround for a BadLength + * error from Xft with color glyphs. Modelled on the Xterm workaround. See + * https://bugzilla.redhat.com/show_bug.cgi?id=1498269 + * https://lists.suckless.org/dev/1701/30932.html + * https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=916349 + * and lots more all over the internet. + */ + FcBool iscol; + if(FcPatternGetBool(xfont->pattern, FC_COLOR, 0, &iscol) == FcResultMatch && iscol) { + XftFontClose(drw->dpy, xfont); + return NULL; + } + + font = ecalloc(1, sizeof(Fnt)); + font->xfont = xfont; + font->pattern = pattern; + font->h = xfont->ascent + xfont->descent; + font->dpy = drw->dpy; + + return font; +} + +static void +xfont_free(Fnt *font) +{ + if (!font) + return; + if (font->pattern) + FcPatternDestroy(font->pattern); + XftFontClose(font->dpy, font->xfont); + free(font); +} + +Fnt* +drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount) +{ + Fnt *cur, *ret = NULL; + size_t i; + + if (!drw || !fonts) + return NULL; + + for (i = 1; i <= fontcount; i++) { + if ((cur = xfont_create(drw, fonts[fontcount - i], NULL))) { + cur->next = ret; + ret = cur; + } + } + return (drw->fonts = ret); +} + +void +drw_fontset_free(Fnt *font) +{ + if (font) { + drw_fontset_free(font->next); + xfont_free(font); + } +} + +void +drw_clr_create(Drw *drw, Clr *dest, const char *clrname) +{ + if (!drw || !dest || !clrname) + return; + + if (!XftColorAllocName(drw->dpy, DefaultVisual(drw->dpy, drw->screen), + DefaultColormap(drw->dpy, drw->screen), + clrname, dest)) + die("error, cannot allocate color '%s'", clrname); +} + +/* Wrapper to create color schemes. The caller has to call free(3) on the + * returned color scheme when done using it. */ +Clr * +drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount) +{ + size_t i; + Clr *ret; + + /* need at least two colors for a scheme */ + if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, sizeof(XftColor)))) + return NULL; + + for (i = 0; i < clrcount; i++) + drw_clr_create(drw, &ret[i], clrnames[i]); + return ret; +} + +void +drw_setfontset(Drw *drw, Fnt *set) +{ + if (drw) + drw->fonts = set; +} + +void +drw_setscheme(Drw *drw, Clr *scm) +{ + if (drw) + drw->scheme = scm; +} + +void +drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert) +{ + if (!drw || !drw->scheme) + return; + XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme[ColBg].pixel : drw->scheme[ColFg].pixel); + if (filled) + XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h); + else + XDrawRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w - 1, h - 1); +} + +int +drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert) +{ + char buf[1024]; + int ty; + unsigned int ew; + XftDraw *d = NULL; + Fnt *usedfont, *curfont, *nextfont; + size_t i, len; + int utf8strlen, utf8charlen, render = x || y || w || h; + long utf8codepoint = 0; + const char *utf8str; + FcCharSet *fccharset; + FcPattern *fcpattern; + FcPattern *match; + XftResult result; + int charexists = 0; + + if (!drw || (render && !drw->scheme) || !text || !drw->fonts) + return 0; + + if (!render) { + w = ~w; + } else { + XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel); + XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h); + d = XftDrawCreate(drw->dpy, drw->drawable, + DefaultVisual(drw->dpy, drw->screen), + DefaultColormap(drw->dpy, drw->screen)); + x += lpad; + w -= lpad; + } + + usedfont = drw->fonts; + while (1) { + utf8strlen = 0; + utf8str = text; + nextfont = NULL; + while (*text) { + utf8charlen = utf8decode(text, &utf8codepoint, UTF_SIZ); + for (curfont = drw->fonts; curfont; curfont = curfont->next) { + charexists = charexists || XftCharExists(drw->dpy, curfont->xfont, utf8codepoint); + if (charexists) { + if (curfont == usedfont) { + utf8strlen += utf8charlen; + text += utf8charlen; + } else { + nextfont = curfont; + } + break; + } + } + + if (!charexists || nextfont) + break; + else + charexists = 0; + } + + if (utf8strlen) { + drw_font_getexts(usedfont, utf8str, utf8strlen, &ew, NULL); + /* shorten text if necessary */ + for (len = MIN(utf8strlen, sizeof(buf) - 1); len && ew > w; len--) + drw_font_getexts(usedfont, utf8str, len, &ew, NULL); + + if (len) { + memcpy(buf, utf8str, len); + buf[len] = '\0'; + if (len < utf8strlen) + for (i = len; i && i > len - 3; buf[--i] = '.') + ; /* NOP */ + + if (render) { + ty = y + (h - usedfont->h) / 2 + usedfont->xfont->ascent; + XftDrawStringUtf8(d, &drw->scheme[invert ? ColBg : ColFg], + usedfont->xfont, x, ty, (XftChar8 *)buf, len); + } + x += ew; + w -= ew; + } + } + + if (!*text) { + break; + } else if (nextfont) { + charexists = 0; + usedfont = nextfont; + } else { + /* Regardless of whether or not a fallback font is found, the + * character must be drawn. */ + charexists = 1; + + fccharset = FcCharSetCreate(); + FcCharSetAddChar(fccharset, utf8codepoint); + + if (!drw->fonts->pattern) { + /* Refer to the comment in xfont_create for more information. */ + die("the first font in the cache must be loaded from a font string."); + } + + fcpattern = FcPatternDuplicate(drw->fonts->pattern); + FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset); + FcPatternAddBool(fcpattern, FC_SCALABLE, FcTrue); + FcPatternAddBool(fcpattern, FC_COLOR, FcFalse); + + FcConfigSubstitute(NULL, fcpattern, FcMatchPattern); + FcDefaultSubstitute(fcpattern); + match = XftFontMatch(drw->dpy, drw->screen, fcpattern, &result); + + FcCharSetDestroy(fccharset); + FcPatternDestroy(fcpattern); + + if (match) { + usedfont = xfont_create(drw, NULL, match); + if (usedfont && XftCharExists(drw->dpy, usedfont->xfont, utf8codepoint)) { + for (curfont = drw->fonts; curfont->next; curfont = curfont->next) + ; /* NOP */ + curfont->next = usedfont; + } else { + xfont_free(usedfont); + usedfont = drw->fonts; + } + } + } + } + if (d) + XftDrawDestroy(d); + + return x + (render ? w : 0); +} + +void +drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h) +{ + if (!drw) + return; + + XCopyArea(drw->dpy, drw->drawable, win, drw->gc, x, y, w, h, x, y); + XSync(drw->dpy, False); +} + +unsigned int +drw_fontset_getwidth(Drw *drw, const char *text) +{ + if (!drw || !drw->fonts || !text) + return 0; + return drw_text(drw, 0, 0, 0, 0, 0, text, 0); +} + +void +drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h) +{ + XGlyphInfo ext; + + if (!font || !text) + return; + + XftTextExtentsUtf8(font->dpy, font->xfont, (XftChar8 *)text, len, &ext); + if (w) + *w = ext.xOff; + if (h) + *h = font->h; +} + +Cur * +drw_cur_create(Drw *drw, int shape) +{ + Cur *cur; + + if (!drw || !(cur = ecalloc(1, sizeof(Cur)))) + return NULL; + + cur->cursor = XCreateFontCursor(drw->dpy, shape); + + return cur; +} + +void +drw_cur_free(Drw *drw, Cur *cursor) +{ + if (!cursor) + return; + + XFreeCursor(drw->dpy, cursor->cursor); + free(cursor); +} diff --git a/dmenu/.local/share/dmenu/drw.h b/dmenu/.local/share/dmenu/drw.h new file mode 100644 index 0000000..4c67419 --- /dev/null +++ b/dmenu/.local/share/dmenu/drw.h @@ -0,0 +1,57 @@ +/* See LICENSE file for copyright and license details. */ + +typedef struct { + Cursor cursor; +} Cur; + +typedef struct Fnt { + Display *dpy; + unsigned int h; + XftFont *xfont; + FcPattern *pattern; + struct Fnt *next; +} Fnt; + +enum { ColFg, ColBg }; /* Clr scheme index */ +typedef XftColor Clr; + +typedef struct { + unsigned int w, h; + Display *dpy; + int screen; + Window root; + Drawable drawable; + GC gc; + Clr *scheme; + Fnt *fonts; +} Drw; + +/* 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_fontset_create(Drw* drw, const char *fonts[], size_t fontcount); +void drw_fontset_free(Fnt* set); +unsigned int drw_fontset_getwidth(Drw *drw, const char *text); +void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h); + +/* Colorscheme abstraction */ +void drw_clr_create(Drw *drw, Clr *dest, const char *clrname); +Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount); + +/* Cursor abstraction */ +Cur *drw_cur_create(Drw *drw, int shape); +void drw_cur_free(Drw *drw, Cur *cursor); + +/* Drawing context manipulation */ +void drw_setfontset(Drw *drw, Fnt *set); +void drw_setscheme(Drw *drw, Clr *scm); + +/* Drawing functions */ +void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert); +int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert); + +/* Map functions */ +void drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h); diff --git a/dmenu/.local/share/dmenu/drw.o b/dmenu/.local/share/dmenu/drw.o new file mode 100644 index 0000000000000000000000000000000000000000..97dce3981b42f327f578024a13033bbda8c8d866 GIT binary patch literal 10632 zcmbta4{%(?d4JNK?UQXzf*PZc0OxQ7*_h+b7;gQlWfHxz-Y>qIkY>tsY_3h~ibQ zQ}iR#sb&5?F*1!RiIMB*qg!+J;-~IGpZX{68r2+A=e-tNGUxh&=hCrxm#hC_bX+fu z>E_&tUx!A=)poTlZhqX}s+*tb#nZLjy5+v3j+mI5-xC_uhc6mWSc5gXwbhd_|KlX% zZywTzM+>*;)&tZ8tdHDBwa_T*KlLUbaDcw)V7zM~HxH|CRwSm=x_;%?ny zjP(&FiFHjF&`N5P!nF`sJxjNqt_>a6M-qNFSBMROsy7w4_}z*DD>i#{^DGxKv0#54 z2EIZrXOvdE+tsd^Egs!!g|)r4x>=)}y?74k7TnRT-(@?;n8xV!;z5v{T)jqpTwOD+ z50{L(cHO)JLu#qPiL9qFBZV4!gn4ewDTq_X)kkCI5%m$({Aaa2ZoaLy(MYCBtDbsq ze*`owY=~z5UNiqYVV;F1Q2t!pJZN^*=m-9DhVFWvC`eJwiiR~asF_10O)F+tobNO8OxOjMe)zwmI+=d5zlKzD{#EvlLX`wHlDkz8{Z&yDzrVpQ~ zes0t=R%js2A4pisJ$kCCCT^bB%~ND^+_jyACCoQCr|L-hd2j88j#A-p9Vq({DzkqZw%sfQ3AR>{?2aCbhR;$e)f#B*L&p@JX zH3eyEAaf&P0Kux6hhpZNSgzAyVadiWFXXsd%5fzl5;reUB!c8NhuUGv7ei zn{TjWyZv;pn>@V3zZYM#&0nXPW2WKvRlTNJfA4=0poZ1EkWH+l@(zCox z!9DSGXf!r_QA{ji9>ML_UC|(>+YT@`$9bP>o>E(&$zpB(8S;0FhDO**_=B7b`4*Xh zLP5$2x}{@rwAhP7tH}5fWUvOJ=cudH$JFB0iiEX3tbb)RbS6fzu7ToG8(zh3e-PY| zi(?_I3(e0OHP!pWksXNH+hD9dV)*rwA6!Pdu+z4#myYVi%dWw#D$B1#(2}U%;@39@ zh!t|_N7Eas_b&~f{4tHHIz-NDQ3^fr(vf(vb2iy1nNv zt6z9|>r$z)wMaUUMX`h{}Jey;7z)JWvPIrlED!4S8r&(1; z;`ZPiRhVUm%PD`URH8NV{>j>lr4p%wEROjaU_3EdY#6Y)%mQ;vw<10|*L|EYyL=Nr zBPHfvDwQZQCw@#zqE<0xlA~=?+05)i6e-m)I2Yb?!@oWkz7uooq}u-|vBFM#!zNW-I0_hunUC;K9an(fA6s;!kKd(XIP!=95RY zbS{_8E%c?5{ry?Pm&qo(eLdNJ!`G9`Zt(RdH>8*N?z|&^=S<~`gagT3K5bJHkJ9Fk9`}ZeGveMzW!4+kyg>+T@cN*DEoLEx9^-sg z)3=HA10SYe(M?sGQXPN&4Mib)#O1Mz>ge1}_Kdi|b{E;RljIhsS1xA;O-i!uS!%o5 z_7k(Gh1o;4cJMytFO_V4lKFvrYVf`elBrQ&W%Eq0CpJs~uT@A|HIq3Tl4WPd zW~~Gc?>Hubte66>gQ!d;2~?B_z2L86WvjOqMl^WqbZ@ZLTN52;KB9Tt!)Z4YEp*&f z2~&5vKwX3nB9;Bjb~qN{MR9eM(+B8QU)H85*|f~Nx2p1>_rpXskn>Ti(Md|gmH z?BKMw5iN_ORu)IpELUg>-O2@?HNHsY5<&e%SaIRsRK*2O&O&LaQsNWk1atANP^K%r zyv=?@LH$;aZ*bt$bSZ+0cj7}o&k%pXm*o>+l#>YG&10113Si&DLvkbdQXwBxiQyq! z6oFIQCE=pq#yxU#vhGrg`_ z$G_*mpXB&29C()FpE_`sLm;=3`%~_ADSY#hz)h%A-f)&@0ZfJebs79`%iupLga5n? zjx;@`+^M`DwPoltoPHmt@3PfVwsQPto+8BFPiFz*e?P~Aoc?=d_`ksEdpJGY z<1pr>GW27dem|$T<5f}K;`kz-n#7)Vg5yga_*srOa-8jLkb4RERP!<&_D_Z1SO)h4 zCqJCy{3F~C3(L^oUj|>w`P{=(3ftentGNvQT2B8XPS5r?(D#+0A1s3pm%;y{4E}>M zIK|CWe*32~`1@t>^JQ=s;$SNNH$^3fyvi1;NIXY9hH0~sd z-RQ}sZMwdGn|w$KB%(ojh3K`2UiZ>#F}?1i*ZuVRCcVN+XH#N%gPQ1E-q_e0YwK)N z8xpZjrK87ags9~M>Hddt(Ngk8H*R7|&j2nlMvu~%BD95WGBRn4eHQ~+!N@D!eQ6MK ztSN0YWV0DT9nEAhG>tnDE?7!uXWmGr)_10Q*LU_L`!d&tY3aO?%Wfj?2(vq)%>0(V zp$*9ag}0ibN=IwjNc8omRRcGzu7Z(<1{jq~=lh<5mW}WeA44!X64x-nREC&G89=UO z1HqnvR3;||z(G;EFsft#a}g2bQyT;UYo-k@hYg3kJZ_0_Cw1o1DT689n9Zfv<+6qT zZV2nkWLBah*}o1~!wxN%9K6<~QMS$5flVsBfZ?0^Q;Zu6jCE-vJp|7~xi(Z{Lq-}_ zwj-t(4Rul}P+iG_=^++>S7|8U|UHKZs zX)yW=7>ffi%J%p4t!piG<&8cA(*+tW-IFY23<-mN6o<`8Bh?E6u8fEZZi{G=f5g1P z6@z`_ezKZ8_{A5Js8IBVl+B*flOTsCy30$1_h|et&z87^WgwvT?(ElBQC{F%Avtfo` zkGh~A<+zjoI}%PgOVEGBaVP)N5`Ke3e}Ut~-zVXpbDa2)4+VemCtISQC*ikXf2Kn8 zbMOfIuXCK}zb@f_EaA6HctXPc623*k?~rghr%)mObQckFe;kL zelPk3{ZBbgYTYQ|=OudCKQ|I%6#6W}BlyrCV5rcCeuokG&HS80_)-baN;vJ!g8q34 zm*;mQzY;q6KQH0+5}yMSu1feeenldCDL;@-R7M=Q&}TZoT9VubJOb~MaJtJ1{4dMk zw^V@$h4@7A2>K2Q*Cf1G!ebKt6vs(_y1NTL+a>yW624o)8zp>?#OEdn{~L+ENy2|B z(bMl?Lhj2Fy)NP761|)Uj+UYSm4wG7KK~}+%Ow1~gg+$VS0tS7`a(|+KOd6+zaild zO1M0~nw#S4sFv34dA2S9eNym$Xi0e4m8N z@vxs1L7|VlUf!4RCFm1=TOh4R`VS}q?~?SC<@!KFh2oPQQ5N%xz-bLo8L&T-^x}6S zd7q^*;=cVW2fer_ySaY^e{mm)qtUHQBc$YrTPm=GImo5q_P_};8d#w@Q0&x0DrZ(o828i zKwQ$jILFb2<^NlJU_h?rX@8PkgxA*bcoiLd8bp(w{b&h9CK0>RLWe&Tv2PF?8q3o> z`#T8rQ%)hAyOSVRe&CQRaHsr*=pdf|*YR`)AfB`*%SFhaT6L=5Docg!$@p~PP z74s*?CsCPd{*T>mQyk?2X*y|(5#wnuq(a?J*@T~`O9IN#8TOalc{3j8c;e|$kqy|# a1$@`h>9qg)GUNBqCWRvMtlj#u|Na;4gKr-I literal 0 HcmV?d00001 diff --git a/dmenu/.local/share/dmenu/patches/dmenu-caseinsensitive-20200523-db6093f.diff b/dmenu/.local/share/dmenu/patches/dmenu-caseinsensitive-20200523-db6093f.diff new file mode 100644 index 0000000..939a2e8 --- /dev/null +++ b/dmenu/.local/share/dmenu/patches/dmenu-caseinsensitive-20200523-db6093f.diff @@ -0,0 +1,42 @@ +From 54acbdf72083a5eae5783eed42e162424ab2cec2 Mon Sep 17 00:00:00 2001 +From: Kim Torgersen +Date: Sat, 23 May 2020 14:48:28 +0200 +Subject: [PATCH] case-insensitive item matching default, case-sensitive option + (-s) + +--- + dmenu.c | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +diff --git a/dmenu.c b/dmenu.c +index 65f25ce..855df59 100644 +--- a/dmenu.c ++++ b/dmenu.c +@@ -55,8 +55,9 @@ static Clr *scheme[SchemeLast]; + + #include "config.h" + +-static int (*fstrncmp)(const char *, const char *, size_t) = strncmp; +-static char *(*fstrstr)(const char *, const char *) = strstr; ++static char * cistrstr(const char *s, const char *sub); ++static int (*fstrncmp)(const char *, const char *, size_t) = strncasecmp; ++static char *(*fstrstr)(const char *, const char *) = cistrstr; + + static void + appenditem(struct item *item, struct item **list, struct item **last) +@@ -709,9 +710,9 @@ 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], "-i")) { /* case-insensitive item matching */ +- fstrncmp = strncasecmp; +- fstrstr = cistrstr; ++ else if (!strcmp(argv[i], "-s")) { /* case-sensitive item matching */ ++ fstrncmp = strncmp; ++ fstrstr = strstr; + } else if (i + 1 == argc) + usage(); + /* these options take one argument */ +-- +2.26.2 + diff --git a/dmenu/.local/share/dmenu/patches/dmenu-center-20200111-8cd37e1.diff b/dmenu/.local/share/dmenu/patches/dmenu-center-20200111-8cd37e1.diff new file mode 100644 index 0000000..af249a6 --- /dev/null +++ b/dmenu/.local/share/dmenu/patches/dmenu-center-20200111-8cd37e1.diff @@ -0,0 +1,120 @@ +From 8cd37e1ab9e7cb025224aeb3543f1a5be8bceb93 Mon Sep 17 00:00:00 2001 +From: Nihal Jere +Date: Sat, 11 Jan 2020 21:16:08 -0600 +Subject: [PATCH] center patch now has adjustable minimum width + +--- + config.def.h | 2 ++ + dmenu.1 | 3 +++ + dmenu.c | 39 ++++++++++++++++++++++++++++++++------- + 3 files changed, 37 insertions(+), 7 deletions(-) + +diff --git a/config.def.h b/config.def.h +index 1edb647..88ef264 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -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" +diff --git a/dmenu.1 b/dmenu.1 +index 323f93c..c036baa 100644 +--- a/dmenu.1 ++++ b/dmenu.1 +@@ -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. +diff --git a/dmenu.c b/dmenu.c +index 65f25ce..041c7f8 100644 +--- a/dmenu.c ++++ b/dmenu.c +@@ -89,6 +89,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) + { +@@ -611,6 +620,7 @@ setup(void) + bh = drw->fonts->h + 2; + 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))) { +@@ -637,9 +647,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 +@@ -647,11 +664,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(); + +@@ -709,6 +732,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; +-- +2.24.1 + diff --git a/dmenu/.local/share/dmenu/patches/dmenu-highlight-20201211-fcdc159.diff b/dmenu/.local/share/dmenu/patches/dmenu-highlight-20201211-fcdc159.diff new file mode 100644 index 0000000..c3ac5c1 --- /dev/null +++ b/dmenu/.local/share/dmenu/patches/dmenu-highlight-20201211-fcdc159.diff @@ -0,0 +1,97 @@ +From fcdc1593ed418166f20b7e691a49b1e6eefc116e Mon Sep 17 00:00:00 2001 +From: Nathaniel Evan +Date: Fri, 11 Dec 2020 11:08:12 +0700 +Subject: [PATCH] Highlight matched text in a different color scheme + +--- + config.def.h | 3 +++ + dmenu.c | 44 +++++++++++++++++++++++++++++++++++++++++--- + 2 files changed, 44 insertions(+), 3 deletions(-) + +diff --git a/config.def.h b/config.def.h +index 1edb647..79be73a 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -11,7 +11,10 @@ static const char *colors[SchemeLast][2] = { + /* fg bg */ + [SchemeNorm] = { "#bbbbbb", "#222222" }, + [SchemeSel] = { "#eeeeee", "#005577" }, ++ [SchemeSelHighlight] = { "#ffc978", "#005577" }, ++ [SchemeNormHighlight] = { "#ffc978", "#222222" }, + [SchemeOut] = { "#000000", "#00ffff" }, ++ [SchemeOutHighlight] = { "#ffc978", "#00ffff" }, + }; + /* -l option; if nonzero, dmenu uses vertical list with given number of lines */ + static unsigned int lines = 0; +diff --git a/dmenu.c b/dmenu.c +index 65f25ce..cce1ad1 100644 +--- a/dmenu.c ++++ b/dmenu.c +@@ -26,8 +26,7 @@ + #define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad) + + /* enums */ +-enum { SchemeNorm, SchemeSel, SchemeOut, SchemeLast }; /* color schemes */ +- ++enum { SchemeNorm, SchemeSel, SchemeOut, SchemeNormHighlight, SchemeSelHighlight, SchemeOutHighlight, SchemeLast }; /* color schemes */ + struct item { + char *text; + struct item *left, *right; +@@ -113,6 +112,43 @@ 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 : item->out ? SchemeOutHighlight : 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'; ++ if (indentx - (lrpad / 2) - 1 < maxw) ++ 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 +159,9 @@ 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 +-- +2.29.2 + diff --git a/dmenu/.local/share/dmenu/stest b/dmenu/.local/share/dmenu/stest new file mode 100755 index 0000000000000000000000000000000000000000..9961f4dfccd42a689ddcfd72f73b700e95c89adb GIT binary patch literal 22104 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 Qwm)~3(AZ)!FtO}^0b1Npa{vGU literal 0 HcmV?d00001 diff --git a/dmenu/.local/share/dmenu/stest.1 b/dmenu/.local/share/dmenu/stest.1 new file mode 100644 index 0000000..2667d8a --- /dev/null +++ b/dmenu/.local/share/dmenu/stest.1 @@ -0,0 +1,90 @@ +.TH STEST 1 dmenu\-VERSION +.SH NAME +stest \- filter a list of files by properties +.SH SYNOPSIS +.B stest +.RB [ -abcdefghlpqrsuwx ] +.RB [ -n +.IR file ] +.RB [ -o +.IR file ] +.RI [ file ...] +.SH DESCRIPTION +.B stest +takes a list of files and filters by the files' properties, analogous to +.IR test (1). +Files which pass all tests are printed to stdout. If no files are given, stest +reads files from stdin. +.SH OPTIONS +.TP +.B \-a +Test hidden files. +.TP +.B \-b +Test that files are block specials. +.TP +.B \-c +Test that files are character specials. +.TP +.B \-d +Test that files are directories. +.TP +.B \-e +Test that files exist. +.TP +.B \-f +Test that files are regular files. +.TP +.B \-g +Test that files have their set-group-ID flag set. +.TP +.B \-h +Test that files are symbolic links. +.TP +.B \-l +Test the contents of a directory given as an argument. +.TP +.BI \-n " file" +Test that files are newer than +.IR file . +.TP +.BI \-o " file" +Test that files are older than +.IR file . +.TP +.B \-p +Test that files are named pipes. +.TP +.B \-q +No files are printed, only the exit status is returned. +.TP +.B \-r +Test that files are readable. +.TP +.B \-s +Test that files are not empty. +.TP +.B \-u +Test that files have their set-user-ID flag set. +.TP +.B \-v +Invert the sense of tests, only failing files pass. +.TP +.B \-w +Test that files are writable. +.TP +.B \-x +Test that files are executable. +.SH EXIT STATUS +.TP +.B 0 +At least one file passed all tests. +.TP +.B 1 +No files passed all tests. +.TP +.B 2 +An error occurred. +.SH SEE ALSO +.IR dmenu (1), +.IR test (1) diff --git a/dmenu/.local/share/dmenu/stest.c b/dmenu/.local/share/dmenu/stest.c new file mode 100644 index 0000000..e27d3a5 --- /dev/null +++ b/dmenu/.local/share/dmenu/stest.c @@ -0,0 +1,109 @@ +/* See LICENSE file for copyright and license details. */ +#include + +#include +#include +#include +#include +#include +#include + +#include "arg.h" +char *argv0; + +#define FLAG(x) (flag[(x)-'a']) + +static void test(const char *, const char *); +static void usage(void); + +static int match = 0; +static int flag[26]; +static struct stat old, new; + +static void +test(const char *path, const char *name) +{ + struct stat st, ln; + + if ((!stat(path, &st) && (FLAG('a') || name[0] != '.') /* hidden files */ + && (!FLAG('b') || S_ISBLK(st.st_mode)) /* block special */ + && (!FLAG('c') || S_ISCHR(st.st_mode)) /* character special */ + && (!FLAG('d') || S_ISDIR(st.st_mode)) /* directory */ + && (!FLAG('e') || access(path, F_OK) == 0) /* exists */ + && (!FLAG('f') || S_ISREG(st.st_mode)) /* regular file */ + && (!FLAG('g') || st.st_mode & S_ISGID) /* set-group-id flag */ + && (!FLAG('h') || (!lstat(path, &ln) && S_ISLNK(ln.st_mode))) /* symbolic link */ + && (!FLAG('n') || st.st_mtime > new.st_mtime) /* newer than file */ + && (!FLAG('o') || st.st_mtime < old.st_mtime) /* older than file */ + && (!FLAG('p') || S_ISFIFO(st.st_mode)) /* named pipe */ + && (!FLAG('r') || access(path, R_OK) == 0) /* readable */ + && (!FLAG('s') || st.st_size > 0) /* not empty */ + && (!FLAG('u') || st.st_mode & S_ISUID) /* set-user-id flag */ + && (!FLAG('w') || access(path, W_OK) == 0) /* writable */ + && (!FLAG('x') || access(path, X_OK) == 0)) != FLAG('v')) { /* executable */ + if (FLAG('q')) + exit(0); + match = 1; + puts(name); + } +} + +static void +usage(void) +{ + fprintf(stderr, "usage: %s [-abcdefghlpqrsuvwx] " + "[-n file] [-o file] [file...]\n", argv0); + exit(2); /* like test(1) return > 1 on error */ +} + +int +main(int argc, char *argv[]) +{ + struct dirent *d; + char path[PATH_MAX], *line = NULL, *file; + size_t linesiz = 0; + ssize_t n; + DIR *dir; + int r; + + ARGBEGIN { + case 'n': /* newer than file */ + case 'o': /* older than file */ + file = EARGF(usage()); + if (!(FLAG(ARGC()) = !stat(file, (ARGC() == 'n' ? &new : &old)))) + perror(file); + break; + default: + /* miscellaneous operators */ + if (strchr("abcdefghlpqrsuvwx", ARGC())) + FLAG(ARGC()) = 1; + else + usage(); /* unknown flag */ + } ARGEND; + + if (!argc) { + /* read list from stdin */ + while ((n = getline(&line, &linesiz, stdin)) > 0) { + if (line[n - 1] == '\n') + line[n - 1] = '\0'; + test(line, line); + } + free(line); + } else { + for (; argc; argc--, argv++) { + if (FLAG('l') && (dir = opendir(*argv))) { + /* test directory contents */ + while ((d = readdir(dir))) { + r = snprintf(path, sizeof path, "%s/%s", + *argv, d->d_name); + if (r >= 0 && (size_t)r < sizeof path) + test(path, d->d_name); + } + closedir(dir); + } else { + test(*argv, *argv); + } + } + } + return match ? 0 : 1; +} diff --git a/dmenu/.local/share/dmenu/stest.o b/dmenu/.local/share/dmenu/stest.o new file mode 100644 index 0000000000000000000000000000000000000000..2d6d18002ec2d58f00b87e0d62d103a31e6c4615 GIT binary patch literal 5296 zcmbW5Z;Tto6~M>#CFkbS-3v+6qbbFKJ$ezGYhPP*38cEcJ11-EBWd#oRk`5X*z3Df zeD>j8=MGAhLuUs$jzdJDt)ObkpAQI-prUQ~fPzI5l2%1ZY1MwARX(7CWl&NHB^3qS z_r^2lxrz5nU$mZizj^cK&CHwKxg3tfws}1s!o@?rM_L-Egk0%v)rV+xh^Ry%JB{*I zRE^4au?Sa<@>j6(A^yDS69m0MN1GXnxwQ zSamwX)!KQ$i_|&Ecj^mwYeA>Rbf>#Kss(z<6+*U>2}1H0+cgBB;Z(bZA!zs&ciqJ; zHr3aLuNtMxJcbWybB#tr7-)eIwU_|LdvskL)i!phg&i%HUvd|zhmFc_wO3H@_cXCXkv=TUg8T8iHUjxPKM7t_SJ0 zztw9K{k~X*W}d!R-=pu|Q^_`V8I}9}kiC7d#LKd`2LPu1O5^;f=Eume0ua}sxt(R7 zQLL(k&jBqA_N&EDpmKDlr|_;?s3H5bKfh*S-b?ab#^M=&fsB`ARaWzchOq3 zbPi(}=iz~p->{_6HFaV<`R=S=h*c)m8s#p0>Cm^;Sn1Mf0$Ua3Qgf#53RR*|56Pe*)GN^XcoX?VDKYN_QU=A;w~O z?uM1_W8P7v=ZNnf<)YU&=v8{aY*_Kb%%FLk+1|%&AM-|)p5wk@B~a-YR{D;u(3Q}U zm7~hwV(0gjO95ZMR~ZDPD}7)xtn`3;>WjH)Tj2J0kbgJYHTv3qSqSmLzjopSPwm7< zXvQvU`Vwef!9QIiV6cyrbDgdeFkEL3_@BUlL8h7oxe-d_0j8f|Pdzo&Aqoxaq<(E(1F8o;+{-O(i#f6`8 z;cvR|3oe}4j%7Q+1fd^Ff(l8c%}J86=14Z3Br~Rym?FX0NC4d7N`hUnlX$n7)aX=>Kbi{~t*94jb=)#DB{4w8Z&%aC@P`P{m7Xt*5{om-q`xxi*dX@PNN&IQXw+Md3JRFkj ztIVE%-!PsH@bG<43V!e&!8!l3U^Dg^XMXO1Itp^}yzsn2jt}?qA=FX09~=Yaa!CQ-ZlHDrg=K!sltp2#A?;^0OqE$j;1I8R(VCI#v*F*ZuU{!)&docq(Vk zSYi +#include +#include +#include + +#include "util.h" + +void * +ecalloc(size_t nmemb, size_t size) +{ + void *p; + + if (!(p = calloc(nmemb, size))) + die("calloc:"); + return p; +} + +void +die(const char *fmt, ...) { + va_list ap; + + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + + if (fmt[0] && fmt[strlen(fmt)-1] == ':') { + fputc(' ', stderr); + perror(NULL); + } else { + fputc('\n', stderr); + } + + exit(1); +} diff --git a/dmenu/.local/share/dmenu/util.h b/dmenu/.local/share/dmenu/util.h new file mode 100644 index 0000000..f633b51 --- /dev/null +++ b/dmenu/.local/share/dmenu/util.h @@ -0,0 +1,8 @@ +/* See LICENSE file for copyright and license details. */ + +#define MAX(A, B) ((A) > (B) ? (A) : (B)) +#define MIN(A, B) ((A) < (B) ? (A) : (B)) +#define BETWEEN(X, A, B) ((A) <= (X) && (X) <= (B)) + +void die(const char *fmt, ...); +void *ecalloc(size_t nmemb, size_t size); diff --git a/dmenu/.local/share/dmenu/util.o b/dmenu/.local/share/dmenu/util.o new file mode 100644 index 0000000000000000000000000000000000000000..6dea33532df10197ebcd69b05a9eb56a8b227e57 GIT binary patch literal 2272 zcmbW1K}-`t6oy|ZN=2X*IAHM5!)j=Po3_SCP)UITt8N4VBXY2ovIJsjo9&jMF%csk z8bZRsqX!NiH1S}fM-zx1^ytx(a5TXK9y}OK@V(u6bX>O=-e&UNeD8lVvopK%Xh0vV z@%ezw2R%^fF$GvZQi&6Gn1DuTfHAGSr#=3$jYun7N|#n1R}xxTS2VqxR7P}+CYCp? z?qDRT+zm!_r4WofQMKOv$TGDuaKR<77`lS(Y|_dwF6+VKT*3av<&lA~=Dtahc zb6GV5s@@-k={W<6*0f=okQ&m5`+D`%@ZjLsz<6rBw@)8P!NN?zoXc4=s4}xg4rU4^ zD+2{A$eUm+&RJkMpDC1ZKC&8Y$Fcp{ckC5GG&*tGYvykWqPg`S9Bk{GFlPN%i3cUV zC2=|z*6&DM*8h??oiXe8B;F$NI{NU@Xr1(JvA#iYdN2B`nTIhZBRw^?OCn&-=LKr< z{=Ai*LT{OlpXJCjvT4;a7A;Vx(^eYPsbUdSGfy3o$J7|8nf&~`kwZx?Zy74y5@(B6 zI&%+oRBg7u>E5M(E_5L_L4&W zv*~{$JA;k5`$idc%}ZJ`H||76V;;6XCdQ1TmyPG=^>U8qXP>|X#ZeXrKPd!!S96-{ z*k8c}$E+d0-~~OjcLbBaNvdBI^>mNO=6;{snDjcofVgV;z3BX?mh1WaXd3t2h~TrB re_MFEJ9rGrbNw-l-DgMnmjX^uM=~+o0il20tG-LDfA&D>1n&C3OT!4^ literal 0 HcmV?d00001 diff --git a/dwm/.local/share/dwm/LICENSE b/dwm/.local/share/dwm/LICENSE new file mode 100644 index 0000000..d221f09 --- /dev/null +++ b/dwm/.local/share/dwm/LICENSE @@ -0,0 +1,37 @@ +MIT/X Consortium License + +© 2006-2019 Anselm R Garbe +© 2006-2009 Jukka Salmi +© 2006-2007 Sander van Dijk +© 2007-2011 Peter Hartlich +© 2007-2009 Szabolcs Nagy +© 2007-2009 Christof Musik +© 2007-2009 Premysl Hruby +© 2007-2008 Enno Gottox Boland +© 2008 Martin Hurton +© 2008 Neale Pickett +© 2009 Mate Nagy +© 2010-2016 Hiltjo Posthuma +© 2010-2012 Connor Lane Smith +© 2011 Christoph Lohmann <20h@r-36.net> +© 2015-2016 Quentin Rameau +© 2015-2016 Eric Pruitt +© 2016-2017 Markus Teich + +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. diff --git a/dwm/.local/share/dwm/Makefile b/dwm/.local/share/dwm/Makefile new file mode 100644 index 0000000..77bcbc0 --- /dev/null +++ b/dwm/.local/share/dwm/Makefile @@ -0,0 +1,51 @@ +# 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: + ${CC} -c ${CFLAGS} $< + +${OBJ}: config.h config.mk + +config.h: + cp config.def.h $@ + +dwm: ${OBJ} + ${CC} -o $@ ${OBJ} ${LDFLAGS} + +clean: + rm -f dwm ${OBJ} dwm-${VERSION}.tar.gz + +dist: clean + mkdir -p dwm-${VERSION} + cp -R LICENSE Makefile README config.def.h config.mk\ + dwm.1 drw.h util.h ${SRC} dwm.png transient.c dwm-${VERSION} + tar -cf dwm-${VERSION}.tar dwm-${VERSION} + gzip dwm-${VERSION}.tar + rm -rf dwm-${VERSION} + +install: all + mkdir -p ${DESTDIR}${PREFIX}/bin + cp -f dwm ${DESTDIR}${PREFIX}/bin + chmod 755 ${DESTDIR}${PREFIX}/bin/dwm + 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: + rm -f ${DESTDIR}${PREFIX}/bin/dwm\ + ${DESTDIR}${MANPREFIX}/man1/dwm.1 + +.PHONY: all options clean dist install uninstall diff --git a/dwm/.local/share/dwm/README b/dwm/.local/share/dwm/README new file mode 100644 index 0000000..95d4fd0 --- /dev/null +++ b/dwm/.local/share/dwm/README @@ -0,0 +1,48 @@ +dwm - dynamic window manager +============================ +dwm is an extremely fast, small, and dynamic window manager for X. + + +Requirements +------------ +In order to build dwm you need the Xlib header files. + + +Installation +------------ +Edit config.mk to match your local setup (dwm is installed into +the /usr/local namespace by default). + +Afterwards enter the following command to build and install dwm (if +necessary as root): + + make clean install + + +Running dwm +----------- +Add the following line to your .xinitrc to start dwm using startx: + + exec dwm + +In order to connect dwm to a specific display, make sure that +the DISPLAY environment variable is set correctly, e.g.: + + DISPLAY=foo.bar:1 exec dwm + +(This will start dwm on display :1 of the host foo.bar.) + +In order to display status info in the bar, you can do something +like this in your .xinitrc: + + while xsetroot -name "`date` `uptime | sed 's/.*,//'`" + do + sleep 1 + done & + exec dwm + + +Configuration +------------- +The configuration of dwm is done by creating a custom config.h +and (re)compiling the source code. diff --git a/dwm/.local/share/dwm/config.def.h.orig b/dwm/.local/share/dwm/config.def.h.orig new file mode 100644 index 0000000..e1c116d --- /dev/null +++ b/dwm/.local/share/dwm/config.def.h.orig @@ -0,0 +1,156 @@ +/* See LICENSE file for copyright and license details. */ + +/* appearance */ +static const unsigned int borderpx = 1; /* border pixel of windows */ +static const unsigned int snap = 32; /* snap pixel */ +static const unsigned int gappih = 20; /* horiz inner gap between windows */ +static const unsigned int gappiv = 10; /* vert inner gap between windows */ +static const unsigned int gappoh = 10; /* horiz outer gap between windows and screen edge */ +static const unsigned int gappov = 30; /* vert outer gap between windows and screen edge */ +static int smartgaps = 0; /* 1 means no outer gap when there is only one window */ +static const int showbar = 1; /* 0 means no bar */ +static const int topbar = 1; /* 0 means bottom bar */ +static const char *fonts[] = { "monospace:size=10" }; +static const char dmenufont[] = "monospace:size=10"; +static const char col_gray1[] = "#222222"; +static const char col_gray2[] = "#444444"; +static const char col_gray3[] = "#bbbbbb"; +static const char col_gray4[] = "#eeeeee"; +static const char col_cyan[] = "#005577"; +static const char *colors[][3] = { + /* fg bg border */ + [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, + [SchemeSel] = { col_gray4, col_cyan, col_cyan }, +}; + +static const char *const autostart[] = { + "st", NULL, + NULL /* terminate */ +}; + +/* 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, 1, -1 }, + { "Firefox", NULL, NULL, 1 << 8, 0, -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 int resizehints = 1; /* 1 means respect size hints in tiled resizals */ + +#define FORCE_VSPLIT 1 /* nrowgrid layout: force two clients to always split vertically */ +#include "vanitygaps.c" + +static const Layout layouts[] = { + /* symbol arrange function */ + { "[]=", tile }, /* first entry is default */ + { "[M]", monocle }, + { "[@]", spiral }, + { "[\\]", dwindle }, + { "H[]", deck }, + { "TTT", bstack }, + { "===", bstackhoriz }, + { "HHH", grid }, + { "###", nrowgrid }, + { "---", horizgrid }, + { ":::", gaplessgrid }, + { "|M|", centeredmaster }, + { ">M>", centeredfloatingmaster }, + { "><>", NULL }, /* no layout function means floating behavior */ + { NULL, NULL }, +}; + +/* 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 char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */ +static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; +static const char *termcmd[] = { "st", 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|Mod4Mask, XK_u, incrgaps, {.i = +1 } }, + { MODKEY|Mod4Mask|ShiftMask, XK_u, incrgaps, {.i = -1 } }, + { MODKEY|Mod4Mask, XK_i, incrigaps, {.i = +1 } }, + { MODKEY|Mod4Mask|ShiftMask, XK_i, incrigaps, {.i = -1 } }, + { MODKEY|Mod4Mask, XK_o, incrogaps, {.i = +1 } }, + { MODKEY|Mod4Mask|ShiftMask, XK_o, incrogaps, {.i = -1 } }, + { MODKEY|Mod4Mask, XK_6, incrihgaps, {.i = +1 } }, + { MODKEY|Mod4Mask|ShiftMask, XK_6, incrihgaps, {.i = -1 } }, + { MODKEY|Mod4Mask, XK_7, incrivgaps, {.i = +1 } }, + { MODKEY|Mod4Mask|ShiftMask, XK_7, incrivgaps, {.i = -1 } }, + { MODKEY|Mod4Mask, XK_8, incrohgaps, {.i = +1 } }, + { MODKEY|Mod4Mask|ShiftMask, XK_8, incrohgaps, {.i = -1 } }, + { MODKEY|Mod4Mask, XK_9, incrovgaps, {.i = +1 } }, + { MODKEY|Mod4Mask|ShiftMask, XK_9, incrovgaps, {.i = -1 } }, + { MODKEY|Mod4Mask, XK_0, togglegaps, {0} }, + { MODKEY|Mod4Mask|ShiftMask, XK_0, defaultgaps, {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 ClkTagBar, 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} }, +}; + diff --git a/dwm/.local/share/dwm/config.h b/dwm/.local/share/dwm/config.h new file mode 100644 index 0000000..91eb8d5 --- /dev/null +++ b/dwm/.local/share/dwm/config.h @@ -0,0 +1,170 @@ +/* See LICENSE file for copyright and license details. */ + +/* appearance */ +static const unsigned int borderpx = 0; /* border pixel of windows */ +static const unsigned int snap = 32; /* snap pixel */ +static const unsigned int gappih = 8; /* horiz inner gap between windows */ +static const unsigned int gappiv = 8; /* vert inner gap between windows */ +static const unsigned int gappoh = 8; /* horiz outer gap between windows and screen edge */ +static const unsigned int gappov = 8; /* vert outer gap between windows and screen edge */ +static int smartgaps = 1; /* 1 means no outer gap when there is only one window */ +static const int showbar = 1; /* 0 means no bar */ +static const int topbar = 1; /* 0 means bottom bar */ +static const int usealtbar = 1; /* 1 means use non-dwm status bar */ +static const char *altbarclass = "Polybar"; /* Alternate bar class name */ +static const char *alttrayname = "tray"; /* Polybar tray instance name */ +static const char *altbarcmd = "~/.config/polybar/launch.sh"; /* Alternate bar launch command */ +static const char *fonts[] = { "SF Pro Display:size=13" }; +static const char dmenufont[] = "SF Pro Display:size=13"; +static const char col_gray1[] = "#222222"; +static const char col_gray2[] = "#444444"; +static const char col_gray3[] = "#bbbbbb"; +static const char col_gray4[] = "#eeeeee"; +static const char col_cyan[] = "#005577"; +static const char *colors[][3] = { + /* fg bg border */ + [SchemeNorm] = { "#e3e1e4", "#1a181a", col_gray2 }, + [SchemeSel] = { "#1a181a", "#e3e1e4", col_cyan }, +}; + +static const char *const autostart[] = { + "picom", "--experimental-backends", "--backend", "glx", NULL, + "setroot", "~/Pictures/Anime-Girls-Holding-Programming-Books/Rust/Rin_Shima_The_Rust_Programming_Language_2.png", "~/Pictures/Anime-Girls-Holding-Programming-Books/Rust/Rin_Shima_The_Rust_Programming_Language.png", NULL, + "keepassxc", NULL, + "redshift", NULL, + "xinput", "set-prop", "SteelSeries SteelSeries Rival 300S Gaming Mouse", "Coordinate Transformation Matrix", "0.62", "0.0", "0.0", "0.0", "0.62", "0.0", "0.0", "0.0", "1.0", NULL, + "wired", NULL, + NULL /* terminate */ +}; + +/* 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, 1, -1 }, + { "discord", NULL, NULL, 0, 1, -1 }, + { "wired", NULL, NULL, 0, 1, -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 int resizehints = 1; /* 1 means respect size hints in tiled resizals */ + +#define FORCE_VSPLIT 1 /* nrowgrid layout: force two clients to always split vertically */ +#include "vanitygaps.c" + +static const Layout layouts[] = { + /* symbol arrange function */ + { "[]=", tile }, /* first entry is default */ + { "[M]", monocle }, + { "[@]", spiral }, + { "[\\]", dwindle }, + { "H[]", deck }, + { "TTT", bstack }, + { "===", bstackhoriz }, + { "HHH", grid }, + { "###", nrowgrid }, + { "---", horizgrid }, + { ":::", gaplessgrid }, + { "|M|", centeredmaster }, + { ">M>", centeredfloatingmaster }, + { "><>", NULL }, /* no layout function means floating behavior */ + { NULL, NULL }, +}; + +/* key definitions */ +#define MODKEY Mod4Mask +#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 char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */ +static const char *dmenucmd[] = { "dmenu_run", NULL }; +static const char *termcmd[] = { "st", 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|Mod4Mask, XK_u, incrgaps, {.i = +1 } }, + { MODKEY|Mod4Mask|ShiftMask, XK_u, incrgaps, {.i = -1 } }, + { MODKEY|Mod4Mask, XK_i, incrigaps, {.i = +1 } }, + { MODKEY|Mod4Mask|ShiftMask, XK_i, incrigaps, {.i = -1 } }, + { MODKEY|Mod4Mask, XK_o, incrogaps, {.i = +1 } }, + { MODKEY|Mod4Mask|ShiftMask, XK_o, incrogaps, {.i = -1 } }, + { MODKEY|Mod4Mask, XK_6, incrihgaps, {.i = +1 } }, + { MODKEY|Mod4Mask|ShiftMask, XK_6, incrihgaps, {.i = -1 } }, + { MODKEY|Mod4Mask, XK_7, incrivgaps, {.i = +1 } }, + { MODKEY|Mod4Mask|ShiftMask, XK_7, incrivgaps, {.i = -1 } }, + { MODKEY|Mod4Mask, XK_8, incrohgaps, {.i = +1 } }, + { MODKEY|Mod4Mask|ShiftMask, XK_8, incrohgaps, {.i = -1 } }, + { MODKEY|Mod4Mask, XK_9, incrovgaps, {.i = +1 } }, + { MODKEY|Mod4Mask|ShiftMask, XK_9, incrovgaps, {.i = -1 } }, + { MODKEY|Mod4Mask, XK_0, togglegaps, {0} }, + { MODKEY|Mod4Mask|ShiftMask, XK_0, defaultgaps, {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[13]} }, + { MODKEY, XK_m, setlayout, {.v = &layouts[1]} }, + { MODKEY, XK_s, setlayout, {.v = &layouts[4]} }, + { MODKEY, XK_g, setlayout, {.v = &layouts[7]} }, + { MODKEY, XK_b, setlayout, {.v = &layouts[5]} }, + { MODKEY, XK_w, setlayout, {.v = &layouts[3]} }, + { 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 ClkTagBar, 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} }, +}; + diff --git a/dwm/.local/share/dwm/config.mk b/dwm/.local/share/dwm/config.mk new file mode 100644 index 0000000..7084c33 --- /dev/null +++ b/dwm/.local/share/dwm/config.mk @@ -0,0 +1,38 @@ +# dwm version +VERSION = 6.2 + +# 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 + +# freetype +FREETYPELIBS = -lfontconfig -lXft +FREETYPEINC = /usr/include/freetype2 +# OpenBSD (uncomment) +#FREETYPEINC = ${X11INC}/freetype2 + +# includes and libs +INCS = -I${X11INC} -I${FREETYPEINC} +LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} + +# flags +CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=200809L -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS} +#CFLAGS = -g -std=c99 -pedantic -Wall -O0 ${INCS} ${CPPFLAGS} +CFLAGS = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os ${INCS} ${CPPFLAGS} +LDFLAGS = ${LIBS} + +# Solaris +#CFLAGS = -fast ${INCS} -DVERSION=\"${VERSION}\" +#LDFLAGS = ${LIBS} + +# compiler and linker +CC = cc diff --git a/dwm/.local/share/dwm/drw.c b/dwm/.local/share/dwm/drw.c new file mode 100644 index 0000000..4cdbcbe --- /dev/null +++ b/dwm/.local/share/dwm/drw.c @@ -0,0 +1,436 @@ +/* See LICENSE file for copyright and license details. */ +#include +#include +#include +#include +#include + +#include "drw.h" +#include "util.h" + +#define UTF_INVALID 0xFFFD +#define UTF_SIZ 4 + +static const unsigned char utfbyte[UTF_SIZ + 1] = {0x80, 0, 0xC0, 0xE0, 0xF0}; +static const unsigned char utfmask[UTF_SIZ + 1] = {0xC0, 0x80, 0xE0, 0xF0, 0xF8}; +static const long utfmin[UTF_SIZ + 1] = { 0, 0, 0x80, 0x800, 0x10000}; +static const long utfmax[UTF_SIZ + 1] = {0x10FFFF, 0x7F, 0x7FF, 0xFFFF, 0x10FFFF}; + +static long +utf8decodebyte(const char c, size_t *i) +{ + for (*i = 0; *i < (UTF_SIZ + 1); ++(*i)) + if (((unsigned char)c & utfmask[*i]) == utfbyte[*i]) + return (unsigned char)c & ~utfmask[*i]; + return 0; +} + +static size_t +utf8validate(long *u, size_t i) +{ + if (!BETWEEN(*u, utfmin[i], utfmax[i]) || BETWEEN(*u, 0xD800, 0xDFFF)) + *u = UTF_INVALID; + for (i = 1; *u > utfmax[i]; ++i) + ; + return i; +} + +static size_t +utf8decode(const char *c, long *u, size_t clen) +{ + size_t i, j, len, type; + long udecoded; + + *u = UTF_INVALID; + if (!clen) + return 0; + udecoded = utf8decodebyte(c[0], &len); + if (!BETWEEN(len, 1, UTF_SIZ)) + return 1; + for (i = 1, j = 1; i < clen && j < len; ++i, ++j) { + udecoded = (udecoded << 6) | utf8decodebyte(c[i], &type); + if (type) + return j; + } + if (j < len) + return 0; + *u = udecoded; + utf8validate(u, len); + + return len; +} + +Drw * +drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h) +{ + Drw *drw = ecalloc(1, sizeof(Drw)); + + drw->dpy = dpy; + drw->screen = screen; + drw->root = root; + drw->w = w; + drw->h = h; + drw->drawable = XCreatePixmap(dpy, root, w, h, DefaultDepth(dpy, screen)); + drw->gc = XCreateGC(dpy, root, 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; + if (drw->drawable) + XFreePixmap(drw->dpy, drw->drawable); + drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, DefaultDepth(drw->dpy, drw->screen)); +} + +void +drw_free(Drw *drw) +{ + XFreePixmap(drw->dpy, drw->drawable); + XFreeGC(drw->dpy, drw->gc); + drw_fontset_free(drw->fonts); + free(drw); +} + +/* This function is an implementation detail. Library users should use + * drw_fontset_create instead. + */ +static Fnt * +xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern) +{ + Fnt *font; + XftFont *xfont = NULL; + FcPattern *pattern = NULL; + + if (fontname) { + /* Using the pattern found at font->xfont->pattern does not yield the + * same substitution results as using the pattern returned by + * FcNameParse; using the latter results in the desired fallback + * behaviour whereas the former just results in missing-character + * rectangles being drawn, at least with some fonts. */ + if (!(xfont = XftFontOpenName(drw->dpy, drw->screen, fontname))) { + fprintf(stderr, "error, cannot load font from name: '%s'\n", fontname); + return NULL; + } + if (!(pattern = FcNameParse((FcChar8 *) fontname))) { + fprintf(stderr, "error, cannot parse font name to pattern: '%s'\n", fontname); + XftFontClose(drw->dpy, xfont); + return NULL; + } + } else if (fontpattern) { + if (!(xfont = XftFontOpenPattern(drw->dpy, fontpattern))) { + fprintf(stderr, "error, cannot load font from pattern.\n"); + return NULL; + } + } else { + die("no font specified."); + } + + /* Do not allow using color fonts. This is a workaround for a BadLength + * error from Xft with color glyphs. Modelled on the Xterm workaround. See + * https://bugzilla.redhat.com/show_bug.cgi?id=1498269 + * https://lists.suckless.org/dev/1701/30932.html + * https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=916349 + * and lots more all over the internet. + */ + FcBool iscol; + if(FcPatternGetBool(xfont->pattern, FC_COLOR, 0, &iscol) == FcResultMatch && iscol) { + XftFontClose(drw->dpy, xfont); + return NULL; + } + + font = ecalloc(1, sizeof(Fnt)); + font->xfont = xfont; + font->pattern = pattern; + font->h = xfont->ascent + xfont->descent; + font->dpy = drw->dpy; + + return font; +} + +static void +xfont_free(Fnt *font) +{ + if (!font) + return; + if (font->pattern) + FcPatternDestroy(font->pattern); + XftFontClose(font->dpy, font->xfont); + free(font); +} + +Fnt* +drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount) +{ + Fnt *cur, *ret = NULL; + size_t i; + + if (!drw || !fonts) + return NULL; + + for (i = 1; i <= fontcount; i++) { + if ((cur = xfont_create(drw, fonts[fontcount - i], NULL))) { + cur->next = ret; + ret = cur; + } + } + return (drw->fonts = ret); +} + +void +drw_fontset_free(Fnt *font) +{ + if (font) { + drw_fontset_free(font->next); + xfont_free(font); + } +} + +void +drw_clr_create(Drw *drw, Clr *dest, const char *clrname) +{ + if (!drw || !dest || !clrname) + return; + + if (!XftColorAllocName(drw->dpy, DefaultVisual(drw->dpy, drw->screen), + DefaultColormap(drw->dpy, drw->screen), + clrname, dest)) + die("error, cannot allocate color '%s'", clrname); +} + +/* Wrapper to create color schemes. The caller has to call free(3) on the + * returned color scheme when done using it. */ +Clr * +drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount) +{ + size_t i; + Clr *ret; + + /* need at least two colors for a scheme */ + if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, sizeof(XftColor)))) + return NULL; + + for (i = 0; i < clrcount; i++) + drw_clr_create(drw, &ret[i], clrnames[i]); + return ret; +} + +void +drw_setfontset(Drw *drw, Fnt *set) +{ + if (drw) + drw->fonts = set; +} + +void +drw_setscheme(Drw *drw, Clr *scm) +{ + if (drw) + drw->scheme = scm; +} + +void +drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert) +{ + if (!drw || !drw->scheme) + return; + XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme[ColBg].pixel : drw->scheme[ColFg].pixel); + if (filled) + XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h); + else + XDrawRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w - 1, h - 1); +} + +int +drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert) +{ + char buf[1024]; + int ty; + unsigned int ew; + XftDraw *d = NULL; + Fnt *usedfont, *curfont, *nextfont; + size_t i, len; + int utf8strlen, utf8charlen, render = x || y || w || h; + long utf8codepoint = 0; + const char *utf8str; + FcCharSet *fccharset; + FcPattern *fcpattern; + FcPattern *match; + XftResult result; + int charexists = 0; + + if (!drw || (render && !drw->scheme) || !text || !drw->fonts) + return 0; + + if (!render) { + w = ~w; + } else { + XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel); + XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h); + d = XftDrawCreate(drw->dpy, drw->drawable, + DefaultVisual(drw->dpy, drw->screen), + DefaultColormap(drw->dpy, drw->screen)); + x += lpad; + w -= lpad; + } + + usedfont = drw->fonts; + while (1) { + utf8strlen = 0; + utf8str = text; + nextfont = NULL; + while (*text) { + utf8charlen = utf8decode(text, &utf8codepoint, UTF_SIZ); + for (curfont = drw->fonts; curfont; curfont = curfont->next) { + charexists = charexists || XftCharExists(drw->dpy, curfont->xfont, utf8codepoint); + if (charexists) { + if (curfont == usedfont) { + utf8strlen += utf8charlen; + text += utf8charlen; + } else { + nextfont = curfont; + } + break; + } + } + + if (!charexists || nextfont) + break; + else + charexists = 0; + } + + if (utf8strlen) { + drw_font_getexts(usedfont, utf8str, utf8strlen, &ew, NULL); + /* shorten text if necessary */ + for (len = MIN(utf8strlen, sizeof(buf) - 1); len && ew > w; len--) + drw_font_getexts(usedfont, utf8str, len, &ew, NULL); + + if (len) { + memcpy(buf, utf8str, len); + buf[len] = '\0'; + if (len < utf8strlen) + for (i = len; i && i > len - 3; buf[--i] = '.') + ; /* NOP */ + + if (render) { + ty = y + (h - usedfont->h) / 2 + usedfont->xfont->ascent; + XftDrawStringUtf8(d, &drw->scheme[invert ? ColBg : ColFg], + usedfont->xfont, x, ty, (XftChar8 *)buf, len); + } + x += ew; + w -= ew; + } + } + + if (!*text) { + break; + } else if (nextfont) { + charexists = 0; + usedfont = nextfont; + } else { + /* Regardless of whether or not a fallback font is found, the + * character must be drawn. */ + charexists = 1; + + fccharset = FcCharSetCreate(); + FcCharSetAddChar(fccharset, utf8codepoint); + + if (!drw->fonts->pattern) { + /* Refer to the comment in xfont_create for more information. */ + die("the first font in the cache must be loaded from a font string."); + } + + fcpattern = FcPatternDuplicate(drw->fonts->pattern); + FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset); + FcPatternAddBool(fcpattern, FC_SCALABLE, FcTrue); + FcPatternAddBool(fcpattern, FC_COLOR, FcFalse); + + FcConfigSubstitute(NULL, fcpattern, FcMatchPattern); + FcDefaultSubstitute(fcpattern); + match = XftFontMatch(drw->dpy, drw->screen, fcpattern, &result); + + FcCharSetDestroy(fccharset); + FcPatternDestroy(fcpattern); + + if (match) { + usedfont = xfont_create(drw, NULL, match); + if (usedfont && XftCharExists(drw->dpy, usedfont->xfont, utf8codepoint)) { + for (curfont = drw->fonts; curfont->next; curfont = curfont->next) + ; /* NOP */ + curfont->next = usedfont; + } else { + xfont_free(usedfont); + usedfont = drw->fonts; + } + } + } + } + if (d) + XftDrawDestroy(d); + + return x + (render ? w : 0); +} + +void +drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h) +{ + if (!drw) + return; + + XCopyArea(drw->dpy, drw->drawable, win, drw->gc, x, y, w, h, x, y); + XSync(drw->dpy, False); +} + +unsigned int +drw_fontset_getwidth(Drw *drw, const char *text) +{ + if (!drw || !drw->fonts || !text) + return 0; + return drw_text(drw, 0, 0, 0, 0, 0, text, 0); +} + +void +drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h) +{ + XGlyphInfo ext; + + if (!font || !text) + return; + + XftTextExtentsUtf8(font->dpy, font->xfont, (XftChar8 *)text, len, &ext); + if (w) + *w = ext.xOff; + if (h) + *h = font->h; +} + +Cur * +drw_cur_create(Drw *drw, int shape) +{ + Cur *cur; + + if (!drw || !(cur = ecalloc(1, sizeof(Cur)))) + return NULL; + + cur->cursor = XCreateFontCursor(drw->dpy, shape); + + return cur; +} + +void +drw_cur_free(Drw *drw, Cur *cursor) +{ + if (!cursor) + return; + + XFreeCursor(drw->dpy, cursor->cursor); + free(cursor); +} diff --git a/dwm/.local/share/dwm/drw.h b/dwm/.local/share/dwm/drw.h new file mode 100644 index 0000000..4bcd5ad --- /dev/null +++ b/dwm/.local/share/dwm/drw.h @@ -0,0 +1,57 @@ +/* See LICENSE file for copyright and license details. */ + +typedef struct { + Cursor cursor; +} Cur; + +typedef struct Fnt { + Display *dpy; + unsigned int h; + XftFont *xfont; + FcPattern *pattern; + struct Fnt *next; +} Fnt; + +enum { ColFg, ColBg, ColBorder }; /* Clr scheme index */ +typedef XftColor Clr; + +typedef struct { + unsigned int w, h; + Display *dpy; + int screen; + Window root; + Drawable drawable; + GC gc; + Clr *scheme; + Fnt *fonts; +} Drw; + +/* 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_fontset_create(Drw* drw, const char *fonts[], size_t fontcount); +void drw_fontset_free(Fnt* set); +unsigned int drw_fontset_getwidth(Drw *drw, const char *text); +void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h); + +/* Colorscheme abstraction */ +void drw_clr_create(Drw *drw, Clr *dest, const char *clrname); +Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount); + +/* Cursor abstraction */ +Cur *drw_cur_create(Drw *drw, int shape); +void drw_cur_free(Drw *drw, Cur *cursor); + +/* Drawing context manipulation */ +void drw_setfontset(Drw *drw, Fnt *set); +void drw_setscheme(Drw *drw, Clr *scm); + +/* Drawing functions */ +void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert); +int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert); + +/* Map functions */ +void drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h); diff --git a/dwm/.local/share/dwm/drw.o b/dwm/.local/share/dwm/drw.o new file mode 100644 index 0000000000000000000000000000000000000000..97dce3981b42f327f578024a13033bbda8c8d866 GIT binary patch literal 10632 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 a1$@`h>9qg)GUNBqCWRvMtlj#u|Na;4gKr-I literal 0 HcmV?d00001 diff --git a/dwm/.local/share/dwm/dwm b/dwm/.local/share/dwm/dwm new file mode 100755 index 0000000000000000000000000000000000000000..c54fe279f75c77f7872075e9d61062c66c81ae4e GIT binary patch literal 83512 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 M=NYR2#5dbx%5FLcne)B*pD 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 literal 0 HcmV?d00001 diff --git a/dwm/.local/share/dwm/dwm-anybar-polybar-tray-fix-20200810-bb2e722.diff b/dwm/.local/share/dwm/dwm-anybar-polybar-tray-fix-20200810-bb2e722.diff new file mode 100644 index 0000000..693bb7b --- /dev/null +++ b/dwm/.local/share/dwm/dwm-anybar-polybar-tray-fix-20200810-bb2e722.diff @@ -0,0 +1,445 @@ +From 9b5719969ce85c3ecc0238d49c0255c5c2cc79f0 Mon Sep 17 00:00:00 2001 +From: mihirlad55 +Date: Mon, 10 Aug 2020 01:39:28 +0000 +Subject: [PATCH] Add support for managing external status bars + +This patch allows dwm to manage other status bars such as +polybar/lemonbar without them needing to set override-redirect. For +all intents and purposes, DWM treats this bar as if it were its own +and as a result helps the status bar and DWM live in harmony. + +This has a few advantages +* The bar does not block fullscreen windows +* DWM makes room for the status bar, so windows do not overlap the bar +* The bar can be hidden/killed and DWM will not keep an unsightly gap + where the bar was +* DWM receives EnterNotify events when your cursor enters the bar + +To use another status bar, set usealtbar to 1 in your config.h and set +altbarclass to the class name (can be found using xprop) to the class +name of your status bar. Also make sure that if your status bar will +be displayed on top, topbar is set to 1 in your config, and if it will +be displayed on bottom, topbar is set to 0. This patch does not +support bars that are not docked at the top or at the bottom of your +monitor. + +This verison of the patch fixes handling of polybar's tray. + +The patch is developed at https://github.com/mihirlad55/dwm-anybar +--- + config.def.h | 4 ++ + dwm.c | 192 +++++++++++++++++++++++++++++++++++++++++++++++---- + 2 files changed, 181 insertions(+), 15 deletions(-) + +diff --git a/config.def.h b/config.def.h +index 1c0b587..f45211b 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -5,6 +5,10 @@ static const unsigned int borderpx = 1; /* border pixel of windows */ + static const unsigned int snap = 32; /* snap pixel */ + static const int showbar = 1; /* 0 means no bar */ + static const int topbar = 1; /* 0 means bottom bar */ ++static const int usealtbar = 1; /* 1 means use non-dwm status bar */ ++static const char *altbarclass = "Polybar"; /* Alternate bar class name */ ++static const char *alttrayname = "tray"; /* Polybar tray instance name */ ++static const char *altbarcmd = "$HOME/bar.sh"; /* Alternate bar launch command */ + static const char *fonts[] = { "monospace:size=10" }; + static const char dmenufont[] = "monospace:size=10"; + static const char col_gray1[] = "#222222"; +diff --git a/dwm.c b/dwm.c +index 9fd0286..c1d8ce0 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -47,8 +47,8 @@ + /* macros */ + #define BUTTONMASK (ButtonPressMask|ButtonReleaseMask) + #define CLEANMASK(mask) (mask & ~(numlockmask|LockMask) & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask)) +-#define INTERSECT(x,y,w,h,m) (MAX(0, MIN((x)+(w),(m)->wx+(m)->ww) - MAX((x),(m)->wx)) \ +- * MAX(0, MIN((y)+(h),(m)->wy+(m)->wh) - MAX((y),(m)->wy))) ++#define INTERSECT(x,y,w,h,m) (MAX(0, MIN((x)+(w),(m)->mx+(m)->mw) - MAX((x),(m)->mx)) \ ++ * MAX(0, MIN((y)+(h),(m)->my+(m)->mh) - MAX((y),(m)->my))) + #define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags])) + #define LENGTH(X) (sizeof X / sizeof X[0]) + #define MOUSEMASK (BUTTONMASK|PointerMotionMask) +@@ -116,7 +116,8 @@ struct Monitor { + float mfact; + int nmaster; + int num; +- int by; /* bar geometry */ ++ int by, bh; /* bar geometry */ ++ int tx, tw; /* bar tray geometry */ + int mx, my, mw, mh; /* screen size */ + int wx, wy, ww, wh; /* window area */ + unsigned int seltags; +@@ -129,6 +130,7 @@ struct Monitor { + Client *stack; + Monitor *next; + Window barwin; ++ Window traywin; + const Layout *lt[2]; + }; + +@@ -179,6 +181,8 @@ static void incnmaster(const Arg *arg); + static void keypress(XEvent *e); + static void killclient(const Arg *arg); + static void manage(Window w, XWindowAttributes *wa); ++static void managealtbar(Window win, XWindowAttributes *wa); ++static void managetray(Window win, XWindowAttributes *wa); + static void mappingnotify(XEvent *e); + static void maprequest(XEvent *e); + static void monocle(Monitor *m); +@@ -195,6 +199,7 @@ static void resizemouse(const Arg *arg); + static void restack(Monitor *m); + static void run(void); + static void scan(void); ++static void scantray(void); + static int sendevent(Client *c, Atom proto); + static void sendmon(Client *c, Monitor *m); + static void setclientstate(Client *c, long state); +@@ -207,6 +212,7 @@ static void seturgent(Client *c, int urg); + static void showhide(Client *c); + static void sigchld(int unused); + static void spawn(const Arg *arg); ++static void spawnbar(); + static void tag(const Arg *arg); + static void tagmon(const Arg *arg); + static void tile(Monitor *); +@@ -216,6 +222,8 @@ static void toggletag(const Arg *arg); + static void toggleview(const Arg *arg); + static void unfocus(Client *c, int setfocus); + static void unmanage(Client *c, int destroyed); ++static void unmanagealtbar(Window w); ++static void unmanagetray(Window w); + static void unmapnotify(XEvent *e); + static void updatebarpos(Monitor *m); + static void updatebars(void); +@@ -230,6 +238,7 @@ static void updatewmhints(Client *c); + static void view(const Arg *arg); + static Client *wintoclient(Window w); + static Monitor *wintomon(Window w); ++static int wmclasscontains(Window win, const char *class, const char *name); + static int xerror(Display *dpy, XErrorEvent *ee); + static int xerrordummy(Display *dpy, XErrorEvent *ee); + static int xerrorstart(Display *dpy, XErrorEvent *ee); +@@ -505,8 +514,10 @@ cleanupmon(Monitor *mon) + for (m = mons; m && m->next != mon; m = m->next); + m->next = mon->next; + } +- XUnmapWindow(dpy, mon->barwin); +- XDestroyWindow(dpy, mon->barwin); ++ if (!usealtbar) { ++ XUnmapWindow(dpy, mon->barwin); ++ XDestroyWindow(dpy, mon->barwin); ++ } + free(mon); + } + +@@ -568,7 +579,7 @@ configurenotify(XEvent *e) + for (c = m->clients; c; c = c->next) + if (c->isfullscreen) + resizeclient(c, m->mx, m->my, m->mw, m->mh); +- XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh); ++ XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, m->bh); + } + focus(NULL); + arrange(NULL); +@@ -639,6 +650,7 @@ createmon(void) + m->nmaster = nmaster; + m->showbar = showbar; + m->topbar = topbar; ++ m->bh = bh; + m->lt[0] = &layouts[0]; + m->lt[1] = &layouts[1 % LENGTH(layouts)]; + strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); +@@ -649,10 +661,15 @@ void + destroynotify(XEvent *e) + { + Client *c; ++ Monitor *m; + XDestroyWindowEvent *ev = &e->xdestroywindow; + + if ((c = wintoclient(ev->window))) + unmanage(c, 1); ++ else if ((m = wintomon(ev->window)) && m->barwin == ev->window) ++ unmanagealtbar(ev->window); ++ else if (m->traywin == ev->window) ++ unmanagetray(ev->window); + } + + void +@@ -696,6 +713,9 @@ dirtomon(int dir) + void + drawbar(Monitor *m) + { ++ if (usealtbar) ++ return; ++ + int x, w, tw = 0; + int boxs = drw->fonts->h / 9; + int boxw = drw->fonts->h / 6 + 2; +@@ -1077,6 +1097,45 @@ manage(Window w, XWindowAttributes *wa) + focus(NULL); + } + ++void ++managealtbar(Window win, XWindowAttributes *wa) ++{ ++ Monitor *m; ++ if (!(m = recttomon(wa->x, wa->y, wa->width, wa->height))) ++ return; ++ ++ m->barwin = win; ++ m->by = wa->y; ++ bh = m->bh = wa->height; ++ updatebarpos(m); ++ arrange(m); ++ XSelectInput(dpy, win, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask); ++ XMoveResizeWindow(dpy, win, wa->x, wa->y, wa->width, wa->height); ++ XMapWindow(dpy, win); ++ XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, ++ (unsigned char *) &win, 1); ++} ++ ++void ++managetray(Window win, XWindowAttributes *wa) ++{ ++ Monitor *m; ++ if (!(m = recttomon(wa->x, wa->y, wa->width, wa->height))) ++ return; ++ ++ m->traywin = win; ++ m->tx = wa->x; ++ m->tw = wa->width; ++ updatebarpos(m); ++ arrange(m); ++ XSelectInput(dpy, win, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask); ++ XMoveResizeWindow(dpy, win, wa->x, wa->y, wa->width, wa->height); ++ XMapWindow(dpy, win); ++ XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, ++ (unsigned char *) &win, 1); ++} ++ ++ + void + mappingnotify(XEvent *e) + { +@@ -1097,7 +1156,9 @@ maprequest(XEvent *e) + return; + if (wa.override_redirect) + return; +- if (!wintoclient(ev->window)) ++ if (wmclasscontains(ev->window, altbarclass, "")) ++ managealtbar(ev->window, &wa); ++ else if (!wintoclient(ev->window)) + manage(ev->window, &wa); + } + +@@ -1393,7 +1454,9 @@ scan(void) + if (!XGetWindowAttributes(dpy, wins[i], &wa) + || wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1)) + continue; +- if (wa.map_state == IsViewable || getstate(wins[i]) == IconicState) ++ if (wmclasscontains(wins[i], altbarclass, "")) ++ managealtbar(wins[i], &wa); ++ else if (wa.map_state == IsViewable || getstate(wins[i]) == IconicState) + manage(wins[i], &wa); + } + for (i = 0; i < num; i++) { /* now the transients */ +@@ -1408,6 +1471,29 @@ scan(void) + } + } + ++void ++scantray(void) ++{ ++ unsigned int num; ++ Window d1, d2, *wins = NULL; ++ XWindowAttributes wa; ++ ++ if (XQueryTree(dpy, root, &d1, &d2, &wins, &num)) { ++ for (unsigned int i = 0; i < num; i++) { ++ if (wmclasscontains(wins[i], altbarclass, alttrayname)) { ++ if (!XGetWindowAttributes(dpy, wins[i], &wa)) ++ break; ++ managetray(wins[i], &wa); ++ } ++ } ++ } ++ ++ if (wins) ++ XFree(wins); ++} ++ ++ ++ + void + sendmon(Client *c, Monitor *m) + { +@@ -1546,7 +1632,7 @@ setup(void) + if (!drw_fontset_create(drw, fonts, LENGTH(fonts))) + die("no fonts could be loaded."); + lrpad = drw->fonts->h; +- bh = drw->fonts->h + 2; ++ bh = usealtbar ? 0 : drw->fonts->h + 2; + updategeom(); + /* init atoms */ + utf8string = XInternAtom(dpy, "UTF8_STRING", False); +@@ -1595,6 +1681,7 @@ setup(void) + XSelectInput(dpy, root, wa.event_mask); + grabkeys(); + focus(NULL); ++ spawnbar(); + } + + +@@ -1653,6 +1740,13 @@ spawn(const Arg *arg) + } + } + ++void ++spawnbar() ++{ ++ if (*altbarcmd) ++ system(altbarcmd); ++} ++ + void + tag(const Arg *arg) + { +@@ -1702,9 +1796,18 @@ tile(Monitor *m) + void + togglebar(const Arg *arg) + { ++ /** ++ * Polybar tray does not raise maprequest event. It must be manually scanned ++ * for. Scanning it too early while the tray is being populated would give ++ * wrong dimensions. ++ */ ++ if (!selmon->traywin) ++ scantray(); ++ + selmon->showbar = !selmon->showbar; + updatebarpos(selmon); +- XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh); ++ XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, selmon->bh); ++ XMoveResizeWindow(dpy, selmon->traywin, selmon->tx, selmon->by, selmon->tw, selmon->bh); + arrange(selmon); + } + +@@ -1787,10 +1890,41 @@ unmanage(Client *c, int destroyed) + arrange(m); + } + ++void ++unmanagealtbar(Window w) ++{ ++ Monitor *m = wintomon(w); ++ ++ if (!m) ++ return; ++ ++ m->barwin = 0; ++ m->by = 0; ++ m->bh = 0; ++ updatebarpos(m); ++ arrange(m); ++} ++ ++void ++unmanagetray(Window w) ++{ ++ Monitor *m = wintomon(w); ++ ++ if (!m) ++ return; ++ ++ m->traywin = 0; ++ m->tx = 0; ++ m->tw = 0; ++ updatebarpos(m); ++ arrange(m); ++} ++ + void + unmapnotify(XEvent *e) + { + Client *c; ++ Monitor *m; + XUnmapEvent *ev = &e->xunmap; + + if ((c = wintoclient(ev->window))) { +@@ -1798,12 +1932,18 @@ unmapnotify(XEvent *e) + setclientstate(c, WithdrawnState); + else + unmanage(c, 0); +- } ++ } else if ((m = wintomon(ev->window)) && m->barwin == ev->window) ++ unmanagealtbar(ev->window); ++ else if (m->traywin == ev->window) ++ unmanagetray(ev->window); + } + + void + updatebars(void) + { ++ if (usealtbar) ++ return; ++ + Monitor *m; + XSetWindowAttributes wa = { + .override_redirect = True, +@@ -1829,11 +1969,11 @@ updatebarpos(Monitor *m) + m->wy = m->my; + m->wh = m->mh; + if (m->showbar) { +- m->wh -= bh; ++ m->wh -= m->bh; + m->by = m->topbar ? m->wy : m->wy + m->wh; +- m->wy = m->topbar ? m->wy + bh : m->wy; ++ m->wy = m->topbar ? m->wy + m->bh : m->wy; + } else +- m->by = -bh; ++ m->by = -m->bh; + } + + void +@@ -2070,13 +2210,35 @@ wintomon(Window w) + if (w == root && getrootptr(&x, &y)) + return recttomon(x, y, 1, 1); + for (m = mons; m; m = m->next) +- if (w == m->barwin) ++ if (w == m->barwin || w == m->traywin) + return m; + if ((c = wintoclient(w))) + return c->mon; + return selmon; + } + ++int ++wmclasscontains(Window win, const char *class, const char *name) ++{ ++ XClassHint ch = { NULL, NULL }; ++ int res = 1; ++ ++ if (XGetClassHint(dpy, win, &ch)) { ++ if (ch.res_name && strstr(ch.res_name, name) == NULL) ++ res = 0; ++ if (ch.res_class && strstr(ch.res_class, class) == NULL) ++ res = 0; ++ } else ++ res = 0; ++ ++ if (ch.res_class) ++ XFree(ch.res_class); ++ if (ch.res_name) ++ XFree(ch.res_name); ++ ++ return res; ++} ++ + /* There's no way to check accesses to destroyed windows, thus those cases are + * ignored (especially on UnmapNotify's). Other types of errors call Xlibs + * default error handler, which may call exit. */ +-- +2.28.0 + diff --git a/dwm/.local/share/dwm/dwm-cool-autostart-6.2.diff b/dwm/.local/share/dwm/dwm-cool-autostart-6.2.diff new file mode 100644 index 0000000..84a93ea --- /dev/null +++ b/dwm/.local/share/dwm/dwm-cool-autostart-6.2.diff @@ -0,0 +1,116 @@ +diff --git a/config.def.h b/config.def.h +index 1c0b587..ed056a4 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -18,6 +18,11 @@ static const char *colors[][3] = { + [SchemeSel] = { col_gray4, col_cyan, col_cyan }, + }; + ++static const char *const autostart[] = { ++ "st", NULL, ++ NULL /* terminate */ ++}; ++ + /* tagging */ + static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; + +diff --git a/dwm.c b/dwm.c +index 9fd0286..1facd56 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -234,6 +234,7 @@ static int xerror(Display *dpy, XErrorEvent *ee); + static int xerrordummy(Display *dpy, XErrorEvent *ee); + static int xerrorstart(Display *dpy, XErrorEvent *ee); + static void zoom(const Arg *arg); ++static void autostart_exec(void); + + /* variables */ + static const char broken[] = "broken"; +@@ -275,6 +276,34 @@ static Window root, wmcheckwin; + /* compile-time check if all tags fit into an unsigned int bit array. */ + struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; }; + ++/* dwm will keep pid's of processes from autostart array and kill them at quit */ ++static pid_t *autostart_pids; ++static size_t autostart_len; ++ ++/* execute command from autostart array */ ++static void ++autostart_exec() { ++ const char *const *p; ++ size_t i = 0; ++ ++ /* count entries */ ++ for (p = autostart; *p; autostart_len++, p++) ++ while (*++p); ++ ++ autostart_pids = malloc(autostart_len * sizeof(pid_t)); ++ for (p = autostart; *p; i++, p++) { ++ if ((autostart_pids[i] = fork()) == 0) { ++ setsid(); ++ execvp(*p, (char *const *)p); ++ fprintf(stderr, "dwm: execvp %s\n", *p); ++ perror(" failed"); ++ _exit(EXIT_FAILURE); ++ } ++ /* skip arguments */ ++ while (*++p); ++ } ++} ++ + /* function implementations */ + void + applyrules(Client *c) +@@ -1249,6 +1278,16 @@ propertynotify(XEvent *e) + void + quit(const Arg *arg) + { ++ size_t i; ++ ++ /* kill child processes */ ++ for (i = 0; i < autostart_len; i++) { ++ if (0 < autostart_pids[i]) { ++ kill(autostart_pids[i], SIGTERM); ++ waitpid(autostart_pids[i], NULL, 0); ++ } ++ } ++ + running = 0; + } + +@@ -1632,9 +1671,25 @@ showhide(Client *c) + void + sigchld(int unused) + { ++ pid_t pid; ++ + if (signal(SIGCHLD, sigchld) == SIG_ERR) + die("can't install SIGCHLD handler:"); +- while (0 < waitpid(-1, NULL, WNOHANG)); ++ while (0 < (pid = waitpid(-1, NULL, WNOHANG))) { ++ pid_t *p, *lim; ++ ++ if (!(p = autostart_pids)) ++ continue; ++ lim = &p[autostart_len]; ++ ++ for (; p < lim; p++) { ++ if (*p == pid) { ++ *p = -1; ++ break; ++ } ++ } ++ ++ } + } + + void +@@ -2139,6 +2194,7 @@ main(int argc, char *argv[]) + if (!(dpy = XOpenDisplay(NULL))) + die("dwm: cannot open display"); + checkotherwm(); ++ autostart_exec(); + setup(); + #ifdef __OpenBSD__ + if (pledge("stdio rpath proc exec", NULL) == -1) + diff --git a/dwm/.local/share/dwm/dwm-vanitygaps-6.2.diff b/dwm/.local/share/dwm/dwm-vanitygaps-6.2.diff new file mode 100644 index 0000000..18cbd6d --- /dev/null +++ b/dwm/.local/share/dwm/dwm-vanitygaps-6.2.diff @@ -0,0 +1,971 @@ +From 9709d08daa290c8c7319571cd9e6ef4ec40e7683 Mon Sep 17 00:00:00 2001 +From: bakkeby +Date: Wed, 6 May 2020 17:21:25 +0200 +Subject: [PATCH] vanitygaps - adds gaps to layouts + +This patch differentiates between inner and outer gaps as well as +horizontal and vertical gaps. + +The logic of these layouts also aims to be pixel perfect by ensuring +an even split of the available space and re-distributing the remainder +among the available clients. +--- + config.def.h | 38 ++- + dwm.c | 35 +-- + vanitygaps.c | 809 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 854 insertions(+), 28 deletions(-) + create mode 100644 vanitygaps.c + +diff --git a/config.def.h b/config.def.h +index 1c0b587..a886863 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -3,6 +3,11 @@ + /* appearance */ + static const unsigned int borderpx = 1; /* border pixel of windows */ + static const unsigned int snap = 32; /* snap pixel */ ++static const unsigned int gappih = 20; /* horiz inner gap between windows */ ++static const unsigned int gappiv = 10; /* vert inner gap between windows */ ++static const unsigned int gappoh = 10; /* horiz outer gap between windows and screen edge */ ++static const unsigned int gappov = 30; /* vert outer gap between windows and screen edge */ ++static int smartgaps = 0; /* 1 means no outer gap when there is only one window */ + static const int showbar = 1; /* 0 means no bar */ + static const int topbar = 1; /* 0 means bottom bar */ + static const char *fonts[] = { "monospace:size=10" }; +@@ -36,11 +41,26 @@ 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 int resizehints = 1; /* 1 means respect size hints in tiled resizals */ + ++#define FORCE_VSPLIT 1 /* nrowgrid layout: force two clients to always split vertically */ ++#include "vanitygaps.c" ++ + static const Layout layouts[] = { + /* symbol arrange function */ + { "[]=", tile }, /* first entry is default */ +- { "><>", NULL }, /* no layout function means floating behavior */ + { "[M]", monocle }, ++ { "[@]", spiral }, ++ { "[\\]", dwindle }, ++ { "H[]", deck }, ++ { "TTT", bstack }, ++ { "===", bstackhoriz }, ++ { "HHH", grid }, ++ { "###", nrowgrid }, ++ { "---", horizgrid }, ++ { ":::", gaplessgrid }, ++ { "|M|", centeredmaster }, ++ { ">M>", centeredfloatingmaster }, ++ { "><>", NULL }, /* no layout function means floating behavior */ ++ { NULL, NULL }, + }; + + /* key definitions */ +@@ -71,6 +91,22 @@ static Key keys[] = { + { MODKEY, XK_h, setmfact, {.f = -0.05} }, + { MODKEY, XK_l, setmfact, {.f = +0.05} }, + { MODKEY, XK_Return, zoom, {0} }, ++ { MODKEY|Mod4Mask, XK_u, incrgaps, {.i = +1 } }, ++ { MODKEY|Mod4Mask|ShiftMask, XK_u, incrgaps, {.i = -1 } }, ++ { MODKEY|Mod4Mask, XK_i, incrigaps, {.i = +1 } }, ++ { MODKEY|Mod4Mask|ShiftMask, XK_i, incrigaps, {.i = -1 } }, ++ { MODKEY|Mod4Mask, XK_o, incrogaps, {.i = +1 } }, ++ { MODKEY|Mod4Mask|ShiftMask, XK_o, incrogaps, {.i = -1 } }, ++ { MODKEY|Mod4Mask, XK_6, incrihgaps, {.i = +1 } }, ++ { MODKEY|Mod4Mask|ShiftMask, XK_6, incrihgaps, {.i = -1 } }, ++ { MODKEY|Mod4Mask, XK_7, incrivgaps, {.i = +1 } }, ++ { MODKEY|Mod4Mask|ShiftMask, XK_7, incrivgaps, {.i = -1 } }, ++ { MODKEY|Mod4Mask, XK_8, incrohgaps, {.i = +1 } }, ++ { MODKEY|Mod4Mask|ShiftMask, XK_8, incrohgaps, {.i = -1 } }, ++ { MODKEY|Mod4Mask, XK_9, incrovgaps, {.i = +1 } }, ++ { MODKEY|Mod4Mask|ShiftMask, XK_9, incrovgaps, {.i = -1 } }, ++ { MODKEY|Mod4Mask, XK_0, togglegaps, {0} }, ++ { MODKEY|Mod4Mask|ShiftMask, XK_0, defaultgaps, {0} }, + { MODKEY, XK_Tab, view, {0} }, + { MODKEY|ShiftMask, XK_c, killclient, {0} }, + { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, +diff --git a/dwm.c b/dwm.c +index 4465af1..c3b2d82 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -119,6 +119,10 @@ struct Monitor { + int by; /* bar geometry */ + int mx, my, mw, mh; /* screen size */ + int wx, wy, ww, wh; /* window area */ ++ int gappih; /* horizontal gap between windows */ ++ int gappiv; /* vertical gap between windows */ ++ int gappoh; /* horizontal outer gaps */ ++ int gappov; /* vertical outer gaps */ + unsigned int seltags; + unsigned int sellt; + unsigned int tagset[2]; +@@ -208,7 +212,6 @@ static void sigchld(int unused); + static void spawn(const Arg *arg); + static void tag(const Arg *arg); + static void tagmon(const Arg *arg); +-static void tile(Monitor *); + static void togglebar(const Arg *arg); + static void togglefloating(const Arg *arg); + static void toggletag(const Arg *arg); +@@ -638,6 +641,10 @@ createmon(void) + m->nmaster = nmaster; + m->showbar = showbar; + m->topbar = topbar; ++ m->gappih = gappih; ++ m->gappiv = gappiv; ++ m->gappoh = gappoh; ++ m->gappov = gappov; + m->lt[0] = &layouts[0]; + m->lt[1] = &layouts[1 % LENGTH(layouts)]; + strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); +@@ -1670,32 +1677,6 @@ tagmon(const Arg *arg) + sendmon(selmon->sel, dirtomon(arg->i)); + } + +-void +-tile(Monitor *m) +-{ +- unsigned int i, n, h, mw, my, ty; +- Client *c; +- +- for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); +- if (n == 0) +- return; +- +- if (n > m->nmaster) +- mw = m->nmaster ? m->ww * m->mfact : 0; +- else +- mw = m->ww; +- for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) +- if (i < m->nmaster) { +- h = (m->wh - my) / (MIN(n, m->nmaster) - i); +- resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0); +- my += HEIGHT(c); +- } else { +- h = (m->wh - ty) / (n - i); +- resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0); +- ty += HEIGHT(c); +- } +-} +- + void + togglebar(const Arg *arg) + { +diff --git a/vanitygaps.c b/vanitygaps.c +new file mode 100644 +index 0000000..3f31593 +--- /dev/null ++++ b/vanitygaps.c +@@ -0,0 +1,809 @@ ++/* Key binding functions */ ++static void defaultgaps(const Arg *arg); ++static void incrgaps(const Arg *arg); ++static void incrigaps(const Arg *arg); ++static void incrogaps(const Arg *arg); ++static void incrohgaps(const Arg *arg); ++static void incrovgaps(const Arg *arg); ++static void incrihgaps(const Arg *arg); ++static void incrivgaps(const Arg *arg); ++static void togglegaps(const Arg *arg); ++/* Layouts (delete the ones you do not need) */ ++static void bstack(Monitor *m); ++static void bstackhoriz(Monitor *m); ++static void centeredmaster(Monitor *m); ++static void centeredfloatingmaster(Monitor *m); ++static void deck(Monitor *m); ++static void dwindle(Monitor *m); ++static void fibonacci(Monitor *m, int s); ++static void grid(Monitor *m); ++static void nrowgrid(Monitor *m); ++static void spiral(Monitor *m); ++static void tile(Monitor *m); ++/* Internals */ ++static void getgaps(Monitor *m, int *oh, int *ov, int *ih, int *iv, unsigned int *nc); ++static void getfacts(Monitor *m, int msize, int ssize, float *mf, float *sf, int *mr, int *sr); ++static void setgaps(int oh, int ov, int ih, int iv); ++ ++/* Settings */ ++#if !PERTAG_PATCH ++static int enablegaps = 1; ++#endif // PERTAG_PATCH ++ ++void ++setgaps(int oh, int ov, int ih, int iv) ++{ ++ if (oh < 0) oh = 0; ++ if (ov < 0) ov = 0; ++ if (ih < 0) ih = 0; ++ if (iv < 0) iv = 0; ++ ++ selmon->gappoh = oh; ++ selmon->gappov = ov; ++ selmon->gappih = ih; ++ selmon->gappiv = iv; ++ arrange(selmon); ++} ++ ++void ++togglegaps(const Arg *arg) ++{ ++ #if PERTAG_PATCH ++ selmon->pertag->enablegaps[selmon->pertag->curtag] = !selmon->pertag->enablegaps[selmon->pertag->curtag]; ++ #else ++ enablegaps = !enablegaps; ++ #endif // PERTAG_PATCH ++ arrange(NULL); ++} ++ ++void ++defaultgaps(const Arg *arg) ++{ ++ setgaps(gappoh, gappov, gappih, gappiv); ++} ++ ++void ++incrgaps(const Arg *arg) ++{ ++ setgaps( ++ selmon->gappoh + arg->i, ++ selmon->gappov + arg->i, ++ selmon->gappih + arg->i, ++ selmon->gappiv + arg->i ++ ); ++} ++ ++void ++incrigaps(const Arg *arg) ++{ ++ setgaps( ++ selmon->gappoh, ++ selmon->gappov, ++ selmon->gappih + arg->i, ++ selmon->gappiv + arg->i ++ ); ++} ++ ++void ++incrogaps(const Arg *arg) ++{ ++ setgaps( ++ selmon->gappoh + arg->i, ++ selmon->gappov + arg->i, ++ selmon->gappih, ++ selmon->gappiv ++ ); ++} ++ ++void ++incrohgaps(const Arg *arg) ++{ ++ setgaps( ++ selmon->gappoh + arg->i, ++ selmon->gappov, ++ selmon->gappih, ++ selmon->gappiv ++ ); ++} ++ ++void ++incrovgaps(const Arg *arg) ++{ ++ setgaps( ++ selmon->gappoh, ++ selmon->gappov + arg->i, ++ selmon->gappih, ++ selmon->gappiv ++ ); ++} ++ ++void ++incrihgaps(const Arg *arg) ++{ ++ setgaps( ++ selmon->gappoh, ++ selmon->gappov, ++ selmon->gappih + arg->i, ++ selmon->gappiv ++ ); ++} ++ ++void ++incrivgaps(const Arg *arg) ++{ ++ setgaps( ++ selmon->gappoh, ++ selmon->gappov, ++ selmon->gappih, ++ selmon->gappiv + arg->i ++ ); ++} ++ ++void ++getgaps(Monitor *m, int *oh, int *ov, int *ih, int *iv, unsigned int *nc) ++{ ++ unsigned int n, oe, ie; ++ #if PERTAG_PATCH ++ oe = ie = selmon->pertag->enablegaps[selmon->pertag->curtag]; ++ #else ++ oe = ie = enablegaps; ++ #endif // PERTAG_PATCH ++ Client *c; ++ ++ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); ++ if (smartgaps && n == 1) { ++ oe = 0; // outer gaps disabled when only one client ++ } ++ ++ *oh = m->gappoh*oe; // outer horizontal gap ++ *ov = m->gappov*oe; // outer vertical gap ++ *ih = m->gappih*ie; // inner horizontal gap ++ *iv = m->gappiv*ie; // inner vertical gap ++ *nc = n; // number of clients ++} ++ ++void ++getfacts(Monitor *m, int msize, int ssize, float *mf, float *sf, int *mr, int *sr) ++{ ++ unsigned int n; ++ float mfacts, sfacts; ++ int mtotal = 0, stotal = 0; ++ Client *c; ++ ++ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); ++ mfacts = MIN(n, m->nmaster); ++ sfacts = n - m->nmaster; ++ ++ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) ++ if (n < m->nmaster) ++ mtotal += msize / mfacts; ++ else ++ stotal += ssize / sfacts; ++ ++ *mf = mfacts; // total factor of master area ++ *sf = sfacts; // total factor of stack area ++ *mr = msize - mtotal; // the remainder (rest) of pixels after an even master split ++ *sr = ssize - stotal; // the remainder (rest) of pixels after an even stack split ++} ++ ++/*** ++ * Layouts ++ */ ++ ++/* ++ * Bottomstack layout + gaps ++ * https://dwm.suckless.org/patches/bottomstack/ ++ */ ++static void ++bstack(Monitor *m) ++{ ++ unsigned int i, n; ++ int oh, ov, ih, iv; ++ int mx = 0, my = 0, mh = 0, mw = 0; ++ int sx = 0, sy = 0, sh = 0, sw = 0; ++ float mfacts, sfacts; ++ int mrest, srest; ++ Client *c; ++ ++ getgaps(m, &oh, &ov, &ih, &iv, &n); ++ if (n == 0) ++ return; ++ ++ sx = mx = m->wx + ov; ++ sy = my = m->wy + oh; ++ sh = mh = m->wh - 2*oh; ++ mw = m->ww - 2*ov - iv * (MIN(n, m->nmaster) - 1); ++ sw = m->ww - 2*ov - iv * (n - m->nmaster - 1); ++ ++ if (m->nmaster && n > m->nmaster) { ++ sh = (mh - ih) * (1 - m->mfact); ++ mh = mh - ih - sh; ++ sx = mx; ++ sy = my + mh + ih; ++ } ++ ++ getfacts(m, mw, sw, &mfacts, &sfacts, &mrest, &srest); ++ ++ for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { ++ if (i < m->nmaster) { ++ resize(c, mx, my, (mw / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0); ++ mx += WIDTH(c) + iv; ++ } else { ++ resize(c, sx, sy, (sw / sfacts) + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), sh - (2*c->bw), 0); ++ sx += WIDTH(c) + iv; ++ } ++ } ++} ++ ++static void ++bstackhoriz(Monitor *m) ++{ ++ unsigned int i, n; ++ int oh, ov, ih, iv; ++ int mx = 0, my = 0, mh = 0, mw = 0; ++ int sx = 0, sy = 0, sh = 0, sw = 0; ++ float mfacts, sfacts; ++ int mrest, srest; ++ Client *c; ++ ++ getgaps(m, &oh, &ov, &ih, &iv, &n); ++ if (n == 0) ++ return; ++ ++ sx = mx = m->wx + ov; ++ sy = my = m->wy + oh; ++ mh = m->wh - 2*oh; ++ sh = m->wh - 2*oh - ih * (n - m->nmaster - 1); ++ mw = m->ww - 2*ov - iv * (MIN(n, m->nmaster) - 1); ++ sw = m->ww - 2*ov; ++ ++ if (m->nmaster && n > m->nmaster) { ++ sh = (mh - ih) * (1 - m->mfact); ++ mh = mh - ih - sh; ++ sy = my + mh + ih; ++ sh = m->wh - mh - 2*oh - ih * (n - m->nmaster); ++ } ++ ++ getfacts(m, mw, sh, &mfacts, &sfacts, &mrest, &srest); ++ ++ for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { ++ if (i < m->nmaster) { ++ resize(c, mx, my, (mw / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0); ++ mx += WIDTH(c) + iv; ++ } else { ++ resize(c, sx, sy, sw - (2*c->bw), (sh / sfacts) + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), 0); ++ sy += HEIGHT(c) + ih; ++ } ++ } ++} ++ ++/* ++ * Centred master layout + gaps ++ * https://dwm.suckless.org/patches/centeredmaster/ ++ */ ++void ++centeredmaster(Monitor *m) ++{ ++ unsigned int i, n; ++ int oh, ov, ih, iv; ++ int mx = 0, my = 0, mh = 0, mw = 0; ++ int lx = 0, ly = 0, lw = 0, lh = 0; ++ int rx = 0, ry = 0, rw = 0, rh = 0; ++ float mfacts = 0, lfacts = 0, rfacts = 0; ++ int mtotal = 0, ltotal = 0, rtotal = 0; ++ int mrest = 0, lrest = 0, rrest = 0; ++ Client *c; ++ ++ getgaps(m, &oh, &ov, &ih, &iv, &n); ++ if (n == 0) ++ return; ++ ++ /* initialize areas */ ++ mx = m->wx + ov; ++ my = m->wy + oh; ++ mh = m->wh - 2*oh - ih * ((!m->nmaster ? n : MIN(n, m->nmaster)) - 1); ++ mw = m->ww - 2*ov; ++ lh = m->wh - 2*oh - ih * (((n - m->nmaster) / 2) - 1); ++ rh = m->wh - 2*oh - ih * (((n - m->nmaster) / 2) - ((n - m->nmaster) % 2 ? 0 : 1)); ++ ++ if (m->nmaster && n > m->nmaster) { ++ /* go mfact box in the center if more than nmaster clients */ ++ if (n - m->nmaster > 1) { ++ /* ||<-S->|<---M--->|<-S->|| */ ++ mw = (m->ww - 2*ov - 2*iv) * m->mfact; ++ lw = (m->ww - mw - 2*ov - 2*iv) / 2; ++ rw = (m->ww - mw - 2*ov - 2*iv) - lw; ++ mx += lw + iv; ++ } else { ++ /* ||<---M--->|<-S->|| */ ++ mw = (mw - iv) * m->mfact; ++ lw = 0; ++ rw = m->ww - mw - iv - 2*ov; ++ } ++ lx = m->wx + ov; ++ ly = m->wy + oh; ++ rx = mx + mw + iv; ++ ry = m->wy + oh; ++ } ++ ++ /* calculate facts */ ++ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) { ++ if (!m->nmaster || n < m->nmaster) ++ mfacts += 1; ++ else if ((n - m->nmaster) % 2) ++ lfacts += 1; // total factor of left hand stack area ++ else ++ rfacts += 1; // total factor of right hand stack area ++ } ++ ++ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) ++ if (!m->nmaster || n < m->nmaster) ++ mtotal += mh / mfacts; ++ else if ((n - m->nmaster) % 2) ++ ltotal += lh / lfacts; ++ else ++ rtotal += rh / rfacts; ++ ++ mrest = mh - mtotal; ++ lrest = lh - ltotal; ++ rrest = rh - rtotal; ++ ++ for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { ++ if (!m->nmaster || i < m->nmaster) { ++ /* nmaster clients are stacked vertically, in the center of the screen */ ++ resize(c, mx, my, mw - (2*c->bw), (mh / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), 0); ++ my += HEIGHT(c) + ih; ++ } else { ++ /* stack clients are stacked vertically */ ++ if ((i - m->nmaster) % 2 ) { ++ resize(c, lx, ly, lw - (2*c->bw), (lh / lfacts) + ((i - 2*m->nmaster) < 2*lrest ? 1 : 0) - (2*c->bw), 0); ++ ly += HEIGHT(c) + ih; ++ } else { ++ resize(c, rx, ry, rw - (2*c->bw), (rh / rfacts) + ((i - 2*m->nmaster) < 2*rrest ? 1 : 0) - (2*c->bw), 0); ++ ry += HEIGHT(c) + ih; ++ } ++ } ++ } ++} ++ ++void ++centeredfloatingmaster(Monitor *m) ++{ ++ unsigned int i, n; ++ float mfacts, sfacts; ++ float mivf = 1.0; // master inner vertical gap factor ++ int oh, ov, ih, iv, mrest, srest; ++ int mx = 0, my = 0, mh = 0, mw = 0; ++ int sx = 0, sy = 0, sh = 0, sw = 0; ++ Client *c; ++ ++ getgaps(m, &oh, &ov, &ih, &iv, &n); ++ if (n == 0) ++ return; ++ ++ sx = mx = m->wx + ov; ++ sy = my = m->wy + oh; ++ sh = mh = m->wh - 2*oh; ++ mw = m->ww - 2*ov - iv*(n - 1); ++ sw = m->ww - 2*ov - iv*(n - m->nmaster - 1); ++ ++ if (m->nmaster && n > m->nmaster) { ++ mivf = 0.8; ++ /* go mfact box in the center if more than nmaster clients */ ++ if (m->ww > m->wh) { ++ mw = m->ww * m->mfact - iv*mivf*(MIN(n, m->nmaster) - 1); ++ mh = m->wh * 0.9; ++ } else { ++ mw = m->ww * 0.9 - iv*mivf*(MIN(n, m->nmaster) - 1); ++ mh = m->wh * m->mfact; ++ } ++ mx = m->wx + (m->ww - mw) / 2; ++ my = m->wy + (m->wh - mh - 2*oh) / 2; ++ ++ sx = m->wx + ov; ++ sy = m->wy + oh; ++ sh = m->wh - 2*oh; ++ } ++ ++ getfacts(m, mw, sw, &mfacts, &sfacts, &mrest, &srest); ++ ++ for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) ++ if (i < m->nmaster) { ++ /* nmaster clients are stacked horizontally, in the center of the screen */ ++ resize(c, mx, my, (mw / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0); ++ mx += WIDTH(c) + iv*mivf; ++ } else { ++ /* stack clients are stacked horizontally */ ++ resize(c, sx, sy, (sw / sfacts) + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), sh - (2*c->bw), 0); ++ sx += WIDTH(c) + iv; ++ } ++} ++ ++/* ++ * Deck layout + gaps ++ * https://dwm.suckless.org/patches/deck/ ++ */ ++void ++deck(Monitor *m) ++{ ++ unsigned int i, n; ++ int oh, ov, ih, iv; ++ int mx = 0, my = 0, mh = 0, mw = 0; ++ int sx = 0, sy = 0, sh = 0, sw = 0; ++ float mfacts, sfacts; ++ int mrest, srest; ++ Client *c; ++ ++ getgaps(m, &oh, &ov, &ih, &iv, &n); ++ if (n == 0) ++ return; ++ ++ sx = mx = m->wx + ov; ++ sy = my = m->wy + oh; ++ sh = mh = m->wh - 2*oh - ih * (MIN(n, m->nmaster) - 1); ++ sw = mw = m->ww - 2*ov; ++ ++ if (m->nmaster && n > m->nmaster) { ++ sw = (mw - iv) * (1 - m->mfact); ++ mw = mw - iv - sw; ++ sx = mx + mw + iv; ++ sh = m->wh - 2*oh; ++ } ++ ++ getfacts(m, mh, sh, &mfacts, &sfacts, &mrest, &srest); ++ ++ if (n - m->nmaster > 0) /* override layout symbol */ ++ snprintf(m->ltsymbol, sizeof m->ltsymbol, "D %d", n - m->nmaster); ++ ++ for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) ++ if (i < m->nmaster) { ++ resize(c, mx, my, mw - (2*c->bw), (mh / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), 0); ++ my += HEIGHT(c) + ih; ++ } else { ++ resize(c, sx, sy, sw - (2*c->bw), sh - (2*c->bw), 0); ++ } ++} ++ ++/* ++ * Fibonacci layout + gaps ++ * https://dwm.suckless.org/patches/fibonacci/ ++ */ ++void ++fibonacci(Monitor *m, int s) ++{ ++ unsigned int i, n; ++ int nx, ny, nw, nh; ++ int oh, ov, ih, iv; ++ int nv, hrest = 0, wrest = 0, r = 1; ++ Client *c; ++ ++ getgaps(m, &oh, &ov, &ih, &iv, &n); ++ if (n == 0) ++ return; ++ ++ nx = m->wx + ov; ++ ny = m->wy + oh; ++ nw = m->ww - 2*ov; ++ nh = m->wh - 2*oh; ++ ++ for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next)) { ++ if (r) { ++ if ((i % 2 && (nh - ih) / 2 <= (bh + 2*c->bw)) ++ || (!(i % 2) && (nw - iv) / 2 <= (bh + 2*c->bw))) { ++ r = 0; ++ } ++ if (r && i < n - 1) { ++ if (i % 2) { ++ nv = (nh - ih) / 2; ++ hrest = nh - 2*nv - ih; ++ nh = nv; ++ } else { ++ nv = (nw - iv) / 2; ++ wrest = nw - 2*nv - iv; ++ nw = nv; ++ } ++ ++ if ((i % 4) == 2 && !s) ++ nx += nw + iv; ++ else if ((i % 4) == 3 && !s) ++ ny += nh + ih; ++ } ++ ++ if ((i % 4) == 0) { ++ if (s) { ++ ny += nh + ih; ++ nh += hrest; ++ } ++ else { ++ nh -= hrest; ++ ny -= nh + ih; ++ } ++ } ++ else if ((i % 4) == 1) { ++ nx += nw + iv; ++ nw += wrest; ++ } ++ else if ((i % 4) == 2) { ++ ny += nh + ih; ++ nh += hrest; ++ if (i < n - 1) ++ nw += wrest; ++ } ++ else if ((i % 4) == 3) { ++ if (s) { ++ nx += nw + iv; ++ nw -= wrest; ++ } else { ++ nw -= wrest; ++ nx -= nw + iv; ++ nh += hrest; ++ } ++ } ++ if (i == 0) { ++ if (n != 1) { ++ nw = (m->ww - iv - 2*ov) - (m->ww - iv - 2*ov) * (1 - m->mfact); ++ wrest = 0; ++ } ++ ny = m->wy + oh; ++ } ++ else if (i == 1) ++ nw = m->ww - nw - iv - 2*ov; ++ i++; ++ } ++ ++ resize(c, nx, ny, nw - (2*c->bw), nh - (2*c->bw), False); ++ } ++} ++ ++void ++dwindle(Monitor *m) ++{ ++ fibonacci(m, 1); ++} ++ ++void ++spiral(Monitor *m) ++{ ++ fibonacci(m, 0); ++} ++ ++/* ++ * Gappless grid layout + gaps (ironically) ++ * https://dwm.suckless.org/patches/gaplessgrid/ ++ */ ++void ++gaplessgrid(Monitor *m) ++{ ++ unsigned int i, n; ++ int x, y, cols, rows, ch, cw, cn, rn, rrest, crest; // counters ++ int oh, ov, ih, iv; ++ Client *c; ++ ++ getgaps(m, &oh, &ov, &ih, &iv, &n); ++ if (n == 0) ++ return; ++ ++ /* grid dimensions */ ++ for (cols = 0; cols <= n/2; cols++) ++ if (cols*cols >= n) ++ break; ++ if (n == 5) /* set layout against the general calculation: not 1:2:2, but 2:3 */ ++ cols = 2; ++ rows = n/cols; ++ cn = rn = 0; // reset column no, row no, client count ++ ++ ch = (m->wh - 2*oh - ih * (rows - 1)) / rows; ++ cw = (m->ww - 2*ov - iv * (cols - 1)) / cols; ++ rrest = (m->wh - 2*oh - ih * (rows - 1)) - ch * rows; ++ crest = (m->ww - 2*ov - iv * (cols - 1)) - cw * cols; ++ x = m->wx + ov; ++ y = m->wy + oh; ++ ++ for (i = 0, c = nexttiled(m->clients); c; i++, c = nexttiled(c->next)) { ++ if (i/rows + 1 > cols - n%cols) { ++ rows = n/cols + 1; ++ ch = (m->wh - 2*oh - ih * (rows - 1)) / rows; ++ rrest = (m->wh - 2*oh - ih * (rows - 1)) - ch * rows; ++ } ++ resize(c, ++ x, ++ y + rn*(ch + ih) + MIN(rn, rrest), ++ cw + (cn < crest ? 1 : 0) - 2*c->bw, ++ ch + (rn < rrest ? 1 : 0) - 2*c->bw, ++ 0); ++ rn++; ++ if (rn >= rows) { ++ rn = 0; ++ x += cw + ih + (cn < crest ? 1 : 0); ++ cn++; ++ } ++ } ++} ++ ++/* ++ * Gridmode layout + gaps ++ * https://dwm.suckless.org/patches/gridmode/ ++ */ ++void ++grid(Monitor *m) ++{ ++ unsigned int i, n; ++ int cx, cy, cw, ch, cc, cr, chrest, cwrest, cols, rows; ++ int oh, ov, ih, iv; ++ Client *c; ++ ++ getgaps(m, &oh, &ov, &ih, &iv, &n); ++ ++ /* grid dimensions */ ++ for (rows = 0; rows <= n/2; rows++) ++ if (rows*rows >= n) ++ break; ++ cols = (rows && (rows - 1) * rows >= n) ? rows - 1 : rows; ++ ++ /* window geoms (cell height/width) */ ++ ch = (m->wh - 2*oh - ih * (rows - 1)) / (rows ? rows : 1); ++ cw = (m->ww - 2*ov - iv * (cols - 1)) / (cols ? cols : 1); ++ chrest = (m->wh - 2*oh - ih * (rows - 1)) - ch * rows; ++ cwrest = (m->ww - 2*ov - iv * (cols - 1)) - cw * cols; ++ for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { ++ cc = i / rows; ++ cr = i % rows; ++ cx = m->wx + ov + cc * (cw + iv) + MIN(cc, cwrest); ++ cy = m->wy + oh + cr * (ch + ih) + MIN(cr, chrest); ++ resize(c, cx, cy, cw + (cc < cwrest ? 1 : 0) - 2*c->bw, ch + (cr < chrest ? 1 : 0) - 2*c->bw, False); ++ } ++} ++ ++/* ++ * Horizontal grid layout + gaps ++ * https://dwm.suckless.org/patches/horizgrid/ ++ */ ++void ++horizgrid(Monitor *m) { ++ Client *c; ++ unsigned int n, i; ++ int oh, ov, ih, iv; ++ int mx = 0, my = 0, mh = 0, mw = 0; ++ int sx = 0, sy = 0, sh = 0, sw = 0; ++ int ntop, nbottom = 1; ++ float mfacts, sfacts; ++ int mrest, srest; ++ ++ /* Count windows */ ++ getgaps(m, &oh, &ov, &ih, &iv, &n); ++ if (n == 0) ++ return; ++ ++ if (n <= 2) ++ ntop = n; ++ else { ++ ntop = n / 2; ++ nbottom = n - ntop; ++ } ++ sx = mx = m->wx + ov; ++ sy = my = m->wy + oh; ++ sh = mh = m->wh - 2*oh; ++ sw = mw = m->ww - 2*ov; ++ ++ if (n > ntop) { ++ sh = (mh - ih) / 2; ++ mh = mh - ih - sh; ++ sy = my + mh + ih; ++ mw = m->ww - 2*ov - iv * (ntop - 1); ++ sw = m->ww - 2*ov - iv * (nbottom - 1); ++ } ++ ++ mfacts = ntop; ++ sfacts = nbottom; ++ mrest = mw - (mw / ntop) * ntop; ++ srest = sw - (sw / nbottom) * nbottom; ++ ++ for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) ++ if (i < ntop) { ++ resize(c, mx, my, (mw / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0); ++ mx += WIDTH(c) + iv; ++ } else { ++ resize(c, sx, sy, (sw / sfacts) + ((i - ntop) < srest ? 1 : 0) - (2*c->bw), sh - (2*c->bw), 0); ++ sx += WIDTH(c) + iv; ++ } ++} ++ ++/* ++ * nrowgrid layout + gaps ++ * https://dwm.suckless.org/patches/nrowgrid/ ++ */ ++void ++nrowgrid(Monitor *m) ++{ ++ unsigned int n; ++ int ri = 0, ci = 0; /* counters */ ++ int oh, ov, ih, iv; /* vanitygap settings */ ++ unsigned int cx, cy, cw, ch; /* client geometry */ ++ unsigned int uw = 0, uh = 0, uc = 0; /* utilization trackers */ ++ unsigned int cols, rows = m->nmaster + 1; ++ Client *c; ++ ++ /* count clients */ ++ getgaps(m, &oh, &ov, &ih, &iv, &n); ++ ++ /* nothing to do here */ ++ if (n == 0) ++ return; ++ ++ /* force 2 clients to always split vertically */ ++ if (FORCE_VSPLIT && n == 2) ++ rows = 1; ++ ++ /* never allow empty rows */ ++ if (n < rows) ++ rows = n; ++ ++ /* define first row */ ++ cols = n / rows; ++ uc = cols; ++ cy = m->wy + oh; ++ ch = (m->wh - 2*oh - ih*(rows - 1)) / rows; ++ uh = ch; ++ ++ for (c = nexttiled(m->clients); c; c = nexttiled(c->next), ci++) { ++ if (ci == cols) { ++ uw = 0; ++ ci = 0; ++ ri++; ++ ++ /* next row */ ++ cols = (n - uc) / (rows - ri); ++ uc += cols; ++ cy = m->wy + oh + uh + ih; ++ uh += ch + ih; ++ } ++ ++ cx = m->wx + ov + uw; ++ cw = (m->ww - 2*ov - uw) / (cols - ci); ++ uw += cw + iv; ++ ++ resize(c, cx, cy, cw - (2*c->bw), ch - (2*c->bw), 0); ++ } ++} ++ ++/* ++ * Default tile layout + gaps ++ */ ++static void ++tile(Monitor *m) ++{ ++ unsigned int i, n; ++ int oh, ov, ih, iv; ++ int mx = 0, my = 0, mh = 0, mw = 0; ++ int sx = 0, sy = 0, sh = 0, sw = 0; ++ float mfacts, sfacts; ++ int mrest, srest; ++ Client *c; ++ ++ getgaps(m, &oh, &ov, &ih, &iv, &n); ++ if (n == 0) ++ return; ++ ++ sx = mx = m->wx + ov; ++ sy = my = m->wy + oh; ++ mh = m->wh - 2*oh - ih * (MIN(n, m->nmaster) - 1); ++ sh = m->wh - 2*oh - ih * (n - m->nmaster - 1); ++ sw = mw = m->ww - 2*ov; ++ ++ if (m->nmaster && n > m->nmaster) { ++ sw = (mw - iv) * (1 - m->mfact); ++ mw = mw - iv - sw; ++ sx = mx + mw + iv; ++ } ++ ++ getfacts(m, mh, sh, &mfacts, &sfacts, &mrest, &srest); ++ ++ for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) ++ if (i < m->nmaster) { ++ resize(c, mx, my, mw - (2*c->bw), (mh / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), 0); ++ my += HEIGHT(c) + ih; ++ } else { ++ resize(c, sx, sy, sw - (2*c->bw), (sh / sfacts) + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), 0); ++ sy += HEIGHT(c) + ih; ++ } ++} +\ No newline at end of file +-- +2.19.1 + diff --git a/dwm/.local/share/dwm/dwm.1 b/dwm/.local/share/dwm/dwm.1 new file mode 100644 index 0000000..ddc8321 --- /dev/null +++ b/dwm/.local/share/dwm/dwm.1 @@ -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 on the left contains one window by default, and the stacking area on the +right contains all other windows. The number of master area windows can be +adjusted from zero to an arbitrary number. 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 stderr, 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\-p +Spawn +.BR dmenu(1) +for launching other programs. +.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 number of windows in master area. +.TP +.B Mod1\-d +Decrease number of windows 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 ISSUES +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 . +.SH BUGS +Send all bug reports with a patch to hackers@suckless.org. diff --git a/dwm/.local/share/dwm/dwm.c b/dwm/.local/share/dwm/dwm.c new file mode 100644 index 0000000..76d1a9e --- /dev/null +++ b/dwm/.local/share/dwm/dwm.c @@ -0,0 +1,2349 @@ +/* See LICENSE file for copyright and license details. + * + * dynamic window manager is designed like any other X client as well. It is + * driven through handling X events. In contrast to other X clients, a window + * manager selects for SubstructureRedirectMask on the root window, to receive + * events about window (dis-)appearance. Only one X connection at a time is + * allowed to select for this event mask. + * + * The event handlers of dwm are organized in an array which is accessed + * whenever a new event has been fetched. This allows event dispatching + * in O(1) time. + * + * Each child of the root window is called a client, except windows which have + * set the override_redirect flag. Clients are organized in a linked client + * list on each monitor, the focus history is remembered through a stack list + * on each monitor. Each client contains a bit array to indicate the tags of a + * client. + * + * Keys and tagging rules are organized as arrays and defined in config.h. + * + * To understand everything else, start reading main(). + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef XINERAMA +#include +#endif /* XINERAMA */ +#include + +#include "drw.h" +#include "util.h" + +/* macros */ +#define BUTTONMASK (ButtonPressMask|ButtonReleaseMask) +#define CLEANMASK(mask) (mask & ~(numlockmask|LockMask) & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask)) +#define INTERSECT(x,y,w,h,m) (MAX(0, MIN((x)+(w),(m)->mx+(m)->mw) - MAX((x),(m)->mx)) \ + * MAX(0, MIN((y)+(h),(m)->my+(m)->mh) - MAX((y),(m)->my))) +#define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags])) +#define LENGTH(X) (sizeof X / sizeof X[0]) +#define MOUSEMASK (BUTTONMASK|PointerMotionMask) +#define WIDTH(X) ((X)->w + 2 * (X)->bw) +#define HEIGHT(X) ((X)->h + 2 * (X)->bw) +#define TAGMASK ((1 << LENGTH(tags)) - 1) +#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad) + +/* enums */ +enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ +enum { SchemeNorm, SchemeSel }; /* color schemes */ +enum { NetSupported, NetWMName, NetWMState, NetWMCheck, + NetWMFullscreen, NetActiveWindow, NetWMWindowType, + NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */ +enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */ +enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, + ClkClientWin, ClkRootWin, ClkLast }; /* clicks */ + +typedef union { + int i; + unsigned int ui; + float f; + const void *v; +} Arg; + +typedef struct { + unsigned int click; + unsigned int mask; + unsigned int button; + void (*func)(const Arg *arg); + const Arg arg; +} Button; + +typedef struct Monitor Monitor; +typedef struct Client Client; +struct Client { + char name[256]; + float mina, maxa; + int x, y, w, h; + int oldx, oldy, oldw, oldh; + int basew, baseh, incw, inch, maxw, maxh, minw, minh; + int bw, oldbw; + unsigned int tags; + int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; + Client *next; + Client *snext; + Monitor *mon; + Window win; +}; + +typedef struct { + unsigned int mod; + KeySym keysym; + void (*func)(const Arg *); + const Arg arg; +} Key; + +typedef struct { + const char *symbol; + void (*arrange)(Monitor *); +} Layout; + +struct Monitor { + char ltsymbol[16]; + float mfact; + int nmaster; + int num; + int by, bh; /* bar geometry */ + int tx, tw; /* bar tray geometry */ + int mx, my, mw, mh; /* screen size */ + int wx, wy, ww, wh; /* window area */ + int gappih; /* horizontal gap between windows */ + int gappiv; /* vertical gap between windows */ + int gappoh; /* horizontal outer gaps */ + int gappov; /* vertical outer gaps */ + unsigned int seltags; + unsigned int sellt; + unsigned int tagset[2]; + int showbar; + int topbar; + Client *clients; + Client *sel; + Client *stack; + Monitor *next; + Window barwin; + Window traywin; + const Layout *lt[2]; +}; + +typedef struct { + const char *class; + const char *instance; + const char *title; + unsigned int tags; + int isfloating; + int monitor; +} Rule; + +/* function declarations */ +static void applyrules(Client *c); +static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact); +static void arrange(Monitor *m); +static void arrangemon(Monitor *m); +static void attach(Client *c); +static void attachstack(Client *c); +static void buttonpress(XEvent *e); +static void checkotherwm(void); +static void cleanup(void); +static void cleanupmon(Monitor *mon); +static void clientmessage(XEvent *e); +static void configure(Client *c); +static void configurenotify(XEvent *e); +static void configurerequest(XEvent *e); +static Monitor *createmon(void); +static void destroynotify(XEvent *e); +static void detach(Client *c); +static void detachstack(Client *c); +static Monitor *dirtomon(int dir); +static void drawbar(Monitor *m); +static void drawbars(void); +static void enternotify(XEvent *e); +static void expose(XEvent *e); +static void focus(Client *c); +static void focusin(XEvent *e); +static void focusmon(const Arg *arg); +static void focusstack(const Arg *arg); +static Atom getatomprop(Client *c, Atom prop); +static int getrootptr(int *x, int *y); +static long getstate(Window w); +static int gettextprop(Window w, Atom atom, char *text, unsigned int size); +static void grabbuttons(Client *c, int focused); +static void grabkeys(void); +static void incnmaster(const Arg *arg); +static void keypress(XEvent *e); +static void killclient(const Arg *arg); +static void manage(Window w, XWindowAttributes *wa); +static void managealtbar(Window win, XWindowAttributes *wa); +static void managetray(Window win, XWindowAttributes *wa); +static void mappingnotify(XEvent *e); +static void maprequest(XEvent *e); +static void monocle(Monitor *m); +static void motionnotify(XEvent *e); +static void movemouse(const Arg *arg); +static Client *nexttiled(Client *c); +static void pop(Client *); +static void propertynotify(XEvent *e); +static void quit(const Arg *arg); +static Monitor *recttomon(int x, int y, int w, int h); +static void resize(Client *c, int x, int y, int w, int h, int interact); +static void resizeclient(Client *c, int x, int y, int w, int h); +static void resizemouse(const Arg *arg); +static void restack(Monitor *m); +static void run(void); +static void scan(void); +static void scantray(void); +static int sendevent(Client *c, Atom proto); +static void sendmon(Client *c, Monitor *m); +static void setclientstate(Client *c, long state); +static void setfocus(Client *c); +static void setfullscreen(Client *c, int fullscreen); +static void setlayout(const Arg *arg); +static void setmfact(const Arg *arg); +static void setup(void); +static void seturgent(Client *c, int urg); +static void showhide(Client *c); +static void sigchld(int unused); +static void spawn(const Arg *arg); +static void spawnbar(); +static void tag(const Arg *arg); +static void tagmon(const Arg *arg); +static void togglebar(const Arg *arg); +static void togglefloating(const Arg *arg); +static void toggletag(const Arg *arg); +static void toggleview(const Arg *arg); +static void unfocus(Client *c, int setfocus); +static void unmanage(Client *c, int destroyed); +static void unmanagealtbar(Window w); +static void unmanagetray(Window w); +static void unmapnotify(XEvent *e); +static void updatebarpos(Monitor *m); +static void updatebars(void); +static void updateclientlist(void); +static int updategeom(void); +static void updatenumlockmask(void); +static void updatesizehints(Client *c); +static void updatestatus(void); +static void updatetitle(Client *c); +static void updatewindowtype(Client *c); +static void updatewmhints(Client *c); +static void view(const Arg *arg); +static Client *wintoclient(Window w); +static Monitor *wintomon(Window w); +static int wmclasscontains(Window win, const char *class, const char *name); +static int xerror(Display *dpy, XErrorEvent *ee); +static int xerrordummy(Display *dpy, XErrorEvent *ee); +static int xerrorstart(Display *dpy, XErrorEvent *ee); +static void zoom(const Arg *arg); +static void autostart_exec(void); + +/* variables */ +static const char broken[] = "broken"; +static char stext[256]; +static int screen; +static int sw, sh; /* X display screen geometry width, height */ +static int bh, blw = 0; /* bar geometry */ +static int lrpad; /* sum of left and right padding for text */ +static int (*xerrorxlib)(Display *, XErrorEvent *); +static unsigned int numlockmask = 0; +static void (*handler[LASTEvent]) (XEvent *) = { + [ButtonPress] = buttonpress, + [ClientMessage] = clientmessage, + [ConfigureRequest] = configurerequest, + [ConfigureNotify] = configurenotify, + [DestroyNotify] = destroynotify, + [EnterNotify] = enternotify, + [Expose] = expose, + [FocusIn] = focusin, + [KeyPress] = keypress, + [MappingNotify] = mappingnotify, + [MapRequest] = maprequest, + [MotionNotify] = motionnotify, + [PropertyNotify] = propertynotify, + [UnmapNotify] = unmapnotify +}; +static Atom wmatom[WMLast], netatom[NetLast]; +static int running = 1; +static Cur *cursor[CurLast]; +static Clr **scheme; +static Display *dpy; +static Drw *drw; +static Monitor *mons, *selmon; +static Window root, wmcheckwin; + +/* configuration, allows nested code to access above variables */ +#include "config.h" + +/* compile-time check if all tags fit into an unsigned int bit array. */ +struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; }; + +/* dwm will keep pid's of processes from autostart array and kill them at quit */ +static pid_t *autostart_pids; +static size_t autostart_len; + +/* execute command from autostart array */ +static void +autostart_exec() { + const char *const *p; + size_t i = 0; + + /* count entries */ + for (p = autostart; *p; autostart_len++, p++) + while (*++p); + + autostart_pids = malloc(autostart_len * sizeof(pid_t)); + for (p = autostart; *p; i++, p++) { + if ((autostart_pids[i] = fork()) == 0) { + setsid(); + execvp(*p, (char *const *)p); + fprintf(stderr, "dwm: execvp %s\n", *p); + perror(" failed"); + _exit(EXIT_FAILURE); + } + /* skip arguments */ + while (*++p); + } +} + +/* function implementations */ +void +applyrules(Client *c) +{ + const char *class, *instance; + unsigned int i; + const Rule *r; + Monitor *m; + XClassHint ch = { NULL, NULL }; + + /* rule matching */ + c->isfloating = 0; + c->tags = 0; + XGetClassHint(dpy, c->win, &ch); + class = ch.res_class ? ch.res_class : broken; + instance = ch.res_name ? ch.res_name : broken; + + for (i = 0; i < LENGTH(rules); i++) { + r = &rules[i]; + if ((!r->title || strstr(c->name, r->title)) + && (!r->class || strstr(class, r->class)) + && (!r->instance || strstr(instance, r->instance))) + { + c->isfloating = r->isfloating; + c->tags |= r->tags; + for (m = mons; m && m->num != r->monitor; m = m->next); + if (m) + c->mon = m; + } + } + if (ch.res_class) + XFree(ch.res_class); + if (ch.res_name) + XFree(ch.res_name); + c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : c->mon->tagset[c->mon->seltags]; +} + +int +applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact) +{ + int baseismin; + Monitor *m = c->mon; + + /* set minimum possible */ + *w = MAX(1, *w); + *h = MAX(1, *h); + if (interact) { + if (*x > sw) + *x = sw - WIDTH(c); + if (*y > sh) + *y = sh - HEIGHT(c); + if (*x + *w + 2 * c->bw < 0) + *x = 0; + if (*y + *h + 2 * c->bw < 0) + *y = 0; + } else { + if (*x >= m->wx + m->ww) + *x = m->wx + m->ww - WIDTH(c); + if (*y >= m->wy + m->wh) + *y = m->wy + m->wh - HEIGHT(c); + if (*x + *w + 2 * c->bw <= m->wx) + *x = m->wx; + if (*y + *h + 2 * c->bw <= m->wy) + *y = m->wy; + } + if (*h < bh) + *h = bh; + if (*w < bh) + *w = bh; + if (resizehints || c->isfloating || !c->mon->lt[c->mon->sellt]->arrange) { + /* see last two sentences in ICCCM 4.1.2.3 */ + baseismin = c->basew == c->minw && c->baseh == c->minh; + if (!baseismin) { /* temporarily remove base dimensions */ + *w -= c->basew; + *h -= c->baseh; + } + /* adjust for aspect limits */ + if (c->mina > 0 && c->maxa > 0) { + if (c->maxa < (float)*w / *h) + *w = *h * c->maxa + 0.5; + else if (c->mina < (float)*h / *w) + *h = *w * c->mina + 0.5; + } + if (baseismin) { /* increment calculation requires this */ + *w -= c->basew; + *h -= c->baseh; + } + /* adjust for increment value */ + if (c->incw) + *w -= *w % c->incw; + if (c->inch) + *h -= *h % c->inch; + /* restore base dimensions */ + *w = MAX(*w + c->basew, c->minw); + *h = MAX(*h + c->baseh, c->minh); + if (c->maxw) + *w = MIN(*w, c->maxw); + if (c->maxh) + *h = MIN(*h, c->maxh); + } + return *x != c->x || *y != c->y || *w != c->w || *h != c->h; +} + +void +arrange(Monitor *m) +{ + if (m) + showhide(m->stack); + else for (m = mons; m; m = m->next) + showhide(m->stack); + if (m) { + arrangemon(m); + restack(m); + } else for (m = mons; m; m = m->next) + arrangemon(m); +} + +void +arrangemon(Monitor *m) +{ + strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol); + if (m->lt[m->sellt]->arrange) + m->lt[m->sellt]->arrange(m); +} + +void +attach(Client *c) +{ + c->next = c->mon->clients; + c->mon->clients = c; +} + +void +attachstack(Client *c) +{ + c->snext = c->mon->stack; + c->mon->stack = c; +} + +void +buttonpress(XEvent *e) +{ + unsigned int i, x, click; + Arg arg = {0}; + Client *c; + Monitor *m; + XButtonPressedEvent *ev = &e->xbutton; + + click = ClkRootWin; + /* focus monitor if necessary */ + if ((m = wintomon(ev->window)) && m != selmon) { + unfocus(selmon->sel, 1); + selmon = m; + focus(NULL); + } + if (ev->window == selmon->barwin) { + i = x = 0; + do + x += TEXTW(tags[i]); + while (ev->x >= x && ++i < LENGTH(tags)); + if (i < LENGTH(tags)) { + click = ClkTagBar; + arg.ui = 1 << i; + } else if (ev->x < x + blw) + click = ClkLtSymbol; + else if (ev->x > selmon->ww - (int)TEXTW(stext)) + click = ClkStatusText; + else + click = ClkWinTitle; + } else if ((c = wintoclient(ev->window))) { + focus(c); + restack(selmon); + XAllowEvents(dpy, ReplayPointer, CurrentTime); + click = ClkClientWin; + } + for (i = 0; i < LENGTH(buttons); i++) + if (click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button + && CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state)) + buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg); +} + +void +checkotherwm(void) +{ + xerrorxlib = XSetErrorHandler(xerrorstart); + /* this causes an error if some other window manager is running */ + XSelectInput(dpy, DefaultRootWindow(dpy), SubstructureRedirectMask); + XSync(dpy, False); + XSetErrorHandler(xerror); + XSync(dpy, False); +} + +void +cleanup(void) +{ + Arg a = {.ui = ~0}; + Layout foo = { "", NULL }; + Monitor *m; + size_t i; + + view(&a); + selmon->lt[selmon->sellt] = &foo; + for (m = mons; m; m = m->next) + while (m->stack) + unmanage(m->stack, 0); + XUngrabKey(dpy, AnyKey, AnyModifier, root); + while (mons) + cleanupmon(mons); + for (i = 0; i < CurLast; i++) + drw_cur_free(drw, cursor[i]); + for (i = 0; i < LENGTH(colors); i++) + free(scheme[i]); + XDestroyWindow(dpy, wmcheckwin); + drw_free(drw); + XSync(dpy, False); + XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); + XDeleteProperty(dpy, root, netatom[NetActiveWindow]); +} + +void +cleanupmon(Monitor *mon) +{ + Monitor *m; + + if (mon == mons) + mons = mons->next; + else { + for (m = mons; m && m->next != mon; m = m->next); + m->next = mon->next; + } + if (!usealtbar) { + XUnmapWindow(dpy, mon->barwin); + XDestroyWindow(dpy, mon->barwin); + } + free(mon); +} + +void +clientmessage(XEvent *e) +{ + XClientMessageEvent *cme = &e->xclient; + Client *c = wintoclient(cme->window); + + if (!c) + return; + if (cme->message_type == netatom[NetWMState]) { + if (cme->data.l[1] == netatom[NetWMFullscreen] + || cme->data.l[2] == netatom[NetWMFullscreen]) + setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD */ + || (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen))); + } else if (cme->message_type == netatom[NetActiveWindow]) { + if (c != selmon->sel && !c->isurgent) + seturgent(c, 1); + } +} + +void +configure(Client *c) +{ + XConfigureEvent ce; + + ce.type = ConfigureNotify; + ce.display = dpy; + ce.event = c->win; + ce.window = c->win; + ce.x = c->x; + ce.y = c->y; + ce.width = c->w; + ce.height = c->h; + ce.border_width = c->bw; + ce.above = None; + ce.override_redirect = False; + XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&ce); +} + +void +configurenotify(XEvent *e) +{ + Monitor *m; + Client *c; + XConfigureEvent *ev = &e->xconfigure; + int dirty; + + /* TODO: updategeom handling sucks, needs to be simplified */ + if (ev->window == root) { + dirty = (sw != ev->width || sh != ev->height); + sw = ev->width; + sh = ev->height; + if (updategeom() || dirty) { + drw_resize(drw, sw, bh); + updatebars(); + for (m = mons; m; m = m->next) { + for (c = m->clients; c; c = c->next) + if (c->isfullscreen) + resizeclient(c, m->mx, m->my, m->mw, m->mh); + XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, m->bh); + } + focus(NULL); + arrange(NULL); + } + } +} + +void +configurerequest(XEvent *e) +{ + Client *c; + Monitor *m; + XConfigureRequestEvent *ev = &e->xconfigurerequest; + XWindowChanges wc; + + if ((c = wintoclient(ev->window))) { + if (ev->value_mask & CWBorderWidth) + c->bw = ev->border_width; + else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) { + m = c->mon; + if (ev->value_mask & CWX) { + c->oldx = c->x; + c->x = m->mx + ev->x; + } + if (ev->value_mask & CWY) { + c->oldy = c->y; + c->y = m->my + ev->y; + } + if (ev->value_mask & CWWidth) { + c->oldw = c->w; + c->w = ev->width; + } + if (ev->value_mask & CWHeight) { + c->oldh = c->h; + c->h = ev->height; + } + if ((c->x + c->w) > m->mx + m->mw && c->isfloating) + c->x = m->mx + (m->mw / 2 - WIDTH(c) / 2); /* center in x direction */ + if ((c->y + c->h) > m->my + m->mh && c->isfloating) + c->y = m->my + (m->mh / 2 - HEIGHT(c) / 2); /* center in y direction */ + if ((ev->value_mask & (CWX|CWY)) && !(ev->value_mask & (CWWidth|CWHeight))) + configure(c); + if (ISVISIBLE(c)) + XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); + } else + configure(c); + } else { + wc.x = ev->x; + wc.y = ev->y; + wc.width = ev->width; + wc.height = ev->height; + wc.border_width = ev->border_width; + wc.sibling = ev->above; + wc.stack_mode = ev->detail; + XConfigureWindow(dpy, ev->window, ev->value_mask, &wc); + } + XSync(dpy, False); +} + +Monitor * +createmon(void) +{ + Monitor *m; + + m = ecalloc(1, sizeof(Monitor)); + m->tagset[0] = m->tagset[1] = 1; + m->mfact = mfact; + m->nmaster = nmaster; + m->showbar = showbar; + m->topbar = topbar; + m->bh = bh; + m->gappih = gappih; + m->gappiv = gappiv; + m->gappoh = gappoh; + m->gappov = gappov; + m->lt[0] = &layouts[0]; + m->lt[1] = &layouts[1 % LENGTH(layouts)]; + strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); + return m; +} + +void +destroynotify(XEvent *e) +{ + Client *c; + Monitor *m; + XDestroyWindowEvent *ev = &e->xdestroywindow; + + if ((c = wintoclient(ev->window))) + unmanage(c, 1); + else if ((m = wintomon(ev->window)) && m->barwin == ev->window) + unmanagealtbar(ev->window); + else if (m->traywin == ev->window) + unmanagetray(ev->window); +} + +void +detach(Client *c) +{ + Client **tc; + + for (tc = &c->mon->clients; *tc && *tc != c; tc = &(*tc)->next); + *tc = c->next; +} + +void +detachstack(Client *c) +{ + Client **tc, *t; + + for (tc = &c->mon->stack; *tc && *tc != c; tc = &(*tc)->snext); + *tc = c->snext; + + if (c == c->mon->sel) { + for (t = c->mon->stack; t && !ISVISIBLE(t); t = t->snext); + c->mon->sel = t; + } +} + +Monitor * +dirtomon(int dir) +{ + Monitor *m = NULL; + + if (dir > 0) { + if (!(m = selmon->next)) + m = mons; + } else if (selmon == mons) + for (m = mons; m->next; m = m->next); + else + for (m = mons; m->next != selmon; m = m->next); + return m; +} + +void +drawbar(Monitor *m) +{ + if (usealtbar) + return; + + int x, w, tw = 0; + int boxs = drw->fonts->h / 9; + int boxw = drw->fonts->h / 6 + 2; + unsigned int i, occ = 0, urg = 0; + Client *c; + + /* draw status first so it can be overdrawn by tags later */ + if (m == selmon) { /* status is only drawn on selected monitor */ + drw_setscheme(drw, scheme[SchemeNorm]); + tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */ + drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0); + } + + for (c = m->clients; c; c = c->next) { + occ |= c->tags; + if (c->isurgent) + urg |= c->tags; + } + x = 0; + for (i = 0; i < LENGTH(tags); i++) { + w = TEXTW(tags[i]); + drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]); + drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i); + if (occ & 1 << i) + drw_rect(drw, x + boxs, boxs, boxw, boxw, + m == selmon && selmon->sel && selmon->sel->tags & 1 << i, + urg & 1 << i); + x += w; + } + w = blw = TEXTW(m->ltsymbol); + drw_setscheme(drw, scheme[SchemeNorm]); + x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); + + if ((w = m->ww - tw - x) > bh) { + if (m->sel) { + drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]); + drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0); + if (m->sel->isfloating) + drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0); + } else { + drw_setscheme(drw, scheme[SchemeNorm]); + drw_rect(drw, x, 0, w, bh, 1, 1); + } + } + drw_map(drw, m->barwin, 0, 0, m->ww, bh); +} + +void +drawbars(void) +{ + Monitor *m; + + for (m = mons; m; m = m->next) + drawbar(m); +} + +void +enternotify(XEvent *e) +{ + Client *c; + Monitor *m; + XCrossingEvent *ev = &e->xcrossing; + + if ((ev->mode != NotifyNormal || ev->detail == NotifyInferior) && ev->window != root) + return; + c = wintoclient(ev->window); + m = c ? c->mon : wintomon(ev->window); + if (m != selmon) { + unfocus(selmon->sel, 1); + selmon = m; + } else if (!c || c == selmon->sel) + return; + focus(c); +} + +void +expose(XEvent *e) +{ + Monitor *m; + XExposeEvent *ev = &e->xexpose; + + if (ev->count == 0 && (m = wintomon(ev->window))) + drawbar(m); +} + +void +focus(Client *c) +{ + if (!c || !ISVISIBLE(c)) + for (c = selmon->stack; c && !ISVISIBLE(c); c = c->snext); + if (selmon->sel && selmon->sel != c) + unfocus(selmon->sel, 0); + if (c) { + if (c->mon != selmon) + selmon = c->mon; + if (c->isurgent) + seturgent(c, 0); + detachstack(c); + attachstack(c); + grabbuttons(c, 1); + XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].pixel); + setfocus(c); + } else { + XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); + XDeleteProperty(dpy, root, netatom[NetActiveWindow]); + } + selmon->sel = c; + drawbars(); +} + +/* there are some broken focus acquiring clients needing extra handling */ +void +focusin(XEvent *e) +{ + XFocusChangeEvent *ev = &e->xfocus; + + if (selmon->sel && ev->window != selmon->sel->win) + setfocus(selmon->sel); +} + +void +focusmon(const Arg *arg) +{ + Monitor *m; + + if (!mons->next) + return; + if ((m = dirtomon(arg->i)) == selmon) + return; + unfocus(selmon->sel, 0); + selmon = m; + focus(NULL); +} + +void +focusstack(const Arg *arg) +{ + Client *c = NULL, *i; + + if (!selmon->sel || selmon->sel->isfullscreen) + return; + if (arg->i > 0) { + for (c = selmon->sel->next; c && !ISVISIBLE(c); c = c->next); + if (!c) + for (c = selmon->clients; c && !ISVISIBLE(c); c = c->next); + } else { + for (i = selmon->clients; i != selmon->sel; i = i->next) + if (ISVISIBLE(i)) + c = i; + if (!c) + for (; i; i = i->next) + if (ISVISIBLE(i)) + c = i; + } + if (c) { + focus(c); + restack(selmon); + } +} + +Atom +getatomprop(Client *c, Atom prop) +{ + int di; + unsigned long dl; + unsigned char *p = NULL; + Atom da, atom = None; + + if (XGetWindowProperty(dpy, c->win, prop, 0L, sizeof atom, False, XA_ATOM, + &da, &di, &dl, &dl, &p) == Success && p) { + atom = *(Atom *)p; + XFree(p); + } + return atom; +} + +int +getrootptr(int *x, int *y) +{ + int di; + unsigned int dui; + Window dummy; + + return XQueryPointer(dpy, root, &dummy, &dummy, x, y, &di, &di, &dui); +} + +long +getstate(Window w) +{ + int format; + long result = -1; + unsigned char *p = NULL; + unsigned long n, extra; + Atom real; + + if (XGetWindowProperty(dpy, w, wmatom[WMState], 0L, 2L, False, wmatom[WMState], + &real, &format, &n, &extra, (unsigned char **)&p) != Success) + return -1; + if (n != 0) + result = *p; + XFree(p); + return result; +} + +int +gettextprop(Window w, Atom atom, char *text, unsigned int size) +{ + char **list = NULL; + int n; + XTextProperty name; + + if (!text || size == 0) + return 0; + text[0] = '\0'; + if (!XGetTextProperty(dpy, w, &name, atom) || !name.nitems) + return 0; + if (name.encoding == XA_STRING) + strncpy(text, (char *)name.value, size - 1); + else { + if (XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success && n > 0 && *list) { + strncpy(text, *list, size - 1); + XFreeStringList(list); + } + } + text[size - 1] = '\0'; + XFree(name.value); + return 1; +} + +void +grabbuttons(Client *c, int focused) +{ + updatenumlockmask(); + { + unsigned int i, j; + unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask }; + XUngrabButton(dpy, AnyButton, AnyModifier, c->win); + if (!focused) + XGrabButton(dpy, AnyButton, AnyModifier, c->win, False, + BUTTONMASK, GrabModeSync, GrabModeSync, None, None); + for (i = 0; i < LENGTH(buttons); i++) + if (buttons[i].click == ClkClientWin) + for (j = 0; j < LENGTH(modifiers); j++) + XGrabButton(dpy, buttons[i].button, + buttons[i].mask | modifiers[j], + c->win, False, BUTTONMASK, + GrabModeAsync, GrabModeSync, None, None); + } +} + +void +grabkeys(void) +{ + updatenumlockmask(); + { + unsigned int i, j; + unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask }; + KeyCode code; + + XUngrabKey(dpy, AnyKey, AnyModifier, root); + for (i = 0; i < LENGTH(keys); i++) + if ((code = XKeysymToKeycode(dpy, keys[i].keysym))) + for (j = 0; j < LENGTH(modifiers); j++) + XGrabKey(dpy, code, keys[i].mod | modifiers[j], root, + True, GrabModeAsync, GrabModeAsync); + } +} + +void +incnmaster(const Arg *arg) +{ + selmon->nmaster = MAX(selmon->nmaster + arg->i, 0); + arrange(selmon); +} + +#ifdef XINERAMA +static int +isuniquegeom(XineramaScreenInfo *unique, size_t n, XineramaScreenInfo *info) +{ + while (n--) + if (unique[n].x_org == info->x_org && unique[n].y_org == info->y_org + && unique[n].width == info->width && unique[n].height == info->height) + return 0; + return 1; +} +#endif /* XINERAMA */ + +void +keypress(XEvent *e) +{ + unsigned int i; + KeySym keysym; + XKeyEvent *ev; + + ev = &e->xkey; + keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); + for (i = 0; i < LENGTH(keys); i++) + if (keysym == keys[i].keysym + && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state) + && keys[i].func) + keys[i].func(&(keys[i].arg)); +} + +void +killclient(const Arg *arg) +{ + if (!selmon->sel) + return; + if (!sendevent(selmon->sel, wmatom[WMDelete])) { + XGrabServer(dpy); + XSetErrorHandler(xerrordummy); + XSetCloseDownMode(dpy, DestroyAll); + XKillClient(dpy, selmon->sel->win); + XSync(dpy, False); + XSetErrorHandler(xerror); + XUngrabServer(dpy); + } +} + +void +manage(Window w, XWindowAttributes *wa) +{ + Client *c, *t = NULL; + Window trans = None; + XWindowChanges wc; + + c = ecalloc(1, sizeof(Client)); + c->win = w; + /* geometry */ + c->x = c->oldx = wa->x; + c->y = c->oldy = wa->y; + c->w = c->oldw = wa->width; + c->h = c->oldh = wa->height; + c->oldbw = wa->border_width; + + updatetitle(c); + if (XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) { + c->mon = t->mon; + c->tags = t->tags; + } else { + c->mon = selmon; + applyrules(c); + } + + if (c->x + WIDTH(c) > c->mon->mx + c->mon->mw) + c->x = c->mon->mx + c->mon->mw - WIDTH(c); + if (c->y + HEIGHT(c) > c->mon->my + c->mon->mh) + c->y = c->mon->my + c->mon->mh - HEIGHT(c); + c->x = MAX(c->x, c->mon->mx); + /* only fix client y-offset, if the client center might cover the bar */ + c->y = MAX(c->y, ((c->mon->by == c->mon->my) && (c->x + (c->w / 2) >= c->mon->wx) + && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my); + c->bw = borderpx; + + wc.border_width = c->bw; + XConfigureWindow(dpy, w, CWBorderWidth, &wc); + XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel); + configure(c); /* propagates border_width, if size doesn't change */ + updatewindowtype(c); + updatesizehints(c); + updatewmhints(c); + XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask); + grabbuttons(c, 0); + if (!c->isfloating) + c->isfloating = c->oldstate = trans != None || c->isfixed; + if (c->isfloating) + XRaiseWindow(dpy, c->win); + attach(c); + attachstack(c); + XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, + (unsigned char *) &(c->win), 1); + XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */ + setclientstate(c, NormalState); + if (c->mon == selmon) + unfocus(selmon->sel, 0); + c->mon->sel = c; + arrange(c->mon); + XMapWindow(dpy, c->win); + focus(NULL); +} + +void +managealtbar(Window win, XWindowAttributes *wa) +{ + Monitor *m; + if (!(m = recttomon(wa->x, wa->y, wa->width, wa->height))) + return; + + m->barwin = win; + m->by = wa->y; + bh = m->bh = wa->height; + updatebarpos(m); + arrange(m); + XSelectInput(dpy, win, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask); + XMoveResizeWindow(dpy, win, wa->x, wa->y, wa->width, wa->height); + XMapWindow(dpy, win); + XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, + (unsigned char *) &win, 1); +} + +void +managetray(Window win, XWindowAttributes *wa) +{ + Monitor *m; + if (!(m = recttomon(wa->x, wa->y, wa->width, wa->height))) + return; + + m->traywin = win; + m->tx = wa->x; + m->tw = wa->width; + updatebarpos(m); + arrange(m); + XSelectInput(dpy, win, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask); + XMoveResizeWindow(dpy, win, wa->x, wa->y, wa->width, wa->height); + XMapWindow(dpy, win); + XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, + (unsigned char *) &win, 1); +} + + +void +mappingnotify(XEvent *e) +{ + XMappingEvent *ev = &e->xmapping; + + XRefreshKeyboardMapping(ev); + if (ev->request == MappingKeyboard) + grabkeys(); +} + +void +maprequest(XEvent *e) +{ + static XWindowAttributes wa; + XMapRequestEvent *ev = &e->xmaprequest; + + if (!XGetWindowAttributes(dpy, ev->window, &wa)) + return; + if (wa.override_redirect) + return; + if (wmclasscontains(ev->window, altbarclass, "")) + managealtbar(ev->window, &wa); + else if (!wintoclient(ev->window)) + manage(ev->window, &wa); +} + +void +monocle(Monitor *m) +{ + unsigned int n = 0; + Client *c; + + for (c = m->clients; c; c = c->next) + if (ISVISIBLE(c)) + n++; + if (n > 0) /* override layout symbol */ + snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n); + for (c = nexttiled(m->clients); c; c = nexttiled(c->next)) + resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, 0); +} + +void +motionnotify(XEvent *e) +{ + static Monitor *mon = NULL; + Monitor *m; + XMotionEvent *ev = &e->xmotion; + + if (ev->window != root) + return; + if ((m = recttomon(ev->x_root, ev->y_root, 1, 1)) != mon && mon) { + unfocus(selmon->sel, 1); + selmon = m; + focus(NULL); + } + mon = m; +} + +void +movemouse(const Arg *arg) +{ + int x, y, ocx, ocy, nx, ny; + Client *c; + Monitor *m; + XEvent ev; + Time lasttime = 0; + + if (!(c = selmon->sel)) + return; + if (c->isfullscreen) /* no support moving fullscreen windows by mouse */ + return; + restack(selmon); + ocx = c->x; + ocy = c->y; + if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, + None, cursor[CurMove]->cursor, CurrentTime) != GrabSuccess) + return; + if (!getrootptr(&x, &y)) + return; + do { + XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev); + switch(ev.type) { + case ConfigureRequest: + case Expose: + case MapRequest: + handler[ev.type](&ev); + break; + case MotionNotify: + if ((ev.xmotion.time - lasttime) <= (1000 / 60)) + continue; + lasttime = ev.xmotion.time; + + nx = ocx + (ev.xmotion.x - x); + ny = ocy + (ev.xmotion.y - y); + if (abs(selmon->wx - nx) < snap) + nx = selmon->wx; + else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap) + nx = selmon->wx + selmon->ww - WIDTH(c); + if (abs(selmon->wy - ny) < snap) + ny = selmon->wy; + else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap) + ny = selmon->wy + selmon->wh - HEIGHT(c); + if (!c->isfloating && selmon->lt[selmon->sellt]->arrange + && (abs(nx - c->x) > snap || abs(ny - c->y) > snap)) + togglefloating(NULL); + if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) + resize(c, nx, ny, c->w, c->h, 1); + break; + } + } while (ev.type != ButtonRelease); + XUngrabPointer(dpy, CurrentTime); + if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) { + sendmon(c, m); + selmon = m; + focus(NULL); + } +} + +Client * +nexttiled(Client *c) +{ + for (; c && (c->isfloating || !ISVISIBLE(c)); c = c->next); + return c; +} + +void +pop(Client *c) +{ + detach(c); + attach(c); + focus(c); + arrange(c->mon); +} + +void +propertynotify(XEvent *e) +{ + Client *c; + Window trans; + XPropertyEvent *ev = &e->xproperty; + + if ((ev->window == root) && (ev->atom == XA_WM_NAME)) + updatestatus(); + else if (ev->state == PropertyDelete) + return; /* ignore */ + else if ((c = wintoclient(ev->window))) { + switch(ev->atom) { + default: break; + case XA_WM_TRANSIENT_FOR: + if (!c->isfloating && (XGetTransientForHint(dpy, c->win, &trans)) && + (c->isfloating = (wintoclient(trans)) != NULL)) + arrange(c->mon); + break; + case XA_WM_NORMAL_HINTS: + updatesizehints(c); + break; + case XA_WM_HINTS: + updatewmhints(c); + drawbars(); + break; + } + if (ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) { + updatetitle(c); + if (c == c->mon->sel) + drawbar(c->mon); + } + if (ev->atom == netatom[NetWMWindowType]) + updatewindowtype(c); + } +} + +void +quit(const Arg *arg) +{ + size_t i; + + /* kill child processes */ + for (i = 0; i < autostart_len; i++) { + if (0 < autostart_pids[i]) { + kill(autostart_pids[i], SIGTERM); + waitpid(autostart_pids[i], NULL, 0); + } + } + + running = 0; +} + +Monitor * +recttomon(int x, int y, int w, int h) +{ + Monitor *m, *r = selmon; + int a, area = 0; + + for (m = mons; m; m = m->next) + if ((a = INTERSECT(x, y, w, h, m)) > area) { + area = a; + r = m; + } + return r; +} + +void +resize(Client *c, int x, int y, int w, int h, int interact) +{ + if (applysizehints(c, &x, &y, &w, &h, interact)) + resizeclient(c, x, y, w, h); +} + +void +resizeclient(Client *c, int x, int y, int w, int h) +{ + XWindowChanges wc; + + c->oldx = c->x; c->x = wc.x = x; + c->oldy = c->y; c->y = wc.y = y; + c->oldw = c->w; c->w = wc.width = w; + c->oldh = c->h; c->h = wc.height = h; + wc.border_width = c->bw; + XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc); + configure(c); + XSync(dpy, False); +} + +void +resizemouse(const Arg *arg) +{ + int ocx, ocy, nw, nh; + Client *c; + Monitor *m; + XEvent ev; + Time lasttime = 0; + + if (!(c = selmon->sel)) + return; + if (c->isfullscreen) /* no support resizing fullscreen windows by mouse */ + return; + restack(selmon); + ocx = c->x; + ocy = c->y; + if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, + None, cursor[CurResize]->cursor, CurrentTime) != GrabSuccess) + return; + XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); + do { + XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev); + switch(ev.type) { + case ConfigureRequest: + case Expose: + case MapRequest: + handler[ev.type](&ev); + break; + case MotionNotify: + if ((ev.xmotion.time - lasttime) <= (1000 / 60)) + continue; + lasttime = ev.xmotion.time; + + nw = MAX(ev.xmotion.x - ocx - 2 * c->bw + 1, 1); + nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1); + if (c->mon->wx + nw >= selmon->wx && c->mon->wx + nw <= selmon->wx + selmon->ww + && c->mon->wy + nh >= selmon->wy && c->mon->wy + nh <= selmon->wy + selmon->wh) + { + if (!c->isfloating && selmon->lt[selmon->sellt]->arrange + && (abs(nw - c->w) > snap || abs(nh - c->h) > snap)) + togglefloating(NULL); + } + if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) + resize(c, c->x, c->y, nw, nh, 1); + break; + } + } while (ev.type != ButtonRelease); + XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); + XUngrabPointer(dpy, CurrentTime); + while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); + if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) { + sendmon(c, m); + selmon = m; + focus(NULL); + } +} + +void +restack(Monitor *m) +{ + Client *c; + XEvent ev; + XWindowChanges wc; + + drawbar(m); + if (!m->sel) + return; + if (m->sel->isfloating || !m->lt[m->sellt]->arrange) + XRaiseWindow(dpy, m->sel->win); + if (m->lt[m->sellt]->arrange) { + wc.stack_mode = Below; + wc.sibling = m->barwin; + for (c = m->stack; c; c = c->snext) + if (!c->isfloating && ISVISIBLE(c)) { + XConfigureWindow(dpy, c->win, CWSibling|CWStackMode, &wc); + wc.sibling = c->win; + } + } + XSync(dpy, False); + while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); +} + +void +run(void) +{ + XEvent ev; + /* main event loop */ + XSync(dpy, False); + while (running && !XNextEvent(dpy, &ev)) + if (handler[ev.type]) + handler[ev.type](&ev); /* call handler */ +} + +void +scan(void) +{ + unsigned int i, num; + Window d1, d2, *wins = NULL; + XWindowAttributes wa; + + if (XQueryTree(dpy, root, &d1, &d2, &wins, &num)) { + for (i = 0; i < num; i++) { + if (!XGetWindowAttributes(dpy, wins[i], &wa) + || wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1)) + continue; + if (wmclasscontains(wins[i], altbarclass, "")) + managealtbar(wins[i], &wa); + else if (wa.map_state == IsViewable || getstate(wins[i]) == IconicState) + manage(wins[i], &wa); + } + for (i = 0; i < num; i++) { /* now the transients */ + if (!XGetWindowAttributes(dpy, wins[i], &wa)) + continue; + if (XGetTransientForHint(dpy, wins[i], &d1) + && (wa.map_state == IsViewable || getstate(wins[i]) == IconicState)) + manage(wins[i], &wa); + } + if (wins) + XFree(wins); + } +} + +void +scantray(void) +{ + unsigned int num; + Window d1, d2, *wins = NULL; + XWindowAttributes wa; + + if (XQueryTree(dpy, root, &d1, &d2, &wins, &num)) { + for (unsigned int i = 0; i < num; i++) { + if (wmclasscontains(wins[i], altbarclass, alttrayname)) { + if (!XGetWindowAttributes(dpy, wins[i], &wa)) + break; + managetray(wins[i], &wa); + } + } + } + + if (wins) + XFree(wins); +} + + + +void +sendmon(Client *c, Monitor *m) +{ + if (c->mon == m) + return; + unfocus(c, 1); + detach(c); + detachstack(c); + c->mon = m; + c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */ + attach(c); + attachstack(c); + focus(NULL); + arrange(NULL); +} + +void +setclientstate(Client *c, long state) +{ + long data[] = { state, None }; + + XChangeProperty(dpy, c->win, wmatom[WMState], wmatom[WMState], 32, + PropModeReplace, (unsigned char *)data, 2); +} + +int +sendevent(Client *c, Atom proto) +{ + int n; + Atom *protocols; + int exists = 0; + XEvent ev; + + if (XGetWMProtocols(dpy, c->win, &protocols, &n)) { + while (!exists && n--) + exists = protocols[n] == proto; + XFree(protocols); + } + if (exists) { + ev.type = ClientMessage; + ev.xclient.window = c->win; + ev.xclient.message_type = wmatom[WMProtocols]; + ev.xclient.format = 32; + ev.xclient.data.l[0] = proto; + ev.xclient.data.l[1] = CurrentTime; + XSendEvent(dpy, c->win, False, NoEventMask, &ev); + } + return exists; +} + +void +setfocus(Client *c) +{ + if (!c->neverfocus) { + XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); + XChangeProperty(dpy, root, netatom[NetActiveWindow], + XA_WINDOW, 32, PropModeReplace, + (unsigned char *) &(c->win), 1); + } + sendevent(c, wmatom[WMTakeFocus]); +} + +void +setfullscreen(Client *c, int fullscreen) +{ + if (fullscreen && !c->isfullscreen) { + XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32, + PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1); + c->isfullscreen = 1; + c->oldstate = c->isfloating; + c->oldbw = c->bw; + c->bw = 0; + c->isfloating = 1; + resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh); + XRaiseWindow(dpy, c->win); + } else if (!fullscreen && c->isfullscreen){ + XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32, + PropModeReplace, (unsigned char*)0, 0); + c->isfullscreen = 0; + c->isfloating = c->oldstate; + c->bw = c->oldbw; + c->x = c->oldx; + c->y = c->oldy; + c->w = c->oldw; + c->h = c->oldh; + resizeclient(c, c->x, c->y, c->w, c->h); + arrange(c->mon); + } +} + +void +setlayout(const Arg *arg) +{ + if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt]) + selmon->sellt ^= 1; + if (arg && arg->v) + selmon->lt[selmon->sellt] = (Layout *)arg->v; + strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol); + if (selmon->sel) + arrange(selmon); + else + drawbar(selmon); +} + +/* arg > 1.0 will set mfact absolutely */ +void +setmfact(const Arg *arg) +{ + float f; + + if (!arg || !selmon->lt[selmon->sellt]->arrange) + return; + f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0; + if (f < 0.05 || f > 0.95) + return; + selmon->mfact = f; + arrange(selmon); +} + +void +setup(void) +{ + int i; + XSetWindowAttributes wa; + Atom utf8string; + + /* clean up any zombies immediately */ + sigchld(0); + + /* init screen */ + screen = DefaultScreen(dpy); + sw = DisplayWidth(dpy, screen); + sh = DisplayHeight(dpy, screen); + root = RootWindow(dpy, screen); + drw = drw_create(dpy, screen, root, sw, sh); + if (!drw_fontset_create(drw, fonts, LENGTH(fonts))) + die("no fonts could be loaded."); + lrpad = drw->fonts->h; + bh = usealtbar ? 0 : drw->fonts->h + 2; + updategeom(); + /* init atoms */ + utf8string = XInternAtom(dpy, "UTF8_STRING", False); + wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); + wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); + wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False); + wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False); + netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False); + netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); + netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); + netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False); + netatom[NetWMCheck] = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", False); + netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False); + netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False); + netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False); + netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False); + /* init cursors */ + cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr); + cursor[CurResize] = drw_cur_create(drw, XC_sizing); + cursor[CurMove] = drw_cur_create(drw, XC_fleur); + /* init appearance */ + scheme = ecalloc(LENGTH(colors), sizeof(Clr *)); + for (i = 0; i < LENGTH(colors); i++) + scheme[i] = drw_scm_create(drw, colors[i], 3); + /* init bars */ + updatebars(); + updatestatus(); + /* supporting window for NetWMCheck */ + wmcheckwin = XCreateSimpleWindow(dpy, root, 0, 0, 1, 1, 0, 0, 0); + XChangeProperty(dpy, wmcheckwin, netatom[NetWMCheck], XA_WINDOW, 32, + PropModeReplace, (unsigned char *) &wmcheckwin, 1); + XChangeProperty(dpy, wmcheckwin, netatom[NetWMName], utf8string, 8, + PropModeReplace, (unsigned char *) "dwm", 3); + XChangeProperty(dpy, root, netatom[NetWMCheck], XA_WINDOW, 32, + PropModeReplace, (unsigned char *) &wmcheckwin, 1); + /* EWMH support per view */ + XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32, + PropModeReplace, (unsigned char *) netatom, NetLast); + XDeleteProperty(dpy, root, netatom[NetClientList]); + /* select events */ + wa.cursor = cursor[CurNormal]->cursor; + wa.event_mask = SubstructureRedirectMask|SubstructureNotifyMask + |ButtonPressMask|PointerMotionMask|EnterWindowMask + |LeaveWindowMask|StructureNotifyMask|PropertyChangeMask; + XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa); + XSelectInput(dpy, root, wa.event_mask); + grabkeys(); + focus(NULL); + spawnbar(); +} + + +void +seturgent(Client *c, int urg) +{ + XWMHints *wmh; + + c->isurgent = urg; + if (!(wmh = XGetWMHints(dpy, c->win))) + return; + wmh->flags = urg ? (wmh->flags | XUrgencyHint) : (wmh->flags & ~XUrgencyHint); + XSetWMHints(dpy, c->win, wmh); + XFree(wmh); +} + +void +showhide(Client *c) +{ + if (!c) + return; + if (ISVISIBLE(c)) { + /* show clients top down */ + XMoveWindow(dpy, c->win, c->x, c->y); + if ((!c->mon->lt[c->mon->sellt]->arrange || c->isfloating) && !c->isfullscreen) + resize(c, c->x, c->y, c->w, c->h, 0); + showhide(c->snext); + } else { + /* hide clients bottom up */ + showhide(c->snext); + XMoveWindow(dpy, c->win, WIDTH(c) * -2, c->y); + } +} + +void +sigchld(int unused) +{ + pid_t pid; + + if (signal(SIGCHLD, sigchld) == SIG_ERR) + die("can't install SIGCHLD handler:"); + while (0 < (pid = waitpid(-1, NULL, WNOHANG))) { + pid_t *p, *lim; + + if (!(p = autostart_pids)) + continue; + lim = &p[autostart_len]; + + for (; p < lim; p++) { + if (*p == pid) { + *p = -1; + break; + } + } + + } +} + +void +spawn(const Arg *arg) +{ + if (arg->v == dmenucmd) + dmenumon[0] = '0' + selmon->num; + if (fork() == 0) { + if (dpy) + close(ConnectionNumber(dpy)); + setsid(); + execvp(((char **)arg->v)[0], (char **)arg->v); + fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]); + perror(" failed"); + exit(EXIT_SUCCESS); + } +} + +void +spawnbar() +{ + if (*altbarcmd) + system(altbarcmd); +} + +void +tag(const Arg *arg) +{ + if (selmon->sel && arg->ui & TAGMASK) { + selmon->sel->tags = arg->ui & TAGMASK; + focus(NULL); + arrange(selmon); + } +} + +void +tagmon(const Arg *arg) +{ + if (!selmon->sel || !mons->next) + return; + sendmon(selmon->sel, dirtomon(arg->i)); +} + +void +togglebar(const Arg *arg) +{ + /** + * Polybar tray does not raise maprequest event. It must be manually scanned + * for. Scanning it too early while the tray is being populated would give + * wrong dimensions. + */ + if (!selmon->traywin) + scantray(); + + selmon->showbar = !selmon->showbar; + updatebarpos(selmon); + XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, selmon->bh); + XMoveResizeWindow(dpy, selmon->traywin, selmon->tx, selmon->by, selmon->tw, selmon->bh); + arrange(selmon); +} + +void +togglefloating(const Arg *arg) +{ + if (!selmon->sel) + return; + if (selmon->sel->isfullscreen) /* no support for fullscreen windows */ + return; + selmon->sel->isfloating = !selmon->sel->isfloating || selmon->sel->isfixed; + if (selmon->sel->isfloating) + resize(selmon->sel, selmon->sel->x, selmon->sel->y, + selmon->sel->w, selmon->sel->h, 0); + arrange(selmon); +} + +void +toggletag(const Arg *arg) +{ + unsigned int newtags; + + if (!selmon->sel) + return; + newtags = selmon->sel->tags ^ (arg->ui & TAGMASK); + if (newtags) { + selmon->sel->tags = newtags; + focus(NULL); + arrange(selmon); + } +} + +void +toggleview(const Arg *arg) +{ + unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK); + + if (newtagset) { + selmon->tagset[selmon->seltags] = newtagset; + focus(NULL); + arrange(selmon); + } +} + +void +unfocus(Client *c, int setfocus) +{ + if (!c) + return; + grabbuttons(c, 0); + XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBorder].pixel); + if (setfocus) { + XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); + XDeleteProperty(dpy, root, netatom[NetActiveWindow]); + } +} + +void +unmanage(Client *c, int destroyed) +{ + Monitor *m = c->mon; + XWindowChanges wc; + + detach(c); + detachstack(c); + if (!destroyed) { + wc.border_width = c->oldbw; + XGrabServer(dpy); /* avoid race conditions */ + XSetErrorHandler(xerrordummy); + XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */ + XUngrabButton(dpy, AnyButton, AnyModifier, c->win); + setclientstate(c, WithdrawnState); + XSync(dpy, False); + XSetErrorHandler(xerror); + XUngrabServer(dpy); + } + free(c); + focus(NULL); + updateclientlist(); + arrange(m); +} + +void +unmanagealtbar(Window w) +{ + Monitor *m = wintomon(w); + + if (!m) + return; + + m->barwin = 0; + m->by = 0; + m->bh = 0; + updatebarpos(m); + arrange(m); +} + +void +unmanagetray(Window w) +{ + Monitor *m = wintomon(w); + + if (!m) + return; + + m->traywin = 0; + m->tx = 0; + m->tw = 0; + updatebarpos(m); + arrange(m); +} + +void +unmapnotify(XEvent *e) +{ + Client *c; + Monitor *m; + XUnmapEvent *ev = &e->xunmap; + + if ((c = wintoclient(ev->window))) { + if (ev->send_event) + setclientstate(c, WithdrawnState); + else + unmanage(c, 0); + } else if ((m = wintomon(ev->window)) && m->barwin == ev->window) + unmanagealtbar(ev->window); + else if (m->traywin == ev->window) + unmanagetray(ev->window); +} + +void +updatebars(void) +{ + if (usealtbar) + return; + + Monitor *m; + XSetWindowAttributes wa = { + .override_redirect = True, + .background_pixmap = ParentRelative, + .event_mask = ButtonPressMask|ExposureMask + }; + XClassHint ch = {"dwm", "dwm"}; + for (m = mons; m; m = m->next) { + if (m->barwin) + continue; + m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, DefaultDepth(dpy, screen), + CopyFromParent, DefaultVisual(dpy, screen), + CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa); + XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor); + XMapRaised(dpy, m->barwin); + XSetClassHint(dpy, m->barwin, &ch); + } +} + +void +updatebarpos(Monitor *m) +{ + m->wy = m->my; + m->wh = m->mh; + if (m->showbar) { + m->wh -= m->bh; + m->by = m->topbar ? m->wy : m->wy + m->wh; + m->wy = m->topbar ? m->wy + m->bh : m->wy; + } else + m->by = -m->bh; +} + +void +updateclientlist() +{ + Client *c; + Monitor *m; + + XDeleteProperty(dpy, root, netatom[NetClientList]); + for (m = mons; m; m = m->next) + for (c = m->clients; c; c = c->next) + XChangeProperty(dpy, root, netatom[NetClientList], + XA_WINDOW, 32, PropModeAppend, + (unsigned char *) &(c->win), 1); +} + +int +updategeom(void) +{ + int dirty = 0; + +#ifdef XINERAMA + if (XineramaIsActive(dpy)) { + int i, j, n, nn; + Client *c; + Monitor *m; + XineramaScreenInfo *info = XineramaQueryScreens(dpy, &nn); + XineramaScreenInfo *unique = NULL; + + for (n = 0, m = mons; m; m = m->next, n++); + /* only consider unique geometries as separate screens */ + unique = ecalloc(nn, sizeof(XineramaScreenInfo)); + for (i = 0, j = 0; i < nn; i++) + if (isuniquegeom(unique, j, &info[i])) + memcpy(&unique[j++], &info[i], sizeof(XineramaScreenInfo)); + XFree(info); + nn = j; + if (n <= nn) { /* new monitors available */ + for (i = 0; i < (nn - n); i++) { + for (m = mons; m && m->next; m = m->next); + if (m) + m->next = createmon(); + else + mons = createmon(); + } + for (i = 0, m = mons; i < nn && m; m = m->next, i++) + if (i >= n + || unique[i].x_org != m->mx || unique[i].y_org != m->my + || unique[i].width != m->mw || unique[i].height != m->mh) + { + dirty = 1; + m->num = i; + m->mx = m->wx = unique[i].x_org; + m->my = m->wy = unique[i].y_org; + m->mw = m->ww = unique[i].width; + m->mh = m->wh = unique[i].height; + updatebarpos(m); + } + } else { /* less monitors available nn < n */ + for (i = nn; i < n; i++) { + for (m = mons; m && m->next; m = m->next); + while ((c = m->clients)) { + dirty = 1; + m->clients = c->next; + detachstack(c); + c->mon = mons; + attach(c); + attachstack(c); + } + if (m == selmon) + selmon = mons; + cleanupmon(m); + } + } + free(unique); + } else +#endif /* XINERAMA */ + { /* default monitor setup */ + if (!mons) + mons = createmon(); + if (mons->mw != sw || mons->mh != sh) { + dirty = 1; + mons->mw = mons->ww = sw; + mons->mh = mons->wh = sh; + updatebarpos(mons); + } + } + if (dirty) { + selmon = mons; + selmon = wintomon(root); + } + return dirty; +} + +void +updatenumlockmask(void) +{ + unsigned int i, j; + XModifierKeymap *modmap; + + numlockmask = 0; + modmap = XGetModifierMapping(dpy); + for (i = 0; i < 8; i++) + for (j = 0; j < modmap->max_keypermod; j++) + if (modmap->modifiermap[i * modmap->max_keypermod + j] + == XKeysymToKeycode(dpy, XK_Num_Lock)) + numlockmask = (1 << i); + XFreeModifiermap(modmap); +} + +void +updatesizehints(Client *c) +{ + long msize; + XSizeHints size; + + if (!XGetWMNormalHints(dpy, c->win, &size, &msize)) + /* size is uninitialized, ensure that size.flags aren't used */ + size.flags = PSize; + if (size.flags & PBaseSize) { + c->basew = size.base_width; + c->baseh = size.base_height; + } else if (size.flags & PMinSize) { + c->basew = size.min_width; + c->baseh = size.min_height; + } else + c->basew = c->baseh = 0; + if (size.flags & PResizeInc) { + c->incw = size.width_inc; + c->inch = size.height_inc; + } else + c->incw = c->inch = 0; + if (size.flags & PMaxSize) { + c->maxw = size.max_width; + c->maxh = size.max_height; + } else + c->maxw = c->maxh = 0; + if (size.flags & PMinSize) { + c->minw = size.min_width; + c->minh = size.min_height; + } else if (size.flags & PBaseSize) { + c->minw = size.base_width; + c->minh = size.base_height; + } else + c->minw = c->minh = 0; + if (size.flags & PAspect) { + c->mina = (float)size.min_aspect.y / size.min_aspect.x; + c->maxa = (float)size.max_aspect.x / size.max_aspect.y; + } else + c->maxa = c->mina = 0.0; + c->isfixed = (c->maxw && c->maxh && c->maxw == c->minw && c->maxh == c->minh); +} + +void +updatestatus(void) +{ + if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext))) + strcpy(stext, "dwm-"VERSION); + drawbar(selmon); +} + +void +updatetitle(Client *c) +{ + if (!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name)) + gettextprop(c->win, XA_WM_NAME, c->name, sizeof c->name); + if (c->name[0] == '\0') /* hack to mark broken clients */ + strcpy(c->name, broken); +} + +void +updatewindowtype(Client *c) +{ + Atom state = getatomprop(c, netatom[NetWMState]); + Atom wtype = getatomprop(c, netatom[NetWMWindowType]); + + if (state == netatom[NetWMFullscreen]) + setfullscreen(c, 1); + if (wtype == netatom[NetWMWindowTypeDialog]) + c->isfloating = 1; +} + +void +updatewmhints(Client *c) +{ + XWMHints *wmh; + + if ((wmh = XGetWMHints(dpy, c->win))) { + if (c == selmon->sel && wmh->flags & XUrgencyHint) { + wmh->flags &= ~XUrgencyHint; + XSetWMHints(dpy, c->win, wmh); + } else + c->isurgent = (wmh->flags & XUrgencyHint) ? 1 : 0; + if (wmh->flags & InputHint) + c->neverfocus = !wmh->input; + else + c->neverfocus = 0; + XFree(wmh); + } +} + +void +view(const Arg *arg) +{ + if ((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags]) + return; + selmon->seltags ^= 1; /* toggle sel tagset */ + if (arg->ui & TAGMASK) + selmon->tagset[selmon->seltags] = arg->ui & TAGMASK; + focus(NULL); + arrange(selmon); +} + +Client * +wintoclient(Window w) +{ + Client *c; + Monitor *m; + + for (m = mons; m; m = m->next) + for (c = m->clients; c; c = c->next) + if (c->win == w) + return c; + return NULL; +} + +Monitor * +wintomon(Window w) +{ + int x, y; + Client *c; + Monitor *m; + + if (w == root && getrootptr(&x, &y)) + return recttomon(x, y, 1, 1); + for (m = mons; m; m = m->next) + if (w == m->barwin || w == m->traywin) + return m; + if ((c = wintoclient(w))) + return c->mon; + return selmon; +} + +int +wmclasscontains(Window win, const char *class, const char *name) +{ + XClassHint ch = { NULL, NULL }; + int res = 1; + + if (XGetClassHint(dpy, win, &ch)) { + if (ch.res_name && strstr(ch.res_name, name) == NULL) + res = 0; + if (ch.res_class && strstr(ch.res_class, class) == NULL) + res = 0; + } else + res = 0; + + if (ch.res_class) + XFree(ch.res_class); + if (ch.res_name) + XFree(ch.res_name); + + return res; +} + +/* There's no way to check accesses to destroyed windows, thus those cases are + * ignored (especially on UnmapNotify's). Other types of errors call Xlibs + * default error handler, which may call exit. */ +int +xerror(Display *dpy, XErrorEvent *ee) +{ + if (ee->error_code == BadWindow + || (ee->request_code == X_SetInputFocus && ee->error_code == BadMatch) + || (ee->request_code == X_PolyText8 && ee->error_code == BadDrawable) + || (ee->request_code == X_PolyFillRectangle && ee->error_code == BadDrawable) + || (ee->request_code == X_PolySegment && ee->error_code == BadDrawable) + || (ee->request_code == X_ConfigureWindow && ee->error_code == BadMatch) + || (ee->request_code == X_GrabButton && ee->error_code == BadAccess) + || (ee->request_code == X_GrabKey && ee->error_code == BadAccess) + || (ee->request_code == X_CopyArea && ee->error_code == BadDrawable)) + return 0; + fprintf(stderr, "dwm: fatal error: request code=%d, error code=%d\n", + ee->request_code, ee->error_code); + return xerrorxlib(dpy, ee); /* may call exit */ +} + +int +xerrordummy(Display *dpy, XErrorEvent *ee) +{ + return 0; +} + +/* Startup Error handler to check if another window manager + * is already running. */ +int +xerrorstart(Display *dpy, XErrorEvent *ee) +{ + die("dwm: another window manager is already running"); + return -1; +} + +void +zoom(const Arg *arg) +{ + Client *c = selmon->sel; + + if (!selmon->lt[selmon->sellt]->arrange + || (selmon->sel && selmon->sel->isfloating)) + return; + if (c == nexttiled(selmon->clients)) + if (!c || !(c = nexttiled(c->next))) + return; + pop(c); +} + +int +main(int argc, char *argv[]) +{ + if (argc == 2 && !strcmp("-v", argv[1])) + die("dwm-"VERSION); + else if (argc != 1) + die("usage: dwm [-v]"); + if (!setlocale(LC_CTYPE, "") || !XSupportsLocale()) + fputs("warning: no locale support\n", stderr); + if (!(dpy = XOpenDisplay(NULL))) + die("dwm: cannot open display"); + checkotherwm(); + autostart_exec(); + setup(); +#ifdef __OpenBSD__ + if (pledge("stdio rpath proc exec", NULL) == -1) + die("pledge"); +#endif /* __OpenBSD__ */ + scan(); + run(); + cleanup(); + XCloseDisplay(dpy); + return EXIT_SUCCESS; +} diff --git a/dwm/.local/share/dwm/dwm.c.orig b/dwm/.local/share/dwm/dwm.c.orig new file mode 100644 index 0000000..4f3366a --- /dev/null +++ b/dwm/.local/share/dwm/dwm.c.orig @@ -0,0 +1,2187 @@ +/* See LICENSE file for copyright and license details. + * + * dynamic window manager is designed like any other X client as well. It is + * driven through handling X events. In contrast to other X clients, a window + * manager selects for SubstructureRedirectMask on the root window, to receive + * events about window (dis-)appearance. Only one X connection at a time is + * allowed to select for this event mask. + * + * The event handlers of dwm are organized in an array which is accessed + * whenever a new event has been fetched. This allows event dispatching + * in O(1) time. + * + * Each child of the root window is called a client, except windows which have + * set the override_redirect flag. Clients are organized in a linked client + * list on each monitor, the focus history is remembered through a stack list + * on each monitor. Each client contains a bit array to indicate the tags of a + * client. + * + * Keys and tagging rules are organized as arrays and defined in config.h. + * + * To understand everything else, start reading main(). + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef XINERAMA +#include +#endif /* XINERAMA */ +#include + +#include "drw.h" +#include "util.h" + +/* macros */ +#define BUTTONMASK (ButtonPressMask|ButtonReleaseMask) +#define CLEANMASK(mask) (mask & ~(numlockmask|LockMask) & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask)) +#define INTERSECT(x,y,w,h,m) (MAX(0, MIN((x)+(w),(m)->wx+(m)->ww) - MAX((x),(m)->wx)) \ + * MAX(0, MIN((y)+(h),(m)->wy+(m)->wh) - MAX((y),(m)->wy))) +#define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags])) +#define LENGTH(X) (sizeof X / sizeof X[0]) +#define MOUSEMASK (BUTTONMASK|PointerMotionMask) +#define WIDTH(X) ((X)->w + 2 * (X)->bw) +#define HEIGHT(X) ((X)->h + 2 * (X)->bw) +#define TAGMASK ((1 << LENGTH(tags)) - 1) +#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad) + +/* enums */ +enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ +enum { SchemeNorm, SchemeSel }; /* color schemes */ +enum { NetSupported, NetWMName, NetWMState, NetWMCheck, + NetWMFullscreen, NetActiveWindow, NetWMWindowType, + NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */ +enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */ +enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, + ClkClientWin, ClkRootWin, ClkLast }; /* clicks */ + +typedef union { + int i; + unsigned int ui; + float f; + const void *v; +} Arg; + +typedef struct { + unsigned int click; + unsigned int mask; + unsigned int button; + void (*func)(const Arg *arg); + const Arg arg; +} Button; + +typedef struct Monitor Monitor; +typedef struct Client Client; +struct Client { + char name[256]; + float mina, maxa; + int x, y, w, h; + int oldx, oldy, oldw, oldh; + int basew, baseh, incw, inch, maxw, maxh, minw, minh; + int bw, oldbw; + unsigned int tags; + int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; + Client *next; + Client *snext; + Monitor *mon; + Window win; +}; + +typedef struct { + unsigned int mod; + KeySym keysym; + void (*func)(const Arg *); + const Arg arg; +} Key; + +typedef struct { + const char *symbol; + void (*arrange)(Monitor *); +} Layout; + +struct Monitor { + char ltsymbol[16]; + float mfact; + int nmaster; + int num; + int by; /* bar geometry */ + int mx, my, mw, mh; /* screen size */ + int wx, wy, ww, wh; /* window area */ + int gappih; /* horizontal gap between windows */ + int gappiv; /* vertical gap between windows */ + int gappoh; /* horizontal outer gaps */ + int gappov; /* vertical outer gaps */ + unsigned int seltags; + unsigned int sellt; + unsigned int tagset[2]; + int showbar; + int topbar; + Client *clients; + Client *sel; + Client *stack; + Monitor *next; + Window barwin; + const Layout *lt[2]; +}; + +typedef struct { + const char *class; + const char *instance; + const char *title; + unsigned int tags; + int isfloating; + int monitor; +} Rule; + +/* function declarations */ +static void applyrules(Client *c); +static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact); +static void arrange(Monitor *m); +static void arrangemon(Monitor *m); +static void attach(Client *c); +static void attachstack(Client *c); +static void buttonpress(XEvent *e); +static void checkotherwm(void); +static void cleanup(void); +static void cleanupmon(Monitor *mon); +static void clientmessage(XEvent *e); +static void configure(Client *c); +static void configurenotify(XEvent *e); +static void configurerequest(XEvent *e); +static Monitor *createmon(void); +static void destroynotify(XEvent *e); +static void detach(Client *c); +static void detachstack(Client *c); +static Monitor *dirtomon(int dir); +static void drawbar(Monitor *m); +static void drawbars(void); +static void enternotify(XEvent *e); +static void expose(XEvent *e); +static void focus(Client *c); +static void focusin(XEvent *e); +static void focusmon(const Arg *arg); +static void focusstack(const Arg *arg); +static Atom getatomprop(Client *c, Atom prop); +static int getrootptr(int *x, int *y); +static long getstate(Window w); +static int gettextprop(Window w, Atom atom, char *text, unsigned int size); +static void grabbuttons(Client *c, int focused); +static void grabkeys(void); +static void incnmaster(const Arg *arg); +static void keypress(XEvent *e); +static void killclient(const Arg *arg); +static void manage(Window w, XWindowAttributes *wa); +static void mappingnotify(XEvent *e); +static void maprequest(XEvent *e); +static void monocle(Monitor *m); +static void motionnotify(XEvent *e); +static void movemouse(const Arg *arg); +static Client *nexttiled(Client *c); +static void pop(Client *); +static void propertynotify(XEvent *e); +static void quit(const Arg *arg); +static Monitor *recttomon(int x, int y, int w, int h); +static void resize(Client *c, int x, int y, int w, int h, int interact); +static void resizeclient(Client *c, int x, int y, int w, int h); +static void resizemouse(const Arg *arg); +static void restack(Monitor *m); +static void run(void); +static void scan(void); +static int sendevent(Client *c, Atom proto); +static void sendmon(Client *c, Monitor *m); +static void setclientstate(Client *c, long state); +static void setfocus(Client *c); +static void setfullscreen(Client *c, int fullscreen); +static void setlayout(const Arg *arg); +static void setmfact(const Arg *arg); +static void setup(void); +static void seturgent(Client *c, int urg); +static void showhide(Client *c); +static void sigchld(int unused); +static void spawn(const Arg *arg); +static void tag(const Arg *arg); +static void tagmon(const Arg *arg); +static void togglebar(const Arg *arg); +static void togglefloating(const Arg *arg); +static void toggletag(const Arg *arg); +static void toggleview(const Arg *arg); +static void unfocus(Client *c, int setfocus); +static void unmanage(Client *c, int destroyed); +static void unmapnotify(XEvent *e); +static void updatebarpos(Monitor *m); +static void updatebars(void); +static void updateclientlist(void); +static int updategeom(void); +static void updatenumlockmask(void); +static void updatesizehints(Client *c); +static void updatestatus(void); +static void updatetitle(Client *c); +static void updatewindowtype(Client *c); +static void updatewmhints(Client *c); +static void view(const Arg *arg); +static Client *wintoclient(Window w); +static Monitor *wintomon(Window w); +static int xerror(Display *dpy, XErrorEvent *ee); +static int xerrordummy(Display *dpy, XErrorEvent *ee); +static int xerrorstart(Display *dpy, XErrorEvent *ee); +static void zoom(const Arg *arg); +static void autostart_exec(void); + +/* variables */ +static const char broken[] = "broken"; +static char stext[256]; +static int screen; +static int sw, sh; /* X display screen geometry width, height */ +static int bh, blw = 0; /* bar geometry */ +static int lrpad; /* sum of left and right padding for text */ +static int (*xerrorxlib)(Display *, XErrorEvent *); +static unsigned int numlockmask = 0; +static void (*handler[LASTEvent]) (XEvent *) = { + [ButtonPress] = buttonpress, + [ClientMessage] = clientmessage, + [ConfigureRequest] = configurerequest, + [ConfigureNotify] = configurenotify, + [DestroyNotify] = destroynotify, + [EnterNotify] = enternotify, + [Expose] = expose, + [FocusIn] = focusin, + [KeyPress] = keypress, + [MappingNotify] = mappingnotify, + [MapRequest] = maprequest, + [MotionNotify] = motionnotify, + [PropertyNotify] = propertynotify, + [UnmapNotify] = unmapnotify +}; +static Atom wmatom[WMLast], netatom[NetLast]; +static int running = 1; +static Cur *cursor[CurLast]; +static Clr **scheme; +static Display *dpy; +static Drw *drw; +static Monitor *mons, *selmon; +static Window root, wmcheckwin; + +/* configuration, allows nested code to access above variables */ +#include "config.h" + +/* compile-time check if all tags fit into an unsigned int bit array. */ +struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; }; + +/* dwm will keep pid's of processes from autostart array and kill them at quit */ +static pid_t *autostart_pids; +static size_t autostart_len; + +/* execute command from autostart array */ +static void +autostart_exec() { + const char *const *p; + size_t i = 0; + + /* count entries */ + for (p = autostart; *p; autostart_len++, p++) + while (*++p); + + autostart_pids = malloc(autostart_len * sizeof(pid_t)); + for (p = autostart; *p; i++, p++) { + if ((autostart_pids[i] = fork()) == 0) { + setsid(); + execvp(*p, (char *const *)p); + fprintf(stderr, "dwm: execvp %s\n", *p); + perror(" failed"); + _exit(EXIT_FAILURE); + } + /* skip arguments */ + while (*++p); + } +} + +/* function implementations */ +void +applyrules(Client *c) +{ + const char *class, *instance; + unsigned int i; + const Rule *r; + Monitor *m; + XClassHint ch = { NULL, NULL }; + + /* rule matching */ + c->isfloating = 0; + c->tags = 0; + XGetClassHint(dpy, c->win, &ch); + class = ch.res_class ? ch.res_class : broken; + instance = ch.res_name ? ch.res_name : broken; + + for (i = 0; i < LENGTH(rules); i++) { + r = &rules[i]; + if ((!r->title || strstr(c->name, r->title)) + && (!r->class || strstr(class, r->class)) + && (!r->instance || strstr(instance, r->instance))) + { + c->isfloating = r->isfloating; + c->tags |= r->tags; + for (m = mons; m && m->num != r->monitor; m = m->next); + if (m) + c->mon = m; + } + } + if (ch.res_class) + XFree(ch.res_class); + if (ch.res_name) + XFree(ch.res_name); + c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : c->mon->tagset[c->mon->seltags]; +} + +int +applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact) +{ + int baseismin; + Monitor *m = c->mon; + + /* set minimum possible */ + *w = MAX(1, *w); + *h = MAX(1, *h); + if (interact) { + if (*x > sw) + *x = sw - WIDTH(c); + if (*y > sh) + *y = sh - HEIGHT(c); + if (*x + *w + 2 * c->bw < 0) + *x = 0; + if (*y + *h + 2 * c->bw < 0) + *y = 0; + } else { + if (*x >= m->wx + m->ww) + *x = m->wx + m->ww - WIDTH(c); + if (*y >= m->wy + m->wh) + *y = m->wy + m->wh - HEIGHT(c); + if (*x + *w + 2 * c->bw <= m->wx) + *x = m->wx; + if (*y + *h + 2 * c->bw <= m->wy) + *y = m->wy; + } + if (*h < bh) + *h = bh; + if (*w < bh) + *w = bh; + if (resizehints || c->isfloating || !c->mon->lt[c->mon->sellt]->arrange) { + /* see last two sentences in ICCCM 4.1.2.3 */ + baseismin = c->basew == c->minw && c->baseh == c->minh; + if (!baseismin) { /* temporarily remove base dimensions */ + *w -= c->basew; + *h -= c->baseh; + } + /* adjust for aspect limits */ + if (c->mina > 0 && c->maxa > 0) { + if (c->maxa < (float)*w / *h) + *w = *h * c->maxa + 0.5; + else if (c->mina < (float)*h / *w) + *h = *w * c->mina + 0.5; + } + if (baseismin) { /* increment calculation requires this */ + *w -= c->basew; + *h -= c->baseh; + } + /* adjust for increment value */ + if (c->incw) + *w -= *w % c->incw; + if (c->inch) + *h -= *h % c->inch; + /* restore base dimensions */ + *w = MAX(*w + c->basew, c->minw); + *h = MAX(*h + c->baseh, c->minh); + if (c->maxw) + *w = MIN(*w, c->maxw); + if (c->maxh) + *h = MIN(*h, c->maxh); + } + return *x != c->x || *y != c->y || *w != c->w || *h != c->h; +} + +void +arrange(Monitor *m) +{ + if (m) + showhide(m->stack); + else for (m = mons; m; m = m->next) + showhide(m->stack); + if (m) { + arrangemon(m); + restack(m); + } else for (m = mons; m; m = m->next) + arrangemon(m); +} + +void +arrangemon(Monitor *m) +{ + strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol); + if (m->lt[m->sellt]->arrange) + m->lt[m->sellt]->arrange(m); +} + +void +attach(Client *c) +{ + c->next = c->mon->clients; + c->mon->clients = c; +} + +void +attachstack(Client *c) +{ + c->snext = c->mon->stack; + c->mon->stack = c; +} + +void +buttonpress(XEvent *e) +{ + unsigned int i, x, click; + Arg arg = {0}; + Client *c; + Monitor *m; + XButtonPressedEvent *ev = &e->xbutton; + + click = ClkRootWin; + /* focus monitor if necessary */ + if ((m = wintomon(ev->window)) && m != selmon) { + unfocus(selmon->sel, 1); + selmon = m; + focus(NULL); + } + if (ev->window == selmon->barwin) { + i = x = 0; + do + x += TEXTW(tags[i]); + while (ev->x >= x && ++i < LENGTH(tags)); + if (i < LENGTH(tags)) { + click = ClkTagBar; + arg.ui = 1 << i; + } else if (ev->x < x + blw) + click = ClkLtSymbol; + else if (ev->x > selmon->ww - (int)TEXTW(stext)) + click = ClkStatusText; + else + click = ClkWinTitle; + } else if ((c = wintoclient(ev->window))) { + focus(c); + restack(selmon); + XAllowEvents(dpy, ReplayPointer, CurrentTime); + click = ClkClientWin; + } + for (i = 0; i < LENGTH(buttons); i++) + if (click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button + && CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state)) + buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg); +} + +void +checkotherwm(void) +{ + xerrorxlib = XSetErrorHandler(xerrorstart); + /* this causes an error if some other window manager is running */ + XSelectInput(dpy, DefaultRootWindow(dpy), SubstructureRedirectMask); + XSync(dpy, False); + XSetErrorHandler(xerror); + XSync(dpy, False); +} + +void +cleanup(void) +{ + Arg a = {.ui = ~0}; + Layout foo = { "", NULL }; + Monitor *m; + size_t i; + + view(&a); + selmon->lt[selmon->sellt] = &foo; + for (m = mons; m; m = m->next) + while (m->stack) + unmanage(m->stack, 0); + XUngrabKey(dpy, AnyKey, AnyModifier, root); + while (mons) + cleanupmon(mons); + for (i = 0; i < CurLast; i++) + drw_cur_free(drw, cursor[i]); + for (i = 0; i < LENGTH(colors); i++) + free(scheme[i]); + XDestroyWindow(dpy, wmcheckwin); + drw_free(drw); + XSync(dpy, False); + XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); + XDeleteProperty(dpy, root, netatom[NetActiveWindow]); +} + +void +cleanupmon(Monitor *mon) +{ + Monitor *m; + + if (mon == mons) + mons = mons->next; + else { + for (m = mons; m && m->next != mon; m = m->next); + m->next = mon->next; + } + XUnmapWindow(dpy, mon->barwin); + XDestroyWindow(dpy, mon->barwin); + free(mon); +} + +void +clientmessage(XEvent *e) +{ + XClientMessageEvent *cme = &e->xclient; + Client *c = wintoclient(cme->window); + + if (!c) + return; + if (cme->message_type == netatom[NetWMState]) { + if (cme->data.l[1] == netatom[NetWMFullscreen] + || cme->data.l[2] == netatom[NetWMFullscreen]) + setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD */ + || (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen))); + } else if (cme->message_type == netatom[NetActiveWindow]) { + if (c != selmon->sel && !c->isurgent) + seturgent(c, 1); + } +} + +void +configure(Client *c) +{ + XConfigureEvent ce; + + ce.type = ConfigureNotify; + ce.display = dpy; + ce.event = c->win; + ce.window = c->win; + ce.x = c->x; + ce.y = c->y; + ce.width = c->w; + ce.height = c->h; + ce.border_width = c->bw; + ce.above = None; + ce.override_redirect = False; + XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&ce); +} + +void +configurenotify(XEvent *e) +{ + Monitor *m; + Client *c; + XConfigureEvent *ev = &e->xconfigure; + int dirty; + + /* TODO: updategeom handling sucks, needs to be simplified */ + if (ev->window == root) { + dirty = (sw != ev->width || sh != ev->height); + sw = ev->width; + sh = ev->height; + if (updategeom() || dirty) { + drw_resize(drw, sw, bh); + updatebars(); + for (m = mons; m; m = m->next) { + for (c = m->clients; c; c = c->next) + if (c->isfullscreen) + resizeclient(c, m->mx, m->my, m->mw, m->mh); + XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh); + } + focus(NULL); + arrange(NULL); + } + } +} + +void +configurerequest(XEvent *e) +{ + Client *c; + Monitor *m; + XConfigureRequestEvent *ev = &e->xconfigurerequest; + XWindowChanges wc; + + if ((c = wintoclient(ev->window))) { + if (ev->value_mask & CWBorderWidth) + c->bw = ev->border_width; + else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) { + m = c->mon; + if (ev->value_mask & CWX) { + c->oldx = c->x; + c->x = m->mx + ev->x; + } + if (ev->value_mask & CWY) { + c->oldy = c->y; + c->y = m->my + ev->y; + } + if (ev->value_mask & CWWidth) { + c->oldw = c->w; + c->w = ev->width; + } + if (ev->value_mask & CWHeight) { + c->oldh = c->h; + c->h = ev->height; + } + if ((c->x + c->w) > m->mx + m->mw && c->isfloating) + c->x = m->mx + (m->mw / 2 - WIDTH(c) / 2); /* center in x direction */ + if ((c->y + c->h) > m->my + m->mh && c->isfloating) + c->y = m->my + (m->mh / 2 - HEIGHT(c) / 2); /* center in y direction */ + if ((ev->value_mask & (CWX|CWY)) && !(ev->value_mask & (CWWidth|CWHeight))) + configure(c); + if (ISVISIBLE(c)) + XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); + } else + configure(c); + } else { + wc.x = ev->x; + wc.y = ev->y; + wc.width = ev->width; + wc.height = ev->height; + wc.border_width = ev->border_width; + wc.sibling = ev->above; + wc.stack_mode = ev->detail; + XConfigureWindow(dpy, ev->window, ev->value_mask, &wc); + } + XSync(dpy, False); +} + +Monitor * +createmon(void) +{ + Monitor *m; + + m = ecalloc(1, sizeof(Monitor)); + m->tagset[0] = m->tagset[1] = 1; + m->mfact = mfact; + m->nmaster = nmaster; + m->showbar = showbar; + m->topbar = topbar; + m->gappih = gappih; + m->gappiv = gappiv; + m->gappoh = gappoh; + m->gappov = gappov; + m->lt[0] = &layouts[0]; + m->lt[1] = &layouts[1 % LENGTH(layouts)]; + strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); + return m; +} + +void +destroynotify(XEvent *e) +{ + Client *c; + XDestroyWindowEvent *ev = &e->xdestroywindow; + + if ((c = wintoclient(ev->window))) + unmanage(c, 1); +} + +void +detach(Client *c) +{ + Client **tc; + + for (tc = &c->mon->clients; *tc && *tc != c; tc = &(*tc)->next); + *tc = c->next; +} + +void +detachstack(Client *c) +{ + Client **tc, *t; + + for (tc = &c->mon->stack; *tc && *tc != c; tc = &(*tc)->snext); + *tc = c->snext; + + if (c == c->mon->sel) { + for (t = c->mon->stack; t && !ISVISIBLE(t); t = t->snext); + c->mon->sel = t; + } +} + +Monitor * +dirtomon(int dir) +{ + Monitor *m = NULL; + + if (dir > 0) { + if (!(m = selmon->next)) + m = mons; + } else if (selmon == mons) + for (m = mons; m->next; m = m->next); + else + for (m = mons; m->next != selmon; m = m->next); + return m; +} + +void +drawbar(Monitor *m) +{ + int x, w, tw = 0; + int boxs = drw->fonts->h / 9; + int boxw = drw->fonts->h / 6 + 2; + unsigned int i, occ = 0, urg = 0; + Client *c; + + /* draw status first so it can be overdrawn by tags later */ + if (m == selmon) { /* status is only drawn on selected monitor */ + drw_setscheme(drw, scheme[SchemeNorm]); + tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */ + drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0); + } + + for (c = m->clients; c; c = c->next) { + occ |= c->tags; + if (c->isurgent) + urg |= c->tags; + } + x = 0; + for (i = 0; i < LENGTH(tags); i++) { + w = TEXTW(tags[i]); + drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]); + drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i); + if (occ & 1 << i) + drw_rect(drw, x + boxs, boxs, boxw, boxw, + m == selmon && selmon->sel && selmon->sel->tags & 1 << i, + urg & 1 << i); + x += w; + } + w = blw = TEXTW(m->ltsymbol); + drw_setscheme(drw, scheme[SchemeNorm]); + x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); + + if ((w = m->ww - tw - x) > bh) { + if (m->sel) { + drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]); + drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0); + if (m->sel->isfloating) + drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0); + } else { + drw_setscheme(drw, scheme[SchemeNorm]); + drw_rect(drw, x, 0, w, bh, 1, 1); + } + } + drw_map(drw, m->barwin, 0, 0, m->ww, bh); +} + +void +drawbars(void) +{ + Monitor *m; + + for (m = mons; m; m = m->next) + drawbar(m); +} + +void +enternotify(XEvent *e) +{ + Client *c; + Monitor *m; + XCrossingEvent *ev = &e->xcrossing; + + if ((ev->mode != NotifyNormal || ev->detail == NotifyInferior) && ev->window != root) + return; + c = wintoclient(ev->window); + m = c ? c->mon : wintomon(ev->window); + if (m != selmon) { + unfocus(selmon->sel, 1); + selmon = m; + } else if (!c || c == selmon->sel) + return; + focus(c); +} + +void +expose(XEvent *e) +{ + Monitor *m; + XExposeEvent *ev = &e->xexpose; + + if (ev->count == 0 && (m = wintomon(ev->window))) + drawbar(m); +} + +void +focus(Client *c) +{ + if (!c || !ISVISIBLE(c)) + for (c = selmon->stack; c && !ISVISIBLE(c); c = c->snext); + if (selmon->sel && selmon->sel != c) + unfocus(selmon->sel, 0); + if (c) { + if (c->mon != selmon) + selmon = c->mon; + if (c->isurgent) + seturgent(c, 0); + detachstack(c); + attachstack(c); + grabbuttons(c, 1); + XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].pixel); + setfocus(c); + } else { + XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); + XDeleteProperty(dpy, root, netatom[NetActiveWindow]); + } + selmon->sel = c; + drawbars(); +} + +/* there are some broken focus acquiring clients needing extra handling */ +void +focusin(XEvent *e) +{ + XFocusChangeEvent *ev = &e->xfocus; + + if (selmon->sel && ev->window != selmon->sel->win) + setfocus(selmon->sel); +} + +void +focusmon(const Arg *arg) +{ + Monitor *m; + + if (!mons->next) + return; + if ((m = dirtomon(arg->i)) == selmon) + return; + unfocus(selmon->sel, 0); + selmon = m; + focus(NULL); +} + +void +focusstack(const Arg *arg) +{ + Client *c = NULL, *i; + + if (!selmon->sel || selmon->sel->isfullscreen) + return; + if (arg->i > 0) { + for (c = selmon->sel->next; c && !ISVISIBLE(c); c = c->next); + if (!c) + for (c = selmon->clients; c && !ISVISIBLE(c); c = c->next); + } else { + for (i = selmon->clients; i != selmon->sel; i = i->next) + if (ISVISIBLE(i)) + c = i; + if (!c) + for (; i; i = i->next) + if (ISVISIBLE(i)) + c = i; + } + if (c) { + focus(c); + restack(selmon); + } +} + +Atom +getatomprop(Client *c, Atom prop) +{ + int di; + unsigned long dl; + unsigned char *p = NULL; + Atom da, atom = None; + + if (XGetWindowProperty(dpy, c->win, prop, 0L, sizeof atom, False, XA_ATOM, + &da, &di, &dl, &dl, &p) == Success && p) { + atom = *(Atom *)p; + XFree(p); + } + return atom; +} + +int +getrootptr(int *x, int *y) +{ + int di; + unsigned int dui; + Window dummy; + + return XQueryPointer(dpy, root, &dummy, &dummy, x, y, &di, &di, &dui); +} + +long +getstate(Window w) +{ + int format; + long result = -1; + unsigned char *p = NULL; + unsigned long n, extra; + Atom real; + + if (XGetWindowProperty(dpy, w, wmatom[WMState], 0L, 2L, False, wmatom[WMState], + &real, &format, &n, &extra, (unsigned char **)&p) != Success) + return -1; + if (n != 0) + result = *p; + XFree(p); + return result; +} + +int +gettextprop(Window w, Atom atom, char *text, unsigned int size) +{ + char **list = NULL; + int n; + XTextProperty name; + + if (!text || size == 0) + return 0; + text[0] = '\0'; + if (!XGetTextProperty(dpy, w, &name, atom) || !name.nitems) + return 0; + if (name.encoding == XA_STRING) + strncpy(text, (char *)name.value, size - 1); + else { + if (XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success && n > 0 && *list) { + strncpy(text, *list, size - 1); + XFreeStringList(list); + } + } + text[size - 1] = '\0'; + XFree(name.value); + return 1; +} + +void +grabbuttons(Client *c, int focused) +{ + updatenumlockmask(); + { + unsigned int i, j; + unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask }; + XUngrabButton(dpy, AnyButton, AnyModifier, c->win); + if (!focused) + XGrabButton(dpy, AnyButton, AnyModifier, c->win, False, + BUTTONMASK, GrabModeSync, GrabModeSync, None, None); + for (i = 0; i < LENGTH(buttons); i++) + if (buttons[i].click == ClkClientWin) + for (j = 0; j < LENGTH(modifiers); j++) + XGrabButton(dpy, buttons[i].button, + buttons[i].mask | modifiers[j], + c->win, False, BUTTONMASK, + GrabModeAsync, GrabModeSync, None, None); + } +} + +void +grabkeys(void) +{ + updatenumlockmask(); + { + unsigned int i, j; + unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask }; + KeyCode code; + + XUngrabKey(dpy, AnyKey, AnyModifier, root); + for (i = 0; i < LENGTH(keys); i++) + if ((code = XKeysymToKeycode(dpy, keys[i].keysym))) + for (j = 0; j < LENGTH(modifiers); j++) + XGrabKey(dpy, code, keys[i].mod | modifiers[j], root, + True, GrabModeAsync, GrabModeAsync); + } +} + +void +incnmaster(const Arg *arg) +{ + selmon->nmaster = MAX(selmon->nmaster + arg->i, 0); + arrange(selmon); +} + +#ifdef XINERAMA +static int +isuniquegeom(XineramaScreenInfo *unique, size_t n, XineramaScreenInfo *info) +{ + while (n--) + if (unique[n].x_org == info->x_org && unique[n].y_org == info->y_org + && unique[n].width == info->width && unique[n].height == info->height) + return 0; + return 1; +} +#endif /* XINERAMA */ + +void +keypress(XEvent *e) +{ + unsigned int i; + KeySym keysym; + XKeyEvent *ev; + + ev = &e->xkey; + keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); + for (i = 0; i < LENGTH(keys); i++) + if (keysym == keys[i].keysym + && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state) + && keys[i].func) + keys[i].func(&(keys[i].arg)); +} + +void +killclient(const Arg *arg) +{ + if (!selmon->sel) + return; + if (!sendevent(selmon->sel, wmatom[WMDelete])) { + XGrabServer(dpy); + XSetErrorHandler(xerrordummy); + XSetCloseDownMode(dpy, DestroyAll); + XKillClient(dpy, selmon->sel->win); + XSync(dpy, False); + XSetErrorHandler(xerror); + XUngrabServer(dpy); + } +} + +void +manage(Window w, XWindowAttributes *wa) +{ + Client *c, *t = NULL; + Window trans = None; + XWindowChanges wc; + + c = ecalloc(1, sizeof(Client)); + c->win = w; + /* geometry */ + c->x = c->oldx = wa->x; + c->y = c->oldy = wa->y; + c->w = c->oldw = wa->width; + c->h = c->oldh = wa->height; + c->oldbw = wa->border_width; + + updatetitle(c); + if (XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) { + c->mon = t->mon; + c->tags = t->tags; + } else { + c->mon = selmon; + applyrules(c); + } + + if (c->x + WIDTH(c) > c->mon->mx + c->mon->mw) + c->x = c->mon->mx + c->mon->mw - WIDTH(c); + if (c->y + HEIGHT(c) > c->mon->my + c->mon->mh) + c->y = c->mon->my + c->mon->mh - HEIGHT(c); + c->x = MAX(c->x, c->mon->mx); + /* only fix client y-offset, if the client center might cover the bar */ + c->y = MAX(c->y, ((c->mon->by == c->mon->my) && (c->x + (c->w / 2) >= c->mon->wx) + && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my); + c->bw = borderpx; + + wc.border_width = c->bw; + XConfigureWindow(dpy, w, CWBorderWidth, &wc); + XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel); + configure(c); /* propagates border_width, if size doesn't change */ + updatewindowtype(c); + updatesizehints(c); + updatewmhints(c); + XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask); + grabbuttons(c, 0); + if (!c->isfloating) + c->isfloating = c->oldstate = trans != None || c->isfixed; + if (c->isfloating) + XRaiseWindow(dpy, c->win); + attach(c); + attachstack(c); + XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, + (unsigned char *) &(c->win), 1); + XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */ + setclientstate(c, NormalState); + if (c->mon == selmon) + unfocus(selmon->sel, 0); + c->mon->sel = c; + arrange(c->mon); + XMapWindow(dpy, c->win); + focus(NULL); +} + +void +mappingnotify(XEvent *e) +{ + XMappingEvent *ev = &e->xmapping; + + XRefreshKeyboardMapping(ev); + if (ev->request == MappingKeyboard) + grabkeys(); +} + +void +maprequest(XEvent *e) +{ + static XWindowAttributes wa; + XMapRequestEvent *ev = &e->xmaprequest; + + if (!XGetWindowAttributes(dpy, ev->window, &wa)) + return; + if (wa.override_redirect) + return; + if (!wintoclient(ev->window)) + manage(ev->window, &wa); +} + +void +monocle(Monitor *m) +{ + unsigned int n = 0; + Client *c; + + for (c = m->clients; c; c = c->next) + if (ISVISIBLE(c)) + n++; + if (n > 0) /* override layout symbol */ + snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n); + for (c = nexttiled(m->clients); c; c = nexttiled(c->next)) + resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, 0); +} + +void +motionnotify(XEvent *e) +{ + static Monitor *mon = NULL; + Monitor *m; + XMotionEvent *ev = &e->xmotion; + + if (ev->window != root) + return; + if ((m = recttomon(ev->x_root, ev->y_root, 1, 1)) != mon && mon) { + unfocus(selmon->sel, 1); + selmon = m; + focus(NULL); + } + mon = m; +} + +void +movemouse(const Arg *arg) +{ + int x, y, ocx, ocy, nx, ny; + Client *c; + Monitor *m; + XEvent ev; + Time lasttime = 0; + + if (!(c = selmon->sel)) + return; + if (c->isfullscreen) /* no support moving fullscreen windows by mouse */ + return; + restack(selmon); + ocx = c->x; + ocy = c->y; + if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, + None, cursor[CurMove]->cursor, CurrentTime) != GrabSuccess) + return; + if (!getrootptr(&x, &y)) + return; + do { + XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev); + switch(ev.type) { + case ConfigureRequest: + case Expose: + case MapRequest: + handler[ev.type](&ev); + break; + case MotionNotify: + if ((ev.xmotion.time - lasttime) <= (1000 / 60)) + continue; + lasttime = ev.xmotion.time; + + nx = ocx + (ev.xmotion.x - x); + ny = ocy + (ev.xmotion.y - y); + if (abs(selmon->wx - nx) < snap) + nx = selmon->wx; + else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap) + nx = selmon->wx + selmon->ww - WIDTH(c); + if (abs(selmon->wy - ny) < snap) + ny = selmon->wy; + else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap) + ny = selmon->wy + selmon->wh - HEIGHT(c); + if (!c->isfloating && selmon->lt[selmon->sellt]->arrange + && (abs(nx - c->x) > snap || abs(ny - c->y) > snap)) + togglefloating(NULL); + if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) + resize(c, nx, ny, c->w, c->h, 1); + break; + } + } while (ev.type != ButtonRelease); + XUngrabPointer(dpy, CurrentTime); + if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) { + sendmon(c, m); + selmon = m; + focus(NULL); + } +} + +Client * +nexttiled(Client *c) +{ + for (; c && (c->isfloating || !ISVISIBLE(c)); c = c->next); + return c; +} + +void +pop(Client *c) +{ + detach(c); + attach(c); + focus(c); + arrange(c->mon); +} + +void +propertynotify(XEvent *e) +{ + Client *c; + Window trans; + XPropertyEvent *ev = &e->xproperty; + + if ((ev->window == root) && (ev->atom == XA_WM_NAME)) + updatestatus(); + else if (ev->state == PropertyDelete) + return; /* ignore */ + else if ((c = wintoclient(ev->window))) { + switch(ev->atom) { + default: break; + case XA_WM_TRANSIENT_FOR: + if (!c->isfloating && (XGetTransientForHint(dpy, c->win, &trans)) && + (c->isfloating = (wintoclient(trans)) != NULL)) + arrange(c->mon); + break; + case XA_WM_NORMAL_HINTS: + updatesizehints(c); + break; + case XA_WM_HINTS: + updatewmhints(c); + drawbars(); + break; + } + if (ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) { + updatetitle(c); + if (c == c->mon->sel) + drawbar(c->mon); + } + if (ev->atom == netatom[NetWMWindowType]) + updatewindowtype(c); + } +} + +void +quit(const Arg *arg) +{ + size_t i; + + /* kill child processes */ + for (i = 0; i < autostart_len; i++) { + if (0 < autostart_pids[i]) { + kill(autostart_pids[i], SIGTERM); + waitpid(autostart_pids[i], NULL, 0); + } + } + + running = 0; +} + +Monitor * +recttomon(int x, int y, int w, int h) +{ + Monitor *m, *r = selmon; + int a, area = 0; + + for (m = mons; m; m = m->next) + if ((a = INTERSECT(x, y, w, h, m)) > area) { + area = a; + r = m; + } + return r; +} + +void +resize(Client *c, int x, int y, int w, int h, int interact) +{ + if (applysizehints(c, &x, &y, &w, &h, interact)) + resizeclient(c, x, y, w, h); +} + +void +resizeclient(Client *c, int x, int y, int w, int h) +{ + XWindowChanges wc; + + c->oldx = c->x; c->x = wc.x = x; + c->oldy = c->y; c->y = wc.y = y; + c->oldw = c->w; c->w = wc.width = w; + c->oldh = c->h; c->h = wc.height = h; + wc.border_width = c->bw; + XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc); + configure(c); + XSync(dpy, False); +} + +void +resizemouse(const Arg *arg) +{ + int ocx, ocy, nw, nh; + Client *c; + Monitor *m; + XEvent ev; + Time lasttime = 0; + + if (!(c = selmon->sel)) + return; + if (c->isfullscreen) /* no support resizing fullscreen windows by mouse */ + return; + restack(selmon); + ocx = c->x; + ocy = c->y; + if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, + None, cursor[CurResize]->cursor, CurrentTime) != GrabSuccess) + return; + XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); + do { + XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev); + switch(ev.type) { + case ConfigureRequest: + case Expose: + case MapRequest: + handler[ev.type](&ev); + break; + case MotionNotify: + if ((ev.xmotion.time - lasttime) <= (1000 / 60)) + continue; + lasttime = ev.xmotion.time; + + nw = MAX(ev.xmotion.x - ocx - 2 * c->bw + 1, 1); + nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1); + if (c->mon->wx + nw >= selmon->wx && c->mon->wx + nw <= selmon->wx + selmon->ww + && c->mon->wy + nh >= selmon->wy && c->mon->wy + nh <= selmon->wy + selmon->wh) + { + if (!c->isfloating && selmon->lt[selmon->sellt]->arrange + && (abs(nw - c->w) > snap || abs(nh - c->h) > snap)) + togglefloating(NULL); + } + if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) + resize(c, c->x, c->y, nw, nh, 1); + break; + } + } while (ev.type != ButtonRelease); + XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); + XUngrabPointer(dpy, CurrentTime); + while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); + if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) { + sendmon(c, m); + selmon = m; + focus(NULL); + } +} + +void +restack(Monitor *m) +{ + Client *c; + XEvent ev; + XWindowChanges wc; + + drawbar(m); + if (!m->sel) + return; + if (m->sel->isfloating || !m->lt[m->sellt]->arrange) + XRaiseWindow(dpy, m->sel->win); + if (m->lt[m->sellt]->arrange) { + wc.stack_mode = Below; + wc.sibling = m->barwin; + for (c = m->stack; c; c = c->snext) + if (!c->isfloating && ISVISIBLE(c)) { + XConfigureWindow(dpy, c->win, CWSibling|CWStackMode, &wc); + wc.sibling = c->win; + } + } + XSync(dpy, False); + while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); +} + +void +run(void) +{ + XEvent ev; + /* main event loop */ + XSync(dpy, False); + while (running && !XNextEvent(dpy, &ev)) + if (handler[ev.type]) + handler[ev.type](&ev); /* call handler */ +} + +void +scan(void) +{ + unsigned int i, num; + Window d1, d2, *wins = NULL; + XWindowAttributes wa; + + if (XQueryTree(dpy, root, &d1, &d2, &wins, &num)) { + for (i = 0; i < num; i++) { + if (!XGetWindowAttributes(dpy, wins[i], &wa) + || wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1)) + continue; + if (wa.map_state == IsViewable || getstate(wins[i]) == IconicState) + manage(wins[i], &wa); + } + for (i = 0; i < num; i++) { /* now the transients */ + if (!XGetWindowAttributes(dpy, wins[i], &wa)) + continue; + if (XGetTransientForHint(dpy, wins[i], &d1) + && (wa.map_state == IsViewable || getstate(wins[i]) == IconicState)) + manage(wins[i], &wa); + } + if (wins) + XFree(wins); + } +} + +void +sendmon(Client *c, Monitor *m) +{ + if (c->mon == m) + return; + unfocus(c, 1); + detach(c); + detachstack(c); + c->mon = m; + c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */ + attach(c); + attachstack(c); + focus(NULL); + arrange(NULL); +} + +void +setclientstate(Client *c, long state) +{ + long data[] = { state, None }; + + XChangeProperty(dpy, c->win, wmatom[WMState], wmatom[WMState], 32, + PropModeReplace, (unsigned char *)data, 2); +} + +int +sendevent(Client *c, Atom proto) +{ + int n; + Atom *protocols; + int exists = 0; + XEvent ev; + + if (XGetWMProtocols(dpy, c->win, &protocols, &n)) { + while (!exists && n--) + exists = protocols[n] == proto; + XFree(protocols); + } + if (exists) { + ev.type = ClientMessage; + ev.xclient.window = c->win; + ev.xclient.message_type = wmatom[WMProtocols]; + ev.xclient.format = 32; + ev.xclient.data.l[0] = proto; + ev.xclient.data.l[1] = CurrentTime; + XSendEvent(dpy, c->win, False, NoEventMask, &ev); + } + return exists; +} + +void +setfocus(Client *c) +{ + if (!c->neverfocus) { + XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); + XChangeProperty(dpy, root, netatom[NetActiveWindow], + XA_WINDOW, 32, PropModeReplace, + (unsigned char *) &(c->win), 1); + } + sendevent(c, wmatom[WMTakeFocus]); +} + +void +setfullscreen(Client *c, int fullscreen) +{ + if (fullscreen && !c->isfullscreen) { + XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32, + PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1); + c->isfullscreen = 1; + c->oldstate = c->isfloating; + c->oldbw = c->bw; + c->bw = 0; + c->isfloating = 1; + resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh); + XRaiseWindow(dpy, c->win); + } else if (!fullscreen && c->isfullscreen){ + XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32, + PropModeReplace, (unsigned char*)0, 0); + c->isfullscreen = 0; + c->isfloating = c->oldstate; + c->bw = c->oldbw; + c->x = c->oldx; + c->y = c->oldy; + c->w = c->oldw; + c->h = c->oldh; + resizeclient(c, c->x, c->y, c->w, c->h); + arrange(c->mon); + } +} + +void +setlayout(const Arg *arg) +{ + if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt]) + selmon->sellt ^= 1; + if (arg && arg->v) + selmon->lt[selmon->sellt] = (Layout *)arg->v; + strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol); + if (selmon->sel) + arrange(selmon); + else + drawbar(selmon); +} + +/* arg > 1.0 will set mfact absolutely */ +void +setmfact(const Arg *arg) +{ + float f; + + if (!arg || !selmon->lt[selmon->sellt]->arrange) + return; + f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0; + if (f < 0.05 || f > 0.95) + return; + selmon->mfact = f; + arrange(selmon); +} + +void +setup(void) +{ + int i; + XSetWindowAttributes wa; + Atom utf8string; + + /* clean up any zombies immediately */ + sigchld(0); + + /* init screen */ + screen = DefaultScreen(dpy); + sw = DisplayWidth(dpy, screen); + sh = DisplayHeight(dpy, screen); + root = RootWindow(dpy, screen); + drw = drw_create(dpy, screen, root, sw, sh); + if (!drw_fontset_create(drw, fonts, LENGTH(fonts))) + die("no fonts could be loaded."); + lrpad = drw->fonts->h; + bh = drw->fonts->h + 2; + updategeom(); + /* init atoms */ + utf8string = XInternAtom(dpy, "UTF8_STRING", False); + wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); + wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); + wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False); + wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False); + netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False); + netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); + netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); + netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False); + netatom[NetWMCheck] = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", False); + netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False); + netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False); + netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False); + netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False); + /* init cursors */ + cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr); + cursor[CurResize] = drw_cur_create(drw, XC_sizing); + cursor[CurMove] = drw_cur_create(drw, XC_fleur); + /* init appearance */ + scheme = ecalloc(LENGTH(colors), sizeof(Clr *)); + for (i = 0; i < LENGTH(colors); i++) + scheme[i] = drw_scm_create(drw, colors[i], 3); + /* init bars */ + updatebars(); + updatestatus(); + /* supporting window for NetWMCheck */ + wmcheckwin = XCreateSimpleWindow(dpy, root, 0, 0, 1, 1, 0, 0, 0); + XChangeProperty(dpy, wmcheckwin, netatom[NetWMCheck], XA_WINDOW, 32, + PropModeReplace, (unsigned char *) &wmcheckwin, 1); + XChangeProperty(dpy, wmcheckwin, netatom[NetWMName], utf8string, 8, + PropModeReplace, (unsigned char *) "dwm", 3); + XChangeProperty(dpy, root, netatom[NetWMCheck], XA_WINDOW, 32, + PropModeReplace, (unsigned char *) &wmcheckwin, 1); + /* EWMH support per view */ + XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32, + PropModeReplace, (unsigned char *) netatom, NetLast); + XDeleteProperty(dpy, root, netatom[NetClientList]); + /* select events */ + wa.cursor = cursor[CurNormal]->cursor; + wa.event_mask = SubstructureRedirectMask|SubstructureNotifyMask + |ButtonPressMask|PointerMotionMask|EnterWindowMask + |LeaveWindowMask|StructureNotifyMask|PropertyChangeMask; + XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa); + XSelectInput(dpy, root, wa.event_mask); + grabkeys(); + focus(NULL); +} + + +void +seturgent(Client *c, int urg) +{ + XWMHints *wmh; + + c->isurgent = urg; + if (!(wmh = XGetWMHints(dpy, c->win))) + return; + wmh->flags = urg ? (wmh->flags | XUrgencyHint) : (wmh->flags & ~XUrgencyHint); + XSetWMHints(dpy, c->win, wmh); + XFree(wmh); +} + +void +showhide(Client *c) +{ + if (!c) + return; + if (ISVISIBLE(c)) { + /* show clients top down */ + XMoveWindow(dpy, c->win, c->x, c->y); + if ((!c->mon->lt[c->mon->sellt]->arrange || c->isfloating) && !c->isfullscreen) + resize(c, c->x, c->y, c->w, c->h, 0); + showhide(c->snext); + } else { + /* hide clients bottom up */ + showhide(c->snext); + XMoveWindow(dpy, c->win, WIDTH(c) * -2, c->y); + } +} + +void +sigchld(int unused) +{ + pid_t pid; + + if (signal(SIGCHLD, sigchld) == SIG_ERR) + die("can't install SIGCHLD handler:"); + while (0 < (pid = waitpid(-1, NULL, WNOHANG))) { + pid_t *p, *lim; + + if (!(p = autostart_pids)) + continue; + lim = &p[autostart_len]; + + for (; p < lim; p++) { + if (*p == pid) { + *p = -1; + break; + } + } + + } +} + +void +spawn(const Arg *arg) +{ + if (arg->v == dmenucmd) + dmenumon[0] = '0' + selmon->num; + if (fork() == 0) { + if (dpy) + close(ConnectionNumber(dpy)); + setsid(); + execvp(((char **)arg->v)[0], (char **)arg->v); + fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]); + perror(" failed"); + exit(EXIT_SUCCESS); + } +} + +void +tag(const Arg *arg) +{ + if (selmon->sel && arg->ui & TAGMASK) { + selmon->sel->tags = arg->ui & TAGMASK; + focus(NULL); + arrange(selmon); + } +} + +void +tagmon(const Arg *arg) +{ + if (!selmon->sel || !mons->next) + return; + sendmon(selmon->sel, dirtomon(arg->i)); +} + +void +togglebar(const Arg *arg) +{ + selmon->showbar = !selmon->showbar; + updatebarpos(selmon); + XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh); + arrange(selmon); +} + +void +togglefloating(const Arg *arg) +{ + if (!selmon->sel) + return; + if (selmon->sel->isfullscreen) /* no support for fullscreen windows */ + return; + selmon->sel->isfloating = !selmon->sel->isfloating || selmon->sel->isfixed; + if (selmon->sel->isfloating) + resize(selmon->sel, selmon->sel->x, selmon->sel->y, + selmon->sel->w, selmon->sel->h, 0); + arrange(selmon); +} + +void +toggletag(const Arg *arg) +{ + unsigned int newtags; + + if (!selmon->sel) + return; + newtags = selmon->sel->tags ^ (arg->ui & TAGMASK); + if (newtags) { + selmon->sel->tags = newtags; + focus(NULL); + arrange(selmon); + } +} + +void +toggleview(const Arg *arg) +{ + unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK); + + if (newtagset) { + selmon->tagset[selmon->seltags] = newtagset; + focus(NULL); + arrange(selmon); + } +} + +void +unfocus(Client *c, int setfocus) +{ + if (!c) + return; + grabbuttons(c, 0); + XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBorder].pixel); + if (setfocus) { + XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); + XDeleteProperty(dpy, root, netatom[NetActiveWindow]); + } +} + +void +unmanage(Client *c, int destroyed) +{ + Monitor *m = c->mon; + XWindowChanges wc; + + detach(c); + detachstack(c); + if (!destroyed) { + wc.border_width = c->oldbw; + XGrabServer(dpy); /* avoid race conditions */ + XSetErrorHandler(xerrordummy); + XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */ + XUngrabButton(dpy, AnyButton, AnyModifier, c->win); + setclientstate(c, WithdrawnState); + XSync(dpy, False); + XSetErrorHandler(xerror); + XUngrabServer(dpy); + } + free(c); + focus(NULL); + updateclientlist(); + arrange(m); +} + +void +unmapnotify(XEvent *e) +{ + Client *c; + XUnmapEvent *ev = &e->xunmap; + + if ((c = wintoclient(ev->window))) { + if (ev->send_event) + setclientstate(c, WithdrawnState); + else + unmanage(c, 0); + } +} + +void +updatebars(void) +{ + Monitor *m; + XSetWindowAttributes wa = { + .override_redirect = True, + .background_pixmap = ParentRelative, + .event_mask = ButtonPressMask|ExposureMask + }; + XClassHint ch = {"dwm", "dwm"}; + for (m = mons; m; m = m->next) { + if (m->barwin) + continue; + m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, DefaultDepth(dpy, screen), + CopyFromParent, DefaultVisual(dpy, screen), + CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa); + XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor); + XMapRaised(dpy, m->barwin); + XSetClassHint(dpy, m->barwin, &ch); + } +} + +void +updatebarpos(Monitor *m) +{ + m->wy = m->my; + m->wh = m->mh; + if (m->showbar) { + m->wh -= bh; + m->by = m->topbar ? m->wy : m->wy + m->wh; + m->wy = m->topbar ? m->wy + bh : m->wy; + } else + m->by = -bh; +} + +void +updateclientlist() +{ + Client *c; + Monitor *m; + + XDeleteProperty(dpy, root, netatom[NetClientList]); + for (m = mons; m; m = m->next) + for (c = m->clients; c; c = c->next) + XChangeProperty(dpy, root, netatom[NetClientList], + XA_WINDOW, 32, PropModeAppend, + (unsigned char *) &(c->win), 1); +} + +int +updategeom(void) +{ + int dirty = 0; + +#ifdef XINERAMA + if (XineramaIsActive(dpy)) { + int i, j, n, nn; + Client *c; + Monitor *m; + XineramaScreenInfo *info = XineramaQueryScreens(dpy, &nn); + XineramaScreenInfo *unique = NULL; + + for (n = 0, m = mons; m; m = m->next, n++); + /* only consider unique geometries as separate screens */ + unique = ecalloc(nn, sizeof(XineramaScreenInfo)); + for (i = 0, j = 0; i < nn; i++) + if (isuniquegeom(unique, j, &info[i])) + memcpy(&unique[j++], &info[i], sizeof(XineramaScreenInfo)); + XFree(info); + nn = j; + if (n <= nn) { /* new monitors available */ + for (i = 0; i < (nn - n); i++) { + for (m = mons; m && m->next; m = m->next); + if (m) + m->next = createmon(); + else + mons = createmon(); + } + for (i = 0, m = mons; i < nn && m; m = m->next, i++) + if (i >= n + || unique[i].x_org != m->mx || unique[i].y_org != m->my + || unique[i].width != m->mw || unique[i].height != m->mh) + { + dirty = 1; + m->num = i; + m->mx = m->wx = unique[i].x_org; + m->my = m->wy = unique[i].y_org; + m->mw = m->ww = unique[i].width; + m->mh = m->wh = unique[i].height; + updatebarpos(m); + } + } else { /* less monitors available nn < n */ + for (i = nn; i < n; i++) { + for (m = mons; m && m->next; m = m->next); + while ((c = m->clients)) { + dirty = 1; + m->clients = c->next; + detachstack(c); + c->mon = mons; + attach(c); + attachstack(c); + } + if (m == selmon) + selmon = mons; + cleanupmon(m); + } + } + free(unique); + } else +#endif /* XINERAMA */ + { /* default monitor setup */ + if (!mons) + mons = createmon(); + if (mons->mw != sw || mons->mh != sh) { + dirty = 1; + mons->mw = mons->ww = sw; + mons->mh = mons->wh = sh; + updatebarpos(mons); + } + } + if (dirty) { + selmon = mons; + selmon = wintomon(root); + } + return dirty; +} + +void +updatenumlockmask(void) +{ + unsigned int i, j; + XModifierKeymap *modmap; + + numlockmask = 0; + modmap = XGetModifierMapping(dpy); + for (i = 0; i < 8; i++) + for (j = 0; j < modmap->max_keypermod; j++) + if (modmap->modifiermap[i * modmap->max_keypermod + j] + == XKeysymToKeycode(dpy, XK_Num_Lock)) + numlockmask = (1 << i); + XFreeModifiermap(modmap); +} + +void +updatesizehints(Client *c) +{ + long msize; + XSizeHints size; + + if (!XGetWMNormalHints(dpy, c->win, &size, &msize)) + /* size is uninitialized, ensure that size.flags aren't used */ + size.flags = PSize; + if (size.flags & PBaseSize) { + c->basew = size.base_width; + c->baseh = size.base_height; + } else if (size.flags & PMinSize) { + c->basew = size.min_width; + c->baseh = size.min_height; + } else + c->basew = c->baseh = 0; + if (size.flags & PResizeInc) { + c->incw = size.width_inc; + c->inch = size.height_inc; + } else + c->incw = c->inch = 0; + if (size.flags & PMaxSize) { + c->maxw = size.max_width; + c->maxh = size.max_height; + } else + c->maxw = c->maxh = 0; + if (size.flags & PMinSize) { + c->minw = size.min_width; + c->minh = size.min_height; + } else if (size.flags & PBaseSize) { + c->minw = size.base_width; + c->minh = size.base_height; + } else + c->minw = c->minh = 0; + if (size.flags & PAspect) { + c->mina = (float)size.min_aspect.y / size.min_aspect.x; + c->maxa = (float)size.max_aspect.x / size.max_aspect.y; + } else + c->maxa = c->mina = 0.0; + c->isfixed = (c->maxw && c->maxh && c->maxw == c->minw && c->maxh == c->minh); +} + +void +updatestatus(void) +{ + if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext))) + strcpy(stext, "dwm-"VERSION); + drawbar(selmon); +} + +void +updatetitle(Client *c) +{ + if (!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name)) + gettextprop(c->win, XA_WM_NAME, c->name, sizeof c->name); + if (c->name[0] == '\0') /* hack to mark broken clients */ + strcpy(c->name, broken); +} + +void +updatewindowtype(Client *c) +{ + Atom state = getatomprop(c, netatom[NetWMState]); + Atom wtype = getatomprop(c, netatom[NetWMWindowType]); + + if (state == netatom[NetWMFullscreen]) + setfullscreen(c, 1); + if (wtype == netatom[NetWMWindowTypeDialog]) + c->isfloating = 1; +} + +void +updatewmhints(Client *c) +{ + XWMHints *wmh; + + if ((wmh = XGetWMHints(dpy, c->win))) { + if (c == selmon->sel && wmh->flags & XUrgencyHint) { + wmh->flags &= ~XUrgencyHint; + XSetWMHints(dpy, c->win, wmh); + } else + c->isurgent = (wmh->flags & XUrgencyHint) ? 1 : 0; + if (wmh->flags & InputHint) + c->neverfocus = !wmh->input; + else + c->neverfocus = 0; + XFree(wmh); + } +} + +void +view(const Arg *arg) +{ + if ((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags]) + return; + selmon->seltags ^= 1; /* toggle sel tagset */ + if (arg->ui & TAGMASK) + selmon->tagset[selmon->seltags] = arg->ui & TAGMASK; + focus(NULL); + arrange(selmon); +} + +Client * +wintoclient(Window w) +{ + Client *c; + Monitor *m; + + for (m = mons; m; m = m->next) + for (c = m->clients; c; c = c->next) + if (c->win == w) + return c; + return NULL; +} + +Monitor * +wintomon(Window w) +{ + int x, y; + Client *c; + Monitor *m; + + if (w == root && getrootptr(&x, &y)) + return recttomon(x, y, 1, 1); + for (m = mons; m; m = m->next) + if (w == m->barwin) + return m; + if ((c = wintoclient(w))) + return c->mon; + return selmon; +} + +/* There's no way to check accesses to destroyed windows, thus those cases are + * ignored (especially on UnmapNotify's). Other types of errors call Xlibs + * default error handler, which may call exit. */ +int +xerror(Display *dpy, XErrorEvent *ee) +{ + if (ee->error_code == BadWindow + || (ee->request_code == X_SetInputFocus && ee->error_code == BadMatch) + || (ee->request_code == X_PolyText8 && ee->error_code == BadDrawable) + || (ee->request_code == X_PolyFillRectangle && ee->error_code == BadDrawable) + || (ee->request_code == X_PolySegment && ee->error_code == BadDrawable) + || (ee->request_code == X_ConfigureWindow && ee->error_code == BadMatch) + || (ee->request_code == X_GrabButton && ee->error_code == BadAccess) + || (ee->request_code == X_GrabKey && ee->error_code == BadAccess) + || (ee->request_code == X_CopyArea && ee->error_code == BadDrawable)) + return 0; + fprintf(stderr, "dwm: fatal error: request code=%d, error code=%d\n", + ee->request_code, ee->error_code); + return xerrorxlib(dpy, ee); /* may call exit */ +} + +int +xerrordummy(Display *dpy, XErrorEvent *ee) +{ + return 0; +} + +/* Startup Error handler to check if another window manager + * is already running. */ +int +xerrorstart(Display *dpy, XErrorEvent *ee) +{ + die("dwm: another window manager is already running"); + return -1; +} + +void +zoom(const Arg *arg) +{ + Client *c = selmon->sel; + + if (!selmon->lt[selmon->sellt]->arrange + || (selmon->sel && selmon->sel->isfloating)) + return; + if (c == nexttiled(selmon->clients)) + if (!c || !(c = nexttiled(c->next))) + return; + pop(c); +} + +int +main(int argc, char *argv[]) +{ + if (argc == 2 && !strcmp("-v", argv[1])) + die("dwm-"VERSION); + else if (argc != 1) + die("usage: dwm [-v]"); + if (!setlocale(LC_CTYPE, "") || !XSupportsLocale()) + fputs("warning: no locale support\n", stderr); + if (!(dpy = XOpenDisplay(NULL))) + die("dwm: cannot open display"); + checkotherwm(); + autostart_exec(); + setup(); +#ifdef __OpenBSD__ + if (pledge("stdio rpath proc exec", NULL) == -1) + die("pledge"); +#endif /* __OpenBSD__ */ + scan(); + run(); + cleanup(); + XCloseDisplay(dpy); + return EXIT_SUCCESS; +} diff --git a/dwm/.local/share/dwm/dwm.c.rej b/dwm/.local/share/dwm/dwm.c.rej new file mode 100644 index 0000000..97dc4a8 --- /dev/null +++ b/dwm/.local/share/dwm/dwm.c.rej @@ -0,0 +1,392 @@ +--- dwm.c ++++ dwm.c +@@ -47,8 +47,8 @@ + /* macros */ + #define BUTTONMASK (ButtonPressMask|ButtonReleaseMask) + #define CLEANMASK(mask) (mask & ~(numlockmask|LockMask) & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask)) +-#define INTERSECT(x,y,w,h,m) (MAX(0, MIN((x)+(w),(m)->wx+(m)->ww) - MAX((x),(m)->wx)) \ +- * MAX(0, MIN((y)+(h),(m)->wy+(m)->wh) - MAX((y),(m)->wy))) ++#define INTERSECT(x,y,w,h,m) (MAX(0, MIN((x)+(w),(m)->mx+(m)->mw) - MAX((x),(m)->mx)) \ ++ * MAX(0, MIN((y)+(h),(m)->my+(m)->mh) - MAX((y),(m)->my))) + #define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags])) + #define LENGTH(X) (sizeof X / sizeof X[0]) + #define MOUSEMASK (BUTTONMASK|PointerMotionMask) +@@ -116,7 +116,8 @@ struct Monitor { + float mfact; + int nmaster; + int num; +- int by; /* bar geometry */ ++ int by, bh; /* bar geometry */ ++ int tx, tw; /* bar tray geometry */ + int mx, my, mw, mh; /* screen size */ + int wx, wy, ww, wh; /* window area */ + unsigned int seltags; +@@ -129,6 +130,7 @@ struct Monitor { + Client *stack; + Monitor *next; + Window barwin; ++ Window traywin; + const Layout *lt[2]; + }; + +@@ -179,6 +181,8 @@ static void incnmaster(const Arg *arg); + static void keypress(XEvent *e); + static void killclient(const Arg *arg); + static void manage(Window w, XWindowAttributes *wa); ++static void managealtbar(Window win, XWindowAttributes *wa); ++static void managetray(Window win, XWindowAttributes *wa); + static void mappingnotify(XEvent *e); + static void maprequest(XEvent *e); + static void monocle(Monitor *m); +@@ -195,6 +199,7 @@ static void resizemouse(const Arg *arg); + static void restack(Monitor *m); + static void run(void); + static void scan(void); ++static void scantray(void); + static int sendevent(Client *c, Atom proto); + static void sendmon(Client *c, Monitor *m); + static void setclientstate(Client *c, long state); +@@ -207,6 +212,7 @@ static void seturgent(Client *c, int urg); + static void showhide(Client *c); + static void sigchld(int unused); + static void spawn(const Arg *arg); ++static void spawnbar(); + static void tag(const Arg *arg); + static void tagmon(const Arg *arg); + static void tile(Monitor *); +@@ -216,6 +222,8 @@ static void toggletag(const Arg *arg); + static void toggleview(const Arg *arg); + static void unfocus(Client *c, int setfocus); + static void unmanage(Client *c, int destroyed); ++static void unmanagealtbar(Window w); ++static void unmanagetray(Window w); + static void unmapnotify(XEvent *e); + static void updatebarpos(Monitor *m); + static void updatebars(void); +@@ -230,6 +238,7 @@ static void updatewmhints(Client *c); + static void view(const Arg *arg); + static Client *wintoclient(Window w); + static Monitor *wintomon(Window w); ++static int wmclasscontains(Window win, const char *class, const char *name); + static int xerror(Display *dpy, XErrorEvent *ee); + static int xerrordummy(Display *dpy, XErrorEvent *ee); + static int xerrorstart(Display *dpy, XErrorEvent *ee); +@@ -505,8 +514,10 @@ cleanupmon(Monitor *mon) + for (m = mons; m && m->next != mon; m = m->next); + m->next = mon->next; + } +- XUnmapWindow(dpy, mon->barwin); +- XDestroyWindow(dpy, mon->barwin); ++ if (!usealtbar) { ++ XUnmapWindow(dpy, mon->barwin); ++ XDestroyWindow(dpy, mon->barwin); ++ } + free(mon); + } + +@@ -568,7 +579,7 @@ configurenotify(XEvent *e) + for (c = m->clients; c; c = c->next) + if (c->isfullscreen) + resizeclient(c, m->mx, m->my, m->mw, m->mh); +- XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh); ++ XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, m->bh); + } + focus(NULL); + arrange(NULL); +@@ -639,6 +650,7 @@ createmon(void) + m->nmaster = nmaster; + m->showbar = showbar; + m->topbar = topbar; ++ m->bh = bh; + m->lt[0] = &layouts[0]; + m->lt[1] = &layouts[1 % LENGTH(layouts)]; + strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); +@@ -649,10 +661,15 @@ void + destroynotify(XEvent *e) + { + Client *c; ++ Monitor *m; + XDestroyWindowEvent *ev = &e->xdestroywindow; + + if ((c = wintoclient(ev->window))) + unmanage(c, 1); ++ else if ((m = wintomon(ev->window)) && m->barwin == ev->window) ++ unmanagealtbar(ev->window); ++ else if (m->traywin == ev->window) ++ unmanagetray(ev->window); + } + + void +@@ -696,6 +713,9 @@ dirtomon(int dir) + void + drawbar(Monitor *m) + { ++ if (usealtbar) ++ return; ++ + int x, w, tw = 0; + int boxs = drw->fonts->h / 9; + int boxw = drw->fonts->h / 6 + 2; +@@ -1077,6 +1097,45 @@ manage(Window w, XWindowAttributes *wa) + focus(NULL); + } + ++void ++managealtbar(Window win, XWindowAttributes *wa) ++{ ++ Monitor *m; ++ if (!(m = recttomon(wa->x, wa->y, wa->width, wa->height))) ++ return; ++ ++ m->barwin = win; ++ m->by = wa->y; ++ bh = m->bh = wa->height; ++ updatebarpos(m); ++ arrange(m); ++ XSelectInput(dpy, win, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask); ++ XMoveResizeWindow(dpy, win, wa->x, wa->y, wa->width, wa->height); ++ XMapWindow(dpy, win); ++ XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, ++ (unsigned char *) &win, 1); ++} ++ ++void ++managetray(Window win, XWindowAttributes *wa) ++{ ++ Monitor *m; ++ if (!(m = recttomon(wa->x, wa->y, wa->width, wa->height))) ++ return; ++ ++ m->traywin = win; ++ m->tx = wa->x; ++ m->tw = wa->width; ++ updatebarpos(m); ++ arrange(m); ++ XSelectInput(dpy, win, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask); ++ XMoveResizeWindow(dpy, win, wa->x, wa->y, wa->width, wa->height); ++ XMapWindow(dpy, win); ++ XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, ++ (unsigned char *) &win, 1); ++} ++ ++ + void + mappingnotify(XEvent *e) + { +@@ -1097,7 +1156,9 @@ maprequest(XEvent *e) + return; + if (wa.override_redirect) + return; +- if (!wintoclient(ev->window)) ++ if (wmclasscontains(ev->window, altbarclass, "")) ++ managealtbar(ev->window, &wa); ++ else if (!wintoclient(ev->window)) + manage(ev->window, &wa); + } + +@@ -1393,7 +1454,9 @@ scan(void) + if (!XGetWindowAttributes(dpy, wins[i], &wa) + || wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1)) + continue; +- if (wa.map_state == IsViewable || getstate(wins[i]) == IconicState) ++ if (wmclasscontains(wins[i], altbarclass, "")) ++ managealtbar(wins[i], &wa); ++ else if (wa.map_state == IsViewable || getstate(wins[i]) == IconicState) + manage(wins[i], &wa); + } + for (i = 0; i < num; i++) { /* now the transients */ +@@ -1408,6 +1471,29 @@ scan(void) + } + } + ++void ++scantray(void) ++{ ++ unsigned int num; ++ Window d1, d2, *wins = NULL; ++ XWindowAttributes wa; ++ ++ if (XQueryTree(dpy, root, &d1, &d2, &wins, &num)) { ++ for (unsigned int i = 0; i < num; i++) { ++ if (wmclasscontains(wins[i], altbarclass, alttrayname)) { ++ if (!XGetWindowAttributes(dpy, wins[i], &wa)) ++ break; ++ managetray(wins[i], &wa); ++ } ++ } ++ } ++ ++ if (wins) ++ XFree(wins); ++} ++ ++ ++ + void + sendmon(Client *c, Monitor *m) + { +@@ -1546,7 +1632,7 @@ setup(void) + if (!drw_fontset_create(drw, fonts, LENGTH(fonts))) + die("no fonts could be loaded."); + lrpad = drw->fonts->h; +- bh = drw->fonts->h + 2; ++ bh = usealtbar ? 0 : drw->fonts->h + 2; + updategeom(); + /* init atoms */ + utf8string = XInternAtom(dpy, "UTF8_STRING", False); +@@ -1595,6 +1681,7 @@ setup(void) + XSelectInput(dpy, root, wa.event_mask); + grabkeys(); + focus(NULL); ++ spawnbar(); + } + + +@@ -1653,6 +1740,13 @@ spawn(const Arg *arg) + } + } + ++void ++spawnbar() ++{ ++ if (*altbarcmd) ++ system(altbarcmd); ++} ++ + void + tag(const Arg *arg) + { +@@ -1702,9 +1796,18 @@ tile(Monitor *m) + void + togglebar(const Arg *arg) + { ++ /** ++ * Polybar tray does not raise maprequest event. It must be manually scanned ++ * for. Scanning it too early while the tray is being populated would give ++ * wrong dimensions. ++ */ ++ if (!selmon->traywin) ++ scantray(); ++ + selmon->showbar = !selmon->showbar; + updatebarpos(selmon); +- XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh); ++ XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, selmon->bh); ++ XMoveResizeWindow(dpy, selmon->traywin, selmon->tx, selmon->by, selmon->tw, selmon->bh); + arrange(selmon); + } + +@@ -1787,10 +1890,41 @@ unmanage(Client *c, int destroyed) + arrange(m); + } + ++void ++unmanagealtbar(Window w) ++{ ++ Monitor *m = wintomon(w); ++ ++ if (!m) ++ return; ++ ++ m->barwin = 0; ++ m->by = 0; ++ m->bh = 0; ++ updatebarpos(m); ++ arrange(m); ++} ++ ++void ++unmanagetray(Window w) ++{ ++ Monitor *m = wintomon(w); ++ ++ if (!m) ++ return; ++ ++ m->traywin = 0; ++ m->tx = 0; ++ m->tw = 0; ++ updatebarpos(m); ++ arrange(m); ++} ++ + void + unmapnotify(XEvent *e) + { + Client *c; ++ Monitor *m; + XUnmapEvent *ev = &e->xunmap; + + if ((c = wintoclient(ev->window))) { +@@ -1798,12 +1932,18 @@ unmapnotify(XEvent *e) + setclientstate(c, WithdrawnState); + else + unmanage(c, 0); +- } ++ } else if ((m = wintomon(ev->window)) && m->barwin == ev->window) ++ unmanagealtbar(ev->window); ++ else if (m->traywin == ev->window) ++ unmanagetray(ev->window); + } + + void + updatebars(void) + { ++ if (usealtbar) ++ return; ++ + Monitor *m; + XSetWindowAttributes wa = { + .override_redirect = True, +@@ -1829,11 +1969,11 @@ updatebarpos(Monitor *m) + m->wy = m->my; + m->wh = m->mh; + if (m->showbar) { +- m->wh -= bh; ++ m->wh -= m->bh; + m->by = m->topbar ? m->wy : m->wy + m->wh; +- m->wy = m->topbar ? m->wy + bh : m->wy; ++ m->wy = m->topbar ? m->wy + m->bh : m->wy; + } else +- m->by = -bh; ++ m->by = -m->bh; + } + + void +@@ -2070,13 +2210,35 @@ wintomon(Window w) + if (w == root && getrootptr(&x, &y)) + return recttomon(x, y, 1, 1); + for (m = mons; m; m = m->next) +- if (w == m->barwin) ++ if (w == m->barwin || w == m->traywin) + return m; + if ((c = wintoclient(w))) + return c->mon; + return selmon; + } + ++int ++wmclasscontains(Window win, const char *class, const char *name) ++{ ++ XClassHint ch = { NULL, NULL }; ++ int res = 1; ++ ++ if (XGetClassHint(dpy, win, &ch)) { ++ if (ch.res_name && strstr(ch.res_name, name) == NULL) ++ res = 0; ++ if (ch.res_class && strstr(ch.res_class, class) == NULL) ++ res = 0; ++ } else ++ res = 0; ++ ++ if (ch.res_class) ++ XFree(ch.res_class); ++ if (ch.res_name) ++ XFree(ch.res_name); ++ ++ return res; ++} ++ + /* There's no way to check accesses to destroyed windows, thus those cases are + * ignored (especially on UnmapNotify's). Other types of errors call Xlibs + * default error handler, which may call exit. */ diff --git a/dwm/.local/share/dwm/dwm.o b/dwm/.local/share/dwm/dwm.o new file mode 100644 index 0000000000000000000000000000000000000000..8577fc68ad8057a008062dc079ec26281140f605 GIT binary patch literal 67512 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 literal 0 HcmV?d00001 diff --git a/dwm/.local/share/dwm/transient.c b/dwm/.local/share/dwm/transient.c new file mode 100644 index 0000000..040adb5 --- /dev/null +++ b/dwm/.local/share/dwm/transient.c @@ -0,0 +1,42 @@ +/* cc transient.c -o transient -lX11 */ + +#include +#include +#include +#include + +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); +} diff --git a/dwm/.local/share/dwm/util.c b/dwm/.local/share/dwm/util.c new file mode 100644 index 0000000..fe044fc --- /dev/null +++ b/dwm/.local/share/dwm/util.c @@ -0,0 +1,35 @@ +/* See LICENSE file for copyright and license details. */ +#include +#include +#include +#include + +#include "util.h" + +void * +ecalloc(size_t nmemb, size_t size) +{ + void *p; + + if (!(p = calloc(nmemb, size))) + die("calloc:"); + return p; +} + +void +die(const char *fmt, ...) { + va_list ap; + + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + + if (fmt[0] && fmt[strlen(fmt)-1] == ':') { + fputc(' ', stderr); + perror(NULL); + } else { + fputc('\n', stderr); + } + + exit(1); +} diff --git a/dwm/.local/share/dwm/util.h b/dwm/.local/share/dwm/util.h new file mode 100644 index 0000000..f633b51 --- /dev/null +++ b/dwm/.local/share/dwm/util.h @@ -0,0 +1,8 @@ +/* See LICENSE file for copyright and license details. */ + +#define MAX(A, B) ((A) > (B) ? (A) : (B)) +#define MIN(A, B) ((A) < (B) ? (A) : (B)) +#define BETWEEN(X, A, B) ((A) <= (X) && (X) <= (B)) + +void die(const char *fmt, ...); +void *ecalloc(size_t nmemb, size_t size); diff --git a/dwm/.local/share/dwm/util.o b/dwm/.local/share/dwm/util.o new file mode 100644 index 0000000000000000000000000000000000000000..6dea33532df10197ebcd69b05a9eb56a8b227e57 GIT binary patch literal 2272 zcmbW1K}-`t6oy|ZN=2X*IAHM5!)j=Po3_SCP)UITt8N4VBXY2ovIJsjo9&jMF%csk z8bZRsqX!NiH1S}fM-zx1^ytx(a5TXK9y}OK@V(u6bX>O=-e&UNeD8lVvopK%Xh0vV z@%ezw2R%^fF$GvZQi&6Gn1DuTfHAGSr#=3$jYun7N|#n1R}xxTS2VqxR7P}+CYCp? z?qDRT+zm!_r4WofQMKOv$TGDuaKR<77`lS(Y|_dwF6+VKT*3av<&lA~=Dtahc zb6GV5s@@-k={W<6*0f=okQ&m5`+D`%@ZjLsz<6rBw@)8P!NN?zoXc4=s4}xg4rU4^ zD+2{A$eUm+&RJkMpDC1ZKC&8Y$Fcp{ckC5GG&*tGYvykWqPg`S9Bk{GFlPN%i3cUV zC2=|z*6&DM*8h??oiXe8B;F$NI{NU@Xr1(JvA#iYdN2B`nTIhZBRw^?OCn&-=LKr< z{=Ai*LT{OlpXJCjvT4;a7A;Vx(^eYPsbUdSGfy3o$J7|8nf&~`kwZx?Zy74y5@(B6 zI&%+oRBg7u>E5M(E_5L_L4&W zv*~{$JA;k5`$idc%}ZJ`H||76V;;6XCdQ1TmyPG=^>U8qXP>|X#ZeXrKPd!!S96-{ z*k8c}$E+d0-~~OjcLbBaNvdBI^>mNO=6;{snDjcofVgV;z3BX?mh1WaXd3t2h~TrB re_MFEJ9rGrbNw-l-DgMnmjX^uM=~+o0il20tG-LDfA&D>1n&C3OT!4^ literal 0 HcmV?d00001 diff --git a/dwm/.local/share/dwm/vanitygaps.c b/dwm/.local/share/dwm/vanitygaps.c new file mode 100644 index 0000000..3f31593 --- /dev/null +++ b/dwm/.local/share/dwm/vanitygaps.c @@ -0,0 +1,809 @@ +/* Key binding functions */ +static void defaultgaps(const Arg *arg); +static void incrgaps(const Arg *arg); +static void incrigaps(const Arg *arg); +static void incrogaps(const Arg *arg); +static void incrohgaps(const Arg *arg); +static void incrovgaps(const Arg *arg); +static void incrihgaps(const Arg *arg); +static void incrivgaps(const Arg *arg); +static void togglegaps(const Arg *arg); +/* Layouts (delete the ones you do not need) */ +static void bstack(Monitor *m); +static void bstackhoriz(Monitor *m); +static void centeredmaster(Monitor *m); +static void centeredfloatingmaster(Monitor *m); +static void deck(Monitor *m); +static void dwindle(Monitor *m); +static void fibonacci(Monitor *m, int s); +static void grid(Monitor *m); +static void nrowgrid(Monitor *m); +static void spiral(Monitor *m); +static void tile(Monitor *m); +/* Internals */ +static void getgaps(Monitor *m, int *oh, int *ov, int *ih, int *iv, unsigned int *nc); +static void getfacts(Monitor *m, int msize, int ssize, float *mf, float *sf, int *mr, int *sr); +static void setgaps(int oh, int ov, int ih, int iv); + +/* Settings */ +#if !PERTAG_PATCH +static int enablegaps = 1; +#endif // PERTAG_PATCH + +void +setgaps(int oh, int ov, int ih, int iv) +{ + if (oh < 0) oh = 0; + if (ov < 0) ov = 0; + if (ih < 0) ih = 0; + if (iv < 0) iv = 0; + + selmon->gappoh = oh; + selmon->gappov = ov; + selmon->gappih = ih; + selmon->gappiv = iv; + arrange(selmon); +} + +void +togglegaps(const Arg *arg) +{ + #if PERTAG_PATCH + selmon->pertag->enablegaps[selmon->pertag->curtag] = !selmon->pertag->enablegaps[selmon->pertag->curtag]; + #else + enablegaps = !enablegaps; + #endif // PERTAG_PATCH + arrange(NULL); +} + +void +defaultgaps(const Arg *arg) +{ + setgaps(gappoh, gappov, gappih, gappiv); +} + +void +incrgaps(const Arg *arg) +{ + setgaps( + selmon->gappoh + arg->i, + selmon->gappov + arg->i, + selmon->gappih + arg->i, + selmon->gappiv + arg->i + ); +} + +void +incrigaps(const Arg *arg) +{ + setgaps( + selmon->gappoh, + selmon->gappov, + selmon->gappih + arg->i, + selmon->gappiv + arg->i + ); +} + +void +incrogaps(const Arg *arg) +{ + setgaps( + selmon->gappoh + arg->i, + selmon->gappov + arg->i, + selmon->gappih, + selmon->gappiv + ); +} + +void +incrohgaps(const Arg *arg) +{ + setgaps( + selmon->gappoh + arg->i, + selmon->gappov, + selmon->gappih, + selmon->gappiv + ); +} + +void +incrovgaps(const Arg *arg) +{ + setgaps( + selmon->gappoh, + selmon->gappov + arg->i, + selmon->gappih, + selmon->gappiv + ); +} + +void +incrihgaps(const Arg *arg) +{ + setgaps( + selmon->gappoh, + selmon->gappov, + selmon->gappih + arg->i, + selmon->gappiv + ); +} + +void +incrivgaps(const Arg *arg) +{ + setgaps( + selmon->gappoh, + selmon->gappov, + selmon->gappih, + selmon->gappiv + arg->i + ); +} + +void +getgaps(Monitor *m, int *oh, int *ov, int *ih, int *iv, unsigned int *nc) +{ + unsigned int n, oe, ie; + #if PERTAG_PATCH + oe = ie = selmon->pertag->enablegaps[selmon->pertag->curtag]; + #else + oe = ie = enablegaps; + #endif // PERTAG_PATCH + Client *c; + + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + if (smartgaps && n == 1) { + oe = 0; // outer gaps disabled when only one client + } + + *oh = m->gappoh*oe; // outer horizontal gap + *ov = m->gappov*oe; // outer vertical gap + *ih = m->gappih*ie; // inner horizontal gap + *iv = m->gappiv*ie; // inner vertical gap + *nc = n; // number of clients +} + +void +getfacts(Monitor *m, int msize, int ssize, float *mf, float *sf, int *mr, int *sr) +{ + unsigned int n; + float mfacts, sfacts; + int mtotal = 0, stotal = 0; + Client *c; + + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + mfacts = MIN(n, m->nmaster); + sfacts = n - m->nmaster; + + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) + if (n < m->nmaster) + mtotal += msize / mfacts; + else + stotal += ssize / sfacts; + + *mf = mfacts; // total factor of master area + *sf = sfacts; // total factor of stack area + *mr = msize - mtotal; // the remainder (rest) of pixels after an even master split + *sr = ssize - stotal; // the remainder (rest) of pixels after an even stack split +} + +/*** + * Layouts + */ + +/* + * Bottomstack layout + gaps + * https://dwm.suckless.org/patches/bottomstack/ + */ +static void +bstack(Monitor *m) +{ + unsigned int i, n; + int oh, ov, ih, iv; + int mx = 0, my = 0, mh = 0, mw = 0; + int sx = 0, sy = 0, sh = 0, sw = 0; + float mfacts, sfacts; + int mrest, srest; + Client *c; + + getgaps(m, &oh, &ov, &ih, &iv, &n); + if (n == 0) + return; + + sx = mx = m->wx + ov; + sy = my = m->wy + oh; + sh = mh = m->wh - 2*oh; + mw = m->ww - 2*ov - iv * (MIN(n, m->nmaster) - 1); + sw = m->ww - 2*ov - iv * (n - m->nmaster - 1); + + if (m->nmaster && n > m->nmaster) { + sh = (mh - ih) * (1 - m->mfact); + mh = mh - ih - sh; + sx = mx; + sy = my + mh + ih; + } + + getfacts(m, mw, sw, &mfacts, &sfacts, &mrest, &srest); + + for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { + if (i < m->nmaster) { + resize(c, mx, my, (mw / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0); + mx += WIDTH(c) + iv; + } else { + resize(c, sx, sy, (sw / sfacts) + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), sh - (2*c->bw), 0); + sx += WIDTH(c) + iv; + } + } +} + +static void +bstackhoriz(Monitor *m) +{ + unsigned int i, n; + int oh, ov, ih, iv; + int mx = 0, my = 0, mh = 0, mw = 0; + int sx = 0, sy = 0, sh = 0, sw = 0; + float mfacts, sfacts; + int mrest, srest; + Client *c; + + getgaps(m, &oh, &ov, &ih, &iv, &n); + if (n == 0) + return; + + sx = mx = m->wx + ov; + sy = my = m->wy + oh; + mh = m->wh - 2*oh; + sh = m->wh - 2*oh - ih * (n - m->nmaster - 1); + mw = m->ww - 2*ov - iv * (MIN(n, m->nmaster) - 1); + sw = m->ww - 2*ov; + + if (m->nmaster && n > m->nmaster) { + sh = (mh - ih) * (1 - m->mfact); + mh = mh - ih - sh; + sy = my + mh + ih; + sh = m->wh - mh - 2*oh - ih * (n - m->nmaster); + } + + getfacts(m, mw, sh, &mfacts, &sfacts, &mrest, &srest); + + for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { + if (i < m->nmaster) { + resize(c, mx, my, (mw / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0); + mx += WIDTH(c) + iv; + } else { + resize(c, sx, sy, sw - (2*c->bw), (sh / sfacts) + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), 0); + sy += HEIGHT(c) + ih; + } + } +} + +/* + * Centred master layout + gaps + * https://dwm.suckless.org/patches/centeredmaster/ + */ +void +centeredmaster(Monitor *m) +{ + unsigned int i, n; + int oh, ov, ih, iv; + int mx = 0, my = 0, mh = 0, mw = 0; + int lx = 0, ly = 0, lw = 0, lh = 0; + int rx = 0, ry = 0, rw = 0, rh = 0; + float mfacts = 0, lfacts = 0, rfacts = 0; + int mtotal = 0, ltotal = 0, rtotal = 0; + int mrest = 0, lrest = 0, rrest = 0; + Client *c; + + getgaps(m, &oh, &ov, &ih, &iv, &n); + if (n == 0) + return; + + /* initialize areas */ + mx = m->wx + ov; + my = m->wy + oh; + mh = m->wh - 2*oh - ih * ((!m->nmaster ? n : MIN(n, m->nmaster)) - 1); + mw = m->ww - 2*ov; + lh = m->wh - 2*oh - ih * (((n - m->nmaster) / 2) - 1); + rh = m->wh - 2*oh - ih * (((n - m->nmaster) / 2) - ((n - m->nmaster) % 2 ? 0 : 1)); + + if (m->nmaster && n > m->nmaster) { + /* go mfact box in the center if more than nmaster clients */ + if (n - m->nmaster > 1) { + /* ||<-S->|<---M--->|<-S->|| */ + mw = (m->ww - 2*ov - 2*iv) * m->mfact; + lw = (m->ww - mw - 2*ov - 2*iv) / 2; + rw = (m->ww - mw - 2*ov - 2*iv) - lw; + mx += lw + iv; + } else { + /* ||<---M--->|<-S->|| */ + mw = (mw - iv) * m->mfact; + lw = 0; + rw = m->ww - mw - iv - 2*ov; + } + lx = m->wx + ov; + ly = m->wy + oh; + rx = mx + mw + iv; + ry = m->wy + oh; + } + + /* calculate facts */ + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) { + if (!m->nmaster || n < m->nmaster) + mfacts += 1; + else if ((n - m->nmaster) % 2) + lfacts += 1; // total factor of left hand stack area + else + rfacts += 1; // total factor of right hand stack area + } + + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) + if (!m->nmaster || n < m->nmaster) + mtotal += mh / mfacts; + else if ((n - m->nmaster) % 2) + ltotal += lh / lfacts; + else + rtotal += rh / rfacts; + + mrest = mh - mtotal; + lrest = lh - ltotal; + rrest = rh - rtotal; + + for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { + if (!m->nmaster || i < m->nmaster) { + /* nmaster clients are stacked vertically, in the center of the screen */ + resize(c, mx, my, mw - (2*c->bw), (mh / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), 0); + my += HEIGHT(c) + ih; + } else { + /* stack clients are stacked vertically */ + if ((i - m->nmaster) % 2 ) { + resize(c, lx, ly, lw - (2*c->bw), (lh / lfacts) + ((i - 2*m->nmaster) < 2*lrest ? 1 : 0) - (2*c->bw), 0); + ly += HEIGHT(c) + ih; + } else { + resize(c, rx, ry, rw - (2*c->bw), (rh / rfacts) + ((i - 2*m->nmaster) < 2*rrest ? 1 : 0) - (2*c->bw), 0); + ry += HEIGHT(c) + ih; + } + } + } +} + +void +centeredfloatingmaster(Monitor *m) +{ + unsigned int i, n; + float mfacts, sfacts; + float mivf = 1.0; // master inner vertical gap factor + int oh, ov, ih, iv, mrest, srest; + int mx = 0, my = 0, mh = 0, mw = 0; + int sx = 0, sy = 0, sh = 0, sw = 0; + Client *c; + + getgaps(m, &oh, &ov, &ih, &iv, &n); + if (n == 0) + return; + + sx = mx = m->wx + ov; + sy = my = m->wy + oh; + sh = mh = m->wh - 2*oh; + mw = m->ww - 2*ov - iv*(n - 1); + sw = m->ww - 2*ov - iv*(n - m->nmaster - 1); + + if (m->nmaster && n > m->nmaster) { + mivf = 0.8; + /* go mfact box in the center if more than nmaster clients */ + if (m->ww > m->wh) { + mw = m->ww * m->mfact - iv*mivf*(MIN(n, m->nmaster) - 1); + mh = m->wh * 0.9; + } else { + mw = m->ww * 0.9 - iv*mivf*(MIN(n, m->nmaster) - 1); + mh = m->wh * m->mfact; + } + mx = m->wx + (m->ww - mw) / 2; + my = m->wy + (m->wh - mh - 2*oh) / 2; + + sx = m->wx + ov; + sy = m->wy + oh; + sh = m->wh - 2*oh; + } + + getfacts(m, mw, sw, &mfacts, &sfacts, &mrest, &srest); + + for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) + if (i < m->nmaster) { + /* nmaster clients are stacked horizontally, in the center of the screen */ + resize(c, mx, my, (mw / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0); + mx += WIDTH(c) + iv*mivf; + } else { + /* stack clients are stacked horizontally */ + resize(c, sx, sy, (sw / sfacts) + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), sh - (2*c->bw), 0); + sx += WIDTH(c) + iv; + } +} + +/* + * Deck layout + gaps + * https://dwm.suckless.org/patches/deck/ + */ +void +deck(Monitor *m) +{ + unsigned int i, n; + int oh, ov, ih, iv; + int mx = 0, my = 0, mh = 0, mw = 0; + int sx = 0, sy = 0, sh = 0, sw = 0; + float mfacts, sfacts; + int mrest, srest; + Client *c; + + getgaps(m, &oh, &ov, &ih, &iv, &n); + if (n == 0) + return; + + sx = mx = m->wx + ov; + sy = my = m->wy + oh; + sh = mh = m->wh - 2*oh - ih * (MIN(n, m->nmaster) - 1); + sw = mw = m->ww - 2*ov; + + if (m->nmaster && n > m->nmaster) { + sw = (mw - iv) * (1 - m->mfact); + mw = mw - iv - sw; + sx = mx + mw + iv; + sh = m->wh - 2*oh; + } + + getfacts(m, mh, sh, &mfacts, &sfacts, &mrest, &srest); + + if (n - m->nmaster > 0) /* override layout symbol */ + snprintf(m->ltsymbol, sizeof m->ltsymbol, "D %d", n - m->nmaster); + + for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) + if (i < m->nmaster) { + resize(c, mx, my, mw - (2*c->bw), (mh / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), 0); + my += HEIGHT(c) + ih; + } else { + resize(c, sx, sy, sw - (2*c->bw), sh - (2*c->bw), 0); + } +} + +/* + * Fibonacci layout + gaps + * https://dwm.suckless.org/patches/fibonacci/ + */ +void +fibonacci(Monitor *m, int s) +{ + unsigned int i, n; + int nx, ny, nw, nh; + int oh, ov, ih, iv; + int nv, hrest = 0, wrest = 0, r = 1; + Client *c; + + getgaps(m, &oh, &ov, &ih, &iv, &n); + if (n == 0) + return; + + nx = m->wx + ov; + ny = m->wy + oh; + nw = m->ww - 2*ov; + nh = m->wh - 2*oh; + + for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next)) { + if (r) { + if ((i % 2 && (nh - ih) / 2 <= (bh + 2*c->bw)) + || (!(i % 2) && (nw - iv) / 2 <= (bh + 2*c->bw))) { + r = 0; + } + if (r && i < n - 1) { + if (i % 2) { + nv = (nh - ih) / 2; + hrest = nh - 2*nv - ih; + nh = nv; + } else { + nv = (nw - iv) / 2; + wrest = nw - 2*nv - iv; + nw = nv; + } + + if ((i % 4) == 2 && !s) + nx += nw + iv; + else if ((i % 4) == 3 && !s) + ny += nh + ih; + } + + if ((i % 4) == 0) { + if (s) { + ny += nh + ih; + nh += hrest; + } + else { + nh -= hrest; + ny -= nh + ih; + } + } + else if ((i % 4) == 1) { + nx += nw + iv; + nw += wrest; + } + else if ((i % 4) == 2) { + ny += nh + ih; + nh += hrest; + if (i < n - 1) + nw += wrest; + } + else if ((i % 4) == 3) { + if (s) { + nx += nw + iv; + nw -= wrest; + } else { + nw -= wrest; + nx -= nw + iv; + nh += hrest; + } + } + if (i == 0) { + if (n != 1) { + nw = (m->ww - iv - 2*ov) - (m->ww - iv - 2*ov) * (1 - m->mfact); + wrest = 0; + } + ny = m->wy + oh; + } + else if (i == 1) + nw = m->ww - nw - iv - 2*ov; + i++; + } + + resize(c, nx, ny, nw - (2*c->bw), nh - (2*c->bw), False); + } +} + +void +dwindle(Monitor *m) +{ + fibonacci(m, 1); +} + +void +spiral(Monitor *m) +{ + fibonacci(m, 0); +} + +/* + * Gappless grid layout + gaps (ironically) + * https://dwm.suckless.org/patches/gaplessgrid/ + */ +void +gaplessgrid(Monitor *m) +{ + unsigned int i, n; + int x, y, cols, rows, ch, cw, cn, rn, rrest, crest; // counters + int oh, ov, ih, iv; + Client *c; + + getgaps(m, &oh, &ov, &ih, &iv, &n); + if (n == 0) + return; + + /* grid dimensions */ + for (cols = 0; cols <= n/2; cols++) + if (cols*cols >= n) + break; + if (n == 5) /* set layout against the general calculation: not 1:2:2, but 2:3 */ + cols = 2; + rows = n/cols; + cn = rn = 0; // reset column no, row no, client count + + ch = (m->wh - 2*oh - ih * (rows - 1)) / rows; + cw = (m->ww - 2*ov - iv * (cols - 1)) / cols; + rrest = (m->wh - 2*oh - ih * (rows - 1)) - ch * rows; + crest = (m->ww - 2*ov - iv * (cols - 1)) - cw * cols; + x = m->wx + ov; + y = m->wy + oh; + + for (i = 0, c = nexttiled(m->clients); c; i++, c = nexttiled(c->next)) { + if (i/rows + 1 > cols - n%cols) { + rows = n/cols + 1; + ch = (m->wh - 2*oh - ih * (rows - 1)) / rows; + rrest = (m->wh - 2*oh - ih * (rows - 1)) - ch * rows; + } + resize(c, + x, + y + rn*(ch + ih) + MIN(rn, rrest), + cw + (cn < crest ? 1 : 0) - 2*c->bw, + ch + (rn < rrest ? 1 : 0) - 2*c->bw, + 0); + rn++; + if (rn >= rows) { + rn = 0; + x += cw + ih + (cn < crest ? 1 : 0); + cn++; + } + } +} + +/* + * Gridmode layout + gaps + * https://dwm.suckless.org/patches/gridmode/ + */ +void +grid(Monitor *m) +{ + unsigned int i, n; + int cx, cy, cw, ch, cc, cr, chrest, cwrest, cols, rows; + int oh, ov, ih, iv; + Client *c; + + getgaps(m, &oh, &ov, &ih, &iv, &n); + + /* grid dimensions */ + for (rows = 0; rows <= n/2; rows++) + if (rows*rows >= n) + break; + cols = (rows && (rows - 1) * rows >= n) ? rows - 1 : rows; + + /* window geoms (cell height/width) */ + ch = (m->wh - 2*oh - ih * (rows - 1)) / (rows ? rows : 1); + cw = (m->ww - 2*ov - iv * (cols - 1)) / (cols ? cols : 1); + chrest = (m->wh - 2*oh - ih * (rows - 1)) - ch * rows; + cwrest = (m->ww - 2*ov - iv * (cols - 1)) - cw * cols; + for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { + cc = i / rows; + cr = i % rows; + cx = m->wx + ov + cc * (cw + iv) + MIN(cc, cwrest); + cy = m->wy + oh + cr * (ch + ih) + MIN(cr, chrest); + resize(c, cx, cy, cw + (cc < cwrest ? 1 : 0) - 2*c->bw, ch + (cr < chrest ? 1 : 0) - 2*c->bw, False); + } +} + +/* + * Horizontal grid layout + gaps + * https://dwm.suckless.org/patches/horizgrid/ + */ +void +horizgrid(Monitor *m) { + Client *c; + unsigned int n, i; + int oh, ov, ih, iv; + int mx = 0, my = 0, mh = 0, mw = 0; + int sx = 0, sy = 0, sh = 0, sw = 0; + int ntop, nbottom = 1; + float mfacts, sfacts; + int mrest, srest; + + /* Count windows */ + getgaps(m, &oh, &ov, &ih, &iv, &n); + if (n == 0) + return; + + if (n <= 2) + ntop = n; + else { + ntop = n / 2; + nbottom = n - ntop; + } + sx = mx = m->wx + ov; + sy = my = m->wy + oh; + sh = mh = m->wh - 2*oh; + sw = mw = m->ww - 2*ov; + + if (n > ntop) { + sh = (mh - ih) / 2; + mh = mh - ih - sh; + sy = my + mh + ih; + mw = m->ww - 2*ov - iv * (ntop - 1); + sw = m->ww - 2*ov - iv * (nbottom - 1); + } + + mfacts = ntop; + sfacts = nbottom; + mrest = mw - (mw / ntop) * ntop; + srest = sw - (sw / nbottom) * nbottom; + + for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) + if (i < ntop) { + resize(c, mx, my, (mw / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0); + mx += WIDTH(c) + iv; + } else { + resize(c, sx, sy, (sw / sfacts) + ((i - ntop) < srest ? 1 : 0) - (2*c->bw), sh - (2*c->bw), 0); + sx += WIDTH(c) + iv; + } +} + +/* + * nrowgrid layout + gaps + * https://dwm.suckless.org/patches/nrowgrid/ + */ +void +nrowgrid(Monitor *m) +{ + unsigned int n; + int ri = 0, ci = 0; /* counters */ + int oh, ov, ih, iv; /* vanitygap settings */ + unsigned int cx, cy, cw, ch; /* client geometry */ + unsigned int uw = 0, uh = 0, uc = 0; /* utilization trackers */ + unsigned int cols, rows = m->nmaster + 1; + Client *c; + + /* count clients */ + getgaps(m, &oh, &ov, &ih, &iv, &n); + + /* nothing to do here */ + if (n == 0) + return; + + /* force 2 clients to always split vertically */ + if (FORCE_VSPLIT && n == 2) + rows = 1; + + /* never allow empty rows */ + if (n < rows) + rows = n; + + /* define first row */ + cols = n / rows; + uc = cols; + cy = m->wy + oh; + ch = (m->wh - 2*oh - ih*(rows - 1)) / rows; + uh = ch; + + for (c = nexttiled(m->clients); c; c = nexttiled(c->next), ci++) { + if (ci == cols) { + uw = 0; + ci = 0; + ri++; + + /* next row */ + cols = (n - uc) / (rows - ri); + uc += cols; + cy = m->wy + oh + uh + ih; + uh += ch + ih; + } + + cx = m->wx + ov + uw; + cw = (m->ww - 2*ov - uw) / (cols - ci); + uw += cw + iv; + + resize(c, cx, cy, cw - (2*c->bw), ch - (2*c->bw), 0); + } +} + +/* + * Default tile layout + gaps + */ +static void +tile(Monitor *m) +{ + unsigned int i, n; + int oh, ov, ih, iv; + int mx = 0, my = 0, mh = 0, mw = 0; + int sx = 0, sy = 0, sh = 0, sw = 0; + float mfacts, sfacts; + int mrest, srest; + Client *c; + + getgaps(m, &oh, &ov, &ih, &iv, &n); + if (n == 0) + return; + + sx = mx = m->wx + ov; + sy = my = m->wy + oh; + mh = m->wh - 2*oh - ih * (MIN(n, m->nmaster) - 1); + sh = m->wh - 2*oh - ih * (n - m->nmaster - 1); + sw = mw = m->ww - 2*ov; + + if (m->nmaster && n > m->nmaster) { + sw = (mw - iv) * (1 - m->mfact); + mw = mw - iv - sw; + sx = mx + mw + iv; + } + + getfacts(m, mh, sh, &mfacts, &sfacts, &mrest, &srest); + + for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) + if (i < m->nmaster) { + resize(c, mx, my, mw - (2*c->bw), (mh / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), 0); + my += HEIGHT(c) + ih; + } else { + resize(c, sx, sy, sw - (2*c->bw), (sh / sfacts) + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), 0); + sy += HEIGHT(c) + ih; + } +} \ No newline at end of file diff --git a/fish/.config/fish/config.fish b/fish/.config/fish/config.fish new file mode 100755 index 0000000..48e18db --- /dev/null +++ b/fish/.config/fish/config.fish @@ -0,0 +1,16 @@ +#!/bin/fish +# Start X at login +if status is-login + if test -z "$DISPLAY" -a "$XDG_VTNR" = 1 + exec startx -- -keeptty + end +end +set -Ux HOME /home/fuzzy +set -Ux XDG_CONFIG_HOME $HOME/.config + +alias rm="rm -dr" +alias cp="cp -r" +alias exa="exa -aF -s type" +alias mkdir="mkdir -p" +alias hima="himalaya" +fish_add_path -g /bin /usr/bin /usr/local/bin /home/fuzzy/.cargo/bin /home/fuzzy/.local/bin diff --git a/fish/.config/fish/fish_variables b/fish/.config/fish/fish_variables new file mode 100644 index 0000000..2ceaf79 --- /dev/null +++ b/fish/.config/fish/fish_variables @@ -0,0 +1,47 @@ +# This file contains fish universal variable definitions. +# VERSION: 3.0 +SETUVAR --export EDITOR:nvim +SETUVAR --export HOME:/home/fuzzy +SETUVAR SHELL:/usr/bin/fish +SETUVAR --export XDG_CACHE_HOME:/home/fuzzy/\x2ecache +SETUVAR --export XDG_CONFIG_HOME:/home/fuzzy/\x2econfig +SETUVAR --export XDG_DATA_HOME:/home/fuzzy/\x2elocal/share +SETUVAR __fish_initialized:3100 +SETUVAR _fish_abbr_docker:sudo\x20docker +SETUVAR _fish_abbr_tra:transmission\x2dremote\x20\x2da +SETUVAR _fish_abbr_vpmi:sudo\x20vpm\x20install\x20\x2dy +SETUVAR _fish_abbr_vpmr:sudo\x20vpm\x20remove +SETUVAR _fish_abbr_vpms:sudo\x20vpm\x20search +SETUVAR _fish_abbr_vpmu:sudo\x20vpm\x20upgrade +SETUVAR _fish_abbr_vsv:sudo\x20vsv +SETUVAR _fish_abbr_xbpsi:sudo\x20xbps\x2dinstall +SETUVAR _fish_abbr_xbpsq:xbps\x2dquery\x20\x2dRs +SETUVAR _fish_abbr_xbpsr:sudo\x20xbps\x2dremove +SETUVAR fish_color_autosuggestion:969896 +SETUVAR fish_color_cancel:\x2dr +SETUVAR fish_color_command:8f6f8f +SETUVAR fish_color_comment:5f5f5f +SETUVAR fish_color_cwd:6688aa +SETUVAR fish_color_cwd_root:red +SETUVAR fish_color_end:d3d3d3 +SETUVAR fish_color_error:d3d3d3\x1e\x2d\x2dbackground\x3daa4450 +SETUVAR fish_color_escape:6688aa +SETUVAR fish_color_history_current:\x2d\x2dbold +SETUVAR fish_color_host:normal +SETUVAR fish_color_host_remote:yellow +SETUVAR fish_color_match:d3d3d3 +SETUVAR fish_color_normal:e3e1e4 +SETUVAR fish_color_operator:8f6f8f +SETUVAR fish_color_param:719611 +SETUVAR fish_color_quote:ff9800 +SETUVAR fish_color_redirection:8f6f8f +SETUVAR fish_color_search_match:\x2d\x2dbackground\x3d5f5f5f +SETUVAR fish_color_selection:white\x1e\x2d\x2dbold\x1e\x2d\x2dbackground\x3dbrblack +SETUVAR fish_color_status:red +SETUVAR fish_color_user:brgreen +SETUVAR fish_color_valid_path:\x2d\x2dunderline +SETUVAR fish_key_bindings:fish_default_key_bindings +SETUVAR fish_pager_color_completion:5f5f5f +SETUVAR fish_pager_color_description:5f5f5f +SETUVAR fish_pager_color_prefix:d3d3d3 +SETUVAR fish_pager_color_progress:d3d3d3 diff --git a/fish/.config/fish/functions/fish_greeting.fish b/fish/.config/fish/functions/fish_greeting.fish new file mode 100644 index 0000000..fcd6cdf --- /dev/null +++ b/fish/.config/fish/functions/fish_greeting.fish @@ -0,0 +1,3 @@ +function fish_greeting + echo 'HOW ARE YOU GENTLEMEN !!' +end diff --git a/fish/.config/fish/functions/fish_prompt.fish b/fish/.config/fish/functions/fish_prompt.fish new file mode 100644 index 0000000..8211cdd --- /dev/null +++ b/fish/.config/fish/functions/fish_prompt.fish @@ -0,0 +1,84 @@ +function fish_prompt --description 'Write out the prompt' + set -l last_pipestatus $pipestatus + + if not set -q __fish_git_prompt_show_informative_status + set -g __fish_git_prompt_show_informative_status 1 + end + if not set -q __fish_git_prompt_hide_untrackedfiles + set -g __fish_git_prompt_hide_untrackedfiles 1 + end + if not set -q __fish_git_prompt_color_branch + set -g __fish_git_prompt_color_branch magenta --bold + end + if not set -q __fish_git_prompt_showupstream + set -g __fish_git_prompt_showupstream "informative" + end + if not set -q __fish_git_prompt_char_upstream_ahead + set -g __fish_git_prompt_char_upstream_ahead "↑" + end + if not set -q __fish_git_prompt_char_upstream_behind + set -g __fish_git_prompt_char_upstream_behind "↓" + end + if not set -q __fish_git_prompt_char_upstream_prefix + set -g __fish_git_prompt_char_upstream_prefix "" + end + if not set -q __fish_git_prompt_char_stagedstate + set -g __fish_git_prompt_char_stagedstate "●" + end + if not set -q __fish_git_prompt_char_dirtystate + set -g __fish_git_prompt_char_dirtystate "✚" + end + if not set -q __fish_git_prompt_char_untrackedfiles + set -g __fish_git_prompt_char_untrackedfiles "…" + end + if not set -q __fish_git_prompt_char_invalidstate + set -g __fish_git_prompt_char_invalidstate "✖" + end + if not set -q __fish_git_prompt_char_cleanstate + set -g __fish_git_prompt_char_cleanstate "✔" + end + if not set -q __fish_git_prompt_color_dirtystate + set -g __fish_git_prompt_color_dirtystate blue + end + if not set -q __fish_git_prompt_color_stagedstate + set -g __fish_git_prompt_color_stagedstate yellow + end + if not set -q __fish_git_prompt_color_invalidstate + set -g __fish_git_prompt_color_invalidstate red + end + if not set -q __fish_git_prompt_color_untrackedfiles + set -g __fish_git_prompt_color_untrackedfiles $fish_color_normal + end + if not set -q __fish_git_prompt_color_cleanstate + set -g __fish_git_prompt_color_cleanstate green --bold + end + + set -l color_cwd + set -l prefix + set -l suffix + switch "$USER" + case root toor + if set -q fish_color_cwd_root + set color_cwd $fish_color_cwd_root + else + set color_cwd $fish_color_cwd + end + set suffix '#' + case '*' + set color_cwd $fish_color_cwd + set suffix '❱' + end + + # PWD + set_color $color_cwd + echo -n (prompt_pwd) + set_color normal + + printf '%s ' (fish_vcs_prompt) + + set -l pipestatus_string (__fish_print_pipestatus "[" "] " "|" (set_color $fish_color_status) (set_color --bold $fish_color_status) $last_pipestatus) + echo -n $pipestatus_string + set_color normal + + echo -n "$suffix " +end diff --git a/flexget/.flexget/config.yml b/flexget/.flexget/config.yml new file mode 100755 index 0000000..d9fa455 --- /dev/null +++ b/flexget/.flexget/config.yml @@ -0,0 +1,85 @@ +templates: + anime: + rss: https://subsplease.org/rss/?r=1080 + exists_series: /mnt/EntertainmentDrive/anime/{{series_name}} + series: + settings: + seriesgroup: + tracking: no + identified_by: sequence + season_packs: yes + set: + path: /mnt/EntertainmentDrive/anime/{{series_name}} + seriesgroup: + - Adachi to Shimamura + - Beastars + - Blue Period + - Blue Reflection Ray + - Cheat Kusushi no Slow Life + - Deji Meets Girl + - Ganbare Douki-chan + - Gekidol + - Getsuyoubi no Tawawa + - Godzilla Singular Point + - Gunma-chan + - Gyakuten Sekai no Denchi Shoujo + - Hanyou no Yashahime + - Boku no Hero Academia + - Hige wo Soru + - Horimiya + - Idoly Pride + - Jahy-sama wa Kujikenai! + - Jaku-Chara Tomozaki-kun + - Kageki Shoujo!! + - Kanojo mo Kanojo + - Kimetsu no Yaiba + - Koi to Yobu ni wa Kimochi Warui + - Komi-san wa, Comyushou desu + - Kuma Kuma Kuma Bear + - Kyoukai Senki + - Kyuuketsuki Sugu Shinu + - Love Live! Superstar!! + - Mahouka Koukou no Yuutousei + - Majo no Tabitabi + - Megaton-kyuu Musashi + - Mieruko-chan + - Puraore! Pride of Orange + - Sakugan + - Sayonara Watashi no Cramer + - Selection Project + - Senpai ga Uzai Kouhai no Hanashi + - Shaman King + - Shin no Nakama + - Shiroi Suna no Aquatope + - SSSS.Dynazenon + - Subarashiki Kono Sekai + - Super Cub + - Taishou Otome Otogibanashi + - Takt Op. Destiny + - Uma Musume + - Vivy - Fluorite Eye's Song + - Yakunara Mug Cup + - Yuru Camp + transmission: yes + +tasks: + + judas: + rss: https://nyaa.si/?page=rss&u=Judas + template: anime + + ASW: + rss: https://nyaa.si/?page=rss&u=AkihitoSubsWeeklies + template: anime + + subsplease: + rss: https://subsplease.org/rss/?r=1080 + template: anime + + tenrai: + rss: https://nyaa.si/?page=rss&u=Tenrai_Sensei + template: anime + + moyaisubs: + rss: https://nyaa.si/?page=rss&u=MoyaiSubs + template: anime diff --git a/himalaya/.config/himalaya/config.toml b/himalaya/.config/himalaya/config.toml new file mode 100644 index 0000000..fe3a2c9 --- /dev/null +++ b/himalaya/.config/himalaya/config.toml @@ -0,0 +1,26 @@ +# ~/.config/himalaya/config.toml +name = "Jeremy Lavitt" +downloads-dir = "~/Downloads" +signature = "" +default-page-size = 50 +watch-cmds = ["mbsync -a"] + +[outlook] +email = "JeremyLavitt@outlook.com" +default = true +default-page-size = 25 +signature = """ +Regards, +Jeremy Lavitt +""" + +imap-host = "outlook.office365.com" +imap-port = 993 +imap-login = "jeremylavitt@outlook.com" +imap-passwd-cmd = "pass show outlookhima" + +smtp-host = "smtp.office365.com" +smtp-port = 587 +smtp-starttls = true +smtp-login = "jeremylavitt@outlook.com" +smtp-passwd-cmd = "pass show outlookhima" diff --git a/mpv/.config/mpv/mpv.conf b/mpv/.config/mpv/mpv.conf new file mode 100644 index 0000000..e529199 --- /dev/null +++ b/mpv/.config/mpv/mpv.conf @@ -0,0 +1,9 @@ +profile=gpu-hq +alang = 'jpn,jp,eng,en' +slang = 'eng,en,enUS' # enUS for Crunchyroll. +screenshot-format=png +screenshot-high-bit-depth=yes +screenshot-png-compression=7 # Setting too high may lag the PC on weaker systems. Recommend 3 (weak systems) or 7. +screenshot-directory="~/Pictures/mpv-screenshot" +volume=100 # Set volume to 100% on startup. +sub-auto=fuzzy diff --git a/neomutt/.config/neomutt/neomuttrc b/neomutt/.config/neomutt/neomuttrc new file mode 100644 index 0000000..40b6bf9 --- /dev/null +++ b/neomutt/.config/neomutt/neomuttrc @@ -0,0 +1,8 @@ +source "gpg2 --decrypt ~/outlookpass.gpg |" +source "~/.config/neomutt/outlook.muttrc" +source "~/.config/neomutt/colors.muttrc" +source "~/.config/neomutt/sidebar.muttrc" +souce "~/.config/neomutt/neomuttrc2" +auto_view text/html +alternative_order text/plain text/enriched text/html text + diff --git a/nvim/.config/nvim/init.vim b/nvim/.config/nvim/init.vim new file mode 100644 index 0000000..c30137e --- /dev/null +++ b/nvim/.config/nvim/init.vim @@ -0,0 +1,228 @@ +filetype off + +set rtp+=~/.vim/bundle/Vundle.vim +call vundle#begin() + +Plugin 'VundleVim/Vundle.vim' +Plugin 'mg979/vim-visual-multi' +Plugin 'terrortylor/nvim-comment' +Plugin 'windwp/nvim-autopairs' +Plugin 'Pocco81/AutoSave.nvim' +Plugin 'karb94/neoscroll.nvim' +Plugin 'nvim-treesitter/nvim-treesitter' +Plugin 'itchyny/lightline.vim' +Plugin 'ryanoasis/vim-devicons' +Plugin 'norcalli/nvim-colorizer.lua' +Plugin 'lukas-reineke/indent-blankline.nvim' +Plugin 'vim-syntastic/syntastic' +Plugin 'neovim/nvim-lspconfig' +Plugin 'neoclide/coc.nvim', {'branch': 'release'} + +Plugin 'sainnhe/sonokai' +Plugin 'chasinglogic/modus-themes-vim' +Plugin 'joshdick/onedark.vim' +Plugin 'https://gitlab.com/yorickpeterse/happy_hacking.vim' +Plugin 'sickill/vim-monokai' +Plugin 'sonph/onehalf' +Plugin 'jnurmine/Zenburn' +Plugin 'drewtempelmeyer/palenight.vim' +Plugin 'morhetz/gruvbox' +Plugin 'altercation/vim-colors-solarized' +Plugin 'wadackel/vim-dogrun' +Plugin 'tyrannicaltoucan/vim-quantum' +Plugin 'bluz71/vim-moonfly-colors' +Plugin 'tyrannicaltoucan/vim-deep-space' +Plugin 'xero/sourcerer.vim' +Plugin 'arzg/vim-corvine' +Plugin 'tssm/fairyfloss.vim' + +call vundle#end() +filetype plugin indent on + +set termguicolors +lua require('neoscroll').setup() +lua require('nvim-autopairs').setup() +lua require('nvim_comment').setup() +lua require('colorizer').setup() + +""" Main Config +colorscheme sourcerer +set tabstop=8 softtabstop=8 noexpandtab smarttab autoindent +set incsearch ignorecase smartcase hlsearch +set ruler laststatus=2 showcmd showmode +set wrap breakindent +set encoding=utf-8 +set textwidth=0 +set hidden +set number relativenumber +set title +set cursorline +"hi CursorLine cterm=bold +"hi CursorLineNr term=bold cterm=bold +"hi LineNr +"hi Whitespace ctermbg=red +match Whitespace /\s\+$/ + +set statusline+=%#warningmsg# +set statusline+=%{SyntasticStatuslineFlag()} +set statusline+=%* + +let g:syntastic_always_populate_loc_list = 1 +let g:syntastic_auto_loc_list = 1 +let g:syntastic_check_on_open = 1 +let g:syntastic_check_on_wq = 0 + +" Give more space for displaying messages. +set cmdheight=2 + +" Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable +" delays and poor user experience. +set updatetime=300 + +" Don't pass messages to |ins-completion-menu|. +set shortmess+=c + +" Always show the signcolumn, otherwise it would shift the text each time +" diagnostics appear/become resolved. +if has("nvim-0.5.0") || has("patch-8.1.1564") + " Recently vim can merge signcolumn and number column into one + set signcolumn=number +else + set signcolumn=yes +endif + +" Use tab for trigger completion with characters ahead and navigate. +" NOTE: Use command ':verbose imap ' to make sure tab is not mapped by +" other plugin before putting this into your config. +inoremap + \ pumvisible() ? "\" : + \ check_back_space() ? "\" : + \ coc#refresh() +inoremap pumvisible() ? "\" : "\" + +function! s:check_back_space() abort + let col = col('.') - 1 + return !col || getline('.')[col - 1] =~# '\s' +endfunction + +" Use to trigger completion. +if has('nvim') + inoremap coc#refresh() +else + inoremap coc#refresh( +endif + +" Make auto-select the first completion item and notify coc.nvim to +" format on enter, could be remapped by other vim plugin +inoremap pumvisible() ? coc#_select_confirm() + \: "\u\\=coc#on_enter()\" + +" Use `[g` and `]g` to navigate diagnostics +" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list. +nmap [g (coc-diagnostic-prev) +nmap ]g (coc-diagnostic-next) + +" GoTo code navigation. +nmap gd (coc-definition) +nmap gy (coc-type-definition) +nmap gi (coc-implementation) +nmap gr (coc-references) + +" Use K to show documentation in preview window. +nnoremap K :call show_documentation() + +function! s:show_documentation() + if (index(['vim','help'], &filetype) >= 0) + execute 'h '.expand('') + elseif (coc#rpc#ready()) + call CocActionAsync('doHover') + else + execute '!' . &keywordprg . " " . expand('') + endif +endfunction + +" Highlight the symbol and its references when holding the cursor. +autocmd CursorHold * silent call CocActionAsync('highlight') + +" Symbol renaming. +nmap rn (coc-rename) + +" Formatting selected code. +xmap f (coc-format-selected) +nmap f (coc-format-selected) + +augroup mygroup + autocmd! + " Setup formatexpr specified filetype(s). + autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') + " Update signature help on jump placeholder. + autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') +augroup end + +" Applying codeAction to the selected region. +" Example: `aap` for current paragraph +xmap a (coc-codeaction-selected) +nmap a (coc-codeaction-selected) + +" Remap keys for applying codeAction to the current buffer. +nmap ac (coc-codeaction) +" Apply AutoFix to problem on the current line. +nmap qf (coc-fix-current) + +" Map function and class text objects +" NOTE: Requires 'textDocument.documentSymbol' support from the language server. +xmap if (coc-funcobj-i) +omap if (coc-funcobj-i) +xmap af (coc-funcobj-a) +omap af (coc-funcobj-a) +xmap ic (coc-classobj-i) +omap ic (coc-classobj-i) +xmap ac (coc-classobj-a) +omap ac (coc-classobj-a) + +" Remap and for scroll float windows/popups. +if has('nvim-0.4.0') || has('patch-8.2.0750') + nnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" + nnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" + inoremap coc#float#has_scroll() ? "\=coc#float#scroll(1)\" : "\" + inoremap coc#float#has_scroll() ? "\=coc#float#scroll0)\" : "\" + vnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" + vnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" +endif + +" Use CTRL-S for selections ranges. +" Requires 'textDocument/selectionRange' support of language server. +nmap (coc-range-select) +xmap (coc-range-select) + +" Add `:Format` command to format current buffer. +command! -nargs=0 Format :call CocAction('format') + +" Add `:Fold` command to fold current buffer. +command! -nargs=? Fold :call CocAction('fold', ) + +" Add `:OR` command for organize imports of the current buffer. +command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport') + +" Add (Neo)Vim's native statusline support. +" NOTE: Please see `:h coc-status` for integrations with external plugins that +" provide custom statusline: lightline.vim, vim-airline. +set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')} + +" Mappings for CoCList +" Show all diagnostics. +nnoremap a :CocList diagnostics +" Manage extensions. +nnoremap e :CocList extensions +" Show commands. +nnoremap c :CocList commands +" Find symbol of current document. +nnoremap o :CocList outline +" Search workspace symbols. +nnoremap s :CocList -I symbols +" Do default action for next item. +nnoremap j :CocNext +" Do default action for previous item. +nnoremap k :CocPrev +" Resume latest coc list. +nnoremap p :CocListResume( diff --git a/picom/.config/picom.conf b/picom/.config/picom.conf new file mode 100644 index 0000000..7fbd7eb --- /dev/null +++ b/picom/.config/picom.conf @@ -0,0 +1,29 @@ +vsync = true; +blur: { + method = "dual_kawase"; + strength = 4.0; + deviation = 1.0; + kernel = "11x11gaussian"; +} + +blur-background = false; +blur-background-frame = true; +blur-background-fixed = true; +# blur-kern = "3x3box"; + +corner-radius = 4.0; +rounded-corners-exclude = [ + "class_g = 'i3-frame'", + "class_g = 'Polybar'", + "class_g = 'MPV'", + "_NET_WM_STATE_FULLSCREEN:c", +] +blur-background-exclude = [ + "class_g = 'slop'", + "class_g = 'Firefox' && argb", + "_GTK_FRAME_EXTENTS@:c", +]; +opacity-rule = [ + "90:class_g = 'dmenu'", + "85:class_g = 'xmenu'", +]; diff --git a/polybar/.config/polybar/fuzzy.conf b/polybar/.config/polybar/fuzzy.conf new file mode 100644 index 0000000..eea9297 --- /dev/null +++ b/polybar/.config/polybar/fuzzy.conf @@ -0,0 +1,163 @@ +;===================================================================== +; +; +; ███████╗██╗ ██╗███████╗███████╗██╗ ██╗██████╗ █████╗ ██████╗ +; ██╔════╝██║ ██║╚══███╔╝╚══███╔╝╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗ +; █████╗ ██║ ██║ ███╔╝ ███╔╝ ╚████╔╝ ██████╔╝███████║██████╔╝ +; ██╔══╝ ██║ ██║ ███╔╝ ███╔╝ ╚██╔╝ ██╔══██╗██╔══██║██╔══██╗ +; ██║ ╚██████╔╝███████╗███████╗ ██║ ██████╔╝██║ ██║██║ ██║ +; ╚═╝ ╚═════╝ ╚══════╝╚══════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ +; +; +; To learn more about how to configure Polybar +; go to https://github.com/jaagr/polybar +; +; The README contains alot of information +; +;=================================================================== + +[colors] +background = #E61a181a +background-alt = #E6212121 +foreground = #dfdfdf +foreground-alt = #a5a5a5 + +[bar/fuzzybar] +monitor = DP-2 + +width = 100% +height = 30 + +fixed-center = true +bottom = false + +background = ${colors.background} +foreground = ${colors.foreground} + +border-size = 0 +border-color = #09000000 + +padding-left = 2 +padding-right = 2 + +module-margin-left = 1 +module-margin-right = 1 + +font-0 = SF Pro Display:weight=SemiBold:pixelsize=12.5;3 +font-1 = DejaVuSansMono Nerd Font:pixelsize=13;3 +;https://dejavu-fonts.github.io/ +;https://www.nerdfonts.com/font-downloads +font-2 = forkawesome:pixelsize=13;3 +;https://forkaweso.me/Fork-Awesome/ +font-3 = Source Han Sans JP VF:pixelsize=13;3 + +modules-left = title +modules-center = swatch +modules-right = network soundSwitch soundIcon pulseaudio newpower + +tray-position = right +tray-padding = 2 + +[module/datetime] +type=internal/date +interval = 5 + +date = %a %b %d + +time = %l:%M%P + +label = %date% %time% + +;click-left = ~/Documents/scripts/dzencal.sh +click-left = dcal + +[module/swatch] +type=custom/script +exec = bash ~/Documents/scripts/bartime.sh +tail = true +format =

+

Jeremy's Homepage :)

+
+ + +
+
+ +
+ + diff --git a/startpage/Documents/startpage/koguma.png b/startpage/Documents/startpage/koguma.png new file mode 100644 index 0000000000000000000000000000000000000000..9d6d2bd2b9d00af9f6b3c548140a0a237ba56d1d GIT binary patch literal 863787 zcmV)EK)}C=P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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

DshADA3Ow74Yms%lP^eNr!8 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

|vfo!c=_WIK6)ihAL%%U^o zcMz6iG(e2CmsB;)4Of>}H)l6T$4AkF1N4mS!tcl_s;tQ{tK1kEf(8~8_TT^EB{rB! zRg+CZ6)`MFmhx%j4g`QeqgyYVDRoRF*%-$eX_f~KwY$l7xzr35h$0|U#1VQ-Bgn9( zFzsSi`iSs>sBI8f{xv+Kd7-PEtg8`v7&-2I5OnB(3n>`KD@EAo(8rkiFygQ5$d}lV z+LFM;ZPLl94X8$*ZxfEzGY6Sr#4dvRM{@pT=0a_Vo>h=e3{F2BG#&M{xV50xyhs^U zqb{Y9E^vO-!D@uaQK<@Lpv1D8sLmd{wPA$5kUBggfFyr*kO^bVIUvor*Hl1@k~ceO z6AuQ*h#+jMldz4tHnp)_7{yb_?ppIaOVdg56{;{Y)g9(hTx^{`%K41FE`yH(lr}(U z;Dfc16GW;Q5KFzUmI(Ze?sRE)u0}jS?Ah-vuUi~0#Br9$j`+7~rc{U>nqrjNJQIC6 zz)%+ivVk;@*N_rD5^LfiYZvV}0}#@c40Khz@Y_`eE3H(}6oQ}Lod990xg>sPD?*A{ zNHJqvE^dP~fm`?A%^`jsC$>podi&uB%X?bmcg_|Rzv+Xz8 zv=nJky=~;(?agYn+HAKrh!(_pv%1^I)z#(pXzQM$vQQLF0mbI-d5|}T6DApi6qw7X zlCWltqG5GLbsCzeQeA(Y7!=m9vu5C|E{j+w5GbC?B8LCu0#7X3&H>hBh`$)Qz3SNkKvkg0GOMmL z(9B>FDe8zb=)`>xXy%pmY|-0T&9kvXvsAHS13QO&CCAK3rpZ@hF~NXSmsTDut`<1I zK}44H)2+tf6-G;bn)L%@h!hs+6gQ zCmsH6_>018wY6akuUVSATdO}`b9hz*F_{*AcXRvV<@tWU&&UiXm9HMA)#-~Hf&?|k@uvrR^`T7WEbdP+Art?o2wk*N?lRmlx21BI7(btHov zVsyvi;YH02WRgSSo@Ep`-~~>o#I&nduU?-&edE#D1ka2RdRcc!GVuZ%$CW4fjxiLW z?%G)k+A>#F_)4u9W{F0$IrMIo&om=Yb8&3NIi{t&TyG*+tcfd7=Ti}=WL~zc));Ve z^|T`vE<<-QM2r_xsIev!CbQqj>|+Bi!)l;lp}3fCc#x zu?|C{cVOc{O=d=B_UIRvuOqs!>iVOjEUR~_`G9hLp!Wj|VWkkyvGqt{8^X0zp^j=1 zX2JPD#-mbohyqeXvC)xG-E;86xZO~ddZxBnjc!V<*HE!Cxv?)|NokY~aRjbL;go1< zcS;c~nVH!$B>4a$jsLiwc0JCjbYjda)PJfg*SXbBD2e{6tb}V?%z_%nRNp_UsKB^5F~YbJ16Tw@vsgG4yX>#rD-luXvC8_2b4X+ec9{nEImoRvx>%Ed8=-3uP& zwO_v0AVhFrJ%F4nn3^ zRha~wg~p{s>HN*fhgeOm?o}Ns74ZYo8{bD&Qq3_qKa+V>sLQ3rrw(FV?rPbxu1OfT zOjw!+FPp`%5U2@C>V6|LSZvw�(G|bL7PI*utlF+J@*sSEHivH@0ZV5J}8D;db6j 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

(YV2~Xz*|(#L@b>1{Nc5wYjHJUfnAfbRUl1m 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�KFq$PD3wx$RL>j*WalXeN$t-*udSvO=ABep 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

@kqX7bK9XxLo}-r%2T1zflzn9b>M_f{mZG5T*F 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

UM!Z4r-fFg+;e#Y*$d_rbnXrliH^g+QaD$ zv*xNxORfx_H1kkxZ_`AcXJdW`U!1ev3^{+iY99KxXbdxBhM5lbC=ht+I3HUy3m69T zaAV$_SCzYSaE59rqAXsH6_o?oi6Dy=tb!z6z}!4)@nY_`GnNuK#Ildt1M66JL`CJW zje_CAu=GU5lG%DoMlU!E|DQ@@b|aJ!>;0FN$j4W0i%sFWq>j zRNF!dtOjlNR`%7ef9?Lmd)SACA`&^LL=ETpARRoHtjukUYKp7mIh-a7pb2J_Ix&5) z3CB%Evb5P!jaS!uWvD1i4i&7HKd6(evyLB4Hl1UxHBt*L1aAzx)%YDkf+hq~D(EV= z^gFnB2Xj_gDSNBn7D4wfDk$<`pXuI}IYTj`(ZOo(1AA;C%g*4=Fk2nrWsWd+M3%wK zi*sYM*P-G|g`?>PR8q4^#4^hwHbAtuXP*;5@n$Zmq07c5%sNv@c0aL*iB$T4LU zEPk?z@wSu>4&DOADawL8EoYj{tObzHNYD=CDj2wXTDk?puql3%{N-o3O^JFC?w42h zE$DU&4tw>6T#&owau88btIukmI9(R77Y8QP7`1J?&Or2GsNDVufAjxSR2^B8>Ua~t zswljof-(A5vP6r34G}Ky8HeGPn?+?_zj*fK+0&OVo?l;PoxQkh96S$e{D-|=MkHeC|eZs6-nch$FR9WMP)-g<&55Ei?L4b4=GWRjcef{2F{^g(jr$0qu zaFAve`1%yMpgDt8S+!01u}g@RCiPJVJ%N+S90RauiP6sr2!N1JSloFPcBRI;SQmse{9s)I*fwjR90SE-qHSlSC@< zyju8L*ta2PYgI=;oLQ5*_kNk*o=!K{H*TS*_pT!0SsIeg-#*lA7*3}>_v9VIsqmS3 zT-PO5qo#}Jb(IDMxf9AN>Jn=zoz*N=rCYh5J>Na(#f{;OaA;P$ZgNInHrI?QO`&eV zSd~@ybU^70(ix+%l*I$9DKa!MCiuzwkXqN(G|iEpFBHE6KUW}Zot52Rs;9IgX1Yd0 z(&CBJ1kxGFnF(XI%-zVzDNITlx^sSccV!hCC|L1} z$XOZE+H}`zr^&{w9y!-%qg*#um>6M0g6D>zZel{^GQlJ!aCze)v%waypKE}3q1=&C7N6wX^IYCur7`a!$JX#K{ z2d&&UeOA{zOCCFQmpCdIPN&Nzb%@O% z>oUgh)xY(fZ-4yBM~A~Y&?q_h7m%pogyA$?*8wC2)1m23;hE#pPd=%va4W;GVaV0u!M%saSQmJi@0Gvy zjbDG`^*6^zk1$_2lOP3d+!4f6M3JKxhh>&~{KdDw_2EY!z4rR+7l-53)#YK0k3ahG z$!AYK{_N9t-+TA*gNOg%@BjV7;{W6S`2YUF4}Nr54-&c7Oqa<58+9w=aP86PX7RaB zS8ZRhqjZ?et*?Ni1~sZIowbPz9cc=~yz?3Q0K=Ri#>Al3!K-<&;xJEbKu4&FXO;6W^(u)`AoG8pN#=yr=a0_218b9F0cvJtDbEER8PYadrmW| z7n>)JGV$;VmPn3>ID{|ZYs3;Bi?6FMi>-k*$^sT}%kW&?m*7Y>k9A#^SfV0qabMk! zhvm2~m&fJmuw1Nhd5o*$ayZ1r8i&Q#LmUFf7)xL=tf&L9n0af=%+fWyt30>&-hTJ? z#mQ_LqN92fXj`!^fSy5}h1=GeAc6YsW;h<#R~|h&#$paOW@d1Y=+sF&o9L`ZA5A*I z9Tq*fquDT%ZpQjNR(+$x$V{%qDLY3gYOxx3EikNunurqXsX|4TER7vQaZFJU9btTV z_KpyS%a@&{3Ose2WHq=nq0Fct(uRTXLPGsr=GaQ2(Z~Zn%x1)(54m{=-4(m zM|L9(9)5Lo6~63b^APRO$k9&N*%aHXyBm6N`sb1K+GXXopNP$6o0(ia|E!y!j=Zs* z29>H~)A-90GaH~GhZJ6jh*;MpPff)DiHvaAa@tNWw*7E8F3Ymf!{9BUp**E3M`opY zV;)+YIgM{xIMP$~Jb~)MQrRA@X;SMbK|)&6%L+r$X`l!Vt;a+nhhZVuW(ulELqM6_ z;+QlNzUNbSjoKroAbk4#{`)52R10?%9Vj4k>{~2;I-P#+-~anx{nc;We{gT?smo7$5GdqX@F2Yd4-$Sr{`2|$0x(3<#!$Wg^sZGji$XOphY^*_8uuUGk97re z?KoGI*mkLp;i?{E7!D0Ti*pYN)>;p&jbcK8v^-?2N;aMm$K&zki81pFS|DrOGLNGegz7uFO7COpBnF>;|YiEub4@uy2<|%}S30 zu(O^qXR1o}8HLg;G}6Uv&8#8uW`WSc1ReM(AqpFSL~DloR;%`f**rxItx>dg76FD1 zhV83tZVVPtP|g#N@CoRS-qMqC71txB3oAdHr|?|WXbO;@Gtc3|Em4`Uo0S*2rHL|X zZ&I5hC45!WP4fh*fJ6`8WT|e@${PEy36{@XZ+-Wgq0;=mBg;H|W+j^9dQvg0)icPk zolY-bUSAw9oTJMGhdSK0v5#$dxLiJzMj}fcv{_4uV)0^0Yn&gU5Cto2V?2NU+<`H6 zf}Xi&Wv1C*e*ZsjBQHE^?3tAvet+jSX1$Vm4*e%@hwbKc@8WoMd92*RIXZ?z&~#vG z5jCEEN2blD*3YUnt{MWtYzC@>JZ4phD%iH?&CRVZF@56z+~eNWr8~mobaT3Qb@glC z_!S^sJY3DLx?x7%P3%v&!A7P5z8sG4y!-a|zWbdofBDPXKFs{tv*)MV>tFmUf90?J z@~@QFjy%{Q4$Ck6;xGKq|MUO)d%ypC|LDvAD17bx4^s?-LsRVeSg7TZB@WZ9$9y{=ikTC3;1CSkLxz-l6T=E)6hgq~KW%Y=B1Rapfz z<%*h5nWYe{{a6~CFInEv2UT5f!)oCuShGNemvnDtLHfb1;9iK}U=t3o%gANyNcTOl z)TmLFo`o^S!fvX{vzVh8i#_}F^Pj%`lhbL-%B;O8YOW0h6GbBd#H@4pz*7z(J3~px z0xqxaJ$m@Cp)PC9b~dvZMc?rG3L{;FO6$VJrQ;DGmDEK}HdPlS5B#jw^2|6oE;r() zb3Q^M2X{0k3ZJ7v;BGmk&g0mR(FOhV2lUS17#nyutmp9x^KR!qXO9+W)V_4%bxCqZ zDniXFdN78`TUCl0HqAAHTiYTEi$n-!Oppe^*i0+Np=B%Uy)@XQl@ZgXNqW7SAj+&D zTHNY)0}Aq<>VeZp(y)x+2~-(FiBb%>-q+yxAQ)vUWF*5dH0T_h^~Z~?m;hY4b1qX! z^~<+I`EQ+ZGwFWiMQe4;REu|dvp3Am1bP)JbaI6*BXh&WA;P<26{}20FO!oYnrp4@ zLMUKp&Zjz!!BI6%`$)zIE6Ok%a5$5QfZJ5Scbi_>A$r-DGo}~8x&#)GVD3x!WhvX;8FFD&gb8Pprl6Qh&98wxNI~W2nVN=l!6j_ZDqTlW5MW zb$X~C8!#n!f(T0KdTqgPX(@4&iQZJhe=4ca2KF=Fb*DbK(>Ge{^3XnH>uLaBV`m zJ%+;?$3&rM4;!Pn{?M8?o2Ha0jxJO=-5Odo=F83P_3i28(-l%Mi{sVhVLc4M7Ti9+ z`QjJ8_~u)0olYmGQic_Ib3oMqN_94d7N?=Ia*RLwvp=h<2M->MJ%9N2kKg&p+Yj#D z|E<6Mx7T$m}>2{`znH#@j!AZ{NmxdE7hwL|?)JmF{Pb4`K*Cbus|$ zW8^mJHmhXbfE6sVi3oz8W~GpWuCixi*;|_v;Tj8*S+t8z2Q%DlfeoT9tQ*ndE}K8R z-CfzRhWQzr(R^g1*FUMtXq=%xftoR50W>9X&(hAuF&HolO*>Q*q9f^?R$F(<0rdPE z9z$mE48vm1N?iFE+z5q4xPpRcjtDcjS9mRMjtqBm3(jSA8G>BpF{`y2iL78{Iu_rC zc?PmFMy78gSx(f@WT*j0*5!g9fAH=*Z~u4!c^I+bI%L7 zfA8v*S0B^Q?cl(dezHozsNTxw0tTFFcRc_AfB;EEK~$A)?Di;E80}KBK5A5fOM%q+ zn)Crm9;f{?{fvzqNX@|ROR7Y24_PXTy9Bh%uAPkYYCCtXscEGzp(@9@(>epZx)2j> zXwhq%F@9)$YxVJh*`%uox4uQRC3vXHx!ROtxnZfSQMtIvMV@6r2v6)DW4&3-1v(OE zRGEb%OE!ANfV8ML`pWA|l(I{2Y1G7->yS=$SUS7pv$s9GvdM3TB(`}MfRk^H(v{G@QOO}I( z&I@td$HnDw&Uo!JxOYug;v+MwmWaOTTVx0JGE=m5c>DD3FYD5Hieio> zaPQ8lJBuoZag*L@B<|qd>WR9u6_~-B3(ff^3Kp%k?v{qH)+nws?O-$&hQ>3__=i|} z%w`62R0jNx)}Zd365tLo#f zZta$8N~}cN*Nh&iHc)meigWd@(?6S#>%{@M3uWlr)+e1sJkPvpemyf(aQF{AVljnQ zcY{}$hZl%}O3YugYXYPsNLTkF$guR+I0PIDnALV4xo@Y_@puGKl1HivHi~^R3sGkK zz6B6wyW;CO&5Jc%j_u?yj1fIw*gW9=hu{3>vzOPGm-kp%@^+_Y6Vn@{FSnGsgyO7I z8+mnc`O0grHQeVex>{ek>*?8yXP;yMJTyAVn`)chC!V|@%|Wct1-82Z&!0URV?Q1a zY|nTv94{|@Ik<;A_Wkyk{^~DYT;3b|=B|(fqT0QZRrnMJ0Jo+3WQo9&&p!Y7!%ts% z^|i5|82Wg1d2u{meD}NGGq>a6aJ*Q*{hhx|*jK*t^_$yU=Y%h%DKwjF>_+>ayTj*~ zZzA41vzi<7PF;%zfw{1CXL^^Yy>qffDntW171xXwMOg^6{pRcz7{U4;_C*C8g&uTS zD;QbcYGI?S-SvunwvA^jiehi$z-?&_TP3MFCUwzMV zTK9o{z}?bg?8S)y=@{l&7T7=e=%>$~KAAFsBKwR?CQIAWG?pnjy%vI5Zf?@v+W;a0 zSdYi!7r*q@#o<6aC6TZ+Tbau2jK()hwm3PeGsG$04%lAgMO1Nj?dcMw8EFZ2u9DhF zu&=C$>iB)}v4zyII9@VU^H}avzoidz88nw$)}DuE$mK9^cCH}<5b(Y8=WMQ|-e(*~ z|L1dAGL-QAr&EyPRYj5LxlK6hqsy}B1mX5#8ddUS*IxBeBeClu^`B|ntt$+EudI1n zwU4n>>}Y$JQOAJEcj_@0G_F~bC!(9=B#9zx5C5R5G_ctUReRQ`tVE8=${aZu&wQuZ zqBX1vnHoC4cZnXt=+cyT;m|HM9boA32@a`Y#Ftue^oDy-oz8J-1zg>`|KPy`#-due zS@iYjeT%!+Bl;Xghn_VCOq&}lf!w!kY#V@NXn~%k0o*>N>R42*FtWKRRA#mhl`lmL=B1K5E}~qT_Cc@*IiWo`4~@umIKvz6cvqyJYt*Ut zn1;%;p==jN6I+@S-~Hl5Gp0!N4ljWziBcIMnZJ4q&Op`4$N4(&Qa_0^ABo<<9gNvO zuzz1=G5fLxY8(#hkAM93AO7JVtcTe4v5&oSR3f>A%SZLSuT@rLTpnw%ClcB4N#7Upk_nK6XW{DV-eEmD7DJT9FbAdgl{Ku&+!lEyIYr`*#J@XT>yA_@ z>IyOH8CbCMj4bm;Mf(h;>~xIU_f5Xb8rDppRTvh-!j5#Na-qXJ$KXFF&81n)&Z&~S zPjaD3iaOIQ_kBB^Zgsv}m#^o#mLDk(>(Q4GM{4Dj-VBDHYdNKYsTZJi!_(Wwl*nlai+1w^`XWl6DiG{r|(b{C; z$CN+Jj!-h6;J(&at)@Mw|0sA)tfWj9!k=N+flf`~jm{4_$%wkMGa3D@i>nIy+BHew ziHtT_Ll{poq~7(~lLiZ$+6vRJ*U$E1LU(^m{?P2(G;LxZfMLkkEwqLcO|^k$a`$-{ zD927y00Gsq6UwQ{&ZU?=@oPFjdkgdR_!5hEr*24CW*628yS=&T@y4n0)SB_rtEO=@ zfgEEvvznW%qS7WCWX?Ms?8V_2;G7>dxDI;Kur5J3mJi&gzFhrH*4S=uZnAsPQb?QT zj@Zc4^)0(c=?@FB9G*RU@$K(?Czi#^MvlR_baVrOWFDG9GcD)Kbd;m^eY^MI{<1Ea z8*B(VC+}(!5DuHcGvqfcX-(9H>k3Y^0)~|Vk&+mw{&(rQ*=W_aot`~?V&Tm?B?q!_JN1J!+^{f&D^l@95Im_S7+V^c)mUrHLcN_cF)m4ss z`t)#H+@ zOT0c|!2$O=`Iy}Wv|-2G;9fHic{0S!=YdEmL93zsK zcN_exV8J}ZwDcMVGYh__E+-?*mNTB{1`kLeP#8)@)%22X&n6@d85d;>5!9H8VHgD) z65oPt;oTsP>Pd{{RdP#EbRcHJBHSuG4j$pYh97K+h&8YVmarvk2^_-K@HJxfaF3)h ztpL|FNe_1~r^J=_uEWC)j#$jXm+-?9hl8!F9}clDwXSwJ#2Pq+$710X818vn644N0o{e_F0@YclM-e~^~IeN!xM%U7@LJVG%ve_(_jR~1g%j(j)vImyh{}I zXFZ}+$VlmaXHQ_!q;>;c{19wsXHm=uJwurVPpBD|Xp=sQI$!oGCd31vhMptNcf0JSEVZ z-L`BanVG3!o2J&48_Dl<4kN)p%OL5}VJ`hwH04QjG~hEBv!Oin-~}GUY(O=6ts#(s z%;t4E*DN&$sVlTe&I`VGg&-I63=*JiAz_&eiDy^fj9{R9BeVX)fB4_tefK?EmQf>H zuU4H&gBqw!W7SlqG5NLYDoeU6Bn=icHQ8alrO`!}E*hN_W+m((9p;70tBd8Z^vG(q zc|Mo28Moxvw(C{_<=~ewbA-1W2e2&Vow!FcGZ3l*Gc%6!iV&hgO$CeBecv;OFcqD_ zaGs>%e@5lrH>%4tN2JBW(v4$bAZG@~p(iUG z4~OVZ+V5~^rBG&C9N5!V-xxMPSz`8RMMCWDf98XLeQiYM~rt*}-3u7pNvKRa!voT*u~*+?|q z@K^U54G(qA#luovC+Sr~0;8v^RLMql21tZ3np{t3AcdZy>Y0^|eDRo5vIXg9-d`#c zt<66&;oyuEw8WH$ULQ~pt!h2FwW6Q3Do{E0x)Z<*f$W-S(?wKS(GxNJ4!8v*C8oqfvd!K@L9d=| zpWxMIsM<4!P%(AD4M?k=XI-=J?q-}HQ?mC;ms7Ys?fW*EoB;&9FQigXtSRLt{~g_m9#z5 zvM_jNc5JmwxqP;ZFVCL6czJy?*EsruRgDK%m-p}8GjrOf{;U7`@4WW<85zVq3WPxo!)sPG84&p!M7op;{- z(igt)@c#WA`^TSrbUYj*mh8K(T))$_*{$VvtSX%AvU<2l2Zi^7#neU>P@%Aro=wN& zNd2hDHV8d0Lbrmr5XKpXRg~mKj~f<*<(|%+RwNe|LjdNS3CreHh#xCX_eSuDUz??B zOZIVYjA%Ej8SKmLpK@Su<0XT(sTCBkkY~z3nf53ji5*=b7|JjR5-`%uvZ|a=)ecY^ zU0!Keyu#suL)7Y6+!tpL=1X7=k0=H`Edh%X2;*iRg(!}vZF7;s&3)(OD>KgUS`4da zgdNsp^>Fi8VqM}gmW##1$KkM_u0Q|q{SRws5*$62qnMe@)+?)06PI9x=(a?Nq64(0 z!D_GVmB)|nU0wBcQ=#bdq?jj!IF$fdMhBJLF*Rp(RD(#soEz77MuV-a{ZXpD^e%0p zcA|oGXj_kQ8$FFg!pffGnyqO)mxbE(8kk9!hK74J^*THE6g?~YXbRk_6>@rcE&D)8 zht9ex4HY(hj1(IZ_U7phA)r?2rI30#Va(yqfPv~efwgpFZ|Fl_b+S#Wn@^qIN*5AQ zQX2|BCVSQeL8TZo%|6azS*h8TolK<5I5{vxWozy^D0NlCf)2;)n5!aN*-J4CjHavP z(Qn{1xEd{4$bOMhO?w$C5-1yuK@L6{P4(5;$0-};&d|{g8Z}=cju!{c8kh~A^)llI z%O(~IFou_kacw5rv{F;Z?fsOqEG?xF%-K>%w3)h%MMkjf z%`zcur`y|`>uXD7Cfr_o?bU}59-`H&23y=>37Jhf`JL`M6Q!hLtjDo62iuL#Op_AV zU)~b6B{9h7(?xTZtgF z5CHuh9>vuSr+sUmtN-e;Zeh3<7`-9{+{ug+>C;(P{nW-XN~S={qN zXv%81MBvbvA}LS2+pY#0g^&%?WIsd65T8QvC7zkEeO3ChEU~ar?{#s80sCWHL?kB? z2Bqx!$m)yc(k-|xyo81Zg;BCT%3vOuW7{`#M`Qjx@H#2V01n;r!*aM-530r`jqxfB z*!9g#sw&G-DRaErxBv2c*W0bdQax*>`dMe8Dqwdm0W5lY7<^5a9&h{p!N(u1%lhcSgAU%T zk^8s4^R3rkd-e4<-^|R+eER&^7v6g7>acQHNW)*2#H>2#(KVpSs(}d+`8Cmy4}&qn$T;qFr2yw@{OpWwN@uakapU1iFM=qZ@ra z=rOW~Ji?HLv7+1s+Xd=&Jh z-DQnMtAR%%lM9VHC0S6;z}w_+(Zy>kn99+^!Moekm=P7t`Vl6^)jLYCuWwP&XIo;A zV{dZI`g;ni??_Iz=^Q~-?!NrRpMUGeKY4qJ!x+r`p%8^aS<9~QtS>ywDvh9#wWpna z1ejq_=ukmHu3f3KQnl`obp4vcBas)ER}UUN0<+XDsD$CaIv`gv%yv4}TfV6Cx^XGK zg;ols^$BMNM;Zok`79f}0Y^?V#&$Z5Ax%zCaJtjg{EVi>%0{`t7p~pC>iYV|ss_eT zZ1e;i#zY6S(%GY!eCO9UH#@7Ds>4Mrhd@g~)vk(tCIZ@XLqM86n@!1aWdeogo305+!JQX-gK3mIZ@#42M8Qp;SD`B?e&eDLI3B!1GEY za5Noo(9fJt_N*`Eeb9(NCx$h74axmPDZs*8JTY~JMIp~9m_>N>#M*&*Famc*9Fhwf zRbyS&YN=$8wI!q^d3jcP`Pg>@7+}lZnzhQlZ>Wr*1hF$;86D9*w!^FPv~4)oTb@~& zyTP{G+uQ3GToLR7NABygJo)Ui|NQ;$uZJ}&$2iRoXrdo^xFpc7hH_|1in*IrJ%0RX zJuVT8nZbrEcHRo@#tXV1nFg@xuAxQRXhu_CDGZ?on=w)3BiwKI?Zt~1hjlgXA}uCc zFD~dL8aaH4!{JbMP6Y$fY!t;mXbcZlSei(b5wt3Q@RJ`ehl_{zAH8^S{qZNCe(h^t zy|}m-HMZP6;_Y|ddG_M@m%s8=TaF{~;^j-EfBB1Ffjer1BTRZ^Z-^mS<(rB@(|5<} z2pWeiy)hT>RZR-ftY!BYCW$!93ZY3vh*EeZn(N~cIrvO{LY~4u^uU9WODx~5=wmUn zI750cPqU#CSA<@WXLBplGz*4#mfKi7;mJZ!w1%pT2EdTk4@bjoR0#+xGR8Itv`}Rs z(hyn?PF+0!_?~qddu3%3>NEP^r5mQY)L@pu*B_iPGgyp<>xS&a>9IJLCD#~Nk$H3dt-tv0ix=049CBDdVS_fsb{^IfADdJn#=ih*B-M_y`M16}TH8I3rY5DuFEy`ZY(CLS?NV?{|BTMh z=W#z!+UnJa)i}3+)~$q!KFvH~=~1nd>7sVZ7W!_QXNpZ`39W2AOZ4wBV&@i1C00kZ ztLHDYMu6308IKzG20q1G^=u!N87Rdtltd)euY#6+8-;z8W@=5Bui(l%>O_8z$aQ!P);h?NWjs2BJkKTOqE!gVr-g6K0%r2hW3XZMzme`>G7@8c# zA8z~D_kH8jmY@~@h{?26rgiz=h~Qm?w!TcCs^`+WZ4JzdHY@k&8edDo`j#`Zh;@l& zO{Fy^=v7m3ozwOQeP3t^og2Ec(MYoPAi#f>d$~c)-bSqeSHs1W z=YGrcb)P|sE*QCW+k-Mmfv)tkpK(o4q6s=_m&!6nxV``W`@i!q|K;_~by$tusl!Zg z^ltO1@+k6O?HNntMb#&${7bmm(m+v{Y;}gJ&6^-F>$-;Jd05reuCxZ!hApgF^vV>LDc6+<+C)VzL&Y73Vr>=%!lr;Q9 zBB_4=d*-K4p5|ytQg;wgymm_8BORl+Ah>`!ZKs=?YoNT+1|RfL%}=+RcCK>gi5yGO z>yrl>?!K-|gBfBr3}a3h^6GlK6?2Rw4~XxOqNSgN6pCF%;mH$hbWbLwutU0BxDJchOo|B}yr+*XOo%zYo$t)tC+$;^EpZXKj2J_LGhHQ6wt zpu_C^wHw3Do0re`)2;OZRh8S=u*CQO^AA4#>@)La-*-Zv)zFq`a_CQcg(;}WyfU}k z_xqQZq9RWs`~1r?8<_-FEQf~pMC!1gh7UjZ=#AH2`|?-6dK!#ttFU7K z+VQa29*{H}hLmBSDP*pQXESq~YX6ol!vKT@^IU1TS~Phjz3*$c3aZk*%ra2H?`$yS z;^mfMSYiElMpyLhYCGgoI{L~J(GKd*}|E$njz7tfmYH6 z&+^TeU+RfgBd+K24}+qUPxK5Wk%nS;ZQl{IQ( z(kevLs#SCiA5ow~#lA2Oo0_0`?64k=L{#6x+5lxes(!eQGrmj>${f~qX8d2c=+g*M?A4gp?pq$iKo6RY(O8JCqrx3X8o2tvT3+$ zHN@lw9MuwfR=zD-&1zk&9!GZ$f>VUd)f|g5gWqcR{-(Xl)jQM_pmnP}>qwO3sps2R z(YVc{RVx!92UE4SAEpQ>jt-k@OjEYDb!TVY!%;^s9XfwUW+loM#y9cSNh8R}UFREA z^>UsW=QEh8Obdb_fqB1Ts2~t#iOe1Xrsj>J@J!k)vWJQhiI^thEDG#1vwxm}hA$~-~8q`fA?Sgi$aZ&N#{qoOXQ-*KtQaFG^EeWdJ`t6 zQ2^ zk{D8j!;sD=oON@3ons@eY2{%a76esqO`%-S2$_;RyMCJ1iqu=F;EdbQi3h0jg1^}l|8an@)C@7N9?o@hqZ z`J%yj59yDrF-_|#M%}(Q$R|jHZ_4_@xT|ee1Jli{dY1E*T65d*+ZpG>h?4APvju!D zB^p9J&TJtsGe}h5$cyWkGPj~2tg)s(2F$z_*-brJCw89gRW^$u{sPA1vj>_xpRa5m>FYY5WEV9QQLC7wb=Z|b!QDJ~kndx^zPWYg`yjX4YjEyjzWvj8 zPPexs2hveJk*|EB1Z@^=4p6%FGOIC$nXM5eFCiNNU5ngZGct$0*&J@lpYBy8HpH+_ z4%N(%$q7=eBa=LJ;OXa2cnS7&z=YS~coD{G(sR@o-}=&n%LfxFHd*6*%Kx`Pzy z@}ox&E3*ZzaE{BRj!wfYooV=GMzw-U7iE6VjnBW}vgp`2qo8WrK>ez$=H_O;SS?mS zh1+7aGDgU2F}utlCO z+@tg@leclT%^76LTVTo~3l()Ht*xsv?|rD;m$Nd4Wey#hHHrd0t~5TW@{u)ijI3?s zXyariMO9_xt{DUxyMeGZIJwxnzjBEuh+cLfpbf`w(ZC8Q*Gg2DC%|BXs!V1aSfK{S z`yYPr^!fA59EnjXjZq-l!-81YdczdZS~rK8htX*#@s@w#&9`2E?N!d~^sXyJ?js$Q zaP`WX=)q&wQ%>8^;Xcur&KjWTwgXb-_eF89{qB*R%h;-x3sxh zgQ1#Z9_H1fI9o~8*gGpiU1R4~SY2oEBbqvcIJjf=N2WvizCLy6))kS>uSISadE>@C7 zEr%{QLY8U~3+X5yxhDox%&DDfGt)rkJ_ZMYXJW7g$$>!tBa?M~5!&(M0|f2yllGAE z$Z9P_VHgHGFfU||lv>aVNb@0LfIk+NdTnm?>ZAJ)A3lIbiK2z}Q*NexXjGwcI3+#G{c3CFtfFDHuJeovLv9@0V<(%|9V zD`B?S>1W!w3W$gZ`3DM3N(eLWnSTa_;^@j$ykBvQHG9ya0jOa)Vw2VSuwuo~nN`T@ zVkDalYf6JFh}tYXq-y%Dsf^YUQ zssQIe7{7Ay_?_SRSKs>9x0hJPPS`hTnUisqBqcGcl4b`rsxzg~&;Zw7*VZY>s)c7$ zd%*z!^4=In{#6#f`jxL<9uGQl5h~^^*axt9E31)PN89s55)2z)bNXLMFkb7VE51`H48z~fCuIE^~*#FsnHl2D?||&b(C?` zL|W|>7)w`Cw%u;G*EiwKEN3Be9&Q}pk!QzWvPL^IB?UJ>t}7Ws?^GB=r9kmfC?as% zmL(9YPgdS7OjrtycosqA6Zb>5wTclM&6*0Iq>azYU9vnj7um5)?D9F=T_3q$3b%N# zSdQcXvQqANX=kV^4afQB_ikZ3v!dp?2{F3d?|#NystTiw?!)R>Xg4Lz>QXE-8b~Br z77$w5sUfP-`_^vSOP91`wyK)W$U9Jn*qK&O^kM*~z|tDx6yC_9)3*+`l8&GW=t+^O z;w;WffR$t4_c1n+XZ`(4o)dO%-K>-K^0OmI`>Lv{mSyQIEicC8;QuQ${m?GMwoy0*{47H(GT1$a}dAGzV_!p0!--6q&!8>r#bEU_?5?3 zmzUiJ@~p1T%Ss++Rl6x#ps~~DQ9HO*JH#gKFE$~2@o;I!0B&z?Z*MnKU>KJP7GI9b z5{8I4ZQF~NFTe8TFIoFP1UFbpajdm8oIT(4i=x8)<%{Qk@~40F>F1w~#3!G9KFr>D z>kERWD@W~5o;-c?_19m2?Nv)04(sz5&p!R^)7M^my;1{w${6Y9BGwI6on2|_U>3K< zJv_7!wUB7`W-f=7n<2fF%@6R4;PN14KbIiY2-aEcQ7&{fJ) zI@^^9Q;w=nGDu<;XFQUG2$lacGmwMAOmz?}v&I;Ma^4v8ti;5<_5{f413?eg;eSHAky#iJ6&x}~ymctQ>y=F?|sPhMlt%9p}I~+4~Zs}x6#=FysuP62~p}_i?hH?InLHdX~+AvoeZs} zuPNul?BoRk`mBxnKWV=)-CqT1r^y_9VqS~-kF8G%vXGeNag)G}`?W0H8|uvTWbKo= zlgUd395aWsd5PwMXdg$Dg;|v~Ce|fFS4WbikN}%e6%8cwpSZ9EjWaz7ISTym`Sx z)Ot8Pc=Xsj%op?UVC`G*MOLv6mMKwKD5Nu28%z_LMG}8Y?)wf@+TNdv;YEx^V8Wh< zr0etxq|o6WUkG{75~8z(4R+g- zlcL#mvZ>BhV>Bx#2_A)hbQFkYNo!tJr_9erxp`-y?-SYT?nyh0H;JrcXZ%_5I7+zX z`CYr94zyO?7MNv?BqY@%4n;p#Cbk@>N^EuV&6Pap`|+JQ8EOidSXfec znz;omoXlUx0tu(A0;n4V`%A7gca>y(ao*^g8EkOuObtO!;(`WzfUY)GZ=SYX94^9Q zGV9I5=ybMoKX%rzRnw}~)~D(*aaDaNp$yd`9DxSa%ogtOROuD9RBxo55Sq$Z#&C;47`Eh2py5ulB=L#y?rE}v= zFw&SN1QV(XiGFkH5A_htFaTPCvcz-mZ&kdeRJ2K z#Z&=Q;EbB;SOY^D4of(}!TfM@d-Lk6kH7Y{ukB+u1ErhRa}0Fo0nBGM z%C{8m1$Y1O!w+6Od-mp=Z(ZM9zx(!&?_VB|>q-?wIQG-_{s$jCe*Eb2cmxn0pMLzw zx~yOS`q!(n%)>%#m$}l6@5Uy&My&zG=pgoTJz zcQfP90dIdd3e*>KH!NAO7(B+qM-~v0If{Bn9mR`l?W4U?c*tj#Hx0>rO;fw>y|kQ}xWP z;ys?IfeBoo3>M56WMq^g#M;#;myIc7Cg-3zJ6~fu!*DiaXy#`1)@^?vLJ^sg8?|1d zb!z;S#JL~~hT~4muPfQL1@xHq;+}h#P-3ejGv$GFoLj}37jQFjX=b(*Y~;vR6($-+ zsDd#uP+vw^yC6(V73sO&Zj2cbi4MAbAy4T7Do+U3Mm30E9`T!PjRtACTN@tz$Zy z?kITZR4wX|Mq*H-z2QeD`<%&F@7VyijAW9E#@GXvz5%SkY%gETVP0Ny|2^ zYC}<7-JPN0%b5`);D-Yu%|_Mn;^OhEuZ?6usW{)Pq-L24xg28~*_0ajA@4OZ#}2m; ztM*9CqOzZ`pH(8#kYkK3A_^@hJbm>R%<r+F1kN`$D-9WTJV^r~^bCYQ<-H%1cqF34EwvKi%q&Yu_j z!5ObMYfvzeRQ z8waj5X%&ama!aYF6 zKi|#B?e_Ni`86h#nKg2+%+t30*|)xZeLC^q1*)(m^-C$XP*R#RkILE?iK?;Rzq+`% zyxd0${lX~h93AWZ=6z<=>M5U>oR#QrU|0^3%*aOCy2wehk(MLjnfUzKlRbCES9`hn zNF49q^OY$ec=7D%U;pdBe(&M^taNu+CDlzek;NH8;8~T}xtOzZ6yAROr&;#smB-t@ zzr4AA{K_lKa)7wW!-pSz^6|$XU0zErTF(q& z;o%X?OH4^lVFqU|#v~fbGiiL$fmT^LI1Ua@5GWAMrVcY=hplujI7n$K(hyw(yKx7x zSOqN&l!)C{ZfR9D#@I`+w>7?OU4&#|-?3%xnImma8v|pvZD1cZ()Y3~A1o)bGII=U z!?yG>kU93TW#!H3`dfegozFgbQD&p(E+s$-6|xNOSlq*OvPHo-0k1_i2x>QcO+S{! z*T4Rihxd9q;Bk=dd(sS_##QkRY{lvil1MF^tkjEDlZZ6DhnvG#8-*yxJl>}aDbfs&}K zW{g_J1=()~kl-XP5ywrmseR(RO(3nJ=q*$WJ*^ZJpU3U#v>pyi@D{WbeBM$bK2=ki zM`HuX>NrYb5Z1+}y28Gdb#7F_erwYS$01eL+dsyrD5q!H>D>i@2DR}#WrEs zO=efKn2O%&y1zQxrQ8ZJ*iwWPo9lA;gFpP{U;mB2@e4oybD5{gK`62$GL+nhvoJ`4 ziim5hPO_ZR7fUu0XOB$7p8ZKPv&<^lWG1SPhxNgO2U#O3top17Q#t47y@ner=x`qsqfFZRx*%Y#Hk+VVB zy^buU;!YgU?TngX?iM|lszCHX4!~3LPL5EY+eBgGrAnJEKJNV2B&gf&jD{u9gU`gh zFrS42&T4r|=V^3hKbyP$S@XJULYrprk~6noTp%;1&!fL`=QUQhk5h%|hDu8shs@?e zQT(X%dsJ0&-A-meyH|?8!9@5N+5{zH0M(+nxpsU(Sy-N4no`rzPyT#(eJ+ zhI7I8)nG0>f^|E;th?WCr_9lM?8@A?{S>jj^X^ao_>cZL_rWwn=olk5+;bn!>#LQI z=3zkXx7*E^zx3AC#l_f%zzRA)wD@HtHn+;G>Ei2*j&>68D5`!WE$O%3e0t5kSCx5X ze)jqEWnC91wPHvt%i+PpN9M8kvTyt0;__=>|9KkYmsrTiRe4!0+`Ucjo~0#eD7eS% z>Gm(b|NYC$3x-@D4;NSW?weZ;X0GIiAAPVM5BKif%N)n`@ZJX>-rU~)t>65uGFQc; zfzG6ZnS;b($|U70cyWe;M185+Gi4#=Nab`vGu51R>akfFYV{Dwf^rYbIQV~+41T8K?F@XoHM6O)LS2!YnT<@hu(ZK(Y5@ro z_|AMna-rIxP2Y2_zGe2q(*{sPalq9Zt&}BgYsuvc?#h+skL4|K!K-TwiZg zm5Z6vyq+o4o(d+LF3GcCx$$fmM%M9geCy3OmNhVLfrOhOs)k$hfmI9zpBSBUU}nkt zI4>fb(tvIpSi_92&S8ZyEgnY8s9>=P|Mw2H4hMz`8?-2awY13r*i&x2ysrdr=&Xyw z3DilK;4OpbnH82j9!aNs%kaBs>i~TffxECF< zr1c>j4EsFm|7*yCkV8a-P|Df1V)kp+F*F*&A!zFC?=q>Pn6lptj-FZzPH0{+AtrsD zwSLnZ@f69?eZ7urmYQstMvn;N2;DrZ8~f4DySuud6(`nZZZ+aMrJ~uA4>Cl&X97x; z%EG;SSC1Y(w4&dXuQjVjD|Oz9cay@aaoE)CNw{a`n$9=Ie%iK4j~lw=QO}Zn$&4mm zbDlWOl1^BN!`UfoY1flHNTBVf@(83MuGzTDK`sDHT=_c{Z>yX3sdskOFec6L*wz`}!1`Auj(bC=3q!J$$1kx*p?fg2+@q|^D z8*aASPd@wf>C@+83v;;q2E97Vf%55+Z`qLwluFm6Q1MqNbHkITpWoixP#~(VtR+;u z463R+@4lCJh1@Ll^a={oRJeb zcId7|oy&HqzX<*{<&lSFX*NT&N}Q+jnYeo6M0gFfu;zU9xXujR6vmk~K_v1g`9tTo zo6$ek+8f?LB0^_1d}e@W{(^z>$nN{4-AHsNdqxCWdZGVmR8R*U>I??Y#@1U@DULD? z^Do&99O?F0=txUM^yk(7`=;`1aw}85U)nJJde}Cm;yt?W;M3L_*KrN~SsU4m zwc`Q3r?LlN=-+BnvD;Fxo10txcJ%F2v%iBj^87zaX%O8*ARE|KE7G5S9>v+y+8L;(1L%SY3|?r z<3IWA(@)Jgn}~HGKV|lSgzC2ce@E}v*tTU^?>~HCmSHTv#89;Cf$|Hqko*p2E&W=L zdeN~j>eqXzSfPz_OxKJh?B&br?KC{rf+5WiiMqVJJgx_`g8TK$>#u(0D_{J=7joad zhnhRle1$Hu8K0x-z2S}#7Pl{No zIb2CQ9Q^{?$6N`78J2Dcr-dTSIcPXy@g>$JBJ?W;)&K5AVTpOJUT$fD@DWk&?#RW; z-4?@YzL+m&9uekY%6K7-=8j?`UJhMz%-rIIP32Z)CaR%SF%A?nGIK67 zYh(>l$fI&pWob4OU0|a|Dug0OjvZsSLca6%+aG`OF+zNtCe>1CO%H;Z2G|Os)?9_w z)JGHRJk#ry$B!P~zsD%KwucVPVBE7Wu6%|?2+Uj>^oBAWg$(~#) zE&xDwo^Q=t(}+fNZestJ@-?Q&fFFY7o&mm~GC65Lm9sf8bl=0wYVjGMJj_t(Rp#L} zpq;C9uSttkL)!ekiP4xGXz1&n(atyM#AO*0EgYiTBkI3<&N@*sw3|mosg*TU<~b!p z9HY{$Z{K%kqe4o)qkDlzdJb0|T3wg|cbapnsvHSgKht1&2g@}ek?!%z<5%8$_x)`Q zm}O-ch7n(cTkC~NO$N|g9-c_1!>Kpu@vXO~+v9$9T!Mn7lD0dgpP3XaQj-$9bR+D^ zF3Ot+Bd7@RWc*##5pLT)w$r{Wi&Dv(Nfc@BcoXRec zRt=6?il6$Dn~hr|l>~l_L}Gr`y|`o9pA{#bill51<(zvrBi< z2z;YGuN}?Im6?sIR@I6E(cSFk?3I1`aCD6Lx$i3g*eVw#Sa8g1c@3iEQnssWt$|u- zwQT^gG}73+u$*w-?2rW(l9|+H0M0C>em$xyioUUQGV;l!Qs%V7`$A*=YV)_1Y?gQa zs3%pFKu7d$8$-Q~qGI|=K9geW~c1ieGQ_Ljsmg-{UOZ z&eUl&E=?WnXPR>WmcNpg2O5Z(C|01 ztR97MAA1`7-o5)}?onpG-EL-XmIb{3{)bier7wMPS>kls-+uciufP7V~|xfBu9`S(elJ zJo+dGn9rYgXq=jJM@3>-07Kn@$7^rAasRoQB~6(IBd*sdnyQPFZ38jGME}5ss;miz1Sn*EA_ZQ0=>z z@|Et8`sfr3Qkgl*I83&t$EJX+F>+9yF_^`~B2~}Z`v;ObOS?&|uAap~qf8Eay%SdBI$rT zEDC0skqEOwrVaI)^!JD0~da!nYi5X%zlp+?Ie*fX0eL_~ZgGs;J5HdmL+0IH&pna`iU*!I1M zw&{x*&E%ZnPDq}gfXiRq8si&TS9N@vnyd2aVYU&gVXpLHbyolc5W~#c#7NYYx3>9fghN?4Q~anSJMUDKm%ss4WB)EuN$A7oL{q z4^~JwTNX|xWgTMr#CW zN?8&)moTihv6=h2EI=)byW{$FV(8b{_YXh(^b2o&@zLXl%ep*$_Uxzcz5jRqtH1O5 z8*h%WN4T6WE~?5D5>E)x+?>Igm1XQO_@sDVxK}WWuOnIH7VNcU&bSPVum}$ivsmEH zYnr5!FCGCbR$=8{v6$Of0&Cb3wl1+OwnRmkExs(i21DhYQ@?25^A<9jW!dO}g5505 zE!-ktVdmf@Am{1eiuyNm52vflHC3zOE!Ghdm5oHT8)uNZVj!-m>(t;pw+xM+Hh0?k ztlBrswWbgi(GE0HxK+@b!S}G&$U3L>@ghjxd^Uhl7BEH{GQ!LE!EE`;%#mYcGEOm* zL&hr8c(L)X?3w$hk$csC^YZ$q@4ox;`STn(3aH_n&?Sd3JL2j@Zr!SP1Pf)T=mKwK z-Me@H%U}933=`GOvo=_y(Ws;VqzSR@_L=j=;@kUW0hw8xIncmH5-*fGLmI&n@EC@Q zeGEcYqX$QvB`zwr&+0Q`8?(=7%|#~tD)1~gvi2IPh?EXDsuo{3GCh#@E-zkr_3^V8 z&k}(g$uqiY03$5~ltl->2;^d1>Es_Mp5zr(ncMAYJ02Ggh)g97QifpCQCC6yAvS+< zp`u2LOSf*Mvi0-o_%mthq~4=@y$*D09;-VrW%I$!(rxVf@Q7vcb8byU&F>~=>bTWDVdzhgP>Ot^3H2(dJ;+JP)Ht0e#g4u`AE$Z}X(nw1Z$9ky6F%FGge zx;fj1zT9xwxUi)MCIXl5fPINY(0a{A0kI%jLXYQ%6r|SvL;Dd3accBHHRhOoS9~` zTWMO;cuQsHlw`MK)jX_@C@pK$osZNkDggNjxr2DtQ8GpSIU2(7$xmPzq=?@Uo!m&!sh=a^5~dq`i_si%R33t!}MTog({TVDh0luihkR z&2jLkw??n$Ogw6WEY-z%tKN7i4r5#ldtD-GXuTrT{91#ko#ynef(Cn#O}I4tXWJWPQI>A@aA!7kjrtT0Ay``A_-^qYzepa8Pg|6~F= z>U48jm(?vYIojS~b=vlbHDvqYXdsG9nLLkS169c2(bUcu*uZvkbN%8)lou;S?Au6> z<%5qt{PwrLJt~daX^EjB!w!u@mF}}S!vxB0aZqfTmE+;V2XHM5#_t)DfNvACRH_dJ zyV!y$(r!C=ImBsO^vyEh8vCONC1llDY<>3h+3jgNTwE4v;h>bv!{u^ybsw;0S#NK* zH{W{W%{N}#_Yv-yyW2`EzBLw_fgFK=G_wQu~@d-osy_$TlD>7V}5-};+>`xpMoFP^r2S(Y*^=3z*Tv;~ODou#Cg z&E7bx2Hb`WkCfPsbnQq3TrqY{56m0assK;8g)Q!h+NofyLfK+oj^WIkH#Zj>=S;Jg zNQO(sGl`<2Y77loDl%@1c`>Fr6CyA6P6W{j;UtDUb1F_%W!r#*p#j+3-ODz&QHryp z9emW#+Lc7XqzhIFZ!S?rrnMx;Y%ouo>{2rwkxd`5pHg&LBBM65NL#&V1ty4> zqrw%_CE^9;V5bB}jw)0bu-B-ug|FGVhD=oM+@FB$nE>{*ebk;c#@M$38y|k~_V>Q~ zz3ZE;ig{NXOIV(|W6nL(p*0}tn;m;`6pdK{0W2_o?e#al@P#*>OjWsILE2yt9RNRj zr&aU8;gw_W2!rPCj04C*xVD+4eCBV9@IaB;**mIC7Y#O-5unyn=(LOQ~vhEm-+`vVq@tx~~MuXhWm z;z2aOU;y#GOE3*S^*OkrKS5EWDbwu7(}zsXnEs! z3~k{0nFc-CE12@@b=E7`8^%b2u_w|qYhbL);q_Nv{pknq-`))C0R}l`jBrB+ED@}@ zyTq_YammFav%-tg(J@Ai;frhZbG7MjI>5~!o#B~_<)L!tYR_he2D>BP*&}oG;;)$! zZ)$>yRW%zjm62R)4#R@QP}_DgPP#|7XNGqZHEP}Sb`f1gcAH!*ti@k-XUi37oG!Py z`&p(LD6|XQ`DHJuhITJlC z2T*o#y!hrf|Kk_G^wvN8hyRcY0{6w{hval1E7TauG4o095ynGLl4=1vJuox&N4`d< zeHUdIWeas33$fNtHDPV7Tpo)mjIrO|o@$hPP;<~9t(S)@wIDLu0R_|47j@#=C}`$yEkynRLWP6|b`V27{ks#y&DowK^usVnV)hxOr; z4Vb8H;e}-Y)fzRg0Cfn~ADHhaB?f4J-x;Xuw!br36#c9As!hJe0!W~k88qagwFSH; zcanA5u{sA@q|-Eb^>i{cB4BfDj81G5ZX%e53rwQrW@ED@zn+z5aDgOZ_8MH{c+Xa# z*z6^{-xL2g#dX$9kaR@WVH&y<2w-){vKs!`M5#2OGR>_hAC)>UCDaiCmYQkUke1k} zDQ9;mNeFr;XvEZX4fFJ(xNqNga}SsHJi7@OUjml4!()cHbl1ncOOzLN%jFhZ);7i^ zYhfLSskNw1zdA}MbKjQBL!V)U=j(KP8kr9s-d9(vwW43_!tT7RMrO?)3?Rpg7f-X& z3nTZvvPR_?aXkLVKm3D_Kl`NI_u}A%y|RXlOb=hP_N=VZ^;)fT;D>bB?df`;9zJ@A z+)4=^qhMB^oDw`A3LqyKL~II?qWG$c(mquv2gwr^i}^UbTPD>(zj@N-YPS!m|GJiW|pC9a+Z&jE9P{q;944i}$%^2ysjeRm)G z(4r5 z+mO+u$}uqPrUyZi*18z5neS9W$+|9fl|Ar))MV!2NW<>t6y8W8l(0-voiP7_rCMp4?g&0 zFWbjxoSSG96`2cKIi1KheY%spDs#|i=Vih8jW2!W%f9%Y`_h&Xi3Dnx(SFq5ya0p* zJD^udbA4EryXuyN)t+*5HK)?00HxAhhPMKf2>_C@cdEJwySAd7g$4Q{45-KwURgTx zvk$VI=$TyBx>{51H1+!81=J{*rIlA>Ywo(DyXmWse>(WN|dnz$Y(^gZX%d7|jwY4z)u7QzSZ&Z;oX=M+0RyX%mXgOhbU$Oc}&YPAF6UmMBJ6u{p|G70L&z zEyf^3{Y^pfP_RjFS5H}J83v-FCIvOKS;*>F){b^v(S|W;K)0}ho2SXiM!lcPdHqV8 z1Fz{stjtk^f6gerU4&^iH%Vm_any1D{)78h_fI!B=5D#S4^DClXHjj@;4eRSwGFA7 z+pJ1bW`@e`bXwOdZzEjWw}xOtf!n+(8mz|5G3*p6z08HverU_dv5&D;rnwkjHX*rK=>7r~=wrAZA($+~Wd@+x3YsKtq7O}kK@y6yFHzrK7YP#TZ#|lZ({nR zJOX?2Dyg1sBzHfi{|;8w-aPQ2tU@BoZ2<;FDrUI8xw*c*JOHAL42N^s;my3X;NXbIW2j z9}t5GX~}sb&C0k5tmeZ?y5@*{XD7+1Q)AVG67CE3S2M1=cVQ7(t8j#lS zWwjNoZIssWer?fLck2>0G^tafm~4{cJR)_qHclbH-P&@a`mZKRVhuv4lw>kvcz0i9 zDZP|$$*fDRsZ=-()G_LK>KsXQafJMtB>l6Pna>$!Hki9zHq`89Z>#y*=jzp?Ze)w! zr~L#CbC}93UL10)xUI=idPEyxH<-P=e)00f3oDFKnpBi& z%kupn{@{=P_)l&|!YKvIQ3-fvW)6;m>eB9fsPm8@JC@sid2zfvUIZ65lh)Z)$#$xK z)*4s#bAfe!9b9AN^<2e=rO8as_g>nyv1h)xzK-QcYL^tDxm_KOVdcJ*)$AJw$q0nef051A7@q|u3x_V^Kbq6!*}1g zy}4dJKKuCN_2T&3zy06*ga7s)tV`@U%om^*vmVc3QaRGcKwQSXe0@u=4gQ78E4gn_nVxDJUFJR6o(O z)CK2R!`=5}I%;(Jic)5~mpqm#L9N>`^h0c_0e7@)Z7(xRDt9S-Rd0$auZGtWi9}3w zDD+O#l4`F4ob{#qGRI=js-U)&3=nOaoJv`A8F6@z>W>{Mu4i`X)kKF%e@!70Fw*}*uQ73s)e5n08ZZMw_*rL& zt6@S}Vn2e9I14rQs0FAoc7r*VXV0Ggvw!|OU;XOWFE1}o`+hJBTc%~&5Ud$EN|4P= zwv)TLV=fO?oq5h2uWlS*IcZ7)Cg$ObX*F6itej_2z;F*Y?EAK5`cj#tlv*<~O8Yjp zecNuXU%Y&|@1tixah6_Eh|6<1$-U>E90uhE*uuYC`mvlTm#vlJk)(PE==2x!gavL+ zrzg*!C56YDKQ+sY2_==zJ|}jSqMK}YL$kT-GEs1M2@WT2&3qA_uC9ZXCoEd4*So3uoT2{8RmaraacVip z%-o6Q)%ZFQYo+{irf5!0rS2DrrYWdJS(~bb!Bw9iupaA!M)M3}1WgPF`(uvZ{bS<_+-XKePL_g%-zo=nU&(;_N9v;hipgotGv@J!U zH4FbSw#8$KrGHTNEDg26iAq?w=V|AhTyiIB&#Fe|x~|^2`l8t|#VrO+Sod0f z#j_VyR%*SNa){^GH~;Kk{PXLZn<}@=GS$JEqVY>%WsIkDp&dGvC<4pe^WiJ^*LBUz znPW@QW+yxPthIW*J0n|Jbr4@N6z7bZ;#g-SXq9mL6eVr`^2LkWo7-3~lKZe0cf{fs zmlpt*C2nqS0sF!izc@xIDt*R)p^G+wWReqGdqBdys@xq_pM3nOdsL0vo7EcxTUIr?1R4ny9s_H6H zRW_`_VVqAY$t!3)ud1|BD0f;4(`*fwRzG0iJSkevcy72&ldJm_b!CO0=Vh>|gQP90 z9JG``gIR!77Il(l=Fzg4MchKUg_m)LTxOQl!Z{Ozc07Wx6~bS*<<0@5p@NVy4?4S3 z2|Zfa%-5nK*eIwlk#8d6!puDj2p;VEph$KlsTz?{PvGH|eOoz+I@TdwzEroG~FFILtlF zi-dbtefdjYeE9I5DT6A@6l2K)Qo&|E+m5pUotIc4bCyj&lO4)&GgbGR{jC&8o@I?+ zv(iKjn{-cCF=)9uNb&PPxAPfnkS(EaUd)TK3t(LX-YP+x1X4GOokU!UWJiTc7nCuq zg6FEs=5t4e$38X~#9%eUGuw-Am=_Z!peG8!-Kwx~o`Wkb$R*J-5dU^PD8}|FOnLxW z#^4+>48+U35a9M>1?)qTR#vKgQb z{~*A@yhR?}2*fn_C5HQ=2ce5vzdaf7%>p1zw+DGBSrvv#N~tu7rC4$pI=rwW)6x#B zKYsk+gSUm|v}n^@6({4~O-zk}V);#GcNLfgu(i zIr6mE;Q;!abBuD|#(uiKzPY}>J#9%C#SK||ruQvcKq~es3*`u6D#T_To*2{BiN;vE z9b}A{qs+2Al;}X;`d+nPpMLu8yZ^;EewAdo(L&}n%FQI_K-U_gC1A$D44k=G|(SrEFcDv-}1jX!Q>bXm)n+gk$cq&FDA6TUU+x6$~Hj7d=%S!^kfe0)ShXsr$wl&}7PXQ#0gjO{oNn_=tt&J7zAgT zY~mhc)IQ1>R{X z?uFAf%q-TGqhTo*=K|{}bXvBMFbp`nT!#o0crg3t5{J|LHpN!npSfUZwUo9J=Sx`R zA{-W_)-1ZbeFcED&8P?;*yqG@{_apc04u8+acvH;~OZ+c30R@mW>*tMy7BRhKD91vue~R+cUSZ zkC88)eg2)l_={(sKQoI=PPcK?mN`<1sdHje6~jM(&Yh+1C{e*c<$d7cqsL$U+E-$U zvYiZG!n|ta@bIYa>vO=uurTh%q%R0Zi3{nRB8QC$w@>B-5>qiJwr9Z$xsZZKeOrr| zATOnQifRU`w9p$*r$YJ9++)RLQNyQ9rjXtL~K!>xPp-;KXt<0%# zRu`tGL4G;rm3ssG);4P@o`~wY^BJ0Q@|Gq#2!kd=a>$b!q0O+K$;f)tTrqMa3)R7h z(9vKbI1}!xG^&kWZu(4Qd{GoAEMP+efH8`M3egT|R!yOXm6@~CXUsT*fR))vI}_Xf zDxlJs@W^dAi+>hY?{s zCoyqcVZ`%K_=CKul?J7Sl*{yD@T_s#PB~;$C&AE8ggK>(>Z6)^U=xZgF&B}BSPywR z?fdY9OYd)e+Udbtt7la!v#4z;n5gTnSvv@<#d#{ajwtMg@~RU% ziK^VmbJuR>s0<79sNBb1FRrg|w{6=_`{^VPk6EI|NQ1>3gr!H8L?)wS+QZC|90SpU z>w=|FiE1mR87-}KCi5Mc7L~|T!L0uB```cUH-GE#!$(l{6)= zO$%4|rW|xoXSlQ4swMz0yZup@NL^s#Y1(gz^A6V+nL?2=ho$1<;!YxS6__)@3$vyL zQ$lc9n|~kJF3I_beFFqd>JF9Xe|*#ZE8|c z1H}Tz*wQRup;ohCj&0w@zKcJp(G9Yzo0ucpzhuc23o9mZw+sDou=Cp4YmsfxB z-S7R*@BV9xWzS6P;S2jkgXS2a#@frp?wFuwj}c~h8tZy^@bF<(x(%Au%+^90rHr$* z)YJ!e{vfp+Joc+B3{|z8s|aq=d#=_UfV+>ZQTg)43+^dL0=szte*fMB8WO7VbaVT2 zU;Em_hYxOVPs?g>Prj);xJmCCD_a!U(N7FnY*R zO8Labi?ck+m_p)Y(VRlEW3`wz*uXabMJdORAp8cPy;}qsz71}%|WIhiLxzQ>Xs}~ zl1;Z{yCt`}?bgqKko${&{mph;15J<=3C^NKV&Djl7z%}{P?&1S%JB{Np0n5L4-sph z2SXGI6f)nt_nbYf6%i{!{{szCOZum4eNY#5WChYJns*0ecP;<&oXsqtJf8HRzAQ5= zyPU#WD1pOZ)=E4LBP`^GUfAUbq(-qQnk!+6%!#fB0G*?FF1o{{6e?B_0us|eeL?RD zx5+@w1n+06)K_GN9Qrb9oF~J2GCQa0in?|bQrTit~^f` z4pZrl48$4r?89t|wC3{*FTV8D(@!J1PuwDejJlz5)bI-RWhn?O42>T&f#G*gbUdo% zArs1>JGZGvAQvd`G+5;(jGi@JXS^xYOAswKdMslU?c_pC>h_KFqE*i@Q!OzBZz5&n z)PxIHa7$qq>2TlB6Lu5kwnc{3Ra|4@b+f1Pa7udU=0i1Ew?S17Bv5pNM|Ng9PifSm z_+U~>xT=X$UVCL@q(Kt}jB9wSzSJPR`TZ4)!nlDnWUpX~kaiT24jPgc0Kg`1C4iJv zq^e4SYfjn&ftA7p9>7(zRG3Y&h2zJ|W`Lo48nQTU>J3+KjW_Tx`8B}2(L6n6RmB3K z!+4odkmNc%+!_$(owARBl|hpsB4fATKXv=g>uAIdKOpU zX`u$`4$oYV7t3*Or#HdvtNd!O-i0ncp@t{B$&{^zcY@?S@%o6g<+$`^t(5}}9++_JB0Zxe(SNYt2B{1MSBrlKCZc1(=r%i4~5YhFQ7{h8{k zp~6Fgra0vuV>L%Y%4#&5wK`Jpv=NLCO=VRfQR*+Q-??nP07Tyy(j`}4!TT9 zwgY_}+X`sF%_B0{<5HpK) zOjUW~rERS^KS5*JMi6M6j;8)ZnhG%wnPeOJX(=@;O&2N3?_kaKI|L1>q zIb0^tdvF_=4EK%R4lWd643QFyYn&0%1RT-~=Z_wr>`(n<#~v<4twx{>RpkOgVoo1C zD;s_+E$Pa25Q?r*noX8CPc_ic1f({!A23G!L9r)GoNsn799Z;W4oCsMW z{1IR5$n-!obYQLrUl;@rf+(MlF)D-YPr#$}bY=WH^uw~Y$Qlwt`CI71BUEWM<+Y9D zS&k3OY0N5E1zB1fj8r1zs$s!1G9)D&HM_<$wEYJssOpV8nzR3^dBH1cZ{a@Bn7P6h zbegE=D*9Ngez6%vmx|>OIat_IA>29_%63h=(qO$O0B=oSL@b4PNA3t^PPzeTbgW^_ zF*x%bX_2|(I?d>l19EQ)=_)aTjPwuOjB-A>NKkgy=n)apo7CbrLCe)67pzRv22VVG z_~3AHZjrXGi9GZbZkNa9*M8$SmSx?ao?aXlHxJkvYh9TuYhPF&hkH?3sU?${=DGIk zPh8vYcNS?%*zrJ@zSNU#wo~n;o}wNB>L%DE+bz=Mj;Jb$D!Hy%%EZ*{?BZfw`)G&wJiun(yh2Ri|-$g_xrb7nhgxD`LQjPFoeeG1%NFb~i(2^A^L>KxU08Wsb~nx^O2Jt>V+em<)hKuC98A!^F*v zO`QwfH*0L3X?KEEAY5lVv-HdiM~7Lg5yg7Zi9Qj1U5?S$?A_7deEapg_ugJIdygfI zHuqr}ok~h+yg{0FajxSn^D<` z&gBmg@-UfC+$1IqA+5_YGrcqvE>zfxlGExEs1~}AS${e_6%U*fY)R0BGZIw94w$2U zO6nMvlwSrh2}OB3*y3d>O25l-@vpo<8iL?m;}R1fLB!pzv9 zhZ@MJ!o!ixk{QYTjIQITv$l7wc6nbWoK`2h{j7UE-O&Tt&9`Zop>BgkWOGZ4C_R#Z z`9X%(B43tux9@IEXUN9Ou(xrbtMGwF19s&Di4(r+bvaBllAnCGF?qoP5DuC5b zlRayoMBSz1gPU7JOw(~$*1pbd@`A@D9Zbm>ghpk-G`jDbZOg2FE{R=8?jag8S2NFS z6@{+N<~9E|P!Iqn5=OZ9_~()mu?HrhZ$naCOr(%~R<0odn7*{>_nJtO=$dZi9_!KF z9B3UmPxINMv;XaX`Cl#LCw}55*50#6caL0K%Qet)a;j|8oS%i#!I1N9YRHQwH1hl7 z_Ytu?;Mh!q^;P!J7-MxP+hG=^hPAJ6zV+sAo)D|ap^*Zt>=ld)QGH0se~?miQ2!#s z<$|Ur+A9$r5}qluxL(lE*tAr<2O}2JEy8%KPSf<+&wlo~XWsb}KmOyFhs(K5EkG6R zAfR-dcxoI#Z&ithrcVyeZmiKCK6r4u-NwYv#o@7}vv63H84*z)o|76g)ge{>mqj{d;oQPL zxdHX0E1J2)pPCKR_3LWvD6S>wm@){GnKVU2YPvGvNiz|JBp1+U5jAa~bnF6^2KDVK zWA&I7C02KNRr68racj(K$(Whty7c4GuU$*EovflW(0PHQ8}<;=`zq=hkJJb z=xbjHG!=Ufaejph*Qi&n(f9MrUCkyW0dLdw8#j0JzNR32sD%>@t>7V)gB6WfFV8O{ zkz}{i`?~sm{>*1S{mpNFbANhr=!>~o`ns+u4?tqW7Ftp|BlXGT2%_UYBCegDHaCh~ zIxkbgWbS6>!Lq%ZS?50@0-ReKNO@FN8?Zqa12yLv#Cp!o&o8t0HqV{YFP1&}emAw* zqsQ*#^x^r#o41~L;l&qvPn#N@>y0_Tr8eXng;|eoIRWkQG?8{HYKVo3Gz znTGV9!SqG3=rCmKpi^t<#ef8wHE%SsT3Oy!jB6U;S;K&|N}`C;Orc^~^q$VjfFYs* zVX^i=0MU(@$4c&i-B&~;I)luk_XWKJnP=zsU;e@u9-o~je5DgX(mt`?feeR;Ot@l^ z%{#J*V>fd&pLokW^Zc_VUY>5 z7D(XA8exDIY-NosO@R{m$^bFw8(fjfR)D4vY*54mI(H(+fg}<@C`Y$0Ym-o`-ny%u&l5PzWRIQS?h?6R_DdqOgw#I;oQ&!4v zp~R85lK@`!)tO_Gd?>U=`I;qq17~*S6kwn`qwaI|6r>dRBMG=Bwh~wOL{`dJjuD)~ z{DnoRO_b=y(BM6@%V;GKVMcFxVT`Jpt=W~4!7L(NG!pX(BSXg1#fdT%kPh`83KH_M z`v7Z9yp4?ThV&MJi1hSy!+h=f^&2;DUR<67o}KRV1;(NqCKM1esEonLy0wB`%}Vx_ znG1tu8pWk8qeBsfKt-a}kU}rryVxXEaK@2H^tF%HLM?liW{5s4s{Mttq-MN5;g+4p zbr(PaUhu8==xch@jzX=`7b!NbFBx7%Hu zU;NC^{OpYzPk!u&KYBbIB7$(co55B_J~#J3+6cqob0KI3zw(KzTB|yygmOB9Xv@*y zKzHRjN^RU_-JV@8H=b}8k7H5kF}&)_rEEltXzL`rEB|tg5r+FtkU~MQniWV?3194; zDf=l9q5>j=gD{BQG$!2p%KN@OHqplqo>4} zrbjVNHA+}+a$5VuG8thh?d)AZ!6 zCjlCwDw~Uku1l!~cJe)hhdz9KemEYHSR(@2*WRZ2^*7%9o!|cSwA-x_k+JgT6j+x= zUmr@pBAZ(Qg{Zc%&bR1^ym{j$n?M)iF0MOSXlt%S^n1nR4Mf-)JZ0rdu56=nqc-@! zE+R8~K6-eT-Z~mVs=Lb$sPb1gH(%Z}R56#RY^gG?$r?wvR z?%n(M?%$1mY|S~M=kN!Q9zONdtry<=-gQ|?u2_Ap>f9sI$H0qBopX>%46bm}`ZTC5 zAjmvq5J5-nQAK9?=m6Q=0@-+%6X-$0oiD^K+}(v>3E)$nMY0YC!TiWj!yl>)APEoS zqA2%bJss{e@fG64n8XlJ%VcoI(3b|1uGFP?GqXgiM97n(`m3+L`i*aVJyz=xb^3-yQWR4> zlH8GNHiX|7=8eKPlUUN{lll2)-*vh_%~-Oz+EE)_6xDKu?mJ$TA-1B|ES!*4~s!*R{eICRu(~3+MG@ zN|G+g61DDR+&47?W2I5RX^~wiJ~n{n$`7+KoSXX8nuDmY84^fTRBG;h6bAsN+-#PI z$XX%mb)>TjXE_=rPJm93G_swpP#V6TPFx@?n_gI$LPkp;XyVX{1w%<;8SWlyq{Ao* zsy+(Eka4#PI43#Cb<5IBqQ2;E37`2J8ZTxI*ReJ#^`=l;^}Eu{KrFUyflQ>iH^xUs zy-hDPHoZe8JSpjOpt)tl$$q|d`_|iU-;Ip)UB<$pwlG9?!|FUy<(L%Xwsdu;(mCdp zwq#wG!|`}}I+1#36C=Qva+128_!KEfx}pmMvQsv`tgBt&xlrEFRX0{cSc@&uQEKCo z57pE~*;Tb^UY2$3tJ$Q~J8XZ#GAzp#)CMx@btPx%NL2%g&DhupY7)yZn$IXO^tygU zJ2mvWwgItOdc!EW4oZ`*3HZ`5TELB2D`N##m7xzMu@xVR@(ExT8LqIP9tlJ(`$EfX?t}5id?bzj-Tvh%1z{%IcI*$&sm{#gg2q7p}Hm zNI(&>+KW=RYrLuxt*D==|*)ri$V)x?EHF})6=fh9H^i zi`!VcQVo=vakRcs<76SN`DmxCCImLc|KQDFDReY#o8T)vb&z`1REh`VD{qR*7zv`wQY&X)dmhfu`??}CvoEwxwduEi`*+^B`}WD{X+~d{ zj?Cz5z#{_a#z1A^Wy9jErfyYlm;-BHTJzKWiNIWz1*Q>G$`eK>3p!RGdnw z>P2Wnh-@k`mTDF^OOTZhuMNchCn(EK-rQkLnthkR50g<}rgA-*DaZ0qMux3%+JP1w znkmXiG=1L^xM{q?QImMo0SLY&wnD(pYx;nP1hQF~VAu4L0m^it6NuMIRIbOt!?`(l zkGf@Y>NumjH%yUf-kSyG!!^PY)*_S2eUfvXvyov^yTB9a=#zkc>a;MKRT@TTRZvNY znuRWDSqG@4H>7(>A1sL}DqAEo6SE@{3<&Y0^&y*y9!TQ=iEYMgr3k{aNhv;~HY7;{+V zH!(2bF=1Uu9}2nC$Utl$*$|kUXbmg>l7S5A@+&+;NT8N9GU*pjte{2`uA+BUJrkbL zjgwXiL>6UqT0?^;;f)mbADOOAG}<+``_`p4uA?-O$ew{5-bC4z_0(5INh>ENw$Mu$ zWTqqlG9wY@EdUpot*Xp54qh`UHR+V-jANDuw}udX*hkRWESMGj}*zIO(jlx1|jsWQx0Mq;(+|i_G8H5Q0PA|*a zIaFQ$8g_-m&W&+ z8s8!z)?u`yRHLLy)54Pw04p&kNW?gfpmvy3X+4E-<^X^tb$4+L8oJNyv<)i*NgvE1 z5-dklz;P$)J%^cDcDfh#ST&xM(ew`6NRK0qBzR6Q#bB7capFY>4@VU&fmox@-X1=B z{Bytbi~rS6|MdHweSSSIzTeZLAj$H3sxAqhRxPYMBC`#zIr1fz)~s3P#luG@({8^% zS!Kzl@dc{afZ_DS2f^SBx?*foXICgG0F+{S35ZHptW%hWQOR2}C-%gKp&ZsJZ3BBC zcc-a!OJs(Rr6$hUYmX9^xth6QIzuFpxA70f%oqbXY9d(ht^Rz~#!|saY)8c@C$ZIJ zD&i#Tva6;`Es>F{%4{v}MvQS832<#!yT-jBRbXI)Jj+ z9E6*LC+!f0VC-_0ftt50)=wA9bg$p-Pkf#eIhil(GVP}K{J`_sJAJSOwUQ*t zrD@}}Wm#W;^UbrzXMwfp?4({1Q)}P-?swy$abgY0QnkHyuCT^92QBRuYR|)5|9+2ITlUbT|n9CbxT%fM<*VW31C9nZxWCh5C zn@6M0n6ZL&?LX2pD=$#EL+OG-({l&h)B&`Giz`#JF){k zx>}@&=)H&jmC=#C_oesFoRYP3><~SAMDL_tBYSjp|4FV_VQO6&huJfvm5rL?PmWE+ z&~UJ6W=cA@=$aOgm2o06IxL9Y3tL8}qj|HY0mSB<;pD-q1JQ@R2qr^cPbeli6q8<{ zLdgi?`t_5i?%du@J0CyR!j#KI5{vIZ#8ajLQ>eEt9gn zkv)Nk7zKrtL4#UKJ06eA@lewSC~k)sRYAI>K5N^Lm0ZY#?n2ZIMgqugW^Hn_>^&7^ zT}s=!V+)?xV1ooQeT3&F53`aF5ry!=*X1-jI5DyE6?&roNcO2Jf%@*OxAYgOr@jKP z7W%LAMz_9dD|7Bbld~T@OQon+AVvxL0LaMbz4xU@j|j7zCeO&<{_WrX|NKw?(`P>O zncl+^eOUt;(KDjhLK~0SECan{HT+$@ybm)a6p_rD5vvM@=DY;bthqJxaJFv->SU89 zrbo4x+_-JkiyC%*m0o9*QEu&xn3dq-`5!_|se?4Kc9q!H;%J|iX8F6;W}!Gq{M zt>&OO-9QKvbfV`(fDIX!VrYv^DN8~&AXW@R4%BQAKz8LnR&9z(nM}{`nfXkEKCl&7fzaa&=+5cLr zQ5CRSfI`4^+le|Vf3`v>YaE}SN`{XcWwDLhScsS(8#z^?RdF43%N$S0i%2wPnI$`I z3)`?&J!h`)lHEd7M-)I-bg(|EXLT>-GQurXL$n(i#x);p;N!>!Ydk*?ve80BMD?UP z>!e{obVYqQ<sNTXUH8wZDDu-nU-+=HrL=)8RhR@R^6N zPwlO@?_M4bAO9;K-_6rxt+|^!n#(UF1BvKskCh-avHyyOXPTL=rDA>A!&@3pILLQz zkoM-Z({`VlQlQPP(aWWoIlN_aINW7#Xg)!qB9LKRAS3&_M(;g(=GtRjV~yT>BCw=M zKVC}85gFue#gv4YY%|vmZ^>2W8Vi!QzImFZxmjywQ*mD#&gxQ687B7$?ryDlwkfB% zwaMFTb8EZFrzxk_=Be4_ljpAaG|f}9=IIu*XH%k2y5(fq=%mG8?z4lod`XK#q-93v zQh>x=_^2=@f>M8Z3+x0yx>p7dmy65S>*Vd8DURwXqB#>bawy~p~6FTVVZ zuYZ#c*lR{ckH|3Z0}eK?WT}9X*`Q!vnVblFL)g=I?!4>W&)GDYPm?!q&1vG;WI8Z8 zN+riD$FmZ?IL$$@)axJCcdS}26Bc1vESjL6YPTfDK~_awY=0IU#G*@Lj@ofi0;XzH zI0HvU&Z;sI2~smFsClESM|hM#-!^@O8PF38K$FJsu?BTFu_PA0lC<%VPFGZdODEB- zPHb1fDwb>nfsWtW{=*;t(UE6at(zC2lU0@LuH@t#FAR-&W+Ef#lmtEYo`}roE7;0s zbPfv!1+K=Dly@l-K_43wn{?%Btnq*x2~b^if;)_-gibLwA?Bgimi(`+wC~IvHLi#`eOT>aO>7uCxHrR1n}(~Sp$ny9eBdnzF( z#ujF235DNM+9?gYhNEddVKT7^?BY!ZhgAeWU1Eaeo~o1lGzg9 zjEKjN9-KXX)VyWl(0iNOy|?fF>!118_Z~cK)71OA^jJel?vQ2-n#VH+MWC5a^IV)~ zj;j-}9v#`Af9|=HlM`e#oo-Qds?NI-GiKud=qn%E;dr>bINZDc=Ahz^dh4&h@txoN^>-6W0W$h7 z6pz3i(vZ!}+|#VNo6ly`Jhcyhg)M*_OAgF;6+(-XAb}C;;wc>%*++K-V_2d-lw%rAu*Rf9)0e60Sv6wj7*R-}3Rd3=RoSUObQRO-1X$T=kSg(VjR`R% zn#nSxN5Z@lP9l=g8R(gx`t+yXeCy4B_z(a7`+w*Ik-4l(i*$FGxra+uYcYh#*bK&r ziT21$=cr|5Ut?|Q3^VtNz$QpUgo1MdkYH;yG)LouVc(@HJ3I0I(xtkiBUV^T%a+Ou za`>9jlS5|?OInsCZOS;7U6VRlnsW1|RTT+Cm$EQSY_pVPe4kUpcfRwTPkiF%{?UK= z)6d^|$K~@58p+}rv2d7Inm^=nZf1mj;#A_!tK@bqAj zx>2J#tkk!w(?cox5*&BcU80p#7kFf8l})`uO)NswP9`2(Nm@|=W9obeakbBHN_h zgVdqAPoizKQeikT-7YQPRiPkqY)d<6%|d0vOkHsnWb2@0!a9Z zyapIK&V)o(P_d6FCIYmZ9OAl1fgOxS|jkg-%l@5T&3teye*+1bV8M~`84j98CL zHavR#_-B9N=fC^bTf39}<>A=HnT&u5-iQJu#+PL=;MEqJN>y)$by;p+JKgX1YhT(n z&6SkWkL?q*392Z&l!s`D1>I`&N@Nv5!D)Et&^1_CdOJUVd^lY0_oqZQ%?uIKJh$C! z%uC1>hNqvplV)qg8*jeR-m-b#P0iELGd$@jp58o=**VcvVOPl3{H?d%YE%2jM?RFf z!r<;Cdz1>YA`obq9by&WaPQeI+}wL?N4{l;MWSWWYb03S7;?lkSiyE2Zwl*3N2j@F zhb4pQWn*cq68QGAn}=pax-9-BAag_STMkoBZe0e^5lm1`8v~9T0){Y~xS42F8XFy= zn!ory&uyH$DixT)=`ulVf5ed*+Hl4)jdgnS41|SOOJWm`^?)1J@JL4^=#g&Gc?_Cc ztO;5d^{hx+n!K>$osy@!NN&rzEUcH*+A<}X<<%1~$nBO-v3g1!%voJB|3~z*i|SB^ z;1LYw{n{&E{_eNF=v0Mwh4m|eRj76svkZWT(nz<`S#Vr{gZ};!t zUyheoZdF#Xp5kK7ax}U{$I!^2`uw2yo4MNN)?C)qHZ|MH2 zm1kKN9alkM+wMynR4u={W?P7-ZzXI^C2G0$h>VKiyFQLRP2w1HNf;xXt0is66wm2MgvzU4q_|1WtNj$g(sAp#L{3i zu>CcDRP_T+n=vX+5fPcwG+jGAdHwb8{l#B=;o{=_soS@2-ng+W%i0+Q5K=8y4-6r9 zV{XPc{zX9x#X8Xg$gh6&t6zEL%ad1fv|4ebS`>}svGejr<9{sebq?yNm}^!U|RUwiKP z=bpIrkX4`~ZdTwcSjI<(@NOslDH}ZoG{Hm0jWtU>9tfGvd?W`10b?sjr=GS0uTvx?&b0QYu09xo4vYu8Sj zVxC=>(qImiJ&PWFS(a(hxLf) zKmQBA_$QzL!o1tBOZ3RKN2d}kx|`L!Xz0mmxRTb~nvooEjGIkn>w0+d=FO*WKh+G4 zS3R${id9#GsD~^S(9ke)7hK`X%3~0!Ls_yAkL;{K%N%sI9WLY=>ug1ONrJsf=otvS>1@ z+D14Aw#qK6ph^R>L3cqNE-A#W_zD1RJ5qG7#<(T;(GpGFEGs8e@tW>*1d&{T_D!mG z>I}h9n*t+r1y;f^OLuA&mB+-8G;ii+qdGKOLP4#NrN|IC3v`8^qh}99_6{7D%Ll*r zyPy5$tFIyLxOTvLdarsLLsrBiypBz-SaXNFSu>x!d0LzICm;Fnhn|1_xz<<-x90BV z=2E@sFfzEgIm{;4OkVlSmSoAY^li+KR%qcULP7)S5db2hvm*#}&^9l(ZcEppt8!DS zo3_>_B+~^tNX1MI8#0Vx_Lj(g-VCjyG(aV3hoK93>9rgjkK; zaCb>xD>6Zn!zT7EJ-7d^QtwiK2QWwb@gMo&A+Wguf1<=*{K!MMA~qt2p1*2|M34s0 zjZb72GJPh4sRS9(Swn|fvf_&Mbx?mFx=)f5sU>`7(`PkTR7@4mjbJct45m)NzqlEl zX{ARE-&C2 z5tHd^9++QIs?|AHO3=tSs==v@FlW+~x4BJLK7IUl8<=dRD6jDoWcI!u4##Rm=uyE3 zlQIs5AepLc3g{85FT%CR-z=2bhaiZ~8LaD~M|1PmP*sI4j*P7&NSN#phNHSw%?`b@ z(sHpZ9KBmfAxvHcs;9TARK%&V=wXD3swGa0U_5^vL)F6x;Td8)wW~vb^nJBxigw^8 zF>Y7BK9o$19s|5ZED0RA`EIwnxIFyXpa1FCzWTNOZvW0_-nrlJ*LBVEc2)BuS1~%c zXQyvb0yWQ-5z#?j`s=U0`sz2n%28h>a;jV7aBya3?{TumL#0?+JbXcFuwH}T$s2d{kX ztM7Q`nRncI2YUCCx|-_VNLFxqU!$WRhN7WjJQIm!T~GIWZ>`Z3{wgOsZqageAA?kG zUe%J;<(0NXU1n5GZ`&fYQgEoj*ep0l;h)rM4)JPjfvqj5$Z2Iy^GF&horm|0rlp+q3p*RX^1^60;bG0ASlMlDsFk=Rw(`6`fQMDB{}b$;IWxZ~WWe z{LNqg&GYl~XPdAPior)jsFbzkTj zgIfzl#9AU-^NaI~b?w(rPhIi{yRrgnQJ4YgZMt@HGEc3f9^wo&a{&P8R(|ivN%V9% z`PlvY_b$)Q0rYk4y`SE=@ms(3Z$I_BpKZI7SYugNUY)%MM`{6UHU-gbpt9V977}yw za&lMMGr`>R@^E?U)~%solIYcW?gS!TsB}ZvW8xe-P+X%~6@L;Gb9*72}Ua=m*`< zNUWUfPrv)!@7=q1_iy~i|Iz8`39L_?B5f?x)s$bViY;gT>)3Xtqnm|TRZT<1M!>v)yFNtoI(4#s> zDREu8e9KH%#w~nUlU60bzInr)q`~2yiBa&1dI7a-f|lxlXra%Rl@n8G>_`OGr1iYf z(12x;F?tlbaZpD7tP~yDh}c**b(NZbax-`8o$5w(ud-p-He;~x48RJR!_+8GlIznf zj%9=ebEPwTtjlhWZ+!hPKJ%&Hef;RW$GY|i%~*DnZ0{QQXSxu-a=%;Gu4Y*7nCvw%?gc01$N+79wfS44lRsd~(%l3^MK(H=v z{K?E7J$iKi!TsD83VYRX137X)k*&OV26D-Zp4TW@afu((rm0Qdswu4JL5Nn5v3OGe zSPz$nWTICwouk?r=+k(tIuu8%q18X6;~^rXqBmV2_mW+UF3r*wp>m&K+Uw-+Oue@x{GMNlP49Ra@kpz21Knf|1W`$raJ8Z2l1V;3C1+A%C4f48E>8H{|3EYvcuZ;l=-O* z<6ajnrEzLMIX!vn?%hv*@{_N;{N-n#dG4bh{pizo?np@iO~a0H#A3rVBscak02ZU_ zj!OJs}(R*Lo>HZJ@_;bJbE5B-UTcfYNtlF3tOV0^w zoU5-Ufd{#6+6LRTIclQK;gh%M>&eOd%roztCQb&L!J8%sN-wH6pCkN2+t9qO?`%>9 z>Fv1~V%C)&aHA7$!hCvse(}Z|Z|rt^u)YLf*q`ig-MZ!0%v)sKe{lDu_r34A=blA$ z_f~_fu2CtvsO#;gURETwK2Vr7!%Yzx3lD`tS#r^>UusY&A2u!Un*5#66oQ z>l2pv8vt8yG#es=Sxrz$CSRLO@D6(td3F z5O<%9qZ&EqUN{RO3~9y8klpieynOh3zxTVZeBsO4vzJR9ICTZ}FvAj>rh6<13=VI^ z3fRehP52=maN(g9Lb z6ox#+C8{lW(G8}-cB87(+F-p<)Yia3i}2$AFRyf09DobrcC+9}*re&UET4y}e_;^@ zF~w|-H#fT)+LCt@b3cMvU)7x}l8Zwi>B4Bl^%3muz8OE8HAL1AR|rSm{Cr zG8C`@sw2#m&N0oq8&5nrO>-_i&AM4cIFjUeT_RUW77c%LC7T%)ItH4s7~t#LkH^C_ zH8(HFkJj$2^tzb)&vq?vDf&A4l0`1ZhdjOWzVSiKR35X-p(2=i?l#r*MmWSw|0Uv zf+jP}T0|IDhxbfJx;L0H_oDh<b8l$TJvY;mr+gnjW4#{#QTqGk^C#|Jy(I zqd&4Pi)Tkzmk|ss;T_(xXK>o0=ETf`IgLH7^@wJ6es*T9-Mn!_JOiMBQgkKZu-t&+ zmMEUSVvQj5NBD@?I2$5p)(WO6G;VTc#aZDSB;~wjNqw|J7^PFHGgU#8>b6bR)Y8V6 z>QOWO1)~os0m3>P0U4t656k?2^bn>%X?21H$)y?1>m`7)8lIAJo8B@|S=1=YK9>FkAbP$*DcV5Nl!$ zYdnv1QjaMZWCk;&Bl@Zgkt&ZeGjZq6JFlIbWbbefLqoc`#xg6HT=tt8uKtH*`DTF9 zi!bTCpf@y)9ul3+33uYXdvAA@xj}WGCvM$*qWKh=ljq^`(5yZ4&Zm1%`Uz3=+9O~f zD-xNF#gK!J)eQ4=&;5S?hky9T`~AsZ`>Q`Wwb}NkWD z0ibX7@M!g6%p-G)w4AEmV1yOY+LS$w)}83W6!=Qm!=+{h7?D<8p3W#1Z0?b|2S(yE zH+%H%ZHjChnds)oY!(sSZ17t^?=S;+j{cD4)w}eAfxv~c)U}246yns*h^zL^(ce+1CYH4IC>r?ZQjUHQGU0i~W z{0trCX&12OQOOuJ!V?1o;>JeOtAUq@n}@9#D-YNhKr{e!)iUyvEpn@t;!1QHWG}IEMmg+YEmI3{Ys&6 ziGi4H7e@|^bI9XegKE+gPpLs16IT-v=rqDN?Nd{{PYr)zG`mr01(9?B$3Qs0pO5UR z1zYd}vU1$jO{X!RQP1&;Gb35GG@v8oRxA~{(ajeIt7vv4kE+~qQ;jVqw9+#i)`Kxv zD-vdtgYrEqGjaCQ{Lq%jUJwp-(yo3_Rf;M^T4lfk-LP7ES|BH&!x-DLW{uT4PbxS= z_@2J~^y&3$hx_L=o-&(|E7vM>S4|^DTtrcoSksm>Z{`spu`ANhkIOQz>u%@BM)e4f zp&p&auU3z1U6(c3cCLwrgl&7LZe;Gd()vbjqMWL+tURuVl4k?lxe&AXDMwD;j$W9U zx&@e}xwB>wPN4RQSRSi79sL-4t}^RVf0_xAQCXa6Lft&21{B|4N~m&`u7@(<`SI-L>-mp={Nw-OPkj8w&C|XtK?54BW=J?kks>p)Bhc5r2By~T zK6voWZ+*+BT_&edx52zD6Z+m4lIM;{SeR_Pi*7Lr3;NFVf$qIc^C8xM^@&eBJU{ze zf8#$no?lR-v`A2r;g&J==8Db9v=Cw;G&Q1u4sCY+=O%HM2VYox>a#Y>PB*W6#6L;LKq#TkePJF5ttQ8`{_a|RgcpK z`_rHK^w+-jwZHmT{>n=)y|h0$U6&;@Cie_tbt6v|dsKi+Ypt0xT zUw7fwu}0j#e{bz;YwdVA?oX~geEj&6zxc_+VVS0Oad}vxr^d1)18b=K>uH8&<4Pag zP=fq>>&w3FQpPha(A&=E-L9d9^+FxEdi-h{lxXpELk3%VVz8FR0W5ejAs7bUO(mf5 zjD&Yxo><@xn%*KXdtX-$(&Zb~I48{?ECST8qC z`sOzzcGLW|uYUFZ-MjzYKl>;1JgxnB?Q|cpgu&5V-l4L7A*0pI(=+|TeI8_UP%_LA!)h84bl=V5K~!f zcOkGIJ)5CprB(%;^l{dnjY)5oU8aYLM7m|@vgR9QlrN+Fugd1n(jo6P0v=QtA-2^|8yIuKz~vRtJHpc^z#KiBg-yt#1L zDrC-J&9H_ETsDlJAQp2-Kt16i$>Ng4kW#Ou6g-XlOnQ>62p4 zVL+>~0lGy1iS{Eu{85@v@Y)zn8ZADqFb`IxKvH|4*$XOGBQl~7{I2v#13?`#89`%b zeTb%Ep+qvdD8x<-m56qB(aV8w)C@+M&}S8T*g$0^%qN)Z4R2MCyapZ{8FPl~ z6<)NArdxr`2ieehiF0i1QK>`66n9~3kb#5ll})$9xvQ)~We3aZxgBkz+?H z-4e;Q^yM#q`R3{Ad*A!Q+S8)Dx0<_EfH@;7bd=wxmm9wVwLxm} z))*Yb%n-d0d@iWO3|9$=E!6~Lz!#;z)GKB)jp{4QygW4sS2gU&I4(7P{d<(}JlZ^c z?Q38C;upX0lRx>BAN=445<%lQdHB}mE}42URAR8}#@iO9ZHJ3MmwH>sD^U&w`_%J6t=ZDV4Dx5oVBTAS7PBnN3Yy6<2h0DV#~4|4~Og5 zuD9kJ@mcE!oD~At=UiNzySM$xDFv!UkZ1x*wJY(&>QEU2Q7CF1n1IrLQ}e-w@Wi7B z5AQ#CyZLmuToQ41asIDA@rhTy{`G0MKgPNQ(a01FOFt}2MMYY150%_eTY!91augu+ z>el6WIN6_`UOzQ$1e#{2m5Vt+m|+nRvIWw3Q>blLUaCu4Fs5;wVPr))!M$A`j&Hv8 zhMCa?(9F{8_MNA$U%LUAH*Y?__12s3dCz-Zc;SVNZZ*jW`JNZ?UH{7r?rmyQ^w{rr zmzRg%`Sid0sh|2=fAz2a#M%$@Y?Ft3HnZ6QTdi^Yh9iT`y){SkFc0_EY-*m((adNV z=AN_YrIIhz{F2Bk6UpFQfN9M_lvmE07CDg3PK@G|Lmi z(kQ?Qbw0Fz^CAwy;2Js5Tv00E$3`vf=HBY~tAl(tv&oXfC(Q{ouuLpHj6%SezQtJ- zecdV*H_NKwa^@!OpEf5FpaV^K0I|&Tak+f_N5A_AuYBn%$2HbOgi>=O)3XN>UW1Y1 z?-~q1rNU0UDz`e8Bn?*RGQf+<>X<@CztNl8!`GO$`X)l*08)ol{v&U%4!_>ABm?8gD9I(G{UUQEpl!)rwVV)`ZT;W~g6b;?Y=c znp^wP|KOv#Y*pQs!($Gguc9Q>--lG4;0RtNiAJf3iY=8mv#uzULtwhK^2S0L{*2Io zu5y&0NG62EIv5&F_Y2h%E2r3SDOkoI))I3DACqzo>1I@v3u=Q|`PAvV@fOrvlL?jA zwOgierc2%c>n!<-(k~2}W2SXm2YP0kZ1U;h{jdp%^l6%0R18N(_1-h1d24O@#;f1lo$TN9 zo_8M)N2E{FlyVhlf}=D0THdQNjHK-&DIxQ?tv+bkn5f*LbC2dy*y=tBNU_J_St+*2bURx0X6xg7WH%g>`GFh##G!@l3b0c}1`4!#J*W**SZ(qA{J!5GOhQ_enj}2tV zppk=gKLsvIY~%IYnA5|@P~cl_2kmK}-n@JF{(}emc^+?Y-tV7$@|L&B%;z>O%klDX z`O%Mk^og5KR0ItzVN6a8ys)dBqVrh-^VH1qPyXaj-ucX(fA|mn9{ZGOa-;XMIULPX zL*->aM2J|oel{KyQ)^S34CW1vY?@YaV{j9!S-70DT0^>pBE||za4BCjRH=Iun#526 zWd_L89cVV(gv|_1ODj5&*owO6kL2-eKqFKESmw&()+`lfBY)wnGGi0BK*mP(`7&b2 zZaFV>MMSF%*;GC>1{J--Zp`~*&MHY%1twoGL|RB1m*O|G(>X7q7g3c}CFJn*8|QWvAL_gH z--enfYzIp%#5z%nIIz;hS3t8ard0huW|A;AMBSH#-&e?-0j-Q5cy_Wtge)P;2w*#l zT(_h7m7)4--88_hAA$B`|G~$`NmN60u{G*e^$rVLQChTICQSbr66t54v*sRI%ld z-l*t}EU})d2?-&*#^$sNU=|ruv)#OtG*FJ`8n8nmdK{0Ji51025VIlWWp%?#JzD}A z4A!WML=3dwu5evEUCd$t@moKml^D_c8YWv)le$y%*QiXg@XM^lQpIdFgIm&LRfq+M z5Ii=~|L{5sx7zE<+C**0!H{^B%B+c_3cQVjsGn!0=F^fMOABhAbz-?1l~JzoA=QeK zPRmJ-!P4E=b?u=uF$YWyO!GXo_VCfeFMa8YU-gmSb~}<{thR|(QG!dwLhrHL?N4?ms1=?dFuc)Ix}vhYYz_KF%M&| zco4*Cr7aY$H~2lB6~YR9^liFl5W_{a3O7L0^ZfS>MPLnQ-|g>f>nc!kx0~BMXYUPe z*21K0X!=rCA8YJ2YADrlp@6gMQMFG;1ku&bOZ72SVbt+ez2>;5iodR7ZTuW@d&5`A zkPRhDy<%@{-~ZR@f29=$p%S#HOT+kUdS32rUDm#?r>7?-KPS`aG|FWbByP*`aDIMq z{l;}BAB|p0#oW~+NUuT!Y;J!>_jm}s4)8hmh>k~(9-p0^#Ttj+r`_}m|K=Az`v-qG zpPWR-8qwG8X1zy5M2H59Sk34OUfpccv_+G6MMs*uWu!Ns8hB?J^3I(*`+Y;M&6-=| zltwdQC{`yWR|JJSwQ;!CEtS==CCRf=b7Y_uLYqBd-d=y>jl*%7=bc($Z~K$|lQ*Aa zd(|d;eD?6p(|6wgLm!9?Z_Qv$9$ecQsCVgwg2NJd?Z&lNUU~VA*I)l1|M~xL>#3W) z$2=*8seB)+OfOi}YLtXlislWixxgXw)|w5n8cFn8$+}_YlUr3dR`zN+PE}pXtj^1D znA0EQ>K2G1L|h3Fk>dygvmAtuc9Fb#Fb{~8oVZ_5N`c&@%Z2U```N0KmUv4ni0_> z)=n$bj-Cm}Fy&TrJ8me4!M(Xn?r7fJ_W)jc--|E3^aG}(gyBF8E2Gy@ZK=jpSXF5g zNbc!<(pJrSz_N!@Md`Q@kSIOMdjsXe!C)$3f2aZ1I-51FSLZ3qj75i$-mFmtq^KVUkmlQ2q39y3 z@mDMQ5oWL{f>IqFbWAj}gjw|Zt(ggQ9o0IuIeKkO9b%50MA@Y!OR2aZ`un{#p+(Qg#-Ssm<;psL zLedLg#c|G zh{BWxoXu$y^%k53A2JXJH3poDD`YL}j|s5%x&(v(3#~MiQMfrr##L}|$kq%lMqD}~ zGU1+O#O$K+^|&k+X-;xiCroD zoEx7;m9{Ns@v`+aTWT67N(D((R0Gnd`EWe;zFa#!(V$$WH|vpZG0$zcn;$)X^u;fJ zeqE04)Aj4up1k$s?ORX1>s{}D?|a|Vnt$$dpZkM9_@n)9w?=ekjWCRZ8&j<+dIpfY zdDefC6R!g>$&_vD*3Ft{TwGkPOIYJ9hSz`{w|1xu4fJG&O-sP(3SJZ? z%xLpr&P-&M0uEU7_S|#N-G6YeFWm}?OO8{cWrk<&-RF7!)!+Ed^UKS>^*8@BHkOHO z)|*+lqepATtaz5uh88-k={f`6qRZiU@8101qiqGe?1{W#B{;6qb#+h$`@v)Lw~FRGwVPcW8b z48&uUE=Vs61}@Or26ainHNqw+cM}-e_+=izla@qiJe=U6#ag>4rG= z*dACRB|LwP2eKYR(l9DCN{Na*$>q4X@7jbiq)yB9Y+Rh?*=VewV!{(a^Eyy~!yQs^ zU25h;L{BIDozc{XX;6~K+2MFN9uLzrC77;mk=X6`?#;}aE3N9un@{Zb``%ZtNem*z z+TMKeHN1i}bKCEB-+TS_uYTpLKmA|)^s~=CdwF~~wKfyt85a}BVgSUJx#?r}(9)2z zwJaO& zwJ@0(E*Q5C<8-=Snyi_oW*z~>B)EsWMb^_QzMq@0cu`@~hD48S=7|Vpgs>x$?HN=4 z`p_b$_kmj!gJM^P-NwD8n_5SdkXp~2m=fU4kV}MFwl=NZdXJ`BA{ig;);hvGTw5@W z8c7RFDzY2(mX2_tus0zZr;B21MmHTnZ=WNAU!9eR8yiJ zBHlb6Tg_U;h!Y};%r(^#nclM-GQ!78r2|)FB(p74{)JU3%KEJbJp#;%l&HgjcSqC* zPn6(Jb3-!1R&gRiUu-$5NK=x4p^Pfv{Fx4Ns#SUSB+bd35oCudZP}!% z;0J7)+8Bd5&;?vikuHdFY;#GGpC?nW*#=N-&?=t*UuCz>nh%OS(V9+_Q) z5!>Eq?B}gnmcw2S-pdRgDqOOVDteA_Y^f}as&%AtDK%nT3cpYhLsJ9xUqdTHtrN-E zg!M#5G#ibyXNDUh+#N3MStgclUGR^)r_|`CIwQ=)zp^+VMp9Lg^^k;`2SAD7MdYO! z54&b&7IE!le|may|KY=i26R-$liZ`!)l1P7R6T><7aayZbA6`}*S+?BSdRN0jf*mR zGjv`|$K%CuIl4LxC<-&X&c2#)t~aIO0fLLQv_@Y{(YeG99DUU!Mio4T$9N4*!GPwR zQXc=HZli*nxrj%cym}pBC8*qS9hGICd-a2j{)juVGue7`!4^EMo|a|4bjenff@RR7 zMzcOrDKOBpzGgLH>Pxd=XL;L?Vo?uNRiz_2OnZg*&{7d@WR`Aizdu=y7Z(?YlM^&X zlXfED9o@{#o43j4cGArrU!322aPJ#m|HkM3_;WX|U(3Y##rfPC($+vkI#Up|R@gLL9+$L`5nV=s{Z$5f>nme|Ft@p?P&9bw zXlFJcj7AwjtyZ{c<1dE4_LD!E>+%c#=I5L5fXSOjt}tIICr%vK%;w?#Z-47|+}hvz zoB!zw>uaA|x=)Nq$%vqC2HHE$(#$i=U3ii=_~qd;@7=$3`!+ONLmtKe3-grGu$reR zf|n+;4zr*s0=<=;6?Z`rr2@l%ghgQ0Xse~dI7ZcMSr=FlOZ*X>JI$Jat??d?Xr|0J zYH};fiy;e(qt?WQ3Jl7n@aJUk26(yP%E`bpL0TU#_oJ;-;J1(kwYn4j6!vy}ni-nF zpkYv84BqF^%M~a>iJc0nN(a*xOCaIf*VDyp6mY667^Aa78S55TKWu@`1({Z=3fiUH zXGs%7<7um@pH(?ot)R|By|8rC@~&^a(T_Sl=s!yOp|7j8W^F={x2bopHz;*B5D_^| z^F+X1eBR)%vleYNnW^?lr;{EXEnz9#V$se5CmuYwe>h$musb>V?azMt-+$`Un5XDH zqW9>@QH>sjdujQH0+xG}bh4bDHP{oDCQC$vp=V#$Zr1v-pPuY?`yG0^m2+cMtX(kU z-c`mT!)$`XD8O+KgoRKrfe>2%&M^TCO5E49jF_hB-r0l0ahax*%+4O%o1g4YAfss< z4#≫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

gLy<}w#^s4s*>i{q(GHXuT-pH_Wm;HI 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

i_&48Tq96X)t_P74y|MBmC=l5UF<6fs(cU8$4 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 + +thingmenu: +© 2011 Christoph Lohmann <20h@r-36.net> +© 2011 Stephen Paul Weber + +dmenu: +© 2006-2019 Anselm R Garbe +© 2006-2008 Sander van Dijk +© 2006-2007 Michał Janeczek +© 2007 Kris Maglione +© 2009 Gottox +© 2009 Markus Schnalke +© 2009 Evan Gates +© 2010-2012 Connor Lane Smith +© 2014-2020 Hiltjo Posthuma +© 2015-2019 Quentin Rameau + +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. diff --git a/xmenu/.local/share/xmenu/Makefile b/xmenu/.local/share/xmenu/Makefile new file mode 100644 index 0000000..f5c7488 --- /dev/null +++ b/xmenu/.local/share/xmenu/Makefile @@ -0,0 +1,32 @@ +include config.mk + +bindir = ${DESTDIR}${PREFIX} +mandir = ${DESTDIR}${MANPREFIX} + +SRCS = ${PROG}.c +OBJS = ${SRCS:.c=.o} + +all: ${PROG} + +${PROG}: ${OBJS} + ${CC} -o $@ ${OBJS} ${LDFLAGS} + +${OBJS}: config.h ${PROG}.h + +.c.o: + ${CC} ${CFLAGS} -c $< + +clean: + -rm ${OBJS} ${PROG} + +install: all + mkdir -p ${bindir}/bin + install -m 755 ${PROG} ${bindir}/bin/${PROG} + mkdir -p ${mandir}/man1 + install -m 644 ${PROG}.1 ${mandir}/man1/${PROG}.1 + +uninstall: + rm -f ${bindir}/bin/${PROG} + rm -f ${mandir}/man1/${PROG}.1 + +.PHONY: all clean install uninstall diff --git a/xmenu/.local/share/xmenu/README.md b/xmenu/.local/share/xmenu/README.md new file mode 100644 index 0000000..757fd8a --- /dev/null +++ b/xmenu/.local/share/xmenu/README.md @@ -0,0 +1,88 @@ +# XMenu + +

+ +

+ +XMenu is a menu utility for X. +XMenu receives a menu specification in stdin, shows a menu for the user +to select one of the options, and outputs the option selected to stdout. +XMenu can be controlled both via mouse and via keyboard. + +In order to generate a menu of applications based on .desktop entries, +as specified by XDG, checkout [xdg-xmenu](https://github.com/OliverLew/xdg-xmenu) +by [OliverLew](https://github.com/OliverLew). + +Check out my other project, [xclickroot](https://github.com/phillbush/xclickroot) for an application that can +spawn xmenu by right clicking on the root window (i.e. on the desktop). + + +## Features + +XMenu comes with the following features: + +* XMenu reads something in and prints something out, the UNIX way. +* Submenus (some menu entries can spawn another menu). +* Separators (menu entries can be separated by a line). +* Icons (menu entries can be preceded by an icon image). +* X resources support (you don't need to recompile xmenu for configuring it). +* Multi-head (xmenu supports multiple monitors by using Xinerama). +* Type-to-select (you can select an item by typing part of its name). + + +## Files + +The files are: + +* `./README`: This file. +* `./Makefile`: The makefile. +* `./config.h`: The hardcoded default configuration for XMenu. +* `./config.mk`: The setup for the makefile. +* `./demo.gif`: A gif demonstrating how XMenu works. +* `./xmenu.1`: The manual file (man page) for XMenu. +* `./xmenu.c`: The source code of XMenu. +* `./xmenu.sh`: A sample script illustrating how to use XMenu. +* `./icons/`: Icons for the sample script + + +## Installation + +First, edit `./config.mk` to match your local setup. + +In order to build XMenu you need the `Imlib2`, `Xlib`, `Xinerama` and `Xft` header files. +The default configuration for XMenu is specified in the file `config.h`, +you can edit it, but most configuration can be changed at runtime via +X resources. Enter the following command to build XMenu. This command +creates the binary file `./xmenu`. + + make + +By default, XMenu is installed into the `/usr/local` prefix. Enter the +following command to install XMenu (if necessary as root). This command +installs the binary file `./xmenu` into the `${PREFIX}/bin/` directory, and +the manual file `./xmenu.1` into `${MANPREFIX}/man1/` directory. + + make install + + +## Running XMenu + +XMenu receives as input a menu specification where each line is a menu +entry. Each line can be indented with tabs to represent nested menus. +Each line is made out of a label and a command separated by any number +of tabs. Lines without labels are menu separators. + +See the script `./xmenu.sh` for an example of how to use XMenu to draw a +simple menu with submenus and separators. The file `./demo.gif` shows how +the menu generated by that script looks like. + +Read the [manual](https://github.com/phillbush/xmenu/wiki) for more information on running XMenu. + + +## Acknowledgements + +* [thingmenu](https://github.com/singpolyma/thingmenu) for being the base + for xmenu's code. However, xmenu evolved enough that it no longer resembles + thingmenu at all. +* [dmenu](https://tools.suckless.org/dmenu/) for inspiring the stdin-to-stdout + interface, and being base for drawing routines and input method code. diff --git a/xmenu/.local/share/xmenu/config.h b/xmenu/.local/share/xmenu/config.h new file mode 100644 index 0000000..4fdbf47 --- /dev/null +++ b/xmenu/.local/share/xmenu/config.h @@ -0,0 +1,62 @@ +static struct Config config = { + /* font, separate different fonts with comma */ + .font = "SF Pro Display:size=13,DejaVuSansMono Nerd Font:size=11", + + /* colors */ + .background_color = "#111111", + .foreground_color = "#d3d3d3", + .selbackground_color = "#8f6f8f", + .selforeground_color = "#111111", + .separator_color = "#d3d3d3", + .border_color = "#d3d3d3", + + /* sizes in pixels */ + .width_pixels = 130, /* minimum width of a menu */ + .height_pixels = 30, /* height of a single menu item */ + .border_pixels = 0, /* menu border */ + .separator_pixels = 3, /* space around separator */ + .gap_pixels = 0, /* gap between menus */ + + /* text alignment, set to LeftAlignment, CenterAlignment or RightAlignment */ + .alignment = LeftAlignment, + + /* + * The variables below cannot be set by X resources. + * Their values must be less than .height_pixels. + */ + + /* geometry of the right-pointing isoceles triangle for submenus */ + .triangle_width = 3, + .triangle_height = 7, + + /* the icon size is equal to .height_pixels - .iconpadding * 2 */ + .iconpadding = 2, + + /* area around the icon, the triangle and the separator */ + .horzpadding = 8, +}; + +/* + * KEYBINDINGS + * + * Look at your /usr/include/X11/keysymdef.h (or the equivalent file + * in your system) for a list of key symbol constants, and change the + * macros below accordingly. All key symbol constants begin with the + * prefix XK_. + * + * For example, to use vim-like key bindings, set KEYSYMLEFT to XK_h, + * KEYSYMDOWN to XK_j, KEYSYMUP to XK_k, etc. + * + * Note that the regular keys like ArrowUp, ArrowDown, Tab, Home, etc + * will ALWAYS work, so you do not need to set them. + * + * If you do not want to set a key binding, keep it with the value of + * XK_VoidSymbol + */ +#define KSYMFIRST XK_VoidSymbol /* select first item */ +#define KSYMLAST XK_VoidSymbol /* select last item */ +#define KSYMUP XK_VoidSymbol /* select previous item */ +#define KSYMDOWN XK_VoidSymbol /* select next item */ +#define KSYMLEFT XK_VoidSymbol /* close current menu */ +#define KSYMRIGHT XK_VoidSymbol /* enter selected item */ + diff --git a/xmenu/.local/share/xmenu/config.mk b/xmenu/.local/share/xmenu/config.mk new file mode 100644 index 0000000..c14393c --- /dev/null +++ b/xmenu/.local/share/xmenu/config.mk @@ -0,0 +1,31 @@ +# program name +PROG = xmenu + +# paths +PREFIX ?= /usr/local +MANPREFIX ?= ${PREFIX}/share/man + +LOCALINC ?= /usr/local/include +LOCALLIB ?= /usr/local/lib + +# SHELL variable (mainly for non-GNU make) +SHELL ?= /bin/sh + +X11INC ?= /usr/X11R6/include +X11LIB ?= /usr/X11R6/lib + +FREETYPEINC ?= /usr/include/freetype2 +# OpenBSD (uncomment) +#FREETYPEINC = ${X11INC}/freetype2 + +# includes and libs +INCS := -I${LOCALINC} -I${X11INC} -I${FREETYPEINC} +LIBS := -L${LOCALLIB} -L${X11LIB} -lfontconfig -lXft -lX11 -lXinerama -lImlib2 + +# flags +CPPFLAGS := +CFLAGS := -Wall -Wextra ${INCS} ${CPPFLAGS} +LDFLAGS := ${LIBS} + +# compiler and linker +CC = cc diff --git a/xmenu/.local/share/xmenu/icons/gimp.png b/xmenu/.local/share/xmenu/icons/gimp.png new file mode 100644 index 0000000000000000000000000000000000000000..e4c4a639e6f1abfd56baa59ae97687e5ce44987d GIT binary patch literal 2976 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 MGCyxtiFJ?oFA2d?QUCw| literal 0 HcmV?d00001 diff --git a/xmenu/.local/share/xmenu/icons/web.png b/xmenu/.local/share/xmenu/icons/web.png new file mode 100644 index 0000000000000000000000000000000000000000..a22adb0033f088d7e7e94b26f9edc5a32646255d GIT binary patch literal 4870 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 sJfV#2HMK#&9&m?*&rM9`|kkW9!(GLy~^1QkU? z)af)W{lW6|?GIIJ>CcP)ew!Hd?i*kJhxMHe+a;TC34g^WFE_`^=mfa{Bc7 zzUz9w_q{F-WY%8yUVH7e*Zw*C?7ipAo$h5zavToBymE~z4RYIOE2L6KxL(x(kV>P% z7>my-#(Bml@Ogr%_)0|(tFES;Oj@AvTu`Rlt>d%lWG!b>(?U|Fv%5U!s2GzPC5mS{ zCxhjR&!(Nr6mC*$I>~RVPM1Xw7b)DN)^zmE&abNYosVSF3P$4U%~#Y+M|Uu4w@$ZP zr!#4}_LoUbf6_+&9n|sJbTQ(1nUu1;YX1;zV0iJp!k$2H*N!)-neJMo(?w7T|C>); z4aN$cpPgT_+l$WLxU@O2ZuZPen;WJz2ZFJ-X>Ap=r_G*O773NjkaC}b{Mn|KF0V7r zee&*_El<8Ox_0I2WsiPq?e#zZ=?xXMn>J7%Wq46uyGz2ifM-0*b)Wkij;+SHF~nN% z*NVR${|hZo|Nis0FLJ+ftg+5l()-CZljppXm^|a)`xAcf!21&*VtWn3fRP0D+Th=Z zaU;nuK@KC~VH-U^w9(UJqvsME`ARruq(bHk0=VOp};V=7Ij?Ouf{%RZibyVC) z^5@vdzi5L$Zi6qivA^6#{&^exY&52k>}vyw_J%6*oziw0B`)%@_ZsX?~8$G|X@k5V|{;$~hVTz6Ym)Q8>LmPV@ zw8=Nmrk%WQW6ygw<=St9|H;N4rw#s!4gRzZK44R>fQ{eovnkiRHuz08{uynfzsv^j zvcV%Z`Igy~_n3{Jb8Y-kVS_(tlkcrI_#-y<%(d~)kd2;IHux`W{1dXtcY{s2&a<)S zIve@%HuzmOb}q2NPqDFohmHJ=Hs$)1jh=2B`DHfpXWGd3+W6-ToAK>7oA!3UO}?DQ zk2L;&*#^JCMo*rNJ$@U1K5V1s0vq{48~=RO#y@x3$RDuL|3e%6Gd6x$Z-bA8AI?Qw z_VqR3CC2GS>l2wV3Be~BJwM3ATVT(4$Pa4VoY#L|>&ce?tCn{?uJoAl6&ml;df+a( z-qyI0C2x4ESJikM{9*t4KqTr9uc}$p918kZ`PMc24X<~7ODO1#M1A3?*Q-QF6kJlj zsL2;z>5o=5G%#eOfJI@yFX{(h>x)8tPzykmGNE8&VExM2x=1t-jfvQDUyHxi7mhH= zVt=DA)*Q`<*J>8WTAKs))VyX%pt*U4zdq^zk=219QU z)ip%5gBJUuzI8rUZ%t^U-z+Q4x8|!Hlge4juJTJKXG^UOHE&)Y3aV@t2O_P_J`_)N zgjhJG9iniCu0m;CX<2E+)o87#k+84DCthD!k9Hr77=ac%D0}PCB;h4*#2@uGpz@?Q zj}R4zHlbOlh_FA1VZa+`fvdde^;zi@z8(sj{DJjNQJtzeHpY~& z_(2Mw@pNG}1sbAFBS@o-hQb^^{B41#fg+&8v#~^?;b47Bs}X9Aq8k}OUoaGD_WN56 zG{K0m$rlc`Vc5ioS--(s-?YKo=nFI(u#*D@5;p{bR1s+v(hzGU7Y%Jtq}gbMgChoV zQsUuee-P^6)L_U<3!(wE9mpViqs8A+-?~|)j5QlAsYLZ?thCYVt&eVQ^?TPbDJ}Me z*Fzk&9A>JZDc86u9Kc8l@iw2gF%VQ80a7dqnp3^L1GM;HJuA)t*a+96&Mdr znb!gEyv+4Ua~{!pxx#np^+yvg*SIHZo?`NAv+$CwN>5W3K40UlS-4x{ZCQAY#ZMERVDQT<&TksMKzTJY4x8OT1xb-<}mj$0_k>72>PqE;8EO@B}-)F&3v*2A8 ze3At}Y{5^r;5`=n3=7_C!OyhdeHPr@lVNnf1?SqXc@0|dvrG_l$bz43!Hw@LhHc~= z3tnKs&$Zws7W_O5KFNYlvEVKXe!c~tYQZnC;N=$l;}*Qaf={*Jl@|O$3+}Pt7g_LH z3(mDd^IBuUrwc^cdQItyN4!Rsw} zi3M-4;FB!4--5d=c%ucMYQfiA@Nx^@WWg&ec))_644(ABNe`U#z)26B^uS3Eob}PxvRwGP$#csm z=@R}{^4uawmIxmv&#i%^A^a`mxh0Ss{0PAL>&Tao?-Tw8^5e<(2)}~-1oB&+uv&j$sljZ*%c^COU z;a?-qCHrKL@Gp_)Qhl;Z_~*%=M}Cj+2gq}2KDkTyr^$0kKDk}^$H;RjKDkx+|0Mr$ z@~y%@Kz=IuwZeay{DtIeh5tNxF105sh5r? zVow^v-$I^C>&e06Qvc++q@L^({s!{X$@d7qg8U5fUBX{Q{xb4=gkMOWOXkU4!p|ko zrSjx<;b)NN5_xi~@E4Ki(s;5}_;bl~Nj$k$_%q0JDLh##`~>n`0#8;7KZZP)zLVv` z=aA=;chV*Nhg-nUCto7`JLInO@UM~QQg*UO_?O6Y2|L*( z{PW}&k>4Zy0rFh3PVN%^Y4TjEPHq?eG4foZPHq+cKglm8-zxkAgJm zIoT)t4dl6$oa_;P1^E@^yM(`r{7UkBgkMOWOUB7v!p|korQ+mv;b)NN5^-{?@E4Ki z(r~g>_;bl~NjSMy_%q0JDL7dx`~>n`0!~&6KZZP)ev{?G=aA=;Z_*|Fhqr^jiF}Fh z?~uQlydnJCjo`ky>p?*(iO&`MjPmhtP7d-Lq{=3n75jWU>A-ZwG zXdgPacpFb^?}Nxz&m8w)apzjFp7t$+M)7@h3?|%ti0Cigwp4S)dyRQ*#T^xj9gI6a zheC>2dzZs5xfl7MeHU+=oJa3Dzh?5|6#p6WY!jVz zd#dAyJ@FSkou$uVP(}Vvk-$d>ka7EvBUXmYRl|9X1~Ka6Xfg1^KF?iS_Ms`>xoHe! z_Qjnz)5_e+N7BAlX>ZZm8|=0J6j9LL1?^oa?OkzasnY%uNw)1dO8XS8eU!cS4NCiA zXg{3NemL&@UYppC!=xu_e@MobS-&Jf@pr@fHl8U|+IyhAC#Ah7?yOPTPaR475~ckv zt^F!{?cYNbJkty9y(#Uzap&+Rv3(yi$@WaY41%+!Y3;`_V9@rltW{6kxlJYAGE&k< zRMK3X^!r&!uT@DGj+8X4lKz?m9^06e^emM$f25?BtE7+Vq*r7m9oQ&kJwgrHWj&5* z1X^%HCpEH??o&xWH&W95D(PCC^e01^Zt74;uNx`pJu2x8o%B;#NzYJ8&m1Y~)hcO@ zPI`?_dW%#}=d2GI4flQNZ!%ns>vo8IE4T&pT`I8Hg6(vo%^Y zu%O#H8l@Eb=A^?I5%wZO7UWvg$iP|M&bQ2BOt6GU_2(fPV_i*O!hH+_QlS|B0@6MF z&hT*DeH{4=7kBV6FX3DSl^42?C7g4qd#7iAAMVfYzV2PpmM>2?kv3w0~$psXj}aTsJ^ zswW`<-hwWPO+Yyh(H6M_Ie#cYiFc&sa4UEoa$iH_a|Kk6!u`kJsnU5j6C|9sk>K8R zDjM=6SZlcz^q~Tw%3?w?4zpluueNodz|*d>?4KyYCF!g^#m{wl9QfZ;{G?I*WY_tI z%P^49&j&EV?_hyEoeOc(mh?zQot{n)kWL1R_fEL)i_SiRcRfpBIM*;XO-}3I))g&E zb8yJFErJ_aoZ704;*4jxtsYDn@9Eqj8EGRNJ%>=r_GhI=Vilgw4vB^9o>Q({5Ea)| zkZ9K(ugu8noA08{%-R&8Tw#-t`Qs&()U&6v7UkT*45T4-PDW$Vxg7Asf6*VKH{-dU zM6Q{^uQM}Pj11C++16Fu;l~Kg8+X6;#$712a??=i=3RnW+YtKLpeIo}7^Zo%el5g# zK*$zE)C^U}A=BNz0NnuP`xvx>=VW1hrWMaY{q~gZN^7I$Y_QusXy8H~TT~u5gDmT; z>0Q?8ei@@F=81Kf1!2Xfb4$-^d>qjq$on!{-hR;4?MxyOuY~jW2*sV+-U*^|d%wgK zl3}OJM|(?DPKrB!DACSipJe`8>W^g7Qj_D(|4>qg7|~hxx+nfB%l-bJ=zaH~ni6gs zm17v)?xV_v2ay6Z`7;yF@krFs)iyp+nvYPz{ra2(#h*SO9i-dcN7>|9ggF+}_juwx zsw=?49C{M7GwB$WdBs2KNw{A|($DrH&A%aj_`j1W*x7lCL+SkVwtqwCC^4aT&Vf6x z|L;^o^uNu1jLIJRZXXSOare>f1826o`(V=Rb1*;sbP^49V06OyVhFYAKALbJ{nsAa z8F#+bO4s~rxlxci@NdW!K<;b*hTIs)-3mFWD>RCC26!9T4Fp}{6!w;9UW zD(7+*oN!*H(3KjUqR@E?ZP93vLdz7oRHH*2ZxT+ILVX(jokAxl^a_n0QRtBtmH8ap zD$$RhpishjKgd&T<4^O0#!dM%yNvT=NWJ|gc~VF?nKn`S8++{6xdVjPA1@C|KZQ6^$v3<*sA-B*ULxbfO`qg6) zXy4Lr#Bk?=TsQs2CWT-nZ^%ZnQvuN2-G7!0JRBY{-j)bSq;4^xOw|jinv?1)+(L_*A@)S1pq_4`+r8UxK>$8X)s73`Rn?bms+!C&^glo;PzPa3WY!493ow%0ai9fLx zB);QDd}iHqe#DghrzR=Y(MI9+XGv7;oS$jlFsm=2#1cD{Y81%?n29G|n?iJrnF6Uo ziF|kERAsZ~xT1^Je@QcoEm*wPl_+&tdCZt4CLtw>*Ur;?cje3sUE(G52c*SA_7}T~ z_jd8AEaAL)1D)c&55aa7+}Z8!!fgkWH22|_tsH|sLA6XK3-0bQ+==V3{7}QW$q;k(Bh0_{Q+9WxH=3swWv`R8Z)wZ?bIaS!G)|3LPnV#!y};c z2}$zrWH7SU@2HXoQ(BAf*{PsU5TciBV2jj4uBrzV$a&@eB-_-0xo>ucgT`}EQ1$ia zCMh{oOKA(V7f_Y872<_dZ&W zuns2Areixh2En5TEP#z1R}Z4`$3;FNpPtSgBH`%4IMz?ugd&}@igc21{E=<2qnD9* zeAN0e-VrgP)kwk6)97mKYp=~xIlcXRnbc#kP$g~e%7YdrhtOjXQZ0OuMSJJ02U7UO z3h$$Q`?DlQY?7%f-a%mCR6G?jzz0!MKCq6CzU@hLN;Zid1U-o-Xr3xAJg`!#Tl|D) zlcWBWm!31=TKcF9mZK($JD$Z15~}Ia>`p%!e$;h>l*kZt+JY{jKo7PpT@-A z1I2rtM=%DQ!@yw#Dh@=U@DM_>qKrk2{e7cQEF}*kA@{!!t4$ky7{;kw#Xk1_E8K(O z4kQ@#be_@yJJ4{Pn~@}umovwGEIchM>W);@rU`d#IX3(&!`L{U0j#2LD!^I^;s<(aH*f-?6@R^9F%O?x#R)U=OuU^&{wkp`)tKDGYR<4K_JI`aW0>YmZ# z#;<>?*3!;^_*b*VvCG5$$LA3wyob?vC<%YFe-To7Fi=tt#zgfX_ySuPr*B+acX}v| zb~vd|M3Fg054NVxS=(l)s7L-F33`m^BF3nhXI$Sjb{$2ev_ABAgcGx_t4Fegb16w@ z%@HU>cgK47?<9j>WZi2NZ##;@L+Tt6u0x}ihtzYajcri&Ew+7I2_0XjT#=~3U?#)p z^RN~xu*DtsDv8faX6y&fI~i2k8bq73Me=YqlHg9kRg~{f&lp92Mn5G=7b`(Gi7bVw zXWDoU);p%ExC=>Sp`-Myl-OaejJc5aN*Idr!b&O4cMCPr02^^BTmA7IE zV;_3jrfv z@0E(Vm@-_w!*gpl%z4zu#5KoY=uS@}){7ZT`~%jI9|jda>3(;o!+j7Hu+NCfFp?-i z(%wX69v=D*B-{^O*z;mP1G^n`Pj7+`gKku_yRRy~e;F)FY&nvs`7YEW|JWWx?BjAs z)wMP8{Z(oWW&<75ey~L623by2U?);z=;6xG$A;0CU`LkI#-pZEPIJL&{fW|9Yw2|~ z@7k#(-5j$NqNfc*$#d905SOUE1Y{^)JBb9<#s*QGDE-JQ@ral_P?#wFW16+3N>omk zA|oTwqLN2vXjRoH-ah7>o?6OgkGl1oBEx&#P<)|lfcpk`d~i{i!2~AJ&UWP4IW8wr zdJh8e9!Hm>$8k9BemCL#=URC@KT}MpEXQrTBvBfLRKj@!J{>&+PRZBdepiW1o#TGD zxW@f%oE46CilEADt1mTor}z~Ep>RXY{?wKpR(m<6L0 zc1gmyKZQXJXI=DYamQ~^vV^l%8Gdo1^f`znobSR~te{+!D1BS3KPJ{EN_Qdl!X6lX zC#vELV5kaD76TtkIJbdC%$5lW=Vk;iPL~Qk`wJAH0+E3aaS7*_R0h)$rJa(&XLSaP z5X%gP?wpV)oef51FeP~n+C`#ttq89ZVF(p>axXSfS}pL^0$+?qqrEvLdAe>*D6RG? zLzPn<2QYuaE`N%`RmT&h{}kJX@#*Nf*nOPk948K}JI+F`)Q&SN$OBj3LM{6>Jv`^Y z9c3p7#d|J1oG7h=;DtSjLZOFE6Y)&;Y0306%v9_~B^M+-lT0<0QylxLfj*ITA@R~J zScwV5o5dY~JFgUNl~M#G*>Xmr^kRXg31sz-xwdfEG2Zy_bX$R*?1?|YgJD_28Kyfb zvb+BxPL$H@Rt#VXXTyzLOxvpQMCB#%j@zkB$-&|JY1rglaoN{M#ZQTMMAPz~L~Erd z;rt$ydOCM-0|Z;PPoFJDcK1*HbxN^n#IcFcL!-&YJ1P<4ih;72iw*okUxZ6DF)dq! zS;mTs=>bWLENiK(Q#f@J0b}lqZvg9d@522EjZze`T<)%fyNjE{CUi;MeGtQ8+>IN# z&Q416+fPVoL^TH4VR7><9N%|cTO|XLWlZ8A-^y}g2|82Fm!U=;jxk+qq=O)N|7$F} zG9K)cNLUr`@+6+6D{x1gO}Rwr0wGqLYM`vDcD0#(f%fn{uS?Fjo0LvGA!$@ z@s*C^?WSLecU-W3rl-^0_Z$_m8omw#+TE`^?%MMDA9D@kj)yRPIX*RG`ZDgn)GkSe z;eSMZ{f`ZI!|;c%7sKxbF{_Y9O7lpWdp)c=!PIw=rPb8OU@A`$T9!6^NOyvd=UGjy z#7+J1zwqZyzmYS{Zc6DOD!!mxdGLI2j5hleGUoWr}4%$qx2LJZ2^ zJ~XcQ-Y+4HZkvAe$w7_a(Fc1*ou%(V5B6+^`!HCY#xNch2BKijGMV*Y&NG=Cz)Urn z8ZeidOeL6dlerAcbd$LN%si7h9n5@_83)Fr8MqZ|Se!w`521Vu0ITxt`lT-4z>SC= zWREC>OZt0X;(Yh@{z^C$vs=9nvt0IO@CVg=y}K@dHvjKN8n{ z6DqW82eapy-+nb!tL?|uqDk(~ZjzV)W4OT(+S_{7<#5q{UT9SvL4pjXKI+06h zvxss%v=s`R&oT*yplhq*A7tGPR!{{d;#8w4hSH&0no zs4QtrTk;Q763c=@B}xyi;*0*S&OB8YUaQ&Msed!~V1%(*>mN^Ci}nspkWhLj<- zFq=J~wlaAGMoE<61JR_nJl`er@4NO{h-=s0jcV1dt%P9{#jwJ8LYzCOR=M^fRiMo3 zqHD*eivk7Cbxbm{Yu{(lePUPV#J(2$sViV49;?pvbhj2R( zJmN<4+lO+Z=MK!4L^5GNobb3fcZ-{~<8VKNrRrnhyg5}*pq*2iF-DKhT z?Hr`yc>GEf(oP6|EiK5_bEg(uuLLnRl^zj^LMIE4^?DJI7Wuaq>0ahhK*Gj;NUc5e zRL6f>6(5uV7T) z=Rpx(DfCsr`qEYn}?{HQ7%!yN>Zi&$Q4h0j1S1Y{_rS;BHdS|5dvhLge zrQRo4IjKG?`(;t=7cYknwDPH{A#jB3?jQF7t3rmfS}T6;FQkfCEw!Aug>+;s6P-`H zr8QMn3J>8#X?-pGiw~diS0S`Et-(VfLxiprp?Rjz6=@;S{4-eI|LT#H`f?9yMrYBJ^GvI7jmy~;h9EL9JKgNe$SDD`Q;2WiKCDY1JH+g>uoBdl&0 zL&+m*ge5QubCjXj4M;VVXv3ofNabXVom7LSDHHC(ub>>FSN5X#z%I9pKU`xNt8X!? zuC1yyCu+Q}G55EBjFBsJTd= zbvZ$wutpZO%y|wLeYfeoqy+@vK`csg8?d$#Lb zg(BE5TStB2q>Q!UPM!BNh&TC1E~?#D*jB&jP3sIs26JXO{ss%2VK zQ{PbRC#J~*YZK1*A&(xzgV4yMyT69p`v@mIQ-rAH9^F))uA%bo{t3@3A)V)g0?S%u zzfGR^t2~{%Xr9!J>Ws_Z#dDX#x=h4F1iHKfXCuVsQHd(iQW<+5U^OE);cj8#%OEYA`|>s2}KGHu4`)T2gQ3^V5Teg|eBn{E-OaHOJBRG;QI zF;p){uD_LT9y6^`r7Bkf$_x=0DUI?i4b9c3_Xky5h;QL3)x78^d^*t>IDqOkPOE@J z1aeG)$qDDLu9jO*A=2fVuv!~U?bX0QeO8diTcWoq>!RWtRYTDxTCW-x#$e3X_hWza z@QXuOouwGOo1P3DQVC_Ws=Ep`&B@?(7?fqEW0`HIo(jF}f*hJtohR!QjwfEz1Fh1j z7aoQ%`b&SD0a=OXmm#u`p|c_Jpj*&`*q;7|m@F)h#SWmp}2sHKT2A928&yFqK ziEWfkU51Muj!HLnt5UXaIbv*{uXV7qM9)hxx{>36u;efaO4!Kz25tfZU*Q`kd!-d0 zG45bvq!}lukRE1L!A9LTfK9cO*?j}y437N~;~Gb;!GQ~vJEVRF^^7cpnn7XYgmiKO z?@I0NL4D4F3;l!Ysr@HXICfuXtDK5M#wsKhpi26T*ba)^u>ldL5BmmIDKY!(2jRO^ z_Fv#wGjjGPX7|m3bpXY61J_!!xnP7+##J^PV*3Uz9XXG~IuEHARixcA^6I9-j(69V zAz5h4-&Z?~PJO)vSWUoV0ag&W+ybm3aDfH5mO!ZmSVN4YtUELjnK;bi^yW@xs9g;%~7_mE;f~|AW`@_S@F{7cSv!mqA;o($It~)4eV9w;9 zu*8YO3R*)#q}qqhDZY0OA~M!qo<0?`6212FD8jP#g5^l4<+jP+@=ZlZXe5tlSO75KS2;ckbKZQBSpazyt;I=Bp8Ow0Or5b4W;XG;mplJ=@C1l|#ElkUr-PNhwfK z%7ev-N!Ld5{ZVjOM+1w~-OukrVo+G2fcBw0p5hj@sX94b6_>{F_NO9w|6olXM@?!= zRc2=*BDu|)#n&VYe2EX>h~6$#I&8c>L&b`RQr>n^SIXNHz->=CMz+hg@rOQAkn-IE zE3bX0+oVia#Eof}nJ&pG?%=O&4X|>=iUf8kQ1n0-8gVnSY42n^ElGYxmaIl-PM6@z zE4n$Q8catcq?6N>mC`Q~l^##$vxiydot=F`cJ#3Abw0s9QXT&Q+saS5wBrYUjQZ<% z9b$?w4jab$2Shmv-ERt}YNM1CeM&5ru7*cUG;kx>HqI)EG}aN8 zrpkmwQly7~Bn~R++mKYwPr+_SGhnyGiHdFCgwFn|=a{%e!z0cki#u+EWOv8QEHSQu zhJByU>pN|`WCRa0KgS(k zz`Qu!7V*{I3bzyVyQPS(G8rs zePH7Dfs*Y5h1&hU_A@ex z+4c%?SA@=l9Sm4{3YSQqGhVbAm8#m2(czab#rJyBnirDh^hJ6;Bg6 zaR=oib$9;_#MOG&TxBSpawNaXbbdQjV$8U^`!7V;Ts&z%hWtw}r(j~1ONetcNoU~- zNsaZqAJUG}iAv`96%=*;fuytWEG=_L$^1nkXZ0$X{YvH{E%Shq`I(Y=T*-V@$-GAb z)9z3*-%>K$mCR-(lcV+Apk&&WOtX@yQ!+1*K+kN-=o9G!I51Tz_R?W;wysAWXPqvQ zmNwS$B%R1pr8rka7)zsJZn}JhOv3s1xl}BoPd{aKUuAsD5j=o)WzX+BXHCF&1Ac^N zW%Re9b+Rpt?!RLn+bO2W{1!uKF(wg3gDa8g`B8FT^<4zaJk;q`Q9)?jP!i ztfcAgzx*Ent~@RlbyO&iKkQ4}Q{MEn{}{_WZ^Yil;!?pUZmPPm>ZYojtGsw8it%G)!t{(`_~doc11CN3 zzt02wRVnMWa)}GSt>@CeHaC~Q*fxLqWtS}W-{QM2w$c}j)P#Z|1%lG2LgJ z=fBK9-9Hm_R{hM`ml@|RTD<7;MKg@^+_U+Q`ePCNtlV5zTZ=y!bA4i3AiU`&kXBb~ zD1x8f3kAX9Hz1q+H;pkC)vdq}vbD-@|E1#Ry3UUn7a5YiY+WdfA2C}kKi#H~h`-er z_C-S(p#GscC82)kO@-Ivciprm{7#$x5l96zrhgSu0TF-mx@;j}BgknBOwD4WX82=i zI*1=vTOWiMqDDPF@aucc{>G>gRzIoNIybyY$(g?a$CR!hereJb4TW6zY0mYkw(!G! zuEsz(5_O40Am}0@KeOj*i2+{chqSN3-{5Kthgw`dC5NAV!%s^Z^`TgEgDV({ii|{A zF!>=l{I;e`egscEU$<&Wg?Htu71hg^8mnu(i`~oItK8nz)yo%Ov)b@3cdzmSU0zk= zPBALZyXyK{H!U`0EU>rsn%cTrZ;g9-o#n^t_?vi*{4GcQLyPsz0r*KX0shkC%IM~1 zzw!cpFG~FaW%Z)Du+}V8Xk8RPRp%0ESBpQ|6lzGfDEw?66v{8@xf=XY{Bo$j!7zNT zR19v+S+6~7gaz@`l8YK>d5k;321N;i^>iTxe2XZ~e)xD$`97lSfPx*LzUr2o^u zU;e*L_dm_&f2Vv8>WAg3hmYu&BidKA;X}m9PiSI@n#(T8U%W)?jHushwKN<2EG!zb z{*_SaG5Tj)Ge!XlsWG6zzcGN{poL1g|E%}(ms8pAySDZX4sA8M`UauppTp*;f;Z$b z$ej*(F%W6`x)Z@+Y(j7i3hUK|P#5T$$A*V1K_A0Rd@bnb@Q}9^ln*`+fqoM7An1OqOB@Bg8&5BJxrXs|&?%s` zKN=oh4Eh2V&l^Asv5dV9H24#w2hG8z*g?=8*aAEX+Kb1JJS^!H;w;4!(D2WZ9`w7v zKzh(SaG+@$=;b(F_z>vtKo5d`{bi&FeE~ENi`%hRksfp#PP{J$-TwyCgZ>8=Teg9| z4*C%2;y$DY?f)&(gO0`*xVV*21v&-vRnWztU%+=v8$h4K7x}h<&cOFc9|C7 zBqPfk#uUU+zT{h|59DVQl`JWmbXD=#O$A$x1!r7w(PdN41uE$mgLng>B#lkj&V z{?31Nc$n?Ls46PCCudP1RZ(vn{w_z{2WShaxZHOgFjwMt0xm(@;F;2Nd|jRy&!@Gk z9v|ixJ=5_yuQA$i0qVuyXguU?Lt9Cu_q6BcZpslE+Hf3y0kkvPnUcv_or<3f+rEkT zTC|r`eD2k`rVaBD{|egW{*3g`q|)Dr_>EY3_?R_*jYLZsZ%2Ft@!z+`=X^Jn{ws*j z!&=B4py~WKr+oAb@O9`93#?_#oht=o`Cdo-UFa9SjQAT<@y8K=V87~*Y5ku~>7R^r zv(b;fkdgmqQt|T;|7~onF3Qkname^y5N@>KfU5&v8COMgcE+En~k5Pty{ z4CZF&pOw=84Dd=Ee0V7%{^zOq*MYx-e*IL2e;-fz_c-DcFANWVCnNshRQzPr`>7ZY zp3R8gmx`Z<_#YttQfvGz5-s(6BjOJr{#zO4dmvT5+Yw*=BJS<%6lVX(9W#m=SbtwZ ze8sPZhv#RcuSlhT2Jv;c*Y{?`|1uT-I^qjoL;YCoyCZGiam1G+zR4P&Q=cjyU#8iH z_=hs|e?6st9^#K^`Ww^wZ$$h*5no}AkEG*oM|>&9%^lYGob9Rnzk>KrA>Pja z&mjKe7;i7msQ(Mn^^f=&7=NP~`a>!G#}R)I;&h@o!_^v>+pXZYuspj`Nszv7M&VKPmPt26Q{(_xx#i_$Gvng+(Qw&8aS$^qE|D zk*hP$T{QL6&c#LL_l)usRkY_XEvmewsG_QVr(H8r1gXLIcY zm&sRW@pW0eFN+Un@pow+=ZDl)t_Th%$+hivMNilK&PP<>OwF5Xpl4`)myYLp0xvWE z?;j0^gvS~TFFeAlt4I-Th9PT@fOrU(*9$rV$7JN1q-m+9CedoKz@QK=LGWthS_dw3 z-4{#7a-F7Wj}Dl40lxXb%e4EjcC=O_>%5Hr$FM4oDf*G-_i4k1HE-4vma(P$FK9zP z(7ahr>iqxX+O6v=JMY=L9W2rGI!zlj-Kgn3n%=MJ!Ap^kGf+YI;c1S2cZ0)AuwTb(zjz(+f1kDGIrkXnLKdjhb%M^d3#`*Ysgc z_iB1b(^oZpOVjr>9W_(uujvJv&en8^rq^lOsOd&c@6q&rO&`{Ducn7IeO1%9G<{Fg zQL}XZnqHvkY)zMFdYz_?nr_te9!>Ap^kGf+YI;c1S2cZ0)AuwTC8tx+{xrQn)7hFX z(eye^8#Udisj?pXK|e4~###8|WsYs69H%(8nd1|J z8Q0Q9I0-Rz>GHY@UDM0UW|U2L%_yHyK7B^HuJ21At;R;BVY@Deb&t%dkmGoc>}-yl zqlzEK%JRtZ^CbNO4EH)-_xlMt6Z8H81tVT6y)Tu1f=+MVKkmC-B{TVKB^LqE<&~k> zEbk93^~ZY`-Q(E$bC{7Q_lg3?UdWF-3qEJ`ja1_(_yn+=oczy1V@_WFXmSPlc_fZe zH-Y4yix0;Ir*Q`?C&$?dl6yBk98)JxVYnX&9T%Rm0pYwnCr*YKxm*l)Ty!e^pHtv` zkHj&mfx6yiE@w>i0?M62VA8}&hPUzK^ix)nNaPu(gc;_xLEiZj_JBCY<-L(N`kx4m z3L|CSn|VdgfH6khN3KtCd82-Y9P)mvxB?^pDik*FcX_#oA&GKfciSlFzz5$@Ihx~D zE=~L^WApO35t&nv=RsUfiF2-yyhR|nd~u<3vJ`ks9aNT#daQuk<72u1H0p8ZVuX#c zkK%LG6Jxf3K_stE1SGFQqp*Nz5s~6i&@*l)LWKqVEP8<8%>*A2ke@|Q5_|xe zj5{D8KZ}kKe2(C+1mtJYZ}BnaO4^qHPC*$W$36y|^550Ay$K}$@5R4@K+f1pAe;Z* zDcpR@8yg_=!NeQUP6~{1+~6-P;AhcgNK(Qtr%cXwI10W1ZWIm8&vhuBqkhf|@*GO( zs3vkwM-eM4Z`4DS9OWpjqS{dpF)m-lO)|z^30;K+{4CaG?abAzM@REnE*0gCmT`t^3=W@p z##vOR2DDE?jsqHu`EL#C48 zmUe-I@8PS2#I6hp$9N0@;~f(mxkYCdonJJOL$zbP1EH}*N-zV@nPQ9`dnH(8f2xsN zGs0X{f7%E~T{Y>qVeTO*gYRm}Fz##}5C^@XElE7f!5=p6GlnR}%px1?<0c~{m< znG)NWTM})`aX=FXvs|OwMmNv&wq3d|5RDkf$)q?lOV-Rd7K99#jhEsaVJs~k2>PR! z;*S*HLfzczkCZjhtVpy0H_U1H3j#pT(LgMXAPYpH@kK)Q8+;87VJ!&GA4M3QBf!LH zfxdNtX*e+HFRMo(4C6ff1A=k&_4PrvGUs!E`3(^eFe^j;p1nkbyZx%Dq@)CzyJvS^Jl+ ziv^k+aBTF__055G_0wjQT{h#=`bf;cgwj>D(gl82+4Piqy@5!`!UTQcR>SLMg2q9g8un(rV*!dr?vRP^-c59 z2B*!Q>6*6QHSL-iu4(8i^VbJsNItC*v|HKMjY!r{Sp9n zgHSCIsfjSPSy|~cXe_C^zifteWJtjkkidxHjr!K7(*=UMF)o*OsLe{p`)CYn7{<#8 z;;p{MD}$Cd7Qxxm6T6`vFh-1EC&z_#CAk=uivv6^v*VkiiP`B@Z2B`hy_xPbt;bB) zsh_LTDgXOWE{18&=&~<7HW)n1ntkPB$mJ7J_LYl)x&Whi_LYl)+gu;C#^oAVB-HDO znRvcouD5041%|m!mx+%y%=N!ae2ihP6K3L=GHAbL;^Pe0hrFtyu>hPYnk|XWAVLKM1^yW2}aj_BjFPbb3NA@n~Nu4a~(GmFEvJ5FU&Pg zHG02il~mze15>*_BjJ;b${&n`pKkPxh;znz;+1QdtI(NoxpJB<6C-7`OKVgab4YEY3D8-dn)Ki@|=Q_koXO|5GA= zx>2d~#e80_XEpB8IHqWFU5BnkJ8QG#4{G@}S@?sP(@}nH7Jfv_H)Y{H8gI?QPr_{@#vgIx31Q_NB163zFVVPJuHS2XQWkzp<1UT!5rEgb_@n-cEcqdgS8Ck! z&qo?xoQ3D1LaE1-g^$trvMjtr4 zxSVrG+;ok9WsVY*^X&*;sqy#NP;qfNiC4A8U%688a-JPQK72CY>#G#b1vy@8HU5Og z&HF>M#+_~@w_gz>qVYo-XMf|hRpY(-Gu%I%v-XkHY0lI)Y!* z__bFlT+X5+_+8+vmo?hYW;=OO<7=~Uu3b_8W6P8t=Ev*j8ehU?AY5`*9rO*+Q(_FW z!{S1Bkn4{c&(rq>6aTBm$7$SbSO3s>iN;USdh&3ecA(XlXW@mwY3Hx6QG#+d9>Fs- zK6!=0e;AqIfITkr^bsmDZz2t{$h=v(WY=YbB-YU>qz&P(;)A_Jm=tNl)UwGB>D3pkHx?f z=1Uc#=fru-a*>~S!o0|<@$7k2SoEAYUvi-1=NKo>8*hXB1gp_H+>Q3-!Z@5gU;3Pl z{10sKXKnBoZ16X2@ON$S4{h*K7+5Bt-nZ)K30=L$se+$a;GdzqlsD(Y7i*F8Y~*L# z;7ftKPE>DPXCoi5!Edv{KW~F`0d}N%EFqqA;(VUp=@?1A#|D4X27lKEFTj95lKzj| z;8iyGN*jEw4IZ(<@3O%^XM=y&2LF)_egybP_1+I0i>A2It40BL$@RXCo&sryTF62s z+29x0;FsCpZX0}+4Sur?zS#!v1U?@37xQ__EbljLI)bm?&K6aOleB1{Aq7D8H8~kbDMlZ17(LFM%Jj>+26T^6%K-rK3mobD0f(l?}ey z248Q3M{V$g4Zh0;-))0GV}t+F2LHVc{=N-<1LhUi$87LJHux(xc+v*{$OfN;sp?4M1NT#TU&!tk zvu)%T+u%3Z;2Ui4tv2`}}wCPrSZZ8(v${(%Os{%`}vik1XMB zgnq9t9QJMY;?*>GjY?w}+eO}nSWC-hB(ZSV;tE7FMAci0U{LF31Mge$`-2AGS%W<{ zqpe|`(H3qoTChP!4?ecF|fmmS0=R>ZGjde(AbQSK3cTIP>t4Rt>jj7XV6WSwLC@k9hIi?* zYZg{5^Io%L$x6HpYE{+3Wo`;)wAY4AKz5xC@8aw6;;8CHctaERoV|e-yeQ0z@_E%8 zyA+CsjrX;9Q9@YX;EnLTFbzsJ{R${!N&O;hyRP&{s~Q>@(kdI#SWH>$d7^Lmu8sM_ zn^#JAi5P2^ur;lz32pT2_e^=c-2V1r=Ue)wv8FM)1Px(Pb133RF15ZWI(~3*tQ9_n zT`)m9NGzOIupX@(yL~uS0f)i=!M4iErOT=pF7nR6vCLTpUSt)?MAod({iwzlgb%_i z)w{azN~dV1Ao_8=FXFFnY0bppH1xhqY)zdsv|9ZdDkKe_kPfwvH|=Dm(;iR-Xu;dG zGNW~^z$fStUi1jB`8FQ7YB5@{GQJKy&seh*E!{L=O}J&TA6A4mFUF?!IuygKKkfQd z9jX_5=_*7QN#!I13HpZ7hyrK(@ESC3{qj1)TfM3VTkPgQy{ZQF7xb_4ann9)FLn(Y z&FUJw`3^72iUu%}ty!sFIuuzZ?;v6eV2g6|{aS1>fo8M-_eKoY7_9yNOz&tP=z_9! zv~I3K3m%~`?CoL@eA4XC@-oNLU_+K}dUqL`u`1rkg_9Els`VLbv>DpJYormIE>iUv z#(;nund*9Iwke~$-g@q@d)Ik08pvhn$MtR4Ne={N;K;HNzFd-ijUIi~yaI;>e8Kf_ zJQ^hGP8%b`bXID1#-)plHOtYml!JBetKo<>k_!WP^<5Yyp@Q`Qm8#BY2(3kK%#o0{ z$ro(kd5vf|8fwnW)zaZPV(DDiuH}__Ub#1+I(*^vnF-g_qza?E+STT(-PSDiN2~e5 zx+Q#_9kY$JW>qj-Rj4@>u3`sV&J!m3eRgy}xTPAV;FtvOi!6~vnb#{PEm$q`Cc8|d zkQH8|mx+13>mm`eN$6~4+*3_}HzM5tHo>1%9}0WJxYdP&G(9-th~uTg`VHRtrVTg) z6R{}2tXmceZHTohRr<|}nMqL*tJvP!qUg~PHEdP$^^CzP&X8mXOINJi zJw_;+zAuc>Mx|>RaB9|F0385erY#r&fHjaWz z>KFSPeX-`KRbE_Y-cO9iO<~;WGjqXkbmFMLM!9Gi2Dw!sIwX}Nx&qr;bCwpbU(P1! zR;w*K@#e5G5Q+JkIf!!f(jz-sRTQsm%rpz{5v*_BoW`clL;=}kYB}q~tOfJh)D2kQ z=Fv5?Sh2%2N2bpxT#!W(5>vbL&ENP|Eo9Bp3 zI>joCu({4@!aNpXP2aB#F{#TG)HFN&V&L!LyLzVm=D8%3GM*Qfk>$ejPsYV^JwPO}Yoq-Mp|oDt9g(EuyHE_^r@NNJYQu}^ZS)%{@LZ06PqFne>a` ztm)13UnVuntCOYdH}S7#r8oD*O!`;1nNm?RUlV;WE4_K1%%oU$%eb=3|81S#tUqI` z7T0t!JD26k&Y$NfSbj6Tc|Oggw=>dmW#|7R#97mu=h#fjeH!a!`pv|CiU7L``w%a4 zpLQo5iz{2+;U?fN&<{}yR!qM6=2Ket<_FV~JSi(%$#`f(@HvixRx z^PFAp*8$?1sz~b7OmEV+5o1lCI*+$YC8;zOYYk>Plm0C$y}1uv`JhU$U8ggN%M57x z0Vs8u*_iuLJ!X0uXSrOKFoWux(}~9{&GgwP08Mo!%}2ltTU8J0{0FTd!lvI%Se=71 zxisy2NQK+YflEha=XI`4{`LQ<5^Ty!ki{DOU8Zb|DPQ}JO3!mP)+<|fo=#tG6+-yk zM-=dsSur}^OmEVqI(=4hV~;){wKXdu+ke!PWul}ge@rFpJ5|whLAXR~wmWnD=J=Fl jq9iC`$HujfH&@GL+HFGP5f~}`;g^*}T~>lD*7$z_+8NE? literal 0 HcmV?d00001 diff --git a/xmenu/.local/share/xmenu/xmenu.1 b/xmenu/.local/share/xmenu/xmenu.1 new file mode 100644 index 0000000..5792b9f --- /dev/null +++ b/xmenu/.local/share/xmenu/xmenu.1 @@ -0,0 +1,221 @@ +.TH XMENU 1 +.SH NAME +xmenu \- menu utility for X +.SH SYNOPSIS +.B xmenu +.RB [ \-irw ] +.RB [ -p +.IR position ] +.RI [ title ] +.SH DESCRIPTION +.B xmenu +is a menu for X, +it reads a list of newline-separated items from stdin, +shows a menu for the user to select one of the items, +and outputs the item selected to stdout. +.PP +The options are as follows: +.TP +.B -i +Disable icons. +This makes xmenu loading faster when not using icons. +.TP +.BI -p " position" +Set the position to spawn xmenu. +Without this option, xmenu spawns next to the cursor. +.I position +is a string of the form +.BR INTxINT[:MONITOR] , +where the first INT is the x position and the second INT is the y position. +The monitor part between brackets is optional. +.B MONITOR +can be a number from 0 to the number of monitors minus 1; +or it can be a string like +.B current +or +.BR cursor . +If present, the monitor specifies that the position is relative to the upper left corner +of that monitor. +If +.B monitor +is +.B current +or +.BR cursor , +the monitor to be used is that where the cursor is in. +For example, +.B -p 0x0:cursor +specifies that +.B xmenu +must spawn at the position 0x0 of the monitor where the cursor is in. +And +.B -p 100x500:0 +specifies that +.B xmenu +must spawn at the position 100x500 of the monitor 0. +.TP +.B -r +If this option is set, the right mouse button is disabled; +so pressing it will not trigger any menu item. +.TP +.B -w +Asks the window manager to draw a border around the menus. +This option may be buggy in some window managers, +specially tiled ones that do not respect window hints. +.PP +Each item read from stdin has the following format: +.IP +.EX +ITEM := [TABS] [[IMAGE TABS] LABEL [TABS OUTPUT]] NEWLINE +.EE +.PP +That means that each item is composed by +tabs, followed by an optional image specification, followed by tabs +followed by a label, followed by more tabs, followed by an output, +and ended by a newline. Brackets group optional elements. +.IP +The initial tabs indicate the menu hierarchy: +items indented with a tab is shown in a submenu of the preceding item not indented. +An item without initial tabs is a top-level item. +.IP +The image is a string of the form "IMG:/path/to/image.png". +It specifies a image to be shown as icon at the left of the entry. +.IP +The label is the string that will be shown as a item in the menu. +An item without label is considered a separator and is drawn as a thin line in the menu +separating the item above from the item below. +.IP +The output is the string that will be output after selecting the item. +If an item does not have an output, its label is used as its output. +.IP +The newline terminates the item specification. +.PP +If the argument +.I title +is given, the title of the menu window is set to it. +.SH USAGE +.B xmenu +is controlled by the mouse, +but can also be controlled by the keyboard. +Items can be selected using the arrow keys, +Tab (with and without Shift), +Home, End, +Enter and Esc, and 1-9 keys. +Items can also be selected by typing the first several characters in it. +.TP +.BR Home +Select the first item in the menu. +.TP +.BR End +Select the last item in the menu. +.TP +.BR Down +Cycle through the items in the regular direction. +.TP +.BR Tab +Cycle through the items in the regular direction. +When the type\-to\-select feature is active, cycle through matching items instead. +.TP +.BR Up +Cycle through the items in the reverse direction. +.TP +.BR Shift-Tab +Cycle through the items in the reverse direction. +When the type\-to\-select feature is active, cycle through matching items instead. +.TP +.BR Right ", " Enter +Select the highlighted item. +.TP +.B Left +Go to the menu above. +.TP +.B Esc +Go to the menu above or exit xmenu. +.PP +.B xmenu +features the type\-to\-select selecting style, +where typing a string will select the first item matching it. +.PP +Additional key bindings can be set at compile time by changing the +.B config.h +file. +.SH RESOURCES +.B +xmenu +understands the following X resources. +.TP +.B xmenu.font +The font in which the labels should be drawn. +Multiple fonts can be added as fallback fonts; +they must be separated by a comma. +.TP +.B xmenu.background +The background color of non-selected items in the menu. +.TP +.B xmenu.foreground +The color of the label text of non-selected items in the menu. +.TP +.B xmenu.selbackground +The background color of selected items in the menu. +.TP +.B xmenu.selforeground +The color of the label text of selected items in the menu. +.TP +.B xmenu.border +The color of the border around the menu. +.TP +.B xmenu.separator +The color of the separator between items in the menu. +.TP +.B xmenu.gap +The gap, in pixels, between the menus. +.TP +.B xmenu.width +The minimum width, in pixels, of the items in the menu. +.TP +.B xmenu.height +The size in pixels of the height of a single menu item. +.TP +.B xmenu.borderWidth +The size in pixels of the border around the menu. +.TP +.B xmenu.separatorWidth +The size in pixels of the item separator. +.TP +.B xmenu.alignment +If set to +.BR "\(dqleft\(dq" , +.BR "\(dqcenter\(dq" , +or +.BR "\(dqright\(dq" , +text is aligned to the left, center, or right of the menu, respectively. +By default, text is aligned to the left. +.SH EXAMPLES +The following script illustrates the use of +.BR xmenu . +The output is redirected to +.IR sh (1), +creating a command to be run by the shell. +.IP +.EX +#!/bin/sh + +xmenu < +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "xmenu.h" + +/* X stuff */ +static Display *dpy; +static int screen; +static Visual *visual; +static Window rootwin; +static Colormap colormap; +static XrmDatabase xdb; +static char *xrm; +static struct DC dc; +static struct Monitor mon; +static Atom utf8string; +static Atom wmdelete; +static Atom netatom[NetLast]; +static XIM xim; + +/* flags */ +static int iflag = 0; /* whether to disable icons */ +static int rflag = 0; /* whether to disable right-click */ +static int mflag = 0; /* whether the user specified a monitor with -p */ +static int pflag = 0; /* whether the user specified a position with -p */ +static int wflag = 0; /* whether to let the window manager control XMenu */ + +/* include config variable */ +#include "config.h" + +/* show usage */ +static void +usage(void) +{ + (void)fprintf(stderr, "usage: xmenu [-irw] [-p position] [title]\n"); + exit(1); +} + +/* parse position string from -p, + * put results on config.posx, config.posy, and config.monitor */ +static void +parseposition(char *optarg) +{ + long n; + char *s = optarg; + char *endp; + + n = strtol(s, &endp, 10); + if (errno == ERANGE || n > INT_MAX || n < 0 || endp == s || *endp != 'x') + goto error; + config.posx = n; + s = endp+1; + n = strtol(s, &endp, 10); + if (errno == ERANGE || n > INT_MAX || n < 0 || endp == s) + goto error; + config.posy = n; + if (*endp == ':') { + s = endp+1; + mflag = 1; + if (strncasecmp(s, "CUR", 3) == 0) { + config.monitor = -1; + endp = s+3; + } else { + n = strtol(s, &endp, 10); + if (errno == ERANGE || n > INT_MAX || n < 0 || endp == s || *endp != '\0') + goto error; + config.monitor = n; + } + } else if (*endp != '\0') { + goto error; + } + + return; + +error: + errx(1, "improper position: %s", optarg); +} + +/* get configuration from X resources */ +static void +getresources(void) +{ + char *type; + XrmValue xval; + + if (xrm == NULL || xdb == NULL) + return; + + if (XrmGetResource(xdb, "xmenu.borderWidth", "*", &type, &xval) == True) + GETNUM(config.border_pixels, xval.addr) + if (XrmGetResource(xdb, "xmenu.separatorWidth", "*", &type, &xval) == True) + GETNUM(config.separator_pixels, xval.addr) + if (XrmGetResource(xdb, "xmenu.height", "*", &type, &xval) == True) + GETNUM(config.height_pixels, xval.addr) + if (XrmGetResource(xdb, "xmenu.width", "*", &type, &xval) == True) + GETNUM(config.width_pixels, xval.addr) + if (XrmGetResource(xdb, "xmenu.gap", "*", &type, &xval) == True) + GETNUM(config.gap_pixels, xval.addr) + if (XrmGetResource(xdb, "xmenu.background", "*", &type, &xval) == True) + config.background_color = xval.addr; + if (XrmGetResource(xdb, "xmenu.foreground", "*", &type, &xval) == True) + config.foreground_color = xval.addr; + if (XrmGetResource(xdb, "xmenu.selbackground", "*", &type, &xval) == True) + config.selbackground_color = xval.addr; + if (XrmGetResource(xdb, "xmenu.selforeground", "*", &type, &xval) == True) + config.selforeground_color = xval.addr; + if (XrmGetResource(xdb, "xmenu.separator", "*", &type, &xval) == True) + config.separator_color = xval.addr; + if (XrmGetResource(xdb, "xmenu.border", "*", &type, &xval) == True) + config.border_color = xval.addr; + if (XrmGetResource(xdb, "xmenu.font", "*", &type, &xval) == True) + config.font = xval.addr; + if (XrmGetResource(xdb, "xmenu.alignment", "*", &type, &xval) == True) { + if (strcasecmp(xval.addr, "center") == 0) + config.alignment = CenterAlignment; + else if (strcasecmp(xval.addr, "left") == 0) + config.alignment = LeftAlignment; + else if (strcasecmp(xval.addr, "right") == 0) + config.alignment = RightAlignment; + } +} + +/* get configuration from command-line options */ +static char * +getoptions(int argc, char *argv[]) +{ + int ch; + + while ((ch = getopt(argc, argv, "ip:rw")) != -1) { + switch (ch) { + case 'i': + iflag = 1; + break; + case 'p': + pflag = 1; + parseposition(optarg); + break; + case 'r': + rflag = 1; + break; + case 'w': + wflag = 1; + break; + default: + usage(); + break; + } + } + argc -= optind; + argv += optind; + if (argc > 1) + usage(); + else if (argc == 1) + return *argv; + return PROGNAME; +} + +/* parse font string */ +static void +parsefonts(const char *s) +{ + const char *p; + char buf[1024]; + size_t nfont = 0; + + dc.nfonts = 1; + for (p = s; *p; p++) + if (*p == ',') + dc.nfonts++; + + if ((dc.fonts = calloc(dc.nfonts, sizeof *dc.fonts)) == NULL) + err(1, "calloc"); + + p = s; + while (*p != '\0') { + size_t i; + + i = 0; + while (isspace(*p)) + p++; + while (i < sizeof buf && *p != '\0' && *p != ',') + buf[i++] = *p++; + if (i >= sizeof buf) + errx(1, "font name too long"); + if (*p == ',') + p++; + buf[i] = '\0'; + if (nfont == 0) + if ((dc.pattern = FcNameParse((FcChar8 *)buf)) == NULL) + errx(1, "the first font in the cache must be loaded from a font string"); + if ((dc.fonts[nfont++] = XftFontOpenName(dpy, screen, buf)) == NULL) + errx(1, "could not load font"); + } +} + +/* get color from color string */ +static void +ealloccolor(const char *s, XftColor *color) +{ + if(!XftColorAllocName(dpy, visual, colormap, s, color)) + errx(1, "could not allocate color: %s", s); +} + +/* query monitor information and cursor position */ +static void +initmonitor(void) +{ + XineramaScreenInfo *info = NULL; + Window dw; /* dummy variable */ + int di; /* dummy variable */ + unsigned du; /* dummy variable */ + int cursx, cursy; /* cursor position */ + int nmons; + int i; + + XQueryPointer(dpy, rootwin, &dw, &dw, &cursx, &cursy, &di, &di, &du); + + mon.x = mon.y = 0; + mon.w = DisplayWidth(dpy, screen); + mon.h = DisplayHeight(dpy, screen); + + if ((info = XineramaQueryScreens(dpy, &nmons)) != NULL) { + int selmon = 0; + + if (!mflag || config.monitor < 0 || config.monitor >= nmons) { + for (i = 0; i < nmons; i++) { + if (BETWEEN(cursx, info[i].x_org, info[i].x_org + info[i].width) && + BETWEEN(cursy, info[i].y_org, info[i].y_org + info[i].height)) { + selmon = i; + break; + } + } + } else { + selmon = config.monitor; + } + + mon.x = info[selmon].x_org; + mon.y = info[selmon].y_org; + mon.w = info[selmon].width; + mon.h = info[selmon].height; + + XFree(info); + } + + if (!pflag) { + config.posx = cursx; + config.posy = cursy; + } else if (mflag) { + config.posx += mon.x; + config.posy += mon.y; + } +} + +/* init draw context */ +static void +initdc(void) +{ + /* get color pixels */ + ealloccolor(config.background_color, &dc.normal[ColorBG]); + ealloccolor(config.foreground_color, &dc.normal[ColorFG]); + ealloccolor(config.selbackground_color, &dc.selected[ColorBG]); + ealloccolor(config.selforeground_color, &dc.selected[ColorFG]); + ealloccolor(config.separator_color, &dc.separator); + ealloccolor(config.border_color, &dc.border); + + /* parse fonts */ + parsefonts(config.font); + + /* create common GC */ + dc.gc = XCreateGC(dpy, rootwin, 0, NULL); +} + +/* calculate icon size */ +static void +initiconsize(void) +{ + config.iconsize = config.height_pixels - config.iconpadding * 2; +} + +/* intern atoms */ +static void +initatoms(void) +{ + utf8string = XInternAtom(dpy, "UTF8_STRING", False); + wmdelete = XInternAtom(dpy, "WM_DELETE_WINDOW", False); + netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); + netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False); + netatom[NetWMWindowTypePopupMenu] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_POPUP_MENU", False); +} + +/* allocate an item */ +static struct Item * +allocitem(const char *label, const char *output, char *file) +{ + struct Item *item; + + if ((item = malloc(sizeof *item)) == NULL) + err(1, "malloc"); + if (label == NULL) { + item->label = NULL; + item->output = NULL; + } else { + if ((item->label = strdup(label)) == NULL) + err(1, "strdup"); + if (label == output) { + item->output = item->label; + } else { + if ((item->output = strdup(output)) == NULL) + err(1, "strdup"); + } + } + if (file == NULL) { + item->file = NULL; + } else { + if ((item->file = strdup(file)) == NULL) + err(1, "strdup"); + } + item->y = 0; + item->h = 0; + item->next = NULL; + item->submenu = NULL; + item->icon = NULL; + + return item; +} + +/* allocate a menu and create its window */ +static struct Menu * +allocmenu(struct Menu *parent, struct Item *list, unsigned level) +{ + XSetWindowAttributes swa; + struct Menu *menu; + + if ((menu = malloc(sizeof *menu)) == NULL) + err(1, "malloc"); + menu->parent = parent; + menu->list = list; + menu->caller = NULL; + menu->selected = NULL; + menu->w = 0; /* recalculated by setupmenu() */ + menu->h = 0; /* recalculated by setupmenu() */ + menu->x = mon.x; /* recalculated by setupmenu() */ + menu->y = mon.y; /* recalculated by setupmenu() */ + menu->level = level; + menu->drawn = 0; + menu->hasicon = 0; + + swa.override_redirect = (wflag) ? False : True; + swa.background_pixel = dc.normal[ColorBG].pixel; + swa.border_pixel = dc.border.pixel; + swa.save_under = True; /* pop-up windows should save_under*/ + swa.event_mask = ExposureMask | KeyPressMask | ButtonPressMask | ButtonReleaseMask + | PointerMotionMask | LeaveWindowMask; + if (wflag) + swa.event_mask |= StructureNotifyMask; + menu->win = XCreateWindow(dpy, rootwin, 0, 0, 1, 1, 0, + CopyFromParent, CopyFromParent, CopyFromParent, + CWOverrideRedirect | CWBackPixel | + CWBorderPixel | CWEventMask | CWSaveUnder, + &swa); + + menu->xic = XCreateIC(xim, XNInputStyle, XIMPreeditNothing | XIMStatusNothing, + XNClientWindow, menu->win, XNFocusWindow, menu->win, NULL); + if (menu->xic == NULL) + errx(1, "XCreateIC: could not obtain input method"); + + return menu; +} + +/* build the menu tree */ +static struct Menu * +buildmenutree(unsigned level, const char *label, const char *output, char *file) +{ + static struct Menu *prevmenu = NULL; /* menu the previous item was added to */ + static struct Menu *rootmenu = NULL; /* menu to be returned */ + struct Item *curritem = NULL; /* item currently being read */ + struct Item *item; /* dummy item for loops */ + struct Menu *menu; /* dummy menu for loops */ + unsigned i; + + /* create the item */ + curritem = allocitem(label, output, file); + + /* put the item in the menu tree */ + if (prevmenu == NULL) { /* there is no menu yet */ + menu = allocmenu(NULL, curritem, level); + rootmenu = menu; + prevmenu = menu; + curritem->prev = NULL; + } else if (level < prevmenu->level) { /* item is continuation of a parent menu */ + /* go up the menu tree until find the menu this item continues */ + for (menu = prevmenu, i = level; + menu != NULL && i != prevmenu->level; + menu = menu->parent, i++) + ; + if (menu == NULL) + errx(1, "improper indentation detected"); + + /* find last item in the new menu */ + for (item = menu->list; item->next != NULL; item = item->next) + ; + + prevmenu = menu; + item->next = curritem; + curritem->prev = item; + } else if (level == prevmenu->level) { /* item is a continuation of current menu */ + /* find last item in the previous menu */ + for (item = prevmenu->list; item->next != NULL; item = item->next) + ; + + item->next = curritem; + curritem->prev = item; + } else if (level > prevmenu->level) { /* item begins a new menu */ + menu = allocmenu(prevmenu, curritem, level); + + /* find last item in the previous menu */ + for (item = prevmenu->list; item->next != NULL; item = item->next) + ; + + /* a separator is no valid root for a submenu */ + if (!item->label) + errx(1, "a separator is no valid root for a submenu"); + + prevmenu = menu; + menu->caller = item; + item->submenu = menu; + curritem->prev = NULL; + } + + if (curritem->file) + prevmenu->hasicon = 1; + + return rootmenu; +} + +/* create menus and items from the stdin */ +static struct Menu * +parsestdin(void) +{ + struct Menu *rootmenu; + char *s, buf[BUFSIZ]; + char *file, *label, *output; + unsigned level = 0; + + rootmenu = NULL; + + while (fgets(buf, BUFSIZ, stdin) != NULL) { + /* get the indentation level */ + level = strspn(buf, "\t"); + + /* get the label */ + s = level + buf; + label = strtok(s, "\t\n"); + + /* get the filename */ + file = NULL; + if (label != NULL && strncmp(label, "IMG:", 4) == 0) { + file = label + 4; + label = strtok(NULL, "\t\n"); + } + + /* get the output */ + output = strtok(NULL, "\n"); + if (output == NULL) { + output = label; + } else { + while (*output == '\t') + output++; + } + + rootmenu = buildmenutree(level, label, output, file); + } + + return rootmenu; +} + +/* get next utf8 char from s return its codepoint and set next_ret to pointer to end of character */ +static FcChar32 +getnextutf8char(const char *s, const char **next_ret) +{ + static const unsigned char utfbyte[] = {0x80, 0x00, 0xC0, 0xE0, 0xF0}; + static const unsigned char utfmask[] = {0xC0, 0x80, 0xE0, 0xF0, 0xF8}; + static const FcChar32 utfmin[] = {0, 0x00, 0x80, 0x800, 0x10000}; + static const FcChar32 utfmax[] = {0, 0x7F, 0x7FF, 0xFFFF, 0x10FFFF}; + /* 0xFFFD is the replacement character, used to represent unknown characters */ + static const FcChar32 unknown = 0xFFFD; + FcChar32 ucode; /* FcChar32 type holds 32 bits */ + size_t usize = 0; /* n' of bytes of the utf8 character */ + size_t i; + + *next_ret = s+1; + + /* get code of first byte of utf8 character */ + for (i = 0; i < sizeof utfmask; i++) { + if (((unsigned char)*s & utfmask[i]) == utfbyte[i]) { + usize = i; + ucode = (unsigned char)*s & ~utfmask[i]; + break; + } + } + + /* if first byte is a continuation byte or is not allowed, return unknown */ + if (i == sizeof utfmask || usize == 0) + return unknown; + + /* check the other usize-1 bytes */ + s++; + for (i = 1; i < usize; i++) { + *next_ret = s+1; + /* if byte is nul or is not a continuation byte, return unknown */ + if (*s == '\0' || ((unsigned char)*s & utfmask[0]) != utfbyte[0]) + return unknown; + /* 6 is the number of relevant bits in the continuation byte */ + ucode = (ucode << 6) | ((unsigned char)*s & ~utfmask[0]); + s++; + } + + /* check if ucode is invalid or in utf-16 surrogate halves */ + if (!BETWEEN(ucode, utfmin[usize], utfmax[usize]) + || BETWEEN (ucode, 0xD800, 0xDFFF)) + return unknown; + + return ucode; +} + +/* get which font contains a given code point */ +static XftFont * +getfontucode(FcChar32 ucode) +{ + FcCharSet *fccharset = NULL; + FcPattern *fcpattern = NULL; + FcPattern *match = NULL; + XftFont *retfont = NULL; + XftResult result; + size_t i; + + for (i = 0; i < dc.nfonts; i++) + if (XftCharExists(dpy, dc.fonts[i], ucode) == FcTrue) + return dc.fonts[i]; + + /* create a charset containing our code point */ + fccharset = FcCharSetCreate(); + FcCharSetAddChar(fccharset, ucode); + + /* create a pattern akin to the dc.pattern but containing our charset */ + if (fccharset) { + fcpattern = FcPatternDuplicate(dc.pattern); + FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset); + } + + /* find pattern matching fcpattern */ + if (fcpattern) { + FcConfigSubstitute(NULL, fcpattern, FcMatchPattern); + FcDefaultSubstitute(fcpattern); + match = XftFontMatch(dpy, screen, fcpattern, &result); + } + + /* if found a pattern, open its font */ + if (match) { + retfont = XftFontOpenPattern(dpy, match); + if (retfont && XftCharExists(dpy, retfont, ucode) == FcTrue) { + if ((dc.fonts = realloc(dc.fonts, dc.nfonts+1)) == NULL) + err(1, "realloc"); + dc.fonts[dc.nfonts] = retfont; + return dc.fonts[dc.nfonts++]; + } else { + XftFontClose(dpy, retfont); + } + } + + /* in case no fount was found, return the first one */ + return dc.fonts[0]; +} + +/* draw text into XftDraw, return width of text glyphs */ +static int +drawtext(XftDraw *draw, XftColor *color, int x, int y, unsigned h, const char *text) +{ + int textwidth = 0; + + while (*text) { + XftFont *currfont; + XGlyphInfo ext; + FcChar32 ucode; + const char *next; + size_t len; + + ucode = getnextutf8char(text, &next); + currfont = getfontucode(ucode); + + len = next - text; + XftTextExtentsUtf8(dpy, currfont, (XftChar8 *)text, len, &ext); + textwidth += ext.xOff; + + if (draw) { + int texty; + + texty = y + (h - (currfont->ascent + currfont->descent))/2 + currfont->ascent; + XftDrawStringUtf8(draw, color, currfont, x, texty, (XftChar8 *)text, len); + x += ext.xOff; + } + + text = next; + } + + return textwidth; +} + +/* setup the height, width and icon of the items of a menu */ +static void +setupitems(struct Menu *menu) +{ + struct Item *item; + int itemwidth; + + menu->w = config.width_pixels; + menu->maxtextw = 0; + for (item = menu->list; item != NULL; item = item->next) { + item->y = menu->h; + if (item->label == NULL) /* height for separator item */ + item->h = config.separator_pixels; + else + item->h = config.height_pixels; + menu->h += item->h; + if (item->label) + item->textw = drawtext(NULL, NULL, 0, 0, 0, item->label); + else + item->textw = 0; + + /* + * set menu width + * + * the item width depends on the size of its label (item->textw), + * and it is only used to calculate the width of the menu (which + * is equal to the width of the largest item). + * + * the horizontal padding appears 4 times through the width of a + * item: before and after its icon, and before and after its triangle. + * if the iflag is set (icons are disabled) then the horizontal + * padding appears 3 times: before the label and around the triangle. + */ + itemwidth = item->textw + config.triangle_width + config.horzpadding * 3; + itemwidth += (iflag || !menu->hasicon) ? 0 : config.iconsize + config.horzpadding; + menu->w = MAX(menu->w, itemwidth); + menu->maxtextw = MAX(menu->maxtextw, item->textw); + } +} + +/* setup the position of a menu */ +static void +setupmenupos(struct Menu *menu) +{ + int width, height; + + width = menu->w + config.border_pixels * 2; + height = menu->h + config.border_pixels * 2; + if (menu->parent == NULL) { /* if root menu, calculate in respect to cursor */ + if (pflag || (config.posx >= mon.x && mon.x + mon.w - config.posx >= width)) + menu->x = config.posx; + else if (config.posx > width) + menu->x = config.posx - width; + + if (pflag || (config.posy >= mon.y && mon.y + mon.h - config.posy >= height)) + menu->y = config.posy; + else if (mon.y + mon.h > height) + menu->y = mon.y + mon.h - height; + } else { /* else, calculate in respect to parent menu */ + int parentwidth; + + parentwidth = menu->parent->x + menu->parent->w + config.border_pixels + config.gap_pixels; + + if (mon.x + mon.w - parentwidth >= width) + menu->x = parentwidth; + else if (menu->parent->x > menu->w + config.border_pixels + config.gap_pixels) + menu->x = menu->parent->x - menu->w - config.border_pixels - config.gap_pixels; + + if (mon.y + mon.h - (menu->caller->y + menu->parent->y) >= height) + menu->y = menu->caller->y + menu->parent->y; + else if (mon.y + mon.h > height) + menu->y = mon.y + mon.h - height; + } +} + +/* recursivelly setup menu configuration and its pixmap */ +static void +setupmenu(struct Menu *menu, XClassHint *classh) +{ + char *title; + struct Item *item; + XWindowChanges changes; + XSizeHints sizeh; + XTextProperty wintitle; + + /* setup size and position of menus */ + setupitems(menu); + setupmenupos(menu); + + /* update menu geometry */ + changes.border_width = config.border_pixels; + changes.height = menu->h; + changes.width = menu->w; + changes.x = menu->x; + changes.y = menu->y; + XConfigureWindow(dpy, menu->win, CWBorderWidth | CWWidth | CWHeight | CWX | CWY, &changes); + + /* set window title (used if wflag is on) */ + if (menu->parent == NULL) { + title = classh->res_name; + } else if (menu->caller->output) { + title = menu->caller->output; + } else { + title = "\0"; + } + XStringListToTextProperty(&title, 1, &wintitle); + + /* set window manager hints */ + sizeh.flags = USPosition | PMaxSize | PMinSize; + sizeh.min_width = sizeh.max_width = menu->w; + sizeh.min_height = sizeh.max_height = menu->h; + XSetWMProperties(dpy, menu->win, &wintitle, NULL, NULL, 0, &sizeh, NULL, classh); + + /* set WM protocols and ewmh window properties */ + XSetWMProtocols(dpy, menu->win, &wmdelete, 1); + XChangeProperty(dpy, menu->win, netatom[NetWMName], utf8string, 8, + PropModeReplace, (unsigned char *)title, strlen(title)); + XChangeProperty(dpy, menu->win, netatom[NetWMWindowType], XA_ATOM, 32, + PropModeReplace, + (unsigned char *)&netatom[NetWMWindowTypePopupMenu], 1); + + /* calculate positions of submenus */ + for (item = menu->list; item != NULL; item = item->next) { + if (item->submenu != NULL) + setupmenu(item->submenu, classh); + } +} + +/* try to grab pointer, we may have to wait for another process to ungrab */ +static void +grabpointer(void) +{ + struct timespec ts = { .tv_sec = 0, .tv_nsec = 1000000 }; + int i; + + for (i = 0; i < 1000; i++) { + if (XGrabPointer(dpy, rootwin, True, ButtonPressMask, + GrabModeAsync, GrabModeAsync, None, + None, CurrentTime) == GrabSuccess) + return; + nanosleep(&ts, NULL); + } + errx(1, "could not grab pointer"); +} + +/* try to grab keyboard, we may have to wait for another process to ungrab */ +static void +grabkeyboard(void) +{ + struct timespec ts = { .tv_sec = 0, .tv_nsec = 1000000 }; + int i; + + for (i = 0; i < 1000; i++) { + if (XGrabKeyboard(dpy, rootwin, True, GrabModeAsync, + GrabModeAsync, CurrentTime) == GrabSuccess) + return; + nanosleep(&ts, NULL); + } + errx(1, "could not grab keyboard"); +} + +/* try to grab focus, we may have to wait for another process to ungrab */ +static void +grabfocus(Window win) +{ + struct timespec ts = { .tv_sec = 0, .tv_nsec = 10000000 }; + Window focuswin; + int i, revertwin; + + for (i = 0; i < 100; ++i) { + XGetInputFocus(dpy, &focuswin, &revertwin); + if (focuswin == win) + return; + XSetInputFocus(dpy, win, RevertToParent, CurrentTime); + nanosleep(&ts, NULL); + } + errx(1, "cannot grab focus"); +} + +/* ungrab pointer and keyboard */ +static void +ungrab(void) +{ + XUngrabPointer(dpy, CurrentTime); + XUngrabKeyboard(dpy, CurrentTime); +} + +/* load and scale icon */ +static Imlib_Image +loadicon(const char *file) +{ + Imlib_Image icon; + Imlib_Load_Error errcode; + const char *errstr; + int width; + int height; + int imgsize; + + icon = imlib_load_image_with_error_return(file, &errcode); + if (*file == '\0') { + warnx("could not load icon (file name is blank)"); + return NULL; + } else if (icon == NULL) { + switch (errcode) { + case IMLIB_LOAD_ERROR_FILE_DOES_NOT_EXIST: + errstr = "file does not exist"; + break; + case IMLIB_LOAD_ERROR_FILE_IS_DIRECTORY: + errstr = "file is directory"; + break; + case IMLIB_LOAD_ERROR_PERMISSION_DENIED_TO_READ: + case IMLIB_LOAD_ERROR_PERMISSION_DENIED_TO_WRITE: + errstr = "permission denied"; + break; + case IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT: + errstr = "unknown file format"; + break; + case IMLIB_LOAD_ERROR_PATH_TOO_LONG: + errstr = "path too long"; + break; + case IMLIB_LOAD_ERROR_PATH_COMPONENT_NON_EXISTANT: + case IMLIB_LOAD_ERROR_PATH_COMPONENT_NOT_DIRECTORY: + case IMLIB_LOAD_ERROR_PATH_POINTS_OUTSIDE_ADDRESS_SPACE: + errstr = "improper path"; + break; + case IMLIB_LOAD_ERROR_TOO_MANY_SYMBOLIC_LINKS: + errstr = "too many symbolic links"; + break; + case IMLIB_LOAD_ERROR_OUT_OF_MEMORY: + errstr = "out of memory"; + break; + case IMLIB_LOAD_ERROR_OUT_OF_FILE_DESCRIPTORS: + errstr = "out of file descriptors"; + break; + default: + errstr = "unknown error"; + break; + } + warnx("could not load icon (%s): %s", errstr, file); + return NULL; + } + + imlib_context_set_image(icon); + + width = imlib_image_get_width(); + height = imlib_image_get_height(); + imgsize = MIN(width, height); + + icon = imlib_create_cropped_scaled_image(0, 0, imgsize, imgsize, + config.iconsize, + config.iconsize); + + return icon; +} + +/* draw pixmap for the selected and unselected version of each item on menu */ +static void +drawitems(struct Menu *menu) +{ + XftDraw *dsel, *dunsel; + struct Item *item; + int textx; + int x, y; + + for (item = menu->list; item != NULL; item = item->next) { + item->unsel = XCreatePixmap(dpy, menu->win, menu->w, item->h, + DefaultDepth(dpy, screen)); + + XSetForeground(dpy, dc.gc, dc.normal[ColorBG].pixel); + XFillRectangle(dpy, item->unsel, dc.gc, 0, 0, menu->w, item->h); + + if (item->label == NULL) { /* item is separator */ + y = item->h/2; + XSetForeground(dpy, dc.gc, dc.separator.pixel); + XDrawLine(dpy, item->unsel, dc.gc, config.horzpadding, y, + menu->w - config.horzpadding, y); + + item->sel = item->unsel; + } else { + item->sel = XCreatePixmap(dpy, menu->win, menu->w, item->h, + DefaultDepth(dpy, screen)); + XSetForeground(dpy, dc.gc, dc.selected[ColorBG].pixel); + XFillRectangle(dpy, item->sel, dc.gc, 0, 0, menu->w, item->h); + + /* draw text */ + textx = config.horzpadding; + textx += (iflag || !menu->hasicon) ? 0 : config.horzpadding + config.iconsize; + switch (config.alignment) { + case CenterAlignment: + textx += (menu->maxtextw - item->textw) / 2; + break; + case RightAlignment: + textx += menu->maxtextw - item->textw; + break; + default: + break; + } + dsel = XftDrawCreate(dpy, item->sel, visual, colormap); + dunsel = XftDrawCreate(dpy, item->unsel, visual, colormap); + XSetForeground(dpy, dc.gc, dc.selected[ColorFG].pixel); + drawtext(dsel, &dc.selected[ColorFG], textx, 0, item->h, item->label); + XSetForeground(dpy, dc.gc, dc.normal[ColorFG].pixel); + drawtext(dunsel, &dc.normal[ColorFG], textx, 0, item->h, item->label); + XftDrawDestroy(dsel); + XftDrawDestroy(dunsel); + + /* draw triangle */ + if (item->submenu != NULL) { + x = menu->w - config.triangle_width - config.horzpadding; + y = (item->h - config.triangle_height + 1) / 2; + + XPoint triangle[] = { + {x, y}, + {x + config.triangle_width, y + config.triangle_height/2}, + {x, y + config.triangle_height}, + {x, y} + }; + + XSetForeground(dpy, dc.gc, dc.selected[ColorFG].pixel); + XFillPolygon(dpy, item->sel, dc.gc, triangle, LEN(triangle), + Convex, CoordModeOrigin); + XSetForeground(dpy, dc.gc, dc.normal[ColorFG].pixel); + XFillPolygon(dpy, item->unsel, dc.gc, triangle, LEN(triangle), + Convex, CoordModeOrigin); + } + + /* try to load icon */ + if (item->file && !iflag) { + item->icon = loadicon(item->file); + free(item->file); + } + + /* draw icon if properly loaded */ + if (item->icon) { + imlib_context_set_image(item->icon); + imlib_context_set_drawable(item->sel); + imlib_render_image_on_drawable(config.horzpadding, config.iconpadding); + imlib_context_set_drawable(item->unsel); + imlib_render_image_on_drawable(config.horzpadding, config.iconpadding); + imlib_context_set_image(item->icon); + imlib_free_image(); + } + } + } +} + +/* copy pixmaps of items of the current menu and of its ancestors into menu window */ +static void +drawmenus(struct Menu *currmenu) +{ + struct Menu *menu; + struct Item *item; + + for (menu = currmenu; menu != NULL; menu = menu->parent) { + if (!menu->drawn) { + drawitems(menu); + menu->drawn = 1; + } + for (item = menu->list; item != NULL; item = item->next) { + if (item == menu->selected) + XCopyArea(dpy, item->sel, menu->win, dc.gc, 0, 0, + menu->w, item->h, 0, item->y); + else + XCopyArea(dpy, item->unsel, menu->win, dc.gc, 0, 0, + menu->w, item->h, 0, item->y); + } + } +} + +/* umap previous menus and map current menu and its parents */ +static void +mapmenu(struct Menu *currmenu) +{ + static struct Menu *prevmenu = NULL; + struct Menu *menu, *menu_; + struct Menu *lcamenu; /* lowest common ancestor menu */ + unsigned minlevel; /* level of the closest to root menu */ + unsigned maxlevel; /* level of the closest to root menu */ + + /* do not remap current menu if it wasn't updated*/ + if (prevmenu == currmenu) + return; + + /* if this is the first time mapping, skip calculations */ + if (prevmenu == NULL) { + XMapWindow(dpy, currmenu->win); + prevmenu = currmenu; + return; + } + + /* find lowest common ancestor menu */ + minlevel = MIN(currmenu->level, prevmenu->level); + maxlevel = MAX(currmenu->level, prevmenu->level); + if (currmenu->level == maxlevel) { + menu = currmenu; + menu_ = prevmenu; + } else { + menu = prevmenu; + menu_ = currmenu; + } + while (menu->level > minlevel) + menu = menu->parent; + while (menu != menu_) { + menu = menu->parent; + menu_ = menu_->parent; + } + lcamenu = menu; + + /* unmap menus from currmenu (inclusive) until lcamenu (exclusive) */ + for (menu = prevmenu; menu != lcamenu; menu = menu->parent) { + menu->selected = NULL; + XUnmapWindow(dpy, menu->win); + } + + /* map menus from currmenu (inclusive) until lcamenu (exclusive) */ + for (menu = currmenu; menu != lcamenu; menu = menu->parent) { + + if (wflag) { + setupmenupos(menu); + XMoveWindow(dpy, menu->win, menu->x, menu->y); + } + + XMapWindow(dpy, menu->win); + } + + prevmenu = currmenu; + grabfocus(currmenu->win); +} + +/* get menu of given window */ +static struct Menu * +getmenu(struct Menu *currmenu, Window win) +{ + struct Menu *menu; + + for (menu = currmenu; menu != NULL; menu = menu->parent) + if (menu->win == win) + return menu; + + return NULL; +} + +/* get item of given menu and position */ +static struct Item * +getitem(struct Menu *menu, int y) +{ + struct Item *item; + + if (menu == NULL) + return NULL; + + for (item = menu->list; item != NULL; item = item->next) + if (y >= item->y && y <= item->y + item->h) + return item; + + return NULL; +} + +/* cycle through the items; non-zero direction is next, zero is prev */ +static struct Item * +itemcycle(struct Menu *currmenu, int direction) +{ + struct Item *item = NULL; + struct Item *lastitem; + + for (lastitem = currmenu->list; lastitem && lastitem->next; lastitem = lastitem->next) + ; + + /* select item (either separator or labeled item) in given direction */ + switch (direction) { + case ITEMNEXT: + if (currmenu->selected == NULL) + item = currmenu->list; + else if (currmenu->selected->next != NULL) + item = currmenu->selected->next; + break; + case ITEMPREV: + if (currmenu->selected == NULL) + item = lastitem; + else if (currmenu->selected->prev != NULL) + item = currmenu->selected->prev; + break; + case ITEMFIRST: + item = currmenu->list; + break; + case ITEMLAST: + item = lastitem; + break; + } + + /* + * the selected item can be a separator + * let's select the closest labeled item (ie., one that isn't a separator) + */ + switch (direction) { + case ITEMNEXT: + case ITEMFIRST: + while (item != NULL && item->label == NULL) + item = item->next; + if (item == NULL) + item = currmenu->list; + break; + case ITEMPREV: + case ITEMLAST: + while (item != NULL && item->label == NULL) + item = item->prev; + if (item == NULL) + item = lastitem; + break; + } + + return item; +} + +/* check if button is used to scroll */ +static int +isscrollbutton(unsigned int button) +{ + if (button == Button4 || button == Button5) + return 1; + return 0; +} + +/* check if button is used to open a item on click */ +static int +isclickbutton(unsigned int button) +{ + if (button == Button1 || button == Button2) + return 1; + if (!rflag && button == Button3) + return 1; + return 0; +} + +/* warp pointer to center of selected item */ +static void +warppointer(struct Menu *menu, struct Item *item) +{ + if (menu == NULL || item == NULL) + return; + if (menu->selected) { + XWarpPointer(dpy, None, menu->win, 0, 0, 0, 0, menu->w / 2, item->y + item->h / 2); + } +} + +/* append buf into text */ +static int +append(char *text, char *buf, size_t textsize, size_t buflen) +{ + size_t textlen; + + textlen = strlen(text); + if (iscntrl(*buf)) + return 0; + if (textlen + buflen > textsize - 1) + return 0; + if (buflen < 1) + return 0; + memcpy(text + textlen, buf, buflen); + text[textlen + buflen] = '\0'; + return 1; +} + +/* get item in menu matching text from given direction (or from beginning, if dir = 0) */ +static struct Item * +matchitem(struct Menu *menu, char *text, int dir) +{ + struct Item *item, *lastitem; + char *s; + size_t textlen; + + for (lastitem = menu->list; lastitem && lastitem->next; lastitem = lastitem->next) + ; + textlen = strlen(text); + if (dir < 0) { + if (menu->selected && menu->selected->prev) + item = menu->selected->prev; + else + item = lastitem; + } else if (dir > 0) { + if (menu->selected && menu->selected->next) + item = menu->selected->next; + else + item = menu->list; + } else { + item = menu->list; + } + /* find next item from selected item */ + for ( ; item; item = (dir < 0) ? item->prev : item->next) + for (s = item->label; s && *s; s++) + if (strncasecmp(s, text, textlen) == 0) + return item; + /* if not found, try to find from the beginning/end of list */ + if (dir > 0) { + for (item = menu->list ; item; item = item->next) { + for (s = item->label; s && *s; s++) { + if (strncasecmp(s, text, textlen) == 0) { + return item; + } + } + } + } else { + for (item = lastitem ; item; item = item->prev) { + for (s = item->label; s && *s; s++) { + if (strncasecmp(s, text, textlen) == 0) { + return item; + } + } + } + } + return NULL; +} + +/* check keysyms defined on config.h */ +static KeySym +normalizeksym(KeySym ksym) +{ + if (ksym == KSYMFIRST) + return XK_Home; + if (ksym == KSYMLAST) + return XK_End; + if (ksym == KSYMUP) + return XK_Up; + if (ksym == KSYMDOWN) + return XK_Down; + if (ksym == KSYMLEFT) + return XK_Left; + if (ksym == KSYMRIGHT) + return XK_Right; + return ksym; +} + +/* run event loop */ +static void +run(struct Menu *currmenu) +{ + char text[BUFSIZ]; + char buf[32]; + struct Menu *menu; + struct Item *item; + struct Item *previtem = NULL; + struct Item *lastitem, *select; + KeySym ksym; + Status status; + XEvent ev; + int warped = 0; + int action; + int len; + int i; + + text[0] = '\0'; + mapmenu(currmenu); + while (!XNextEvent(dpy, &ev)) { + if (XFilterEvent(&ev, None)) + continue; + action = ACTION_NOP; + switch(ev.type) { + case Expose: + if (ev.xexpose.count == 0) + action = ACTION_DRAW; + break; + case MotionNotify: + if (!warped) { + menu = getmenu(currmenu, ev.xbutton.window); + item = getitem(menu, ev.xbutton.y); + if (menu == NULL || item == NULL || previtem == item) + break; + previtem = item; + select = menu->selected = item; + if (item->submenu != NULL) { + currmenu = item->submenu; + select = NULL; + } else { + currmenu = menu; + } + action = ACTION_CLEAR | ACTION_SELECT | ACTION_MAP | ACTION_DRAW; + } + warped = 0; + break; + case ButtonRelease: + if (isscrollbutton(ev.xbutton.button)) { + if (ev.xbutton.button == Button4) + select = itemcycle(currmenu, ITEMPREV); + else + select = itemcycle(currmenu, ITEMNEXT); + action = ACTION_CLEAR | ACTION_SELECT | ACTION_DRAW | ACTION_WARP; + } else if (isclickbutton(ev.xbutton.button)) { + menu = getmenu(currmenu, ev.xbutton.window); + item = getitem(menu, ev.xbutton.y); + if (menu == NULL || item == NULL) + break; +enteritem: + if (item->label == NULL) + break; /* ignore separators */ + if (item->submenu != NULL) { + currmenu = item->submenu; + } else { + printf("%s\n", item->output); + return; + } + select = currmenu->list; + action = ACTION_CLEAR | ACTION_SELECT | ACTION_MAP | ACTION_DRAW; + if (ev.xbutton.button == Button2) { + action |= ACTION_WARP; + } + } + break; + case ButtonPress: + menu = getmenu(currmenu, ev.xbutton.window); + if (menu == NULL) + return; + break; + case KeyPress: + len = XmbLookupString(currmenu->xic, &ev.xkey, buf, sizeof buf, &ksym, &status); + switch(status) { + default: /* XLookupNone, XBufferOverflow */ + continue; + case XLookupChars: + goto append; + case XLookupKeySym: /* FALLTHROUGH */ + case XLookupBoth: + break; + } + + /* esc closes xmenu when current menu is the root menu */ + if (ksym == XK_Escape && currmenu->parent == NULL) + return; + + /* Shift-Tab = ISO_Left_Tab */ + if (ksym == XK_Tab && (ev.xkey.state & ShiftMask)) + ksym = XK_ISO_Left_Tab; + + /* cycle through menu */ + select = NULL; + ksym = normalizeksym(ksym); + switch (ksym) { + case XK_Home: + select = itemcycle(currmenu, ITEMFIRST); + action = ACTION_CLEAR | ACTION_SELECT | ACTION_DRAW; + break; + case XK_End: + select = itemcycle(currmenu, ITEMLAST); + action = ACTION_CLEAR | ACTION_SELECT | ACTION_DRAW; + break; + case XK_ISO_Left_Tab: + if (*text) { + select = matchitem(currmenu, text, -1); + action = ACTION_SELECT | ACTION_DRAW; + break; + } + /* FALLTHROUGH */ + case XK_Up: + select = itemcycle(currmenu, ITEMPREV); + action = ACTION_CLEAR | ACTION_SELECT | ACTION_DRAW; + break; + case XK_Tab: + if (*text) { + select = matchitem(currmenu, text, 1); + action = ACTION_SELECT | ACTION_DRAW; + break; + } + /* FALLTHROUGH */ + case XK_Down: + select = itemcycle(currmenu, ITEMNEXT); + action = ACTION_CLEAR | ACTION_SELECT | ACTION_DRAW; + break; + case XK_1: case XK_2: case XK_3: case XK_4: case XK_5: case XK_6: case XK_7: case XK_8: case XK_9: + item = itemcycle(currmenu, ITEMFIRST); + lastitem = itemcycle(currmenu, ITEMLAST); + for (int i = ksym - XK_1; i > 0 && item != lastitem; i--) { + currmenu->selected = item; + item = itemcycle(currmenu, ITEMNEXT); + } + select = item; + action = ACTION_CLEAR | ACTION_SELECT | ACTION_DRAW; + break; + case XK_Return: case XK_Right: + if (currmenu->selected) { + item = currmenu->selected; + goto enteritem; + } + break; + case XK_Escape: case XK_Left: + if (currmenu->parent) { + select = currmenu->parent->selected; + currmenu = currmenu->parent; + action = ACTION_CLEAR | ACTION_MAP | ACTION_SELECT | ACTION_DRAW; + } + break; + case XK_BackSpace: case XK_Clear: case XK_Delete: + action = ACTION_CLEAR | ACTION_SELECT | ACTION_DRAW; + break; + default: +append: + if (*buf == '\0' || iscntrl(*buf)) + break; + for (i = 0; i < 2; i++) { + append(text, buf, sizeof text, len); + if ((select = matchitem(currmenu, text, 0))) + break; + text[0] = '\0'; + } + action = ACTION_SELECT | ACTION_DRAW; + break; + } + break; + case LeaveNotify: + previtem = NULL; + select = NULL; + action = ACTION_CLEAR | ACTION_SELECT | ACTION_DRAW; + break; + case ConfigureNotify: + menu = getmenu(currmenu, ev.xconfigure.window); + if (menu == NULL) + break; + menu->x = ev.xconfigure.x; + menu->y = ev.xconfigure.y; + break; + case ClientMessage: + if ((unsigned long) ev.xclient.data.l[0] != wmdelete) + break; + /* user closed window */ + menu = getmenu(currmenu, ev.xclient.window); + if (menu->parent == NULL) + return; /* closing the root menu closes the program */ + currmenu = menu->parent; + action = ACTION_MAP; + break; + } + if (action & ACTION_CLEAR) + text[0] = '\0'; + if (action & ACTION_SELECT) + currmenu->selected = select; + if (action & ACTION_MAP) + mapmenu(currmenu); + if (action & ACTION_DRAW) + drawmenus(currmenu); + if (action & ACTION_WARP) { + warppointer(currmenu, select); + warped = 1; + } + } +} + +/* recursivelly free pixmaps and destroy windows */ +static void +cleanmenu(struct Menu *menu) +{ + struct Item *item; + struct Item *tmp; + + item = menu->list; + while (item != NULL) { + if (item->submenu != NULL) + cleanmenu(item->submenu); + tmp = item; + if (menu->drawn) { + XFreePixmap(dpy, item->unsel); + if (tmp->label != NULL) + XFreePixmap(dpy, item->sel); + } + if (tmp->label != tmp->output) + free(tmp->label); + free(tmp->output); + item = item->next; + free(tmp); + } + + XDestroyWindow(dpy, menu->win); + free(menu); +} + +/* cleanup draw context */ +static void +cleandc(void) +{ + size_t i; + + XftColorFree(dpy, visual, colormap, &dc.normal[ColorBG]); + XftColorFree(dpy, visual, colormap, &dc.normal[ColorFG]); + XftColorFree(dpy, visual, colormap, &dc.selected[ColorBG]); + XftColorFree(dpy, visual, colormap, &dc.selected[ColorFG]); + XftColorFree(dpy, visual, colormap, &dc.separator); + XftColorFree(dpy, visual, colormap, &dc.border); + for (i = 0; i < dc.nfonts; i++) + XftFontClose(dpy, dc.fonts[i]); + XFreeGC(dpy, dc.gc); +} + +/* xmenu: generate menu from stdin and print selected entry to stdout */ +int +main(int argc, char *argv[]) +{ + struct Menu *rootmenu; + XClassHint classh; + + /* open connection to server and set X variables */ + if (!setlocale(LC_CTYPE, "") || !XSupportsLocale()) + warnx("warning: no locale support"); + if ((dpy = XOpenDisplay(NULL)) == NULL) + errx(1, "could not open display"); + screen = DefaultScreen(dpy); + visual = DefaultVisual(dpy, screen); + rootwin = RootWindow(dpy, screen); + colormap = DefaultColormap(dpy, screen); + XrmInitialize(); + if ((xrm = XResourceManagerString(dpy)) != NULL) + xdb = XrmGetStringDatabase(xrm); + if ((xim = XOpenIM(dpy, NULL, NULL, NULL)) == NULL) + errx(1, "XOpenIM: could not open input device"); + + /* process configuration and window class */ + getresources(); + classh.res_class = PROGNAME; + classh.res_name = getoptions(argc, argv); + + /* imlib2 stuff */ + if (!iflag) { + imlib_set_cache_size(2048 * 1024); + imlib_context_set_dither(1); + imlib_context_set_display(dpy); + imlib_context_set_visual(visual); + imlib_context_set_colormap(colormap); + } + + /* initializers */ + initmonitor(); + initdc(); + initiconsize(); + initatoms(); + + /* generate menus and set them up */ + rootmenu = parsestdin(); + if (rootmenu == NULL) + errx(1, "no menu generated"); + setupmenu(rootmenu, &classh); + + /* grab mouse and keyboard */ + if (!wflag) { + grabpointer(); + grabkeyboard(); + } + + /* run event loop */ + run(rootmenu); + + /* clean stuff */ + ungrab(); + cleanmenu(rootmenu); + cleandc(); + XrmDestroyDatabase(xdb); + XCloseDisplay(dpy); + + return 0; +} diff --git a/xmenu/.local/share/xmenu/xmenu.h b/xmenu/.local/share/xmenu/xmenu.h new file mode 100644 index 0000000..5e369a2 --- /dev/null +++ b/xmenu/.local/share/xmenu/xmenu.h @@ -0,0 +1,110 @@ +#define PROGNAME "xmenu" + +/* Actions for the main loop */ +#define ACTION_NOP 0 +#define ACTION_CLEAR 1<<0 /* clear text */ +#define ACTION_SELECT 1<<1 /* select item */ +#define ACTION_MAP 1<<2 /* remap menu windows */ +#define ACTION_DRAW 1<<3 /* redraw menu windows */ +#define ACTION_WARP 1<<4 /* warp the pointer */ + +/* enum for keyboard menu navigation */ +enum { ITEMPREV, ITEMNEXT, ITEMFIRST, ITEMLAST }; + +/* enum for text alignment */ +enum {LeftAlignment, CenterAlignment, RightAlignment}; + +/* macros */ +#define LEN(x) (sizeof (x) / sizeof (x[0])) +#define MAX(x,y) ((x)>(y)?(x):(y)) +#define MIN(x,y) ((x)<(y)?(x):(y)) +#define BETWEEN(x, a, b) ((a) <= (x) && (x) <= (b)) +#define GETNUM(n, s) { \ + unsigned long __TMP__; \ + if ((__TMP__ = strtoul((s), NULL, 10)) < INT_MAX) \ + (n) = __TMP__; \ + } + +/* color enum */ +enum {ColorFG, ColorBG, ColorLast}; + +/* EWMH atoms */ +enum {NetWMName, NetWMWindowType, NetWMWindowTypePopupMenu, NetLast}; + +/* configuration structure */ +struct Config { + /* the values below are set by config.h */ + const char *font; + const char *background_color; + const char *foreground_color; + const char *selbackground_color; + const char *selforeground_color; + const char *separator_color; + const char *border_color; + int width_pixels; + int height_pixels; + int border_pixels; + int separator_pixels; + int gap_pixels; + int triangle_width; + int triangle_height; + int iconpadding; + int horzpadding; + int alignment; + + /* the values below are set by options */ + int monitor; + int posx, posy; /* rootmenu position */ + + /* the value below is computed by xmenu */ + int iconsize; +}; + +/* draw context structure */ +struct DC { + XftColor normal[ColorLast]; + XftColor selected[ColorLast]; + XftColor border; + XftColor separator; + + GC gc; + + FcPattern *pattern; + XftFont **fonts; + size_t nfonts; +}; + +/* menu item structure */ +struct Item { + char *label; /* string to be drawed on menu */ + char *output; /* string to be outputed when item is clicked */ + char *file; /* filename of the icon */ + int y; /* item y position relative to menu */ + int h; /* item height */ + int textw; /* text width */ + struct Item *prev; /* previous item */ + struct Item *next; /* next item */ + struct Menu *submenu; /* submenu spawned by clicking on item */ + Drawable sel, unsel; /* pixmap for selected and unselected item */ + Imlib_Image icon; +}; + +/* monitor geometry structure */ +struct Monitor { + int x, y, w, h; /* monitor geometry */ +}; + +/* menu structure */ +struct Menu { + struct Menu *parent; /* parent menu */ + struct Item *caller; /* item that spawned the menu */ + struct Item *list; /* list of items contained by the menu */ + struct Item *selected; /* item currently selected in the menu */ + int x, y, w, h; /* menu geometry */ + int hasicon; /* whether the menu has item with icons */ + int drawn; /* whether the menu was already drawn */ + int maxtextw; /* maximum text width */ + unsigned level; /* menu level relative to root */ + Window win; /* menu window to map on the screen */ + XIC xic; /* input context */ +}; diff --git a/xmenu/.local/share/xmenu/xmenu.o b/xmenu/.local/share/xmenu/xmenu.o new file mode 100644 index 0000000000000000000000000000000000000000..280bf992bc5a1e686bb7d17a9d89aab8a49344b4 GIT binary patch literal 49184 zcmeI54R}=5wf9d5$VbtjRf`qtsAxd}`LYrOod|mK z$JkV*rMQ9zc%|Xw z@4~48M8e5EJ1@oYIl4dGJe^nk2m)cjCNj=MWS1({OUXxfO9e<|O4c^j=udSPP{)AhIc380sl#UV_VT!-gKO;LcJy zO@%rU(N)lR9bXkZ?M+)-&@{zf_9U&zB-YTH_g_i)9VDs}{sWn56MmgeGYP+JuT)B8 z!qkGMM@5Vi-fv8SU37ET&U`v)z5?IyjLmyfYvNohbsT}DV01o=?(DwXNS}<$;ymqo!8^4s!U|(Zv;(VO4(dh{p9KR$zuqEBUC7ss-hLYOLHk!gE&9;OowzndD znJwD*08?Zy{g4a3C4d#d*$1WUJ1O@a7FW{(k)U#x+AAvqMVXruN^~-U{ul8SSnAWbJLx-j>nc_D|N{ z4(;t3?d|_$?H$nGkhIfu1Pk$sEl|DnApVHMI(dg@nJ5!+}(jg^(${kKJbPVYnFKDVmcWt}0 z(V-*Uw`~pY>C6x3g*qEH9Lc+VVAsxGBve2biNSC~XE^1h2ZozX*JL}+`Qgn+!qgik zcklSmF}~9hEq)>8%{R0;gBAMYdWDJXiVY^$)_2CY$w=Y;`6d{ z7z%#Ga?cHdb{UMqxh)Z6)7gCw1-T}4Cu!u}-_*gjrU!*NNi#%*Q^T@JhYOx-4d>zi z_JU`;f@fMU_5z-Vgnp7n55I--5pKQ~gSIglw~@|pa~PzVP79tsUGhtNpW+^ECavM-66AA>Ii-r!JOY)4Q`s9%{>*wanIBH&hu^boI5Ul{ z1x-=(&@^y&xdV4NbxUt%@E(R)TQAyJPdH@uy|a^$$xK_$gH~MoO%^h` zgSt}FY;b?5$L5_qVbYk>T--6IIdl+nM9dRQF$+2}DBQfEeIdRM@Rzu{VPC+u22x`k zo?CHKE#xZIC#b_Y=L!Bhs{Q;a)Ur^p2PPW^ofNrB7c@ncT(=dYl3!ZOJg%0A@ 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 K?~{Y;zyAw4EeUo2 literal 0 HcmV?d00001 diff --git a/xmenu/.local/share/xmenu/xmenu.sh b/xmenu/.local/share/xmenu/xmenu.sh new file mode 100755 index 0000000..d0c19a3 --- /dev/null +++ b/xmenu/.local/share/xmenu/xmenu.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +xmenu < + +

+ +# XNotify + +XNotify displays a notification on the screen. +XNotify receives a notification specification in stdin and shows a +notification for the user on the screen. + +See the [manual](https://github.com/phillbush/xnotify/wiki) for more information on how xnotify works. + + +## Features + +XNotify comes with the following features: + +* xnotify receives notifications from stdin. + You can use a fifo to echo notifications on the fly like + + `echo Hello World > /path/to/xnotify.fifo` + +* xnotify queue notifications and display them one above the other. + +* Image support, just prefix the notification string with `IMG:/path/to/the/file.png` and a tab. + +* Multiple monitor support. You can set the monitor with the `-m` option. + +* Support for fallback fonts (you can set more than one fonts, that will be tried in order). + +* X resources support (you don't need to recompile Xnotify for configuring it). + + +## Files + +The files are: + +* `./README`: This file. +* `./Makefile`: The makefile. +* `./config.h`: The hardcoded default configuration for XNotify. +* `./config.mk`: The setup for the makefile. +* `./xnotify.{c,h}`: The source code of XNotify. + + +## Installation + +First, edit `./config.mk` to match your local setup. + +In order to build XNotify you need the `Imlib2`, `Xlib` and `Xft` header files. +The default configuration for XNotify is specified in the file `config.h`, +you can edit it, but most configuration can be changed at runtime via +X resources and via command-line options. +Enter the following command to build XNotify. +This command creates the binary file `./xnotify`. + + make + +By default, XNotify is installed into the `/usr/local` prefix. Enter the +following command to install XNotify (if necessary as root). This command +installs the binary file `./xnotify` into the `${PREFIX}/bin/` directory, and +the manual file `./xnotify.1` into `${MANPREFIX}/man1/` directory. + + make install + + +## Running XNotify + +XNotify receives as input one line per notification. +Each line is made out of a notification title and a notification body separated by any number of tabs. +Lines without a title are ignored. + +The following is an example of how to run XNotify + + $ xnotify -m 10 -G NE -g -10+10 -s 15 + +This line means: read notifications from stdin, display +the notifications on the north east (`-G NE`) of the monitor 0 (`-m 0`), +that is, on the upper right corner of the first monitor. The +notifications should be placed 10 pixels to the left and 10 pixels +down (thus creating a 10 pixel gap with the upper right corner). +Each notification stay alive for 15 seconds. + +To create a named pipe for XNotify, you can place the following in the beginning of your `~/.xinitrc`. +This will create a named pipe unique to your current X display in your home directory at `~/.cache`. +Then, it will open xnotify in the background, reading from this named pipe. + + XNOTIFY_FIFO="$HOME/.cache/xnotify$DISPLAY.fifo" + export XNOTIFY_FIFO + rm -f $XNOTIFY_FIFO + mkfifo $XNOTIFY_FIFO + xnotify 0<>$XNOTIFY_FIFO + +Note that the first two lines (the line setting the environment variable and the line exporting it) +should be at the beginning of your `~/.xinitrc`, so other programs you invoke are aware of this variable. + +To create a notification with a image, input to XNotify a line beginning +with `IMG:/path/to/file.png` followed by a tab. For example: + + $ printf 'IMG:/path/to/file.png\tThis is a notification\n' > $XNOTIFY_FIFO + +To read dbus notifications from stdin, you'll need [tiramisu](https://github.com/Sweets/tiramisu). +Then add the following line to your `.xinitrc`, after the line calling xnotify. + + $ tiramisu -o "$(printf '#summary\t#body\n')" > $XNOTIFY_FIFO & + +To use a different size other than the default for the notifications, +run `xnotify` with the `-g` option set to the notification size in +`WIDTHxHEIGHT`. For example: + + $ xnotify -g 300x80 + +The argument for the `-g` option has the form `[WIDTHxHEIGHT][{+-}XPOS{+-}YPOS]`. +Parts between square brackets are optional. +`{+-}` means to chose either `+` or `-`. diff --git a/xnotify/.local/share/xnotify/config.h b/xnotify/.local/share/xnotify/config.h new file mode 100644 index 0000000..97312d0 --- /dev/null +++ b/xnotify/.local/share/xnotify/config.h @@ -0,0 +1,38 @@ +static struct Config config = { + /* fonts, separate different fonts with comma */ + .titlefont = "SF Pro:size=9:style=bold", + .bodyfont = "SF Pro:size=9", + + /* colors */ + .background_color = "#181819", + .foreground_color = "#e2e2e3", + .border_color = "#3465a4", + + /* geometry and gravity (see the manual) */ + .geometryspec = "0x0-23+33", + .gravityspec = "NE", + /* size of border, gaps and image (in pixels) */ + .border_pixels = 0, + .gap_pixels = 7, + .image_pixels = 80, /* if 0, the image will fit the notification */ + .leading_pixels = 5, /* space between title and body texts */ + .padding_pixels = 10, /* space around content */ + .max_height = 300, /* maximum height of a notification, after text wrapping */ + + /* text alignment, set to LeftAlignment, CenterAlignment or RightAlignment */ + .alignment = LeftAlignment, + + /* set to nonzero to shrink notification width to its content size */ + .shrink = 0, + + /* whether to wrap text */ + .wrap = 1, + + /* time, in seconds, for a notification to stay alive */ + .sec = 6, + + /* mouse button that makes xnotify prints a notification's CMD: */ + .actionbutton = Button3, +}; +/* string to be replaced by truncated text, should be a single unicode character */ +#define ELLIPSIS "…" diff --git a/xnotify/.local/share/xnotify/config.mk b/xnotify/.local/share/xnotify/config.mk new file mode 100644 index 0000000..69c69f8 --- /dev/null +++ b/xnotify/.local/share/xnotify/config.mk @@ -0,0 +1,27 @@ +# program name +PROG = xnotify + +# paths +PREFIX = /usr/local +MANPREFIX = ${PREFIX}/share/man + +LOCALINC = /usr/local/include +LOCALLIB = /usr/local/lib + +X11INC = /usr/X11R6/include +X11LIB = /usr/X11R6/lib + +FREETYPEINC = /usr/include/freetype2 +# OpenBSD (uncomment) +#FREETYPEINC = ${X11INC}/freetype2 + +# includes and libs +INCS = -I${LOCALINC} -I${X11INC} -I${FREETYPEINC} +LIBS = -L${LOCALLIB} -L${X11LIB} -lfontconfig -lXft -lX11 -lXinerama -lImlib2 + +# flags +CFLAGS = -Wall -Wextra ${INCS} ${CPPFLAGS} +LDFLAGS = ${LIBS} + +# compiler and linker +CC = cc diff --git a/xnotify/.local/share/xnotify/xnotify b/xnotify/.local/share/xnotify/xnotify new file mode 100755 index 0000000000000000000000000000000000000000..4a1874b8555d5d59cfd8790b397224fd3de849a9 GIT binary patch literal 52528 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 literal 0 HcmV?d00001 diff --git a/xnotify/.local/share/xnotify/xnotify.1 b/xnotify/.local/share/xnotify/xnotify.1 new file mode 100644 index 0000000..7a9e00b --- /dev/null +++ b/xnotify/.local/share/xnotify/xnotify.1 @@ -0,0 +1,333 @@ +.TH XNOTIFY 1 +.SH NAME +xnotify \- popup a notification on the screen +.SH SYNOPSIS +.B xnotify +.RB [ \-ow ] +.RB [ \-G +.IR gravity ] +.RB [ \-b +.IR button ] +.RB [ \-g +.IR geometry ] +.RB [ \-h +.IR height ] +.RB [ \-m +.IR monitor ] +.RB [ \-s +.IR seconds ] +.SH DESCRIPTION +.B xnotify +is a notification launcher for X, +it receives a notification specification from standard input +and shows a notification on the screen. +The notification disappears automatically after a given number of seconds +or after a mouse click is operated on it. +.PP +The options are as follows: +.TP +.BI "\-G " gravity +Specify the gravity, +that is, where in the screen to display xnotify. +.I gravity +can be "NE" for NorthEastGravity (display on the top right corner of the screen); +"SE" for SouthEastGravity (display on the bottom right corner of the screen); +"C" for CenterGravity (display on the center of the screen); +etc. +.TP +.BI "\-b " button +Specifies a number between 1 and 5 to be the mouse action button. +When clicking over a notification with the action button, +the notification will close, +and xnotify will output to its stdout the value of the notification's +.B CMD: +option. +.TP +.BI "\-g " geometry +Specifies the geometry in the form +.B [x][{-+}{-+}]. +Replace +.B +by the desired width, +.B +by the desired minimum height, and so on. +The height is the minimum height of a notification; +a notification that contains a more than one line or an image can get bigger than this minimum height. +A value of 0 sets a field to the default value. +So, for example, +.B -g 0x80+0+0 +set the minimum height to 80 pixels while maintaining other values to the default. +.B +and +.B +can be preceded by either a minus or a plus +(meaning negative or positive values). +Fields in square brackets are optional. +So, for example, +.B "-g 0x80" +is the same as +.BR "-g 0x80+0+0" ; +and +.B "-g -10+10" +is the same as +.BR "-g 0x0-10+10" . +.TP +.BI "\-h " height +Maximum height (in pixels) of a notification window. +.TP +.BI "\-m " monitor +Makes xnotify be displayed on the specified monitor. +Monitor numbers start from 0. +Without this option, +xnotify is displayed on the first monitor (that is, the monitor 0). +.TP +.B \-o +With this option, +only one notification should exist at a time. +So, when a new notification appears, the other ones are removed. +.TP +.BI "\-s " seconds +Specify the time, in seconds, +for a notification to be displayed before it is removed from screen. +Without this option, the default of 10 seconds is used. +If this option is set to 0 (zero), the notification is displayed indefinitely until manually closed. +.TP +.B \-w +Let the window manager control notification windows. +.PP +Each line read from stdin specify a notification and has the following format: +.IP +.EX +ITEM := [NAME:VALUE TABS] TEXT NEWLINE +.EE +.PP +That means that each line is composed by +an optional set of name-value pairs separated by colon (:) followed by tabs, +then the text of the notification, +then a newline. +Brackets group optional elements. +Empty lines are ignored. +.PP +The TEXT of a notification specification can contain tabs. +Each tab is converted to a line break on the notification. +.PP +The following names are currently accepted for the NAME:VALUE pairs: +.TP +.B IMG: +Specify the path of a image to be displayed on the notification. +.TP +.B TAG: +Specify a string to be the notification's tag. +When a notification with a given tag spawns, +all other notifications with the same tag disappears. +.TP +.B CMD: +Specify a string to be output when clicking on the notification with the action mouse button. +.TP +.B BG: +Specify the color of the notification background. +.TP +.B FG: +Specify the color of the notification text (i.e., its foreground). +.TP +.B BRD: +Specify the color of the notification border. +.TP +.B SEC: +Specify the time, in seconds, that the notification should stay visible. +If set to zero, the notification will stay visible until being clicked. +.PP +Clicking on a notification removes it from the screen. +.SH ENVIRONMENT +The following environment variables affect the execution of +.B xnotify +.TP +.B DISPLAY +The display to start +.B xnotify +on. +.SH RESOURCES +.B xnotify +understands the following X resources. +.TP +.B xnotify.title.font +The fonts to draw the notification title text. +The title is the first line of the notification, if there is more than one. +More than one font can be specified, separated by comma (,). +If more than one font is specified, the first font with a given glyph +is used to display that glyph on the screen. +.TP +.B xnotify.body.font +The fonts to draw the notification body text. +The body text is any line after the first line. +.TP +.B xnotify.background +The color of the notification background. +.TP +.B xnotify.foreground +The color of the notification text. +.TP +.B xnotify.border +The color of the border around a notification. +.TP +.B xnotify.geometry +The geometry in the form +.BR [x][{+-}{+-}] . +See the description of the option +.B -g +for more information. +.TP +.B xnotify.gravity +Where in the screen to display notifications. +See the description of the option +.B -G +for more information. +.TP +.B xnotify.borderWidth +The size in pixels of the border around a notification. +.TP +.B xnotify.maxHeight +The maximum height of a notification window in pixels. +.TP +.B xnotify.gap +The gap between notifications. +.TP +.B xnotify.imageWidth +The size of the image attached to the notification. +.TP +.B xnotify.leading +The space between lines. +.TP +.B xnotify.padding +The space around the content inside the notification popup window. +.TP +.B xnotify.shrink +If set to +.BR "\(dqtrue\(dq" , +the notification width will shrink to its content size. +If set to +.BR "\(dqfalse\(dq" , +notification width will be constant. +.TP +.B xnotify.alignment +If set to +.BR "\(dqleft\(dq" , +.BR "\(dqcenter\(dq" , +or +.BR "\(dqright\(dq" , +text is aligned to the left, center, or right of the popup window, respectively. +By default, notification text is aligned to the left of the notification popup window. +.TP +.B xnotify.wrap +If set to +.BR "\(dqtrue\(dq" , +lines longer than the notification width will wrap rather than being truncated. +If set to +.BR "\(dqfalse\(dq" , +lines will be truncated. +.SH SIGNALS +.B xnotify +respond to signals sent to it. +.TP +.B SIGUSR1 +Close all notifications. +.TP +.B SIGUSR2 +Print the CMD of the first notification and then close all notifications. +.TP +.B SIGSTOP +Stop +.BR xnotify . +When this signal is sent, +all new notifications are accumuled until +.B xnotify +receive a +.B SIGCONT +signal. +This signal is useful to be sent when a window is fullscreen, +so xnotify will not annoy with notifications on top of the fullscreen window. +A +.B SIGUSR1 +signal must be sent before a +.B SIGSTOP +in order to +close all notifications before stop. +.TP +.B SIGCONT +Display all accumulated notifications and continue +.B xnotify +after being stop +with +.BR SIGSTOP . +.SH EXAMPLES +The following is an example of how to run XNotify. +.IP +.EX +$ xnotify \-m 10 \-G NE \-g \-10+10 \-s 15 +.EE +.PP +This line means: read notifications from stdin, +display the notifications on the north east +.RB ( "-G NE" ) +of the monitor 0 +.RB ( "-m 0" ), +that is, on the upper right corner of the first monitor. +The notifications should be placed -10 pixels to the left and +10 pixels down +(thus creating a 10 pixel gap with the upper right corner). +Each notification stay alive for 15 seconds. +.PP +To create a named pipe for XNotify, +the following lines can be placed on +.BR ~/.xinitrc . +This will create a named pipe unique to the current X display in the home directory at +.BR ~/.cache . +Then, it will open +.B xnotify +in the background, reading from this named pipe. +.IP +.EX +XNOTIFY_FIFO="$HOME/.cache/xnotify$DISPLAY.fifo" +export XNOTIFY_FIFO +rm \-f $XNOTIFY_FIFO +mkfifo $XNOTIFY_FIFO +xnotify 0<>$XNOTIFY_FIFO & +.EE +.PP +Then a notification can be created by echoing into the named pipe: +.IP +.EX +$ echo Hello World > $XNOTIFY_FIFO +.EE +.PP +To create a notification with a image, +input to XNotify a line beginning with +.I IMG:/path/to/file.png +followed by a tab. +For example: +.IP +.EX +$ printf 'IMG:/path/to/file.png\etThis is a notification\en' > $XNOTIFY_FIFO +.EE +.PP +.B xnotify +does not read notifications from dbus. +For +.B xnotify +to read dbus notifications, +its stdin must be fed with the output of +.IR tiramisu (1). +The following line makes +.IR tiramisu (1) +send dbus notifications to +.BR xnotify . +This line can be added to +.B ~/.xinitrc +after the line calling +.BR xnotify . +.IP +.EX +tiramisu -o "$(printf '#summary\t#body\n')" > $XNOTIFY_FIFO & +.EE +.SH SEE ALSO +.IR tiramisu (1), +.IR herbe (1) diff --git a/xnotify/.local/share/xnotify/xnotify.c b/xnotify/.local/share/xnotify/xnotify.c new file mode 100644 index 0000000..94fff43 --- /dev/null +++ b/xnotify/.local/share/xnotify/xnotify.c @@ -0,0 +1,1326 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "xnotify.h" + +/* X stuff */ +static Display *dpy; +static Colormap colormap; +static Visual *visual; +static Window root; +static XrmDatabase xdb; +static char *xrm; +static int screen; +static int depth; +static int xfd; +static struct Monitor mon; +static Atom utf8string; +static Atom netatom[NetLast]; +static struct DC dc; +static struct Fonts titlefnt, bodyfnt; +static struct Ellipsis ellipsis; + +/* flags */ +static int oflag; /* whether only one notification must exist at a time */ +static int wflag; /* whether to let window manager manage notifications */ +volatile sig_atomic_t usrflag; /* 1 if for SIGUSR1, 2 for SIGUSR2, 0 otherwise */ + +/* include configuration structure */ +#include "config.h" + +/* show usage */ +void +usage(void) +{ + (void)fprintf(stderr, "usage: xnotify [-ow] [-G gravity] [-b button] [-g geometry] [-h height] [-m monitor] [-s seconds]\n"); + exit(1); +} + +/* get configuration from X resources */ +static void +getresources(void) +{ + XrmValue xval; + unsigned long n; + char *type; + + if (xrm == NULL || xdb == NULL) + return; + + if (XrmGetResource(xdb, "xnotify.title.font", "*", &type, &xval) == True) + config.titlefont = xval.addr; + if (XrmGetResource(xdb, "xnotify.body.font", "*", &type, &xval) == True) + config.bodyfont = xval.addr; + if (XrmGetResource(xdb, "xnotify.background", "*", &type, &xval) == True) + config.background_color = xval.addr; + if (XrmGetResource(xdb, "xnotify.foreground", "*", &type, &xval) == True) + config.foreground_color = xval.addr; + if (XrmGetResource(xdb, "xnotify.border", "*", &type, &xval) == True) + config.border_color = xval.addr; + if (XrmGetResource(xdb, "xnotify.geometry", "*", &type, &xval) == True) + config.geometryspec = xval.addr; + if (XrmGetResource(xdb, "xnotify.gravity", "*", &type, &xval) == True) + config.gravityspec = xval.addr; + if (XrmGetResource(xdb, "xnotify.borderWidth", "*", &type, &xval) == True) + if ((n = strtoul(xval.addr, NULL, 10)) < INT_MAX) + config.border_pixels = n; + if (XrmGetResource(xdb, "xnotify.gap", "*", &type, &xval) == True) + if ((n = strtoul(xval.addr, NULL, 10)) < INT_MAX) + config.gap_pixels = n; + if (XrmGetResource(xdb, "xnotify.imageWidth", "*", &type, &xval) == True) + if ((n = strtoul(xval.addr, NULL, 10)) < INT_MAX) + config.image_pixels = n; + if (XrmGetResource(xdb, "xnotify.leading", "*", &type, &xval) == True) + if ((n = strtoul(xval.addr, NULL, 10)) < INT_MAX) + config.leading_pixels = n; + if (XrmGetResource(xdb, "xnotify.padding", "*", &type, &xval) == True) + if ((n = strtoul(xval.addr, NULL, 10)) < INT_MAX) + config.padding_pixels = n; + if (XrmGetResource(xdb, "xnotify.maxHeight", "*", &type, &xval) == True) + if ((n = strtoul(xval.addr, NULL, 10)) < INT_MAX) + config.max_height = n; + if (XrmGetResource(xdb, "xnotify.shrink", "*", &type, &xval) == True) + config.shrink = (strcasecmp(xval.addr, "true") == 0 || + strcasecmp(xval.addr, "on") == 0 || + strcasecmp(xval.addr, "1") == 0); + if (XrmGetResource(xdb, "xnotify.wrap", "*", &type, &xval) == True) + config.wrap = (strcasecmp(xval.addr, "true") == 0 || + strcasecmp(xval.addr, "on") == 0 || + strcasecmp(xval.addr, "1") == 0); + if (XrmGetResource(xdb, "xnotify.alignment", "*", &type, &xval) == True) { + if (strcasecmp(xval.addr, "center") == 0) + config.alignment = CenterAlignment; + else if (strcasecmp(xval.addr, "left") == 0) + config.alignment = LeftAlignment; + else if (strcasecmp(xval.addr, "right") == 0) + config.alignment = RightAlignment; + } +} + +/* get configuration from commmand-line */ +static void +getoptions(int argc, char *argv[]) +{ + unsigned long n; + int ch; + + while ((ch = getopt(argc, argv, "G:b:g:h:m:os:w")) != -1) { + switch (ch) { + case 'G': + config.gravityspec = optarg; + break; + case 'b': + if (*(optarg+1) != '\0') + break; + switch (*optarg) { + case '1': + config.actionbutton = Button1; + break; + case '2': + config.actionbutton = Button2; + break; + case '3': + config.actionbutton = Button3; + break; + case '4': + config.actionbutton = Button4; + break; + case '5': + config.actionbutton = Button5; + break; + default: + break; + } + break; + case 'g': + config.geometryspec = optarg; + break; + case 'h': + if ((n = strtoul(optarg, NULL, 10)) < INT_MAX) + config.max_height = n; + break; + case 'm': + mon.num = atoi(optarg); + break; + case 'o': + oflag = 1; + break; + case 's': + if ((n = strtoul(optarg, NULL, 10)) < INT_MAX) + config.sec = n; + break; + case 'w': + wflag = 1; + break; + default: + usage(); + break; + } + } + argc -= optind; + argv += optind; + + if (argc) + usage(); +} + +/* get XftColor *color from color string s */ +static int +ealloccolor(const char *s, XftColor *color, int exitonerror) +{ + if (!XftColorAllocName(dpy, visual, colormap, s, color)) { + if (exitonerror) + errx(1, "could not allocate color: %s", s); + warnx("could not allocate color: %s", s); + return -1; + } + return 0; +} + +/* get number from *s into n, return 1 if error, update s to end of number */ +static int +getnum(const char **s, int *n) +{ + int retval; + long num; + char *endp; + + num = strtol(*s, &endp, 10); + retval = (num > INT_MAX || num < 0 || endp == *s); + *s = endp; + *n = num; + return retval; +} + +/* parse geometry specification and return geometry values */ +static void +parsegeometryspec(int *x, int *y, int *w, int *h) +{ + int sign; + int n; + const char *s; + + *x = *y = *w = *h = 0; + s = config.geometryspec; + + if (*s != '+' && *s != '-') { + /* get *w */ + if (getnum(&s, &n)) + goto error; + if (*s == '%') { + if (n > 100) + goto error; + *w = (n * (mon.w - config.border_pixels * 2))/100; + s++; + } else { + *w = n; + } + if (*s++ != 'x') + goto error; + + /* get *h */ + if (getnum(&s, &n)) + goto error; + if (*s == '%') { + if (n > 100) + goto error; + *h = (n * (mon.h - config.border_pixels * 2))/100; + s++; + } else { + *h = n; + } + } + + if (*s == '+' || *s == '-') { + /* get *x */ + sign = (*s++ == '-') ? -1 : 1; + if (getnum(&s, &n)) + goto error; + *x = n * sign; + if (*s != '+' && *s != '-') + goto error; + + /* get *y */ + sign = (*s++ == '-') ? -1 : 1; + if (getnum(&s, &n)) + goto error; + *y = n * sign; + } + if (*s != '\0') + goto error; + + return; + +error: + errx(1, "improper geometry specification %s", config.geometryspec); +} + +/* parse gravity specification and return gravity value */ +static void +parsegravityspec(int *gravity, int *direction) +{ + if (config.gravityspec == NULL || strcmp(config.gravityspec, "N") == 0) { + *gravity = NorthGravity; + *direction = DownWards; + } else if (strcmp(config.gravityspec, "NW") == 0) { + *gravity = NorthWestGravity; + *direction = DownWards; + } else if (strcmp(config.gravityspec, "NE") == 0) { + *gravity = NorthEastGravity; + *direction = DownWards; + } else if (strcmp(config.gravityspec, "W") == 0) { + *gravity = WestGravity; + *direction = DownWards; + } else if (strcmp(config.gravityspec, "C") == 0) { + *gravity = CenterGravity; + *direction = DownWards; + } else if (strcmp(config.gravityspec, "E") == 0) { + *gravity = EastGravity; + *direction = DownWards; + } else if (strcmp(config.gravityspec, "SW") == 0) { + *gravity = SouthWestGravity; + *direction = UpWards; + } else if (strcmp(config.gravityspec, "S") == 0) { + *gravity = SouthGravity; + *direction = UpWards; + } else if (strcmp(config.gravityspec, "SE") == 0) { + *gravity = SouthEastGravity; + *direction = UpWards; + } else { + errx(EXIT_FAILURE, "Unknown gravity %s", config.gravityspec); + } +} + +/* parse font string */ +static void +parsefonts(struct Fonts *fnt, const char *s) +{ + const char *p; + char buf[1024]; + size_t nfont = 0; + + fnt->nfonts = 1; + for (p = s; *p; p++) + if (*p == ',') + fnt->nfonts++; + + if ((fnt->fonts = calloc(fnt->nfonts, sizeof *fnt->fonts)) == NULL) + err(1, "calloc"); + + p = s; + while (*p != '\0') { + size_t i; + + i = 0; + while (isspace(*p)) + p++; + while (i < sizeof buf && *p != '\0' && *p != ',') + buf[i++] = *p++; + if (i >= sizeof buf) + errx(1, "font name too long"); + if (*p == ',') + p++; + buf[i] = '\0'; + if (nfont == 0) + if ((fnt->pattern = FcNameParse((FcChar8 *)buf)) == NULL) + errx(1, "the first font in the cache must be loaded from a font string"); + if ((fnt->fonts[nfont++] = XftFontOpenName(dpy, screen, buf)) == NULL) + errx(1, "cannot load font"); + } + fnt->texth = fnt->fonts[0]->height; +} + +/* signal SIGUSR1 handler (close all notifications) */ +static void +sigusr1handler(int sig) +{ + (void)sig; + usrflag = 1; +} + +/* signal SIGUSR2 handler (print cmd of first notification) */ +static void +sigusr2handler(int sig) +{ + (void)sig; + usrflag = 2; +} + +/* init signal */ +static void +initsignal(void) +{ + struct sigaction sa; + + sa.sa_handler = sigusr1handler; + sa.sa_flags = 0; + sigemptyset(&sa.sa_mask); + if (sigaction(SIGUSR1, &sa, NULL) == -1) + err(1, "sigaction"); + + sa.sa_handler = sigusr2handler; + sa.sa_flags = 0; + sigemptyset(&sa.sa_mask); + if (sigaction(SIGUSR2, &sa, NULL) == -1) + err(1, "sigaction"); +} + +/* query monitor information */ +static void +initmonitor(void) +{ + XineramaScreenInfo *info = NULL; + int nmons; + + mon.x = mon.y = 0; + mon.w = DisplayWidth(dpy, screen); + mon.h = DisplayHeight(dpy, screen); + if ((info = XineramaQueryScreens(dpy, &nmons)) != NULL) { + int selmon; + + selmon = 2; + mon.x = info[selmon].x_org; + mon.y = info[selmon].y_org; + mon.w = info[selmon].width; + mon.h = info[selmon].height; + XFree(info); + } +} + +/* init draw context structure */ +static void +initdc(void) +{ + /* get colors */ + ealloccolor(config.background_color, &dc.background, 1); + ealloccolor(config.foreground_color, &dc.foreground, 1); + ealloccolor(config.border_color, &dc.border, 1); + + /* create common GC */ + dc.gc = XCreateGC(dpy, root, 0, NULL); + + /* try to get font */ + parsefonts(&titlefnt, config.titlefont); + parsefonts(&bodyfnt, config.bodyfont); +} + +/* Intern the used atoms */ +static void +initatoms(void) +{ + utf8string = XInternAtom(dpy, "UTF8_STRING", False); + netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); + netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False); + netatom[NetWMWindowTypeNotification] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_NOTIFICATION", False); + netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False); + netatom[NetWMStateAbove] = XInternAtom(dpy, "_NET_WM_STATE_ABOVE", False); +} + +/* watch ConfigureNotify on root window so we're notified when monitors change */ +static void +initstructurenotify(void) +{ + XSelectInput(dpy, root, StructureNotifyMask); +} + +/* allocate queue and set its members */ +static struct Queue * +setqueue(void) +{ + struct Queue *queue; + int minw; + + if ((queue = malloc(sizeof *queue)) == NULL) + err(1, "malloc"); + + queue->head = NULL; + queue->tail = NULL; + queue->change = 0; + + /* set geometry of notification queue */ + parsegravityspec(&queue->gravity, &queue->direction); + parsegeometryspec(&queue->x, &queue->y, &queue->w, &queue->h); + if (config.image_pixels < 0) + config.image_pixels = 0; + minw = ellipsis.width + config.image_pixels + config.padding_pixels * 3 + 1; + if (queue->w < minw) + queue->w = MAX(DEFWIDTH, minw); + + return queue; +} + +/* get item of given window */ +static struct Item * +getitem(struct Queue *queue, Window win) +{ + struct Item *item; + + for (item = queue->head; item; item = item->next) + if (item->win == win) + return item; + return NULL; +} + +/* copy area from item's pixmap into item's window */ +static void +copypixmap(struct Item *item) +{ + XCopyArea(dpy, item->pixmap, item->win, dc.gc, 0, 0, item->w, item->h, 0, 0); +} + +/* load and scale image */ +static Imlib_Image +loadimage(const char *file) +{ + Imlib_Image image; + Imlib_Load_Error errcode; + const char *errstr; + + image = imlib_load_image_with_error_return(file, &errcode); + if (*file == '\0') { + warnx("could not load image (file name is blank)"); + return NULL; + } else if (image == NULL) { + switch (errcode) { + case IMLIB_LOAD_ERROR_FILE_DOES_NOT_EXIST: + errstr = "file does not exist"; + break; + case IMLIB_LOAD_ERROR_FILE_IS_DIRECTORY: + errstr = "file is directory"; + break; + case IMLIB_LOAD_ERROR_PERMISSION_DENIED_TO_READ: + case IMLIB_LOAD_ERROR_PERMISSION_DENIED_TO_WRITE: + errstr = "permission denied"; + break; + case IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT: + errstr = "unknown file format"; + break; + case IMLIB_LOAD_ERROR_PATH_TOO_LONG: + errstr = "path too long"; + break; + case IMLIB_LOAD_ERROR_PATH_COMPONENT_NON_EXISTANT: + case IMLIB_LOAD_ERROR_PATH_COMPONENT_NOT_DIRECTORY: + case IMLIB_LOAD_ERROR_PATH_POINTS_OUTSIDE_ADDRESS_SPACE: + errstr = "improper path"; + break; + case IMLIB_LOAD_ERROR_TOO_MANY_SYMBOLIC_LINKS: + errstr = "too many symbolic links"; + break; + case IMLIB_LOAD_ERROR_OUT_OF_MEMORY: + errstr = "out of memory"; + break; + case IMLIB_LOAD_ERROR_OUT_OF_FILE_DESCRIPTORS: + errstr = "out of file descriptors"; + break; + default: + errstr = "unknown error"; + break; + } + warnx("could not load image (%s): %s", errstr, file); + return NULL; + } + imlib_context_set_image(image); + imlib_image_set_changes_on_disk(); + return image; +} + +/* create window for item */ +static void +createwindow(struct Item *item) +{ + XClassHint classhint = {"XNotify", "XNotify"}; + XSetWindowAttributes swa; + + swa.override_redirect = (wflag ? False : True); + swa.background_pixel = dc.background.pixel; + swa.border_pixel = dc.border.pixel; + swa.save_under = True; /* pop-up windows should save_under */ + swa.event_mask = ExposureMask | ButtonPressMask | PointerMotionMask; + + /* + * windows are created at 0,0 position for they'll be moved later + * windows are created with 1pix height for they'll be resized later + */ + item->win = XCreateWindow(dpy, root, 0, 0, item->w, 1, config.border_pixels, + CopyFromParent, CopyFromParent, CopyFromParent, + CWOverrideRedirect | CWBackPixel | CWBorderPixel | + CWSaveUnder | CWEventMask, &swa); + + XSetClassHint(dpy, item->win, &classhint); + + XStoreName(dpy, item->win, "XNotify"); + XChangeProperty(dpy, item->win, netatom[NetWMName], utf8string, 8, PropModeReplace, + (unsigned char *)"XNotify", strlen("XNotify")); + XChangeProperty(dpy, item->win, netatom[NetWMWindowType], XA_ATOM, 32, PropModeReplace, + (unsigned char *)&netatom[NetWMWindowTypeNotification], 1L); + XChangeProperty(dpy, item->win, netatom[NetWMState], XA_ATOM, 32, PropModeReplace, + (unsigned char *)&netatom[NetWMStateAbove], 1L); +} + +/* get next utf8 char from s return its codepoint and set next_ret to pointer to end of character */ +static FcChar32 +getnextutf8char(const char *s, const char **next_ret) +{ + static const unsigned char utfbyte[] = {0x80, 0x00, 0xC0, 0xE0, 0xF0}; + static const unsigned char utfmask[] = {0xC0, 0x80, 0xE0, 0xF0, 0xF8}; + static const FcChar32 utfmin[] = {0, 0x00, 0x80, 0x800, 0x10000}; + static const FcChar32 utfmax[] = {0, 0x7F, 0x7FF, 0xFFFF, 0x10FFFF}; + /* 0xFFFD is the replacement character, used to represent unknown characters */ + static const FcChar32 unknown = 0xFFFD; + FcChar32 ucode; /* FcChar32 type holds 32 bits */ + size_t usize = 0; /* n' of bytes of the utf8 character */ + size_t i; + + *next_ret = s+1; + + /* get code of first byte of utf8 character */ + for (i = 0; i < sizeof utfmask; i++) { + if (((unsigned char)*s & utfmask[i]) == utfbyte[i]) { + usize = i; + ucode = (unsigned char)*s & ~utfmask[i]; + break; + } + } + + /* if first byte is a continuation byte or is not allowed, return unknown */ + if (i == sizeof utfmask || usize == 0) + return unknown; + + /* check the other usize-1 bytes */ + s++; + for (i = 1; i < usize; i++) { + *next_ret = s+1; + /* if byte is nul or is not a continuation byte, return unknown */ + if (*s == '\0' || ((unsigned char)*s & utfmask[0]) != utfbyte[0]) + return unknown; + /* 6 is the number of relevant bits in the continuation byte */ + ucode = (ucode << 6) | ((unsigned char)*s & ~utfmask[0]); + s++; + } + + /* check if ucode is invalid or in utf-16 surrogate halves */ + if (!BETWEEN(ucode, utfmin[usize], utfmax[usize]) + || BETWEEN (ucode, 0xD800, 0xDFFF)) + return unknown; + + return ucode; +} + +/* get which font contains a given code point */ +static XftFont * +getfontucode(struct Fonts *fnt, FcChar32 ucode) +{ + FcCharSet *fccharset = NULL; + FcPattern *fcpattern = NULL; + FcPattern *match = NULL; + XftFont *retfont = NULL; + XftResult result; + size_t i; + + for (i = 0; i < fnt->nfonts; i++) + if (XftCharExists(dpy, fnt->fonts[i], ucode) == FcTrue) + return fnt->fonts[i]; + + /* create a charset containing our code point */ + fccharset = FcCharSetCreate(); + FcCharSetAddChar(fccharset, ucode); + + /* create a pattern akin to the fnt->pattern but containing our charset */ + if (fccharset) { + fcpattern = FcPatternDuplicate(fnt->pattern); + FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset); + } + + /* find pattern matching fcpattern */ + if (fcpattern) { + FcConfigSubstitute(NULL, fcpattern, FcMatchPattern); + FcDefaultSubstitute(fcpattern); + match = XftFontMatch(dpy, screen, fcpattern, &result); + } + + /* if found a pattern, open its font */ + if (match) { + retfont = XftFontOpenPattern(dpy, match); + if (retfont && XftCharExists(dpy, retfont, ucode) == FcTrue) { + if ((fnt->fonts = realloc(fnt->fonts, fnt->nfonts+1)) == NULL) + err(1, "realloc"); + fnt->fonts[fnt->nfonts] = retfont; + return fnt->fonts[fnt->nfonts++]; + } else { + XftFontClose(dpy, retfont); + } + } + + /* in case no fount was found, return the first one */ + return fnt->fonts[0]; +} + +/* + * return width of *s in pixels; draw *s into draw if draw != NULL + * return in *s where stopped processing when text wrapping occurs + */ +static int +drawtext(struct Fonts *fnt, XftDraw *draw, XftColor *color, int x, int y, int w, const char **s) +{ + XftFont *currfont; + XGlyphInfo ext; + FcChar32 ucode; + const char *text, *next, *check, *t; + size_t len; + int textwidth = 0; + int wordwidth = 0; + int texty; + + if (*s == NULL) + return 0; + check = text = *s; + while (*text) { + /* wrap text if next word doesn't fit in w */ + wordwidth = 0; + while (config.wrap && w && *check && !isspace(*check)) { + ucode = getnextutf8char(check, &next); + currfont = getfontucode(fnt, ucode); + len = next - check; + XftTextExtentsUtf8(dpy, currfont, (XftChar8 *)check, len, &ext); + wordwidth += ext.xOff; + check = next; + if (w && textwidth && textwidth + wordwidth > w) { + if (draw) + *s = text; + goto end; + } + } + + /* get the next unicode character and the first font that supports it */ + ucode = getnextutf8char(text, &next); + currfont = getfontucode(fnt, ucode); + + /* compute the width of the glyph for that character on that font */ + len = next - text; + XftTextExtentsUtf8(dpy, currfont, (XftChar8 *)text, len, &ext); + t = text; + if (w && textwidth + ext.xOff + (*text && *(text+1) ? ellipsis.width : 0) > w) { + t = ellipsis.s; + len = ellipsis.len; + currfont = ellipsis.font; + if (config.wrap) { + while (*next && !isspace(*next)) + next++; + } else { + while (*next) + next++; + } + textwidth += ellipsis.width; + } + textwidth += ext.xOff; + + if (draw) { + texty = y + (fnt->texth - (currfont->ascent + currfont->descent))/2 + currfont->ascent; + XftDrawStringUtf8(draw, color, currfont, x, texty, (XftChar8 *)t, len); + x += ext.xOff; + *s = next; + } + + if (next > check) + check = next; + text = next; + } +end: + return textwidth; +} + +/* draw contents of notification item on item->pixmap */ +static void +drawitem(struct Item *item) +{ + Drawable textpixmap, imagepixmap; + Imlib_Image image = NULL; + struct Fonts *fnt; + const char *text; + XftDraw *draw; + int xaligned; + int i, x, newh; + int texth, imgh, imgw; + int origimgw, origimgh; + + item->pixmap = XCreatePixmap(dpy, item->win, item->w, config.max_height, depth); + XSetForeground(dpy, dc.gc, item->background.pixel); + XFillRectangle(dpy, item->pixmap, dc.gc, 0, 0, item->w, config.max_height); + + /* draw image */ + imgw = imgh = 0; + if (item->image && item->imgw > 0) { + imagepixmap = XCreatePixmap(dpy, item->pixmap, item->imgw, item->imgw, depth); + XFillRectangle(dpy, imagepixmap, dc.gc, 0, 0, item->imgw, item->imgw); + imlib_context_set_image(item->image); + imlib_context_set_drawable(imagepixmap); + origimgw = imlib_image_get_width(); + origimgh = imlib_image_get_height(); + if (imgw > imgh) { + imgw = item->imgw; + imgh = (origimgh * item->imgw) / origimgw; + } else { + imgw = (origimgw * item->imgw) / origimgh; + imgh = item->imgw; + } + image = imlib_create_cropped_scaled_image(0, 0, origimgw, origimgh, imgw, imgh); + imlib_free_image(); + imlib_context_set_image(image); + imlib_render_image_on_drawable((item->imgw - imgw) / 2, (item->imgw - imgh) / 2); + imlib_free_image(); + } + + /* draw text */ + texth = 0; + if (item->textw > 0) { + textpixmap = XCreatePixmap(dpy, item->pixmap, item->textw, config.max_height, depth); + XFillRectangle(dpy, textpixmap, dc.gc, 0, 0, item->textw, config.max_height); + draw = XftDrawCreate(dpy, textpixmap, visual, colormap); + for (i = 0; i < item->nlines; i++) { + fnt = (i == 0 && item->nlines > 1) ? &titlefnt : &bodyfnt; + text = item->line[i]; + while (texth <= config.max_height && + (xaligned = drawtext(fnt, NULL, NULL, 0, 0, item->textw, &text)) > 0) { + switch (config.alignment) { + case LeftAlignment: + x = 0; + break; + case CenterAlignment: + xaligned = (item->textw - xaligned) / 2; + x = MAX(0, xaligned); + break; + case RightAlignment: + xaligned = item->textw - xaligned; + x = MAX(0, xaligned); + break; + default: + break; + } + drawtext(fnt, draw, &item->foreground, x, texth, item->textw, &text); + texth += fnt->texth + config.leading_pixels; + } + } + texth -= config.leading_pixels; + } + + /* resize notification window based on its contents */ + newh = MAX(imgh, texth) + 2 * config.padding_pixels; + item->h = MAX(item->h, newh); + XResizeWindow(dpy, item->win, item->w, item->h); + + /* change border color */ + XSetWindowBorder(dpy, item->win, item->border.pixel); + + /* copy image and text pixmaps to notification pixmap */ + if (image) { + XCopyArea(dpy, imagepixmap, item->pixmap, dc.gc, 0, 0, item->imgw, item->imgw, config.padding_pixels, (item->h - item->imgw) / 2); + XFreePixmap(dpy, imagepixmap); + } + if (item->textw > 0) { + XCopyArea(dpy, textpixmap, item->pixmap, dc.gc, 0, 0, item->textw, texth, + config.padding_pixels + (image && item->imgw > 0 ? item->imgw + config.padding_pixels : 0), + (item->h - texth) / 2); + XFreePixmap(dpy, textpixmap); + XftDrawDestroy(draw); + } +} + +/* reset time of item */ +static void +resettime(struct Item *item) +{ + item->time = time(NULL); +} + +/* call strdup checking for error */ +static char * +estrdup(const char *s) +{ + char *t; + + if ((t = strdup(s)) == NULL) + err(1, "strdup"); + return t; +} + +/* add item notification item and set its window and contents */ +static void +additem(struct Queue *queue, struct Itemspec *itemspec) +{ + struct Fonts *fnt; + const char *text; + struct Item *item; + int w, i; + int maxw = 0; + + if ((item = malloc(sizeof *item)) == NULL) + err(1, "malloc"); + item->next = NULL; + item->image = (itemspec->file) ? loadimage(itemspec->file) : NULL; + item->tag = (itemspec->tag) ? estrdup(itemspec->tag) : NULL; + item->cmd = (itemspec->cmd) ? estrdup(itemspec->cmd) : NULL; + item->sec = itemspec->sec; + if (!queue->head) + queue->head = item; + else + queue->tail->next = item; + item->prev = queue->tail; + queue->tail = item; + + /* allocate texts */ + item->line[0] = (itemspec->firstline) ? estrdup(itemspec->firstline) : NULL; + text = strtok(itemspec->otherlines, "\t\n"); + for (i = 1; i < MAXLINES && text != NULL; i++) { + item->line[i] = estrdup(text); + text = strtok(NULL, "\t\n"); + } + item->nlines = i; + + /* allocate colors */ + if (!itemspec->background || ealloccolor(itemspec->background, &item->background, 0) == -1) + item->background = dc.background; + if (!itemspec->foreground || ealloccolor(itemspec->foreground, &item->foreground, 0) == -1) + item->foreground = dc.foreground; + if (!itemspec->border || ealloccolor(itemspec->border, &item->border, 0) == -1) + item->border = dc.border; + + /* compute notification width and height */ + item->imgw = config.image_pixels; + item->h = queue->h; + for (i = 0; i < item->nlines; i++) { + text = item->line[i]; + fnt = (i == 0 && item->nlines > 1) ? &titlefnt : &bodyfnt; + w = drawtext(fnt, NULL, NULL, 0, 0, 0, &text); + if (w > maxw) { + maxw = w; + } + } + if (maxw) { + maxw += ellipsis.width; + } + if (config.shrink) { + if (item->image) { + item->textw = queue->w - config.image_pixels - config.padding_pixels * 3; + item->textw = MIN(maxw, item->textw); + item->w = item->textw + config.image_pixels + config.padding_pixels * 3; + } else { + item->textw = queue->w - config.padding_pixels * 2; + item->textw = MIN(maxw, item->textw); + item->w = item->textw + config.padding_pixels * 2; + } + } else { + item->w = queue->w; + if (item->image) { + item->textw = queue->w - config.image_pixels - config.padding_pixels * (2 + (item->line[0] ? 1 : 0)); + if (!config.image_pixels) { + item->textw = MIN(item->textw, maxw); + } + item->imgw = queue->w - item->textw - config.padding_pixels * (2 + (item->line[0] ? 1 : 0)); + } else { + item->textw = queue->w - config.padding_pixels * 2; + } + } + + /* call functions that set the item */ + createwindow(item); + resettime(item); + drawitem(item); + + /* a new item was added to the queue, so the queue changed */ + queue->change = 1; +} + +/* delete item */ +static void +delitem(struct Queue *queue, struct Item *item) +{ + int i; + + for (i = 0; i < item->nlines; i++) + free(item->line[i]); + XFreePixmap(dpy, item->pixmap); + XDestroyWindow(dpy, item->win); + if (item->prev) + item->prev->next = item->next; + else + queue->head = item->next; + if (item->next) + item->next->prev = item->prev; + else + queue->tail = item->prev; + free(item); + queue->change = 1; +} + +/* print item's command to stdout */ +static void +cmditem(struct Item *item) +{ + printf("%s\n", item->cmd); + fflush(stdout); +} + +/* check the type of option given to a notification item */ +static enum ItemOption +optiontype(const char *s) +{ + if (strncmp(s, "IMG:", 4) == 0) + return IMG; + if (strncmp(s, "BG:", 3) == 0) + return BG; + if (strncmp(s, "FG:", 3) == 0) + return FG; + if (strncmp(s, "BRD:", 4) == 0) + return BRD; + if (strncmp(s, "TAG:", 4) == 0) + return TAG; + if (strncmp(s, "CMD:", 4) == 0) + return CMD; + if (strncmp(s, "SEC:", 4) == 0) + return SEC; + return UNKNOWN; +} + +/* parse notification line */ +static struct Itemspec * +parseline(char *s) +{ + enum ItemOption option; + struct Itemspec *itemspec; + const char *t; + int n; + + if ((itemspec = malloc(sizeof *itemspec)) == NULL) + err(1, "malloc"); + + /* get the filename */ + itemspec->file = NULL; + itemspec->foreground = NULL; + itemspec->background = NULL; + itemspec->border = NULL; + itemspec->tag = NULL; + itemspec->cmd = NULL; + itemspec->sec = config.sec; + itemspec->firstline = strtok(s, "\t\n"); + while (itemspec->firstline && (option = optiontype(itemspec->firstline)) != UNKNOWN) { + switch (option) { + case IMG: + itemspec->file = itemspec->firstline + 4; + itemspec->firstline = strtok(NULL, "\t\n"); + break; + case BG: + itemspec->background = itemspec->firstline + 3; + itemspec->firstline = strtok(NULL, "\t\n"); + break; + case FG: + itemspec->foreground = itemspec->firstline + 3; + itemspec->firstline = strtok(NULL, "\t\n"); + break; + case BRD: + itemspec->border = itemspec->firstline + 4; + itemspec->firstline = strtok(NULL, "\t\n"); + break; + case TAG: + itemspec->tag = itemspec->firstline + 4; + itemspec->firstline = strtok(NULL, "\t\n"); + break; + case CMD: + itemspec->cmd = itemspec->firstline + 4; + itemspec->firstline = strtok(NULL, "\t\n"); + break; + case SEC: + t = itemspec->firstline + 4; + if (!getnum(&t, &n)) + itemspec->sec = n; + itemspec->firstline = strtok(NULL, "\t\n"); + break; + default: + break; + } + } + + /* get the body */ + itemspec->otherlines = strtok(NULL, "\n"); + if (itemspec->otherlines) + while (*itemspec->otherlines == '\t') + itemspec->otherlines++; + + if (!itemspec->firstline && !itemspec->file) + return NULL; + + return itemspec; +} + +/* read x events */ +static void +readevent(struct Queue *queue) +{ + struct Item *item; + XEvent ev; + + while (XPending(dpy) && !XNextEvent(dpy, &ev)) { + switch (ev.type) { + case Expose: + if (ev.xexpose.count == 0 && (item = getitem(queue, ev.xexpose.window)) != NULL) + copypixmap(item); + break; + case ButtonPress: + if ((item = getitem(queue, ev.xbutton.window)) == NULL) + break; + if ((ev.xbutton.button == config.actionbutton) && item->cmd) + cmditem(item); + delitem(queue, item); + break; + case MotionNotify: + if ((item = getitem(queue, ev.xmotion.window)) != NULL) + resettime(item); + break; + case ConfigureNotify: /* monitor arrangement changed */ + if (ev.xproperty.window == root) { + initmonitor(); + queue->change = 1; + } + break; + } + } +} + +/* check whether items have passed the time */ +static void +timeitems(struct Queue *queue) +{ + struct Item *item; + struct Item *tmp; + + item = queue->head; + while (item) { + tmp = item; + item = item->next; + if (tmp->sec && time(NULL) - tmp->time > tmp->sec) { + delitem(queue, tmp); + } + } +} + +/* a notification was deleted or added, reorder the queue of notifications */ +static void +moveitems(struct Queue *queue) +{ + struct Item *item; + int x, y; + int h = 0; + + for (item = queue->head; item; item = item->next) { + x = queue->x + mon.x; + y = queue->y + mon.y; + switch (queue->gravity) { + case NorthWestGravity: + break; + case NorthGravity: + x += (mon.w - item->w) / 2 - config.border_pixels; + break; + case NorthEastGravity: + x += mon.w - item->w - config.border_pixels * 2; + break; + case WestGravity: + y += (mon.h - item->h) / 2 - config.border_pixels; + break; + case CenterGravity: + x += (mon.w - item->w) / 2 - config.border_pixels; + y += (mon.h - item->h) / 2 - config.border_pixels; + break; + case EastGravity: + x += mon.w - item->w - config.border_pixels * 2; + y += (mon.h - item->h) / 2 - config.border_pixels; + break; + case SouthWestGravity: + y += mon.h - item->h - config.border_pixels * 2; + break; + case SouthGravity: + x += (mon.w - item->w) / 2 - config.border_pixels; + y += mon.h - item->h - config.border_pixels * 2; + break; + case SouthEastGravity: + x += mon.w - item->w - config.border_pixels * 2; + y += mon.h - item->h - config.border_pixels * 2; + break; + } + + if (queue->direction == DownWards) + y += h; + else + y -= h; + h += item->h + config.gap_pixels + config.border_pixels * 2; + + XMoveWindow(dpy, item->win, x, y); + XMapWindow(dpy, item->win); + copypixmap(item); + } + + queue->change = 0; +} + +/* destroy all notification items of the given tag, or all items if tag is NULL */ +static void +cleanitems(struct Queue *queue, const char *tag) +{ + struct Item *item; + struct Item *tmp; + + item = queue->head; + while (item) { + tmp = item; + item = item->next; + if (tag == NULL || (tmp->tag && strcmp(tmp->tag, tag) == 0)) { + delitem(queue, tmp); + } + } +} + +/* clean up dc elements */ +static void +cleandc(void) +{ + XftColorFree(dpy, visual, colormap, &dc.background); + XftColorFree(dpy, visual, colormap, &dc.foreground); + XftColorFree(dpy, visual, colormap, &dc.border); + + XFreeColormap(dpy, colormap); + + XFreeGC(dpy, dc.gc); +} + +/* compute font and width of ellipsis string */ +static void +initellipsis(void) +{ + XGlyphInfo ext; + FcChar32 ucode; + const char *s; + + ellipsis.s = ELLIPSIS; + ellipsis.len = strlen(ellipsis.s); + ucode = getnextutf8char(ellipsis.s, &s); + ellipsis.font = getfontucode(&bodyfnt, ucode); + XftTextExtentsUtf8(dpy, ellipsis.font, (XftChar8 *)ellipsis.s, ellipsis.len, &ext); + ellipsis.width = ext.xOff; +} + +/* xnotify: show notifications from stdin */ +int +main(int argc, char *argv[]) +{ + struct Itemspec *itemspec; + struct Queue *queue; /* it contains the queue of notifications and their geometry */ + struct pollfd pfd[2]; /* [2] for stdin and xfd, see poll(2) */ + char buf[BUFSIZ]; /* buffer for stdin */ + int timeout = -1; /* maximum interval for poll(2) to complete */ + int flags; /* status flags for stdin */ + int reading = 1; /* set to 0 when stdin reaches EOF */ + + /* open connection to server and set X variables */ + if ((dpy = XOpenDisplay(NULL)) == NULL) + errx(1, "could not open display"); + screen = DefaultScreen(dpy); + root = RootWindow(dpy, screen); + visual = DefaultVisual(dpy, screen); + depth = DefaultDepth(dpy, screen); + colormap = DefaultColormap(dpy, screen); + xfd = XConnectionNumber(dpy); + XrmInitialize(); + if ((xrm = XResourceManagerString(dpy)) != NULL) + xdb = XrmGetStringDatabase(xrm); + + /* get configuration */ + getresources(); + getoptions(argc, argv); + + /* imlib2 stuff */ + imlib_set_cache_size(2048 * 1024); + imlib_context_set_dither(1); + imlib_context_set_display(dpy); + imlib_context_set_visual(visual); + imlib_context_set_colormap(colormap); + + /* init stuff */ + initsignal(); + initmonitor(); + initdc(); + initatoms(); + initstructurenotify(); + initellipsis(); + + /* set up queue of notifications */ + queue = setqueue(); + + /* Make stdin nonblocking */ + if ((flags = fcntl(STDIN_FILENO, F_GETFL)) == -1) + err(1, "could not get status flags for stdin"); + if (fcntl(STDIN_FILENO, F_SETFL, flags | O_NONBLOCK) == -1) + err(1, "could not set status flags for stdin"); + + /* prepare the structure for poll(2) */ + pfd[0].fd = STDIN_FILENO; + pfd[1].fd = xfd; + pfd[0].events = pfd[1].events = POLLIN; + + /* run main loop */ + do { + if (poll(pfd, 2, timeout) > 0) { + if (pfd[0].revents & POLLHUP) { + pfd[0].fd = -1; + reading = 0; + } + if (pfd[0].revents & POLLIN) { + if (fgets(buf, sizeof buf, stdin) == NULL) + break; + if ((itemspec = parseline(buf)) != NULL) { + if (oflag) { + cleanitems(queue, NULL); + } else if (itemspec->tag) { + cleanitems(queue, itemspec->tag); + } + additem(queue, itemspec); + } + } + if (pfd[1].revents & POLLIN) { + readevent(queue); + } + } + if (usrflag) { + if (usrflag > 1 && queue->head) + cmditem(queue->head); + cleanitems(queue, NULL); + usrflag = 0; + } + timeitems(queue); + if (queue->change) + moveitems(queue); + timeout = (queue->head) ? 1000 : -1; + XFlush(dpy); + } while (reading || queue->head); + + /* clean up stuff */ + cleanitems(queue, NULL); + cleandc(); + free(queue); + + /* close connection to server */ + XrmDestroyDatabase(xdb); + XCloseDisplay(dpy); + + return 0; +} diff --git a/xnotify/.local/share/xnotify/xnotify.h b/xnotify/.local/share/xnotify/xnotify.h new file mode 100644 index 0000000..ff74370 --- /dev/null +++ b/xnotify/.local/share/xnotify/xnotify.h @@ -0,0 +1,130 @@ +/* macros */ +#define DEFWIDTH 350 /* default width of a notification */ +#define MAXLINES 128 /* maximum number of unwrapped lines */ +#define MIN(x,y) ((x)<(y)?(x):(y)) +#define MAX(x,y) ((x)>(y)?(x):(y)) +#define BETWEEN(x, a, b) ((a) <= (x) && (x) <= (b)) + +enum ItemOption {IMG, BG, FG, BRD, TAG, CMD, SEC, UNKNOWN}; +enum {DownWards, UpWards}; +enum {LeftAlignment, CenterAlignment, RightAlignment}; +enum { + NetWMName, + NetWMWindowType, + NetWMWindowTypeNotification, + NetWMState, + NetWMStateAbove, + NetLast +}; + +/* configuration structure */ +struct Config { + const char *titlefont; + const char *bodyfont; + + const char *background_color; + const char *foreground_color; + const char *border_color; + + const char *geometryspec; + const char *gravityspec; + + int border_pixels; + int gap_pixels; + int image_pixels; + int leading_pixels; + int padding_pixels; + int max_height; + + int alignment; + int shrink; + int wrap; + + int sec; + + unsigned int actionbutton; +}; + +/* monitor geometry structure */ +struct Monitor { + int num; + int x, y, w, h; +}; + +/* draw context structure */ +struct DC { + XftColor background; + XftColor foreground; + XftColor border; + + GC gc; +}; + +/* font context structure */ +struct Fonts { + FcPattern *pattern; + XftFont **fonts; + size_t nfonts; + int texth; /* text height */ +}; + +/* notification item specification structure */ +struct Itemspec { + char *firstline; + char *otherlines; + char *file; + char *background; + char *foreground; + char *border; + char *tag; + char *cmd; + int sec; +}; + +/* notification item structure */ +struct Item { + struct Item *prev, *next; + + int nlines; + char *line[MAXLINES]; + char *tag; + char *cmd; + + time_t time; + int sec; + + int w, h; + int imgw; + int textw; + + XftColor background; + XftColor foreground; + XftColor border; + + Imlib_Image image; + Drawable pixmap; + Window win; +}; + +/* notification queue structure */ +struct Queue { + /* queue pointers */ + struct Item *head, *tail; + + /* general geometry for the notification queue */ + int gravity; /* NorthEastGravity, NorthGravity, etc */ + int direction; /* DownWards or UpWards */ + int x, y; /* position of the first notification */ + int w, h; /* width and height of individual notifications */ + + /* whether the queue changed */ + int change; +}; + +/* ellipsis size and font structure */ +struct Ellipsis { + char *s; + size_t len; /* length of s */ + int width; /* size of ellipsis string */ + XftFont *font; /* font containing ellipsis */ +}; diff --git a/xnotify/.local/share/xnotify/xnotify.o b/xnotify/.local/share/xnotify/xnotify.o new file mode 100644 index 0000000000000000000000000000000000000000..b261805ab6b3368574588099eb706e8c3723cad7 GIT binary patch literal 45976 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 literal 0 HcmV?d00001