Compare commits

...

576 Commits
4.8 ... master

Author SHA1 Message Date
Pontus Stenetorp 5687f46964 Add missing void to updateclientlist definition
Caught by -pedantic implying -Wstrict-prototypes for OpenBSD's 16.0.6 Clang.
2024-06-08 18:21:00 +02:00
Hiltjo Posthuma 061e9fe9a7 bump version to 6.5 2024-03-19 12:13:16 +01:00
Hiltjo Posthuma 9f8855343c Makefile: remove the options target
The Makefile used to suppress output (by using @), so this target made sense at
the time.

But the Makefile should be simple and make debugging with less abstractions or
fancy printing.  The Makefile was made verbose and doesn't hide the build
output, so remove this target.

Prompted by a question on the mailing list about the options target.
2023-09-22 15:13:29 +02:00
Hiltjo Posthuma e81f17d4c1 restore SIGCHLD sighandler to default before spawning a program
From sigaction(2):
A child created via fork(2) inherits a copy of its parent's signal dispositions.
During an execve(2), the dispositions of handled signals are reset to the default;
the dispositions of ignored signals are left unchanged.

This refused to start directly some programs from configuring in config.h:

static Key keys[] = {
	MODKEY,                       XK_o,      spawn,          {.v = cmd } },
};

Some reported programs that didn't start were: mpv, anki, dmenu_extended.

Reported by pfx.
Initial patch suggestion by Storkman.
2023-04-09 12:37:14 +02:00
NRK 348f6559ab config.mk: update to _XOPEN_SOURCE=700L
SA_NOCLDWAIT is marked as XSI in the posix spec [0] and FreeBSD and NetBSD
seems to more be strict about the feature test macro [1].

so update the macro to use _XOPEN_SOURCE=700L instead, which is equivalent to
_POSIX_C_SOURCE=200809L except that it also unlocks the X/Open System
Interfaces.

[0]: https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html#tag_13_42
[1]: https://lists.suckless.org/dev/2302/35111.html

Tested on:
* NetBSD 9.3 (fixed).
* FreeBSD 13 (fixed).
* Void Linux musl.
* Void Linux glibc.
* OpenBSD 7.2 (stable).
* Slackware 11.

Reported-by: beastie <pufferfish@riseup.net>
2023-02-17 15:27:34 +01:00
Chris Down 712d6639ff Use sigaction(SA_NOCLDWAIT) for SIGCHLD handling
signal() semantics are pretty unclearly specified. For example, depending on OS
kernel and libc, the handler may be returned to SIG_DFL (hence the inner call
to read the signal handler). Moving to sigaction() means the behaviour is
consistently defined.

Using SA_NOCLDWAIT also allows us to avoid calling the non-reentrant function
die() in the handler.

Some addditional notes for archival purposes:

* NRK pointed out errno of waitpid could also theoretically get clobbered.
* The original patch was iterated on and modified by NRK and Hiltjo:
  * SIG_DFL was changed to SIG_IGN, this is required, atleast on older systems
    such as tested on Slackware 11.
  * signals are not blocked using sigprocmask, because in theory it would
    briefly for example also ignore a SIGTERM signal. It is OK if waitpid() is (in
    theory interrupted).

POSIX reference:
"Consequences of Process Termination":
https://pubs.opengroup.org/onlinepubs/9699919799/functions/_Exit.html#tag_16_01_03_01
2023-01-28 13:34:43 +01:00
Chris Down 89f9905714 grabkeys: Avoid missing events when a keysym maps to multiple keycodes
It's not uncommon for one keysym to map to multiple keycodes. For
example, the "play" button on my keyboard sends keycode 172, but my
bluetooth headphones send keycode 208, both of which map back to
XF86AudioPlay:

    % xmodmap -pke | grep XF86AudioPlay
    keycode 172 = XF86AudioPlay XF86AudioPause XF86AudioPlay XF86AudioPause
    keycode 208 = XF86AudioPlay NoSymbol XF86AudioPlay
    keycode 215 = XF86AudioPlay NoSymbol XF86AudioPlay

This is a problem because the current code only grabs a single one of
these keycodes, which means that events for any other keycode also
mapping to the bound keysym will not be handled by dwm. In my case, this
means that binding XF86AudioPlay does the right thing and correctly
handles my keyboard's keys, but does nothing on my headphones. I'm not
the only person affected by this, there are other reports[0].

In order to fix this, we look at the mappings between keycodes and
keysyms at grabkeys() time and pick out all matching keycodes rather
than just the first one. The keypress() side of this doesn't need any
changes because the keycode gets converted back to a canonical keysym
before any action is taken.

0: https://github.com/cdown/dwm/issues/11
2022-12-07 23:06:26 +01:00
Hiltjo Posthuma ba56fe9fea Revert "Remove dmenumon variable"
This reverts commit c2b748e793.

Revert back this change. It seems to not be an edge-case anymore since
multiple users have asked about this new behaviour now.
2022-10-28 16:37:56 +02:00
Hiltjo Posthuma 50ad171eea bump version to 6.4 2022-10-04 19:35:13 +02:00
Hiltjo Posthuma 970f376973 remove workaround for a crash with color emojis on some systems, now fixed in libXft 2.3.5
https://gitlab.freedesktop.org/xorg/lib/libxft/-/blob/libXft-2.3.5/NEWS
2022-09-17 15:32:41 +02:00
Stein c2b748e793 Remove dmenumon variable
Reasoning: Since 2011 dmenu has been capable of working out which
monitor currently has focus in a Xinerama setup, making the use
of the -m flag more or less redundant.

This is easily demonstrated by using dmenu in any other window
manager.

There used to be a nodmenu patch that provided these changes:
https://git.suckless.org/sites/commit/ed68e3629de4ef2ca2d3f8893a79fb570b4c0cbc.html

but this was removed on the basis that it was very easy to work
out and apply manually if needed.

The proposal here is to remove this dependency from dwm. The
mechanism of the dmenumon variable could be provided via a patch
if need be.

The edge case scenario that dmenu does not handle on its own, and
the effect of removing this mechanism, is that if the user trigger
focusmon via keybindings to change focus to another monitor that
has no clients, then dmenu will open on the monitor containing the
window with input focus (or the monitor with the mouse cursor if
no windows have input focus).

If this edge case is important to cover then this can be addressed
by setting input focus to selmon->barwin in the focus function if
there is no client to give focus to (rather than giving focus back
to the root window).
2022-08-28 11:39:43 +02:00
NRK 84d7322113 config.def.h: make keys and buttons const
pretty much all other variables are declared as const when they're not
modified.
2022-08-19 11:47:22 +02:00
Stein 5799dd1fca Remove blw variable in favour of calculating the value when needed
The purpose and reasoning behind the bar layout width (blw) variable
in dwm the way it is today may not be immediately obvious.

The use of the variable makes more sense when looking at commit
2ce37bc from 2009 where blw was initialised in the setup function
and it represented the maximum of all available layout symbols.

	for(blw = i = 0; LENGTH(layouts) > 1 && i < LENGTH(layouts); i++) {
		w = TEXTW(layouts[i].symbol);
		blw = MAX(blw, w);
	}

As such the layout symbol back then was fixed in size and both drawbar
and buttonpress depended on this variable.

The the way the blw variable is set today in drawbar means that it
merely caches the size of the layout symbol for the last bar drawn.

While unlikely to happen in practice it is possible that the last bar
drawn is not that of the currently selected monitor, which can result
in misaligned button clicks if there is a difference in layout symbol
width between monitors.
2022-08-17 13:33:57 +02:00
Stein 44adafe006 Make floating windows spawn within the monitor's window area
This is a follow-up on this thread:
https://lists.suckless.org/hackers/2208/18462.html

The orginal code had constraints such that if a window's starting
attributes (position and size) were to place the window outside of
the edges of the monitor, then the window would be moved into view
at the closest monitor edge.

There was an exception to this where if a top bar is used then the
window should not obscure the bar if present, which meant to place
the window within the window area instead.

The proposed change here makes it the general rule that floating
windows should spawn within the window area rather than within the
monitor area. This makes it simple and consistent with no
exceptions and it makes the intention of the code clear.

This has the benefit of making the behaviour consistent regardless
of whether the user is using a top bar or a bottom bar.

Additionally this will have an effect on patches that modify the
size of the window area. For example if the insets patch is used to
reserve space on the left hand side of the monitor for a dock or a
vertical bar then new floating clients will not obscure that area.
2022-08-12 09:02:34 +02:00
Stein a859676ead Simplify client y-offset correction
The reasoning behind the original line may be lost to time as
it does not make much sense checking the position on the x-axis
to determine how to position the client on the y-axis.

In the context of multi-monitor setups the monitor y position
(m->my) may be greater than 0 (say 500), in which case the window
could be placed out of view if:
   - the window attributes have a 0 value for the y position and
   - we end up using the y position of bh (e.g. 22)

If the aim is to avoid a new floating client covering the bar then
restricting y position to be at least that of the window area
(m->wy) should cover the two cases of using a top bar and using a
bottom bar.
2022-08-10 15:31:21 +02:00
Hiltjo Posthuma e0dee91145 sync code-style patch from libsl 2022-08-08 10:43:09 +02:00
NRK 5e76e7e21d code-style: simplify some checks
main change here is making the `zoom()` logic saner. the rest of the
changes are just small stuff which accumulated on my local branch.

pop() must not be called with NULL. and `zoom()` achieves this, but in a
very (unnecessarily) complicated way:

if c == NULL then nexttiled() will return NULL as well, so we enter this
branch:

	if (c == nexttiled(selmon->clients))

in here the !c check fails and the function returns before calling pop()

		if (!c || !(c = nexttiled(c->next)))
			return;

however, none of this was needed. we can simply return early if c was NULL.
Also `c` is set to `selmon->sel` so we can use `c` in the first check
instead which makes things shorter.
2022-08-06 16:09:01 +02:00
explosion-mental 5b2e5e7a40 spawn: reduce 2 lines, change fprintf() + perror() + exit() to die("... :")
when calling die and the last character of the string corresponds to
':', die() will call perror(). See util.c

Also change EXIT_SUCCESS to EXIT_FAILURE
2022-08-02 18:08:51 +02:00
Stein 786f6e2a6f unmanage: stop listening for events for unmanaged windows
This is in particular to avoid flickering in dwm (and high CPU usage)
when hovering the mouse over a tabbed window that was previously
managed by dwm.

Consider the following two scenarios:

1)

We start tabbed (window 0xc000003), tabbed is managed by the
window manager.
We start st being embedded into tabbed.

$ st -w 0xc000003

What happens here is that:
   - tabbed gets a MapRequest for the st window
   - tabbed reparents the st window
   - tabbed will receive X events for the window

The window manager will have no awareness of the st window and the
X server will not send X events to the window manager relating to
the st window.

There is no flickering or any other issues relating to focus.

2)

We start tabbed (window 0xc000003), tabbed is managed by the
window manager.
We start st as normal (window 0xd400005).

What happens here is that:
   - the window manager gets a MapRequest for the st window
   - dwm manages the st window as a normal client
   - dwm will receive X events for the window

Now we use xdotool to trigger a reparenting of the st window into
tabbed.

$ xdotool windowreparent 0xd400005 0xc000003

What happens here is that:
   - tabbed gets a MapRequest for the st window
   - tabbed reparents the st window
   - the window manager gets an UnmapNotify
   - the window manager no longer manages the st window
   - both the window manager and tabbed will receive X events
     for the st window

In dwm move the mouse cursor over the tabbed window.

What happens now is that:
   - dwm will receive a FocusIn event for the tabbed window
   - dwm will set input focus for the tabbed window
   - tabbed will receive a FocusIn event for the main window
   - tabbed will give focus to the window on the currently selected
     tab
   - which again triggers a FocusIn event which dwm receives
   - dwm determines that the window that the FocusIn event is for
     (0xd400005) is not the currently selected client (tabbed)
   - dwm sets input focus for the tabbed window
   - this causes an infinite loop as long as the mouse cursor hovers
     the tabbed window, resulting in flickering and high CPU usage

The fix here is to tell the X server that we are no longer interested
in receiving events for this window when the window manager stops
managing the window.
2022-08-02 18:04:56 +02:00
Hiltjo Posthuma e03248a4d5 Revert "do not call signal-unsafe function inside sighanlder"
This reverts commit 6613d9f9a1.

Discussed on the mailinglist:
https://lists.suckless.org/hackers/2207/18405.html
2022-07-22 09:18:52 +02:00
NRK 6613d9f9a1 do not call signal-unsafe function inside sighanlder
die() calls vprintf, fputc and exit; none of these are
async-signal-safe, see `man 7 signal-safety`.
2022-07-15 20:53:58 +02:00
NRK 9bffa845fa use named parameter for func prototype
all the other prototypes use names.
2022-07-15 20:53:56 +02:00
Hiltjo Posthuma d3f93c7c1a sync latest drw.{c,h} changes from dmenu 2022-05-10 19:07:56 +02:00
Hiltjo Posthuma cd0773cee9 Makefile: add manual path for OpenBSD
Reported by fossy <fossy@dnmx.org>, thanks
2022-05-01 18:37:54 +02:00
Chris Down 8b48e30973 manage: Make sure c->isfixed is applied before floating checks
Commit 8806b6e237 ("manage: propertynotify: Reduce cost of unused size
hints") mistakenly removed an early size hints update that's needed to
populate c->isfixed for floating checks at manage() time. This resulted
in fixed (size hint min dimensions == max dimensions) subset of windows
not floating when they should.

See https://lists.suckless.org/dev/2204/34730.html for discussion.
2022-04-26 15:50:55 +02:00
Hiltjo Posthuma a83dc20310 LICENSE: add Chris Down 2022-04-26 15:50:32 +02:00
Hiltjo Posthuma a4771de5ba Revert "manage: For isfloating/oldstate check/set, ensure trans client actually exists"
This reverts commit bece862a0f.

It caused a regression, for example:
https://lists.suckless.org/hackers/2203/18220.html
2022-04-26 10:30:59 +02:00
Santtu Lakkala d93ff48803 Update monitor positions also on removal
When monitors are removed, the coordinates of existing monitors may
change, if the removed monitors had smaller coordinates than the
remaining ones.

Remove special case handling so that the same update-if-necessary loop
is run also in the case when monitors are removed.
2022-04-16 16:59:03 +02:00
Chris Down 8806b6e237 manage: propertynotify: Reduce cost of unused size hints
This patch defers all size hint calculations until they are actually
needed, drastically reducing the number of calls to updatesizehints(),
which can be expensive when called repeatedly (as it currently is during
resizes).

In my unscientific testing this reduces calls to updatesizehints() by
over 90% during a typical work session. There are no functional changes
for users other than an increase in responsiveness after resizes and
a reduction in CPU time.

In slower environments or X servers, this patch also offers an
improvement in responsiveness that is often tangible after resizing a
client that changes hints during resizes.

There are two main motivations to defer this work to the time of hint
application:

1. Some clients, especially terminals using incremental size hints,
   resend XA_WM_NORMAL_HINTS events on resize to avoid fighting with the
   WM or mouse resizing. For example, some terminals like urxvt clear
   PBaseSize and PResizeInc during XResizeWindow and restore them
   afterwards.

   For this reason, after the resize is concluded, we typically receive
   a backlogged XA_WM_NORMAL_HINTS message for each update period with
   movement, which is useless. In some cases one may get hundreds or
   thousands of XA_WM_NORMAL_HINTS messages on large resizes, and
   currently all of these result in a separate updatesizehints() call,
   of which all but the final one are immediately outdated.

   (We can't just blindly discard these messages during resizes like we
   do for EnterNotify, because some of them might actually be for other
   windows, and may not be XA_WM_NORMAL_HINTS events.)

2. For users which use resizehints=0 most of these updates are unused
   anyway -- in the normal case where the client is not floating these
   values won't be used, so there's no need to calculate them up front.

A synthetic test using the mouse to resize a floating terminal window
from roughly 256x256 to 1024x1024 and back again shows that the number
of calls to updatesizehints() goes from over 500 before this patch (one
for each update interval with movement) to 2 after this patch (one for
each hint application), with no change in user visible behaviour.

This also reduces the delay before dwm is ready to process new events
again after a large resize on such a client, as it avoids the thundering
herd of updatesizehints() calls when hundreds of backlogged
XA_WM_NORMAL_HINTS messages appear at once after a resize is finished.
2022-04-16 16:37:46 +02:00
Miles Alan bece862a0f manage: For isfloating/oldstate check/set, ensure trans client actually exists
In certain instances trans may be set to a window that doesn't actually
map to a client via wintoclient; in this case it doesn't make sense
to set isfloating/oldstate since trans is essentially invalid in that
case / correlates to the above condition check where trans is set /
XGetTransientForHint is called.
2022-03-13 17:32:56 +01:00
NRK 60e9a14998 fix mem leak in cleanup()
maybe leak isn't the best word, given that the object lives for the
entire duration of the program's lifetime.

however, all elements of scheme are free-ed, can't think of any reason
why scheme itself should be an exception.
2022-03-13 10:49:43 +01:00
Hiltjo Posthuma d39e2f3441 bump version to 6.3 2022-01-07 12:39:18 +01:00
Chris Down 8657affa2a drawbar: Don't expend effort drawing bar if it is occluded
I noticed that a non-trivial amount of dwm's work on my machine was from
drw_text, which seemed weird, because I have the bar disabled and we
only use drw_text as part of bar drawing.

Looking more closely, I realised that while we use m->showbar when
updating the monitor bar margins, but don't skip actually drawing the
bar if it is hidden. This patch skips drawing it entirely if that is the
case.

On my machine, this takes 10% of dwm's on-CPU time, primarily from
restack() and focus().

When the bar is toggled on again, the X server will generate an Expose
event, and we'll redraw the bar as normal as part of expose().
2021-12-19 16:16:30 +01:00
Hiltjo Posthuma a786211d6c Revert "Improve speed of drw_text when provided with large strings"
This reverts commit 716233534b.

It causes issues with truncation of characters when the text does not fit and
so on.  The patch should be reworked and properly tested.
2021-08-20 23:09:48 +02:00
Miles Alan 716233534b Improve speed of drw_text when provided with large strings
Calculates len & ew in drw_font_getexts loop by incrementing instead of
decrementing; as such avoids proportional increase in time spent in loop
based on provided strings size.
2021-08-09 18:25:19 +02:00
Quentin Rameau 138b405f0c Add a configuration option for fullscreen locking
Some people are annoyed to have this new behaviour forced for some
application which use fake fullscreen.
2021-07-14 11:26:37 +02:00
Chris Down 67d76bdc68 Do not allow focus to drift from fullscreen client via focusstack()
It generally doesn't make much sense to allow focusstack() to navigate
away from the selected fullscreen client, as you can't even see which
client you're selecting behind it.

I have had this up for a while on the wiki as a separate patch[0], but
it seems reasonable to avoid this behaviour in dwm mainline, since I'm
struggling to think of any reason to navigate away from a fullscreen
client other than a mistake.

0: https://dwm.suckless.org/patches/alwaysfullscreen/
2021-03-29 19:16:27 +02:00
Ian Remmler 61bb8b2241 Fix x coordinate calculation in buttonpress. 2020-08-21 16:13:22 +02:00
Hiltjo Posthuma bb2e7222ba dwm.1: fix wrong text in man page 2020-07-08 18:05:50 +02:00
Alex Flierl f04cac6d6e Fix memory leaks in drw
The function drw_fontset_free in drw.c was never called.
2020-06-11 18:32:21 +02:00
bakkeby f09418bbb6 dwm crashes when opening 50+ clients (tile layout)
Many users new to dwm find themselves caught out by being kicked out to the login manager (dwm crashing) when they open 50+ clients for demonstration purposes. The number of clients reported varies depending on the resolution of the monitor.

The cause of this is due to how the default tile layout calculates the height of the next client based on the position of the previous client. Because clients have a minimum size the (ty) position can exceed that of the window height, resulting in (m->wh - ty) becoming negative. The negative height stored as an unsigned int results in a very large height ultimately resulting in dwm crashing.

This patch adds safeguards to prevent the ty and my positions from exceeding that of the window height.
2020-04-25 13:31:02 +02:00
Chris Down ed3ab6b4fc drawbar: Don't shadow sw global
This jarred me a bit while reading the code, since "sw" usually refers
to the global screen geometry, but in drawbar() only it refers to
text-related geometry. Renaming it makes it more obvious that these are
not related.
2020-04-22 20:33:39 +02:00
Chris Down f087d20e6e getatomprop: Add forward declaration
No functional changes, but for every other function we have a forward
declaration here. getatomprop should be no exception.
2020-04-22 20:33:26 +02:00
Chris Down a8e9513783 setmfact: Unify bounds for compile-time and runtime mfact
There are two places that mfact can be set:

- In the mfact global, which is defined at compile time and passed
  into m->mfact during monitor setup. No bounds checks are performed,
  but the comment alongside it says that valid values are [0.05..0.95]:

      static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */

- By setmfact, which adjusts m->mfact at runtime. It also does some
  minimum and maximum bounds checks, allowing [0.1..0.9]. Values outside
  of that range are ignored, and mfact is not adjusted.

These different thresholds mean that one cannot setmfact 0.95 or 0.05,
despite the comment above that lists the legal range for mfact.

Clarify this by enforcing the same bounds in setmfact at runtime as
those listed for mfact at compile time.
2020-04-20 17:56:41 +02:00
Hiltjo Posthuma c82db690cc config.mk: fix POSIX_C_SOURCE macro for feature test for snprintf()
The feature test was incorrect:
_POSIX_C_SOURCE=2

"The value 2 or greater additionally exposes definitions for POSIX.2-1992."
http://man7.org/linux/man-pages/man7/feature_test_macros.7.html

A higher value is needed (atleast 1995):
https://pubs.opengroup.org/onlinepubs/9699919799/functions/snprintf.html

FreeBSD feature test macro:
on
https://github.com/freebsd/freebsd/blob/master/include/stdio.h line 297

This was already fixed in dmenu.

This fixes a warning on FreeBSD, reported by Plasmoduck on IRC, thanks.
2020-04-03 15:36:32 +02:00
Anselm R Garbe cb3f58ad06 Prepare 6.2 release. 2019-02-02 04:50:42 -08:00
Hiltjo Posthuma b69c870a30 pledge: add rpath promise for the ugly Xft font fallback 2018-06-02 17:15:42 +02:00
Hiltjo Posthuma e78b4a9207 Makefile: just show the compiler output
Don't be fancy and just show the actual output so debugging is simpler.
2018-06-02 17:10:28 +02:00
Klemens Nanni 3cd4023fb3 Do not strip at link stage
Building with debug symbols is worthless unless LDFLAGS are manually
adjusted as well.
2018-06-02 16:56:10 +02:00
Klemens Nanni f40f86fa87 Pledge on OpenBSD 2018-05-25 11:49:30 +02:00
Hiltjo Posthuma c3a2e016bb config.def.h: ClkTagBar missing from comment
by Christopher Drelich <cd@cdrakka.com>

Patch was mangled on the ML, also adjusted the order to be the same as
the enum in dwm.c
2018-05-25 06:56:36 +02:00
Christopher Drelich c8e9479186 Function declarations in correct order.
In dwm.c function declarations are in alphabetical order except for
updategeom(). There doesn't appear to be any reason for this, so this
patch corrects that, and now all function declarations are in
alphabetical order.
2018-05-12 19:19:20 +02:00
Hiltjo Posthuma 10dfa65860 remove old TODO and BUGS entries
the bug in the dwm man page is an (ancient) Java issue.

Thanks David and quinq for the patches and feedback!
2018-05-12 19:14:19 +02:00
Hiltjo Posthuma 3bd8466e93 update README: remove mentioning the old dextra repo
Thanks Christopher Drelich <cd@cdrakka.com>
2018-03-14 21:03:11 +01:00
Christopher Drelich 76c8c16d79 All functions in alphabetical order except for this one. 2018-03-14 21:02:06 +01:00
Christopher Drelich 3cb34830eb ColBorder has been moved to the enum with ColFg and ColBg. 2018-03-14 17:46:48 +01:00
Hiltjo Posthuma db2236001c dont NUL terminate _NET_WM_NAME
Reported by Kernc, thanks!

"This makes a particular program that uses libwnck [1] fail after:

    Wnck-WARNING **: Property _NET_WM_NAME contained invalid UTF-8

in this code [2] because the returned string contains a '\0' and the
documentation for g_utf8_validate() [3] explicitly states that when
string length is provided, no nul bytes are allowed."

It is not entirely clear it is incorrect, other WM's seem to not
NUL terminate it either though.
2017-12-27 13:36:53 +01:00
Hiltjo Posthuma 3756f7f6b8 sync dmenu drw.{c,h} code: use Clr* (was Scm) 2017-11-03 21:20:48 +01:00
Hiltjo Posthuma 99f78fa553 gettextprop: check result of XGetTextProperty (undefined behaviour for XFree) 2017-11-03 21:14:58 +01:00
Omar Sandoval a9b6a312a7 Set class name on status bar
This is useful for configuring compositors to ignore the status bar
window.
2017-11-03 20:40:34 +01:00
Daniel Cousens 6aa8e37efe simplify isfixed conditions 2017-10-11 09:46:28 +02:00
Anselm R Garbe ceac8c91ff yet another cleanup
The previous patches introduced some unclean space-based indentation
patterns. This patch fixes them.
2017-05-08 21:08:27 +02:00
Markus Teich 5b238c8dab Don't restrict snap in mousemove
This also fixes a bug where client windows only switch to floating mode when the
mouse is dragged in one specific direction.
2017-03-28 20:23:38 +02:00
Markus Teich 022d076054 Button passthrough when client is not focused
Before this change it is not possible to press a button in a client on the first
click if the client is not yet focused. The first click on the button would
only focus the client and a second click on the button is needed to activate it.
This situation can occur when moving the mouse over a client (therefore focusing
it) and then moving the focus to another client with keyboard shortcuts.

After this commit the behavior is fixed and button presses on unfocused clients
are passed to the client correctly.
2017-03-28 20:23:34 +02:00
Markus Teich 2952b68db8 cleanup
- unify multi-line expression alignment style.
- unify multi-line function call alignment style.
- simplify client moving on monitor count decrease.
- clarify comment for focusin().
- remove old confusing comment about input focus fix in focusmon(). The
  explanation is already in the old commit message, so no need to keep it in the
  code.
- remove old comment describing even older state of the code in focus().
- unify comment style.
- break up some long lines.
- fix some typos and grammar.
2017-03-28 20:23:28 +02:00
Anselm R Garbe bb3bd6fec3 applied Markus' tagset purge of alternative view on _NET_ACTIVE_WINDOW event 2016-12-05 10:16:46 +01:00
Anselm R Garbe e63bf22948 applied Ivan Delalande's NET_SUPPORTING_WM_CHECK patch for gtk3 compatibility 2016-12-05 10:09:49 +01:00
Anselm R Garbe 5376947571 applied Ian Remmler's man page adjustment suggestions 2016-12-05 10:05:00 +01:00
Anselm R Garbe 975c898376 applied Markus' decouple color-scheme patch 2016-12-05 10:01:33 +01:00
Anselm R Garbe a137a86a23 applied Markus' clarify status text padding patch 2016-12-05 09:54:20 +01:00
Quentin Rameau 839c7f6939 LICENSE: update people 2016-11-15 17:35:33 +01:00
Quentin Rameau 7a59cd1457 dwm.1: add keybinding for spawning dmenu 2016-11-15 17:35:30 +01:00
Hiltjo Posthuma 24849acada die() on calloc failure
thanks Markus Teich and David!
2016-11-05 11:34:52 +01:00
Hiltjo Posthuma ab9571bbc5 die() consistency: always add newline 2016-08-12 14:36:35 +02:00
Hiltjo Posthuma 56a31dc4a7 config.def.h: style improvement, use color Scheme enum 2016-06-28 18:04:56 +02:00
Markus Teich 7af4d439bd import new drw from libsl and minor fixes.
- better scaling for occupied tag squares.
- draw statusline first to omitt some complicated calculations.
2016-06-26 13:52:36 +02:00
Eric Pruitt cd2d7549b3 Configure geometry before applying rules
Configuring geometry before applying rules makes it possible to have
more complex constraints in applyrules that depend on the initial window
dimensions and location.
2016-06-24 05:38:58 +02:00
Hiltjo Posthuma 3465bed290 fix fullscreen clients not resized on X display resolution change
patch provided by Bert Münnich <ber.t_AT_posteo.de>, thanks!
2015-12-19 20:25:26 +01:00
Quentin Rameau 4ec3a673ff Shut up glibc about _BSD_SOURCE being deprecated 2015-12-19 20:20:26 +01:00
Hiltjo Posthuma 5ed9c48196 code-style consistency 2015-11-08 23:11:48 +01:00
Hiltjo Posthuma 3c91283ede unboolification 2015-11-08 22:48:43 +01:00
Hiltjo Posthuma e941181f46 sort include + whitespace fix 2015-11-08 20:38:00 +01:00
Hiltjo Posthuma 43e82adf0d separate program-specific c99 bool and X11
True, False are X11-specific (int), make sure to use c99 stdbool for
program-specific things.
2015-11-08 20:35:25 +01:00
Hiltjo Posthuma 42cf1c7d8f Makefile: package all files with make dist 2015-11-08 16:52:53 +01:00
Quentin Rameau dce4fb3737 setfullscreen: don't process the property twice
Some clients try to set _NET_WM_STATE_FULLSCREEN even when the window is
already in fullscreen.
For example, c->oldstate was set two times in a raw and window would
then always be floating.
We must check that it's not the case before processing it.
(original patch modified with suggestion from Markus Teich
<markus.teich@stusta.mhn.de>)
2015-11-07 14:31:21 +01:00
Hiltjo Posthuma 646b351cc7 sync updated drw code from dmenu
important:
- drw_rect: didn't use w and h, change the dwm code accordingly.
- drw_text: text is NULL is not allowed, use drw_rect().
2015-10-20 23:38:31 +02:00
Hiltjo Posthuma e3b7e1d620 dwm: use ecalloc, prevent theoretical overflow 2015-10-20 23:38:31 +02:00
Hiltjo Posthuma 04db03a4e6 cleanup, dont use c++ style comments
- signal: print error string.
- die: start message with lower-case (consistency).
- bump version to 2015.
2015-10-20 23:38:20 +02:00
Hiltjo Posthuma 4a4817b3aa dwm: cleanup: free schemes and cursors as array 2015-10-20 23:27:31 +02:00
Hiltjo Posthuma 7e1182ce55 config.h: use common default font, pass Xft font name to dmenu
dmenu uses Xft now (soon to be released).
2015-10-20 23:10:54 +02:00
Hiltjo Posthuma 40529e1469 config.mk: add $FREETYPELIBS and $FREETYPEINC, simpler to override (ports and *BSDs) 2015-10-20 23:01:49 +02:00
Eric Pruitt 14343e69cc Add Xft and follback-fonts support to graphics lib 2015-03-13 21:44:22 +01:00
Anselm R Garbe 35db6d8afc removed .hgtags, thanks Dimitris for spotting 2014-11-23 15:25:35 +01:00
Anselm R Garbe 3d1090ba89 applied Hiltjo's resize/move limitation
"Limit the amount of updates when resizing or moving a window in floating
mode to 60 times per second. This makes resizing and moving alot smoother
and by limiting it it also uses alot less resources on my machine.
2014-08-11 07:24:29 +02:00
Anselm R Garbe 18248ebf4b same as before with dwm.c as well 2014-05-29 18:05:17 +02:00
Anselm R Garbe b468873b2b updated copyright notice in LICENSE file 2014-05-29 18:02:12 +02:00
Anselm R Garbe cdec9782a1 applied Lukas' focus suggestion at startup, thanks 2013-08-27 20:39:21 +02:00
Anselm R Garbe 6af273771c applied improved version of Martti Kühne's dmenu/multi monitor approach from dwm, no dmenuspawn required 2013-08-02 22:40:20 +02:00
Anselm R Garbe 4fb31e0896 do not take our font declaration as default for st 2013-07-20 09:08:46 +02:00
Anselm R Garbe b800a1d136 applied Jochen's drw_text patch, thanks 2013-06-23 21:53:09 +02:00
Anselm R Garbe 33a74489f0 applied Julian's enum approach,
however renamed theme into scheme resp. Theme into ClrScheme
2013-06-19 19:35:33 +02:00
Anselm R Garbe 5364697914 finished libsl/drw integration 2013-06-16 15:20:29 +02:00
Anselm R Garbe 7edc596311 include font argument for st by default 2013-05-02 17:31:22 +02:00
Anselm R Garbe 68b400e95d added st to SEE ALSO section 2013-05-01 15:45:32 +02:00
Anselm R Garbe 656882d76f use st as default terminal from now on 2013-05-01 15:41:44 +02:00
Anselm R Garbe 1479e76f01 shut up about deprecated Xlib functions 2013-05-01 15:39:06 +02:00
Anselm R Garbe f2544a3318 renamed draw into drw 2013-04-17 21:21:47 +02:00
Anselm R Garbe aafeaf7317 continued with draw.c and draw.h implementation, now the integration begins 2012-12-09 19:11:11 +01:00
Anselm R Garbe f21d46ea7d continued with draw.c abstraction, also started util.{h,c} implementation, that will be used by draw.c as well 2012-12-08 10:13:01 +01:00
anselm@garbe.us c0ba635c50 removed DDC, all is Draw-dependent 2012-11-18 17:52:42 +01:00
anselm@garbe.us 0a673ad7a3 continued, distinction of Draw and DDC is bad, needs to be merged 2012-11-18 17:26:12 +01:00
anselm@garbe.us 3aabc08ede reverting the xkb dependency, I don't care if this function is deprecated, it seems it breaks other stuff instead. 2012-11-18 16:39:56 +01:00
anselm@garbe.us d456617f0e basic draw.c structure 2012-11-18 12:04:29 +01:00
anselm@garbe.us 61fe833a06 reverting to plain X11 fonts in order to implement draw.c default 2012-11-18 10:56:54 +01:00
anselm@garbe.us 917e281634 removed obsolete bugs from BUGS file 2012-11-17 20:04:04 +01:00
anselm@garbe.us 31451c3ad3 compile fix 2012-11-17 19:12:10 +01:00
anselm@garbe.us 344f35f9f5 applied Neil Klopfstein's patch, slightly modified 2012-11-17 19:10:39 +01:00
anselm@garbe.us 87adcd263b starting with initial draw.h 2012-11-17 19:01:22 +01:00
anselm@garbe.us fd3c19bd55 incorporating Xft instead of cairo, cairo provides far too many options 2012-11-02 12:17:50 +01:00
anselm@garbe.us 1bdb393f81 keep 6.1 intact 2012-07-08 09:45:53 +02:00
anselm@garbe.us 940feed314 reverted to old updategeom() after several complains, we need to optimize the old way 2012-07-08 09:43:11 +02:00
anselm@garbe.us 606b44179d applied James Turner's XkbKeycodeToKeysym patch, thanks 2012-06-23 20:12:49 +02:00
anselm@garbe.us 20f6917910 drastically changed updategeom() handling, see comment in updategeom() for details 2012-06-23 10:12:46 +02:00
anselm@garbe.us 820cbb3545 reversed Andreas Amann's fullscreen fix with the approach proposed by Gary Langshaw:
- idea is not supporting movemouse/resizemouse/togglefloating for fullscreen windows
- as fullscreen windows are broken anyways, they should only be adjusted by their own means
2012-06-23 09:06:00 +02:00
anselm@garbe.us 90f3238301 added kludge to fix some input focus misbehavior in gedit and anjuta, thanks Martti Kühne 2012-04-15 11:41:18 +02:00
anselm@garbe.us 3bfc43c3d0 applied Andreas Amanns' netwm_client_list patch, but with some indentation fixes 2012-03-25 17:49:35 +02:00
anselm@garbe.us c1128417a9 applied Andreas Amann's netwm_active_window patch, thx 2012-03-25 17:46:03 +02:00
anselm@garbe.us 1b62f8fa58 applied Andreas Amann fullscreen fix, some minor modifications 2012-03-17 18:14:17 +01:00
Connor Lane Smith 54c3044dec unfocus on slow sloppy monitor focus 2012-02-10 00:36:08 +00:00
anselm@garbe.us 51336aa4a3 applied Eckehard Berns fix fix, sorry that this took so long 2012-02-08 19:54:05 +01:00
anselm@garbe.us c4b6ac812e added 20h's clarification 2012-01-22 20:23:49 +01:00
anselm@garbe.us 873bcb97a9 applied Eckehard Berns barwin leak fix and his suggestion to deal with restack() -- the latter aspect needs further investigation. 2012-01-12 07:36:05 +01:00
anselm@garbe.us 907db0a851 config.mk cleanup 2012-01-04 13:30:12 +01:00
anselm@garbe.us 4e7c469862 Added tag 6.0 for changeset ec4baab78314 2011-12-19 16:09:07 +01:00
anselm@garbe.us 26445a0dc9 bump version to 6.0 2011-12-19 15:38:30 +01:00
Connor Lane Smith b5068e32e9 add sloppy monitor focus 2011-11-15 20:16:58 +01:00
Connor Lane Smith f099d2d5b5 new default colour scheme 2011-11-06 20:36:23 +01:00
Connor Lane Smith 80a9da555e calculate window/monitor intersection 2011-11-06 20:31:29 +01:00
Connor Lane Smith d21026f0a1 honour fullscreen hint on map 2011-11-06 20:30:06 +01:00
anselm@garbe.us e5a1e77351 testing Brians multiscreen issue fix 2011-11-04 20:02:35 +01:00
Christoph Lohmann 8262d9e663 make ewmh dialog windows float 2011-11-02 12:01:28 +00:00
Connor Lane Smith 90af1ced3c allow 0 nmaster 2011-10-31 20:09:27 +01:00
Connor Lane Smith 5ccd42f807 fix big-border corner case 2011-10-30 12:14:34 +01:00
garbeam@gmail.com 1586b7a02d added keyrelease remark to TODO 2011-10-29 10:57:27 +02:00
Connor Lane Smith 2420071f4c improve tile spacing 2011-10-28 23:45:12 +01:00
Connor Lane Smith 04c26574b8 add nmaster binds to manpage 2011-10-26 12:16:25 +01:00
Connor Lane Smith b1a28ae1da apply nmaster patch 2011-10-25 20:40:46 +01:00
Connor Lane Smith f68a01cd76 apply resize hints in floating layout 2011-10-25 20:08:08 +01:00
Connor Lane Smith 2b625eb73e hide clients to the left, not the right 2011-10-25 20:01:18 +01:00
garbeam@gmail.com 0f1f30daca applied Connors cleanup patch of Eckehards proposed fix of applyrules(), thanks everyone involved 2011-08-15 18:44:12 +02:00
garbeam@gmail.com dec4850d05 applied Connors and Valentins patch to improve the unmapnotify handling of broken clients 2011-08-08 16:55:06 +00:00
garbeam@gmail.com 0de4197cc5 applied Peter Hartlichs nice interim Xinerama and map fix patches, for debugging purposes I also added his transient test driver 2011-07-29 20:01:22 +02:00
garbeam@gmail.com a372248b80 applied anonymous code cleanup patch 2011-07-27 19:59:10 +02:00
garbeam@gmail.com 69e7d7dfd3 added a marker for the flash fullscreen issue 2011-07-24 10:41:43 +01:00
garbeam@gmail.com c99fe7dd7d changed sleep 20 into sleep 1 in example script as suggested by Snader_LB 2011-07-20 18:56:10 +00:00
garbeam@gmail.com d6670a800d applied Connors aesthitic buf fix in tile(), thanks 2011-07-20 18:45:40 +00:00
garbeam@gmail.com 6288c44697 applied Peters magic float mode bugfix 2011-07-20 18:36:15 +00:00
garbeam@gmail.com d5c5c52b30 applied lolilolicon's floating center patch, further investigation wrt his second issue reported needed 2011-07-20 18:33:19 +00:00
garbeam@gmail.com d0b4575bf4 thanks to recursions on IRC for his remark 2011-07-20 18:30:51 +00:00
garbeam@gmail.com 03518ce49e Added tag 5.9 for changeset dd74622a4785 2011-07-10 21:25:23 +01:00
garbeam@gmail.com cd8bb06af5 enabled release flags 2011-07-10 21:24:17 +01:00
garbeam@gmail.com 3150a8a1be applied Peters wintoclient/wintomon optimisation in enternotify() 2011-07-10 21:22:22 +01:00
garbeam@gmail.com b3c5f5435a removed unneeded offset recalculation, thanks Jukka, let's see if this breaks some other client 2011-07-10 21:18:50 +01:00
garbeam@gmail.com a692bdcf2b undo the focus optimisation patch for 5.9 2011-07-10 21:12:05 +01:00
garbeam@gmail.com d83454f6b7 applied Peters two patches, please test hg tip, if nothing breaks this is 5.9 2011-07-09 07:57:10 +01:00
garbeam@gmail.com 27b0142203 applied Garys patch in a slightly modified way 2011-07-02 11:02:22 +02:00
garbeam@gmail.com 867ba36030 applied Nicolas Capit's patch as interim solution until the multiscreen support is reworked in 6.0 2011-07-01 17:56:53 +01:00
Connor Lane Smith e83f36db10 fixed scroll lock (thanks bogdan) 2011-06-27 20:12:42 +01:00
Connor Lane Smith 212f417e44 fix numlock (thanks mikhail) 2011-06-27 19:35:11 +01:00
garbeam@gmail.com 3a392b8558 making enternotify less focus hungry 2011-06-25 09:07:28 +01:00
garbeam@gmail.com 92fe06b501 applied Andreas Amann's patch from Oct 2010, thanks 2011-06-24 21:02:32 +01:00
garbeam@gmail.com 6cf29bff33 applied Rudys barwidth patch, thanks Rudy 2011-06-17 20:22:54 +01:00
garbeam@gmail.com 60c06a7cb4 don't check for monocle layout in zoom() exit condition 2011-06-14 22:28:16 +01:00
garbeam@gmail.com 1147546122 Thanks for the pedantic review :) 2011-06-14 05:51:21 +01:00
garbeam@gmail.com d384cee751 fixing some minor issues, next week is dwm-5.9 release time 2011-06-11 08:33:20 +01:00
Connor Lane Smith 5c710cf89c rm draw.c from 5.9 branch 2011-06-04 23:02:00 +01:00
Connor Lane Smith 8a111c181e fix typo 2011-06-04 10:18:54 +01:00
Connor Lane Smith 2255bf46a0 cleaner drawing 2011-06-04 10:17:25 +01:00
Connor Lane Smith 04797343db update draw.c 2011-05-21 20:26:26 +01:00
Connor Lane Smith e7d41cc188 added draw.h, draw.c 2011-05-20 19:10:26 +01:00
Anselm R Garbe 22d8818850 applied Evil_Bobs cleanup patch 2011-05-12 14:16:33 +00:00
Anselm R Garbe 6784429c3c applied another minor change to the README 2011-04-27 15:55:18 +00:00
Anselm R Garbe 37fea84de8 applied Thomas' README patch 2011-04-27 12:38:59 +00:00
Anselm R Garbe c14d293e51 applied Jack's mplayer fullscreen patch 2011-04-26 08:13:39 +00:00
Anselm R Garbe 79b1657a19 missed declaration 2011-04-15 08:13:06 +00:00
Anselm R Garbe d24837f1ad minor fix of the NetActiveWindow multi-monitor flaw, slight rearrangement 2011-04-15 08:12:20 +00:00
Anselm R Garbe 3c2d303c0e applied Peter/Andreas NetActiveWindow patch in a slightly modified version 2011-04-14 13:46:25 +00:00
Anselm R Garbe 1e20a0f78a applied Brendan MacDonell's WM_TAKE_FOCUS patch, thanks Brendan! 2011-04-12 20:19:32 +00:00
Anselm R Garbe 96f9855248 applied another patch of Hiltjo, thanks 2011-03-25 14:06:46 +00:00
Anselm R Garbe 3c48858ffa applied Hiltjos' BUGS patch from 23 Mar, sorry took a while :) 2011-03-25 13:57:54 +00:00
Anselm R Garbe dd46d5b588 applied Hiltjo's multimon mouse-based resize fix 2011-03-23 08:58:57 +00:00
Anselm R Garbe 0bc4e41ebd applied anonymous patch, I don't think the reversed array access has semantic side-effects 2011-01-07 16:05:22 +00:00
Anselm R Garbe 703c4dd253 added a todo 2010-12-02 10:16:47 +00:00
Anselm R Garbe b68528d85d applied Hiltjo's cleanup patch 2010-11-19 11:53:59 +00:00
Anselm R Garbe a644baf674 applied Hiltjo's tiny cleanup fix 2010-09-27 07:53:44 +00:00
Anselm R Garbe c1f8688bfa applied Hiltjo's tiny cleanup patch, thanks! 2010-09-25 13:39:08 +00:00
Anselm R Garbe bea4dd2490 does this make a difference? 2010-09-11 19:00:18 +00:00
anselm@garbe.us 83d10be1c1 added TODO and bumped version to 5.9 2010-08-24 13:13:20 +01:00
anselm@garbe.us 1529058f27 applied Hiltjo Posthuma's line saver patch 2010-08-23 17:25:53 +01:00
Anselm R Garbe 36311d88af applied Hiltjo Posthuma's double-XineramaQueryScreens() patch, thanks Hiltjo! 2010-07-25 09:58:25 +01:00
anselm@garbe.us f1a2a3c850 Added tag 5.8.2 for changeset a043f0800805 2010-06-04 11:41:16 +01:00
Anselm R Garbe ee734fae6b increased version 2010-05-30 10:03:09 +01:00
Anselm R Garbe 62d3caa999 implemented better fullscreen handling, please test 2010-05-30 10:02:56 +01:00
Anselm R Garbe 4c9b397ff9 Added tag 5.8.1 for changeset 1ed1e75c9c2e 2010-05-29 12:48:18 +01:00
Anselm R Garbe 5c6545adf5 removing Sylvain's patch because it breaks more than it fixes unfortunately, re-issuing a bugfix release 5.8.1 2010-05-29 12:48:11 +01:00
Anselm R Garbe a704b1ee34 Added tag 5.8 for changeset 60ea8fed13ab 2010-05-28 11:43:44 +01:00
anselm@garbe.us f83d61dfe8 removed DEBUG code and added 2010 to the copyright list 2010-05-27 08:20:42 +01:00
anselm@garbe.us c6180949a7 applied Sylvain Laurent's EWMH fullscreen state patch, simplified his patch a bit 2010-05-27 08:19:08 +01:00
Anselm R Garbe 1973ab0643 added the related bug reported by voltaic 2010-04-11 18:42:32 +01:00
Anselm R Garbe 427053f8d1 pretty printing bugs a bit 2010-04-01 22:34:46 +01:00
Anselm R Garbe a88e0373ef selmon optimisation is needed 2010-04-01 19:39:24 +01:00
Anselm R Garbe aa9f2be24e more debug output, experimental focus optimisation 2010-04-01 00:14:15 +01:00
Anselm R Garbe c53b29e60b quick typo fix 2010-03-31 23:27:30 +01:00
Anselm R Garbe d6bdd03d91 it's debug season for upcoming dwm 5.8, so only use this if you really want to run experimental code or debug code 2010-03-31 23:24:22 +01:00
Anselm R Garbe 1144e98394 another bug report 2009-11-25 13:56:17 +00:00
Anselm R Garbe 7671d03a90 removed misleading comment, thanks Romain Bertrand 2009-11-24 09:31:17 +00:00
Anselm R Garbe bc554d45d8 added nsz's last bug corner case 2009-11-23 08:13:18 +00:00
Anselm R Garbe ac4caea921 added BUGS, next version is 5.8 2009-10-31 11:45:56 +00:00
Anselm R Garbe 161f2d921b Added tag 5.7.2 for changeset 15761ac5e2f1 2009-09-27 20:20:14 +01:00
Anselm R Garbe 210378f198 applied Ryan Zheng's patch and re-releasing 5.7.2 2009-09-27 20:20:10 +01:00
Anselm R Garbe 7879616a75 Added tag 5.7.1 for changeset 48c3f87c335d 2009-09-27 10:31:20 +01:00
Anselm R Garbe 9e8dd3479d fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
- optimised drawbar() and arrange() handling for multiple monitors, arrange only arranges the relevant monitors when applicable, same with drawbar
- need to release 5.7.1
2009-09-27 10:31:14 +01:00
Anselm R Garbe 0b72be924d Added tag 5.7 for changeset 257403d4cd96 2009-09-26 19:52:04 +01:00
Anselm R Garbe 91e902f7fe switching to release flags 2009-09-22 20:34:03 +01:00
Anselm R Garbe 30fed9a211 implemented nn < n case, k-zed please recheck 2009-09-22 20:33:42 +01:00
Anselm R Garbe c45d46ad9a use buffer instead of pointer for mon->ltsymbol 2009-09-22 09:53:11 +01:00
Anselm R Garbe 6f55de8310 added missing scan 2009-09-22 09:16:48 +01:00
Anselm R Garbe 07ad298133 implemented different version of updategeom 2009-09-21 19:51:17 +01:00
Anselm R Garbe f0a4845e7d added TODO to updategeom in order to implement a decent version of it soon 2009-09-19 11:52:16 +01:00
Anselm R Garbe 82ec7a7ed4 new experimental updategeom() additions that should avoid several problems with Xinerama, this is EXPERIMENTAL and might break something, the algorithms in use are quite complex and cumbersome, patches and comments welcome 2009-09-18 21:18:00 +01:00
Anselm R Garbe e7300e0f6f implemented dynamic layout symbol stuff 2009-09-16 15:59:54 +01:00
Anselm R Garbe c3feffa1e2 applied Tony Lainson's config.def.h patch 2009-09-15 13:50:41 +01:00
Anselm R Garbe 956a430054 update 2009-09-08 13:33:58 +01:00
Anselm R Garbe 01056b6636 hard-core destruction 2009-09-08 13:30:18 +01:00
Anselm R Garbe eb260b1a41 renaming isdestroyed into destroyed 2009-09-08 13:18:05 +01:00
Anselm R Garbe 7fe81359d4 sync when a client is being killed 2009-09-08 13:16:54 +01:00
Anselm R Garbe a3a859b4e9 added isdestroyed flag to unmanage 2009-09-08 13:13:03 +01:00
nsz@tpx 9c066c24b3 always updategeom when root is configured 2009-09-07 11:46:02 +02:00
Anselm R Garbe 0a668922a4 another small optimisation 2009-08-18 15:59:38 +01:00
Anselm R Garbe 5762964232 also update title if the client is on an unfocused monitor 2009-08-18 15:42:55 +01:00
Anselm R Garbe cba6b211c2 applied nsz's dwm.1 patch, also added wmname 2009-08-16 21:39:24 +01:00
Anselm R Garbe 42750a621b applied Jukka's cosmetic patch 2009-08-16 08:18:54 +01:00
Anselm R Garbe 8ef465d592 applied Jukka's sigchld patch 2009-08-16 08:18:25 +01:00
Anselm R Garbe 33fe200b52 added merged patch of anydot and Neale 2009-08-13 10:45:59 +01:00
Anselm R Garbe 91fffb3f7d fixed nn declaration 2009-07-27 12:01:58 +01:00
Anselm R Garbe 1fa31efebf Added tag 5.6.1 for changeset e47a47bd3ed4 2009-07-26 14:02:28 +01:00
Anselm R Garbe 244addb3f4 applied nsz patch 2009-07-21 10:57:54 +01:00
Anselm R Garbe c13be8d620 updategeom fix for same geom screens 2009-07-21 08:57:04 +01:00
Anselm R Garbe dc39ae8568 applied nsz' man page comment, thanks! 2009-07-20 17:08:34 +01:00
Anselm R Garbe 966d76a428 merge 2009-07-20 16:40:32 +01:00
Anselm R Garbe 7151bf8329 removed Standard input hint 2009-07-20 16:39:42 +01:00
Anselm R Garbe dfecd46190 merge 2009-07-18 11:28:31 +01:00
Anselm R Garbe 5bc4db0f76 applied nsz' dwm.1 fixes, thanks Szabolcs! 2009-07-18 11:28:03 +01:00
Anselm R Garbe 999d6e795f removed misleading comment 2009-07-17 15:28:07 +01:00
Anselm R Garbe 636075297c merge 2009-07-17 13:35:44 +01:00
Anselm R Garbe 6877a00033 it's all nsz's hard investigation effort, hail nsz! ;) 2009-07-17 13:35:17 +01:00
Anselm R Garbe 0927d635bc Added tag 5.6 for changeset 555070221577 2009-07-14 19:07:53 +01:00
Anselm R Garbe 450b08dde2 final style fixes 2009-07-14 16:26:04 +01:00
Anselm R Garbe da80487c07 removed int cast in TAGMASK as suggested by nsz 2009-07-14 16:04:07 +01:00
Anselm R Garbe d9779c06fc some stylistic changes 2009-07-14 16:01:14 +01:00
Anselm R Garbe 20996c6c5a removed obsolete BUG 2009-07-13 12:51:00 +01:00
anselm@x200s.config 8dc9fcf1b9 mark broken clients as broken 2009-07-12 22:49:06 +01:00
anselm@x200s.config fc21dd4b7e fixing updatetitle 2009-07-12 22:34:29 +01:00
Anselm R Garbe 758b100d12 extended rule to apply monitors if set up accordingly 2009-07-09 21:52:17 +01:00
Anselm R Garbe 8420fb1ced reverting to optimised compiler options, current state seems stable 2009-07-09 20:49:48 +01:00
Anselm R Garbe f6128a16f9 extended man page to mention number of visible windows 2009-07-09 20:11:33 +01:00
Anselm R Garbe 87526be6f0 added client number printing right of layout symbol 2009-07-09 19:58:58 +01:00
Anselm R Garbe 565050ac51 removed monsyms, useless 2009-07-09 11:29:01 +01:00
Anselm R Garbe 5e408d8ff6 restricting number of mons by length of monsyms 2009-07-09 11:21:06 +01:00
Anselm R Garbe 1724f7fa43 introducing const where it might make some sense 2009-07-08 18:59:20 +01:00
Anselm R Garbe 3e6fe6b541 no that's definately better 2009-07-08 17:24:39 +01:00
Anselm R Garbe 6620615ab9 some minor changes 2009-07-08 17:05:20 +01:00
Anselm R Garbe 61c3095f2f die if malloc sizeof(Monitor) fails 2009-07-08 16:05:36 +01:00
Anselm R Garbe a72dc2fec2 applied Mate's patch, added Mate to LICENSE 2009-07-06 20:12:47 +01:00
Anselm R Garbe 8b17f5517b some cleanups 2009-07-02 20:56:23 +01:00
Anselm R Garbe cd96232f7e hotfix 2009-07-02 20:38:56 +01:00
Anselm R Garbe a9e145fe6d changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-. 2009-07-02 20:37:26 +01:00
Anselm R Garbe 5dd92c7655 removed some empty lines 2009-07-02 18:40:04 +01:00
Anselm R Garbe 52bd69c2a4 interactive resizals allow display dimensions again 2009-07-02 18:30:01 +01:00
Anselm R Garbe ca376970db more sensible 2009-07-02 16:48:54 +01:00
Anselm R Garbe 8352f2b3a8 hmm, can't decide on the default monitor symbol set 2009-07-02 16:47:00 +01:00
Anselm R Garbe d4bfde79f3 update 2009-07-02 16:44:57 +01:00
Anselm R Garbe 7ac8c1d4e1 introduced monitor symbols 2009-07-02 16:41:52 +01:00
Anselm R Garbe 16e1ef5d40 minor fix 2009-07-02 14:42:06 +01:00
Anselm R Garbe 1d729384d1 several bugfixes 2009-07-01 19:15:20 +01:00
Anselm R Garbe 25c1eb28f9 some minor fix if xinerama is disabled, still some odd behavior in there 2009-07-01 17:08:10 +01:00
Anselm R Garbe d719cc9a0e updated year ranges 2009-06-30 20:20:33 +01:00
Anselm R Garbe 9cde6570cc fixed usage of sx, sy, sw, sh 2009-06-30 20:15:31 +01:00
Anselm R Garbe e408ca97d8 don't draw monitor number, if there is just one monitor 2009-06-30 20:00:11 +01:00
Anselm R Garbe 183dc670a3 fixed order of transient monitor applicaion and rule application 2009-06-30 19:56:19 +01:00
Anselm R Garbe 25947bcfdb hotfix 2009-06-30 19:45:25 +01:00
Anselm R Garbe 1ddfc571ae several simplifications 2009-06-30 19:39:59 +01:00
Anselm R Garbe 21cd59a630 play safe 2009-06-30 15:56:32 +01:00
Anselm R Garbe 6cbe47d481 applied a collection of Christof Musik patches, and fixed an issue reported by waistcoats on IRC 2009-06-30 15:51:09 +01:00
Anselm R Garbe 029655bb22 some cleanup handling for index based mon search 2009-06-27 18:50:50 +01:00
Anselm R Garbe 27db9d4448 using mon in function names for consistency reasons 2009-06-27 18:42:10 +01:00
Anselm R Garbe 176408afa8 fixed several issues with focus handling via mouse, also added sending clients to the right monitor they belong to after mouse moves/resizals 2009-06-27 18:39:03 +01:00
Anselm R Garbe 64674c395b fixed focusmon brokeness 2009-06-27 17:38:18 +01:00
Anselm R Garbe b9dee2c6f1 tag fix 2009-06-26 16:41:27 +01:00
Anselm R Garbe a73ff905b0 typo fix 2009-06-25 11:17:42 +01:00
Anselm R Garbe e3f0445df1 assign selected tags of target monitor to client when tagmon is performed (less obtrusive imho) 2009-06-25 11:10:19 +01:00
Anselm R Garbe ab06f7444b added some TODOs, some other focus fixes 2009-06-24 20:04:18 +01:00
Anselm R Garbe a2a3590979 disabled XINULATOR code for now 2009-06-24 19:52:09 +01:00
Anselm R Garbe e8aafb8e91 made bar based monitor switching working 2009-06-24 19:51:41 +01:00
Anselm R Garbe 18b1312449 several other focus fixes, introduced unfocus() 2009-06-24 19:45:47 +01:00
Anselm R Garbe 80ee95473b some focus fixes 2009-06-24 15:37:32 +01:00
Anselm R Garbe 454a04acdf fixed title rendering on non-active screen 2009-06-24 13:51:45 +01:00
Anselm R Garbe 891831fe62 fixed getclient brokeness 2009-06-24 12:48:01 +01:00
Anselm R Garbe cdb8e27453 some hotfix cleanup related to wild selmon-> destruction 2009-06-24 11:14:51 +01:00
Anselm R Garbe 5c4913e983 some restack fixes, still odd behavior if n>1 on unmanaging clients 2009-06-23 19:09:30 +01:00
Anselm R Garbe fa5ae54bbb added some dual head simulator code 2009-06-23 19:00:32 +01:00
Anselm R Garbe 7de534192c simplified left over re-assignment 2009-06-23 17:39:42 +01:00
Anselm R Garbe 54dc0d542c fixed tagmon, re-using detach/detachstack and attach/attachstack 2009-06-23 17:34:20 +01:00
Anselm R Garbe 913333f518 simplified ISVISBLE and nexttiled 2009-06-23 17:20:33 +01:00
Anselm R Garbe d702f39274 moved clients/stack/sel to Monitor, that's a per monitor structure from now on 2009-06-23 17:17:25 +01:00
Anselm R Garbe 0d8671a5ad declare buf only if XINERAMA support is used 2009-06-23 16:29:32 +01:00
Anselm R Garbe 38e9b67026 if compiled without XINERAMA support assume 1 monitor by default (n = 1) 2009-06-23 16:28:37 +01:00
Anselm R Garbe a3bbdb1b7b some more refactoring, bar toggle fixes 2009-06-22 20:29:59 +01:00
Anselm R Garbe d53ceee682 hotfixes 2009-06-22 18:13:05 +01:00
Anselm R Garbe 78f56672b5 changes monitor structure to be a list 2009-06-22 14:58:08 +01:00
Anselm R Garbe c2fff604a7 we need a tagset per monitor, removed tagset declaration from config.h 2009-06-20 17:02:55 +01:00
Anselm R Garbe 6644a6aa2e some minor fixes regarding the new xinerama support 2009-06-20 16:18:02 +01:00
Anselm R Garbe 3da2453997 several fixes through ISVISIBLE change (takes Monitor into account) 2009-06-20 15:51:34 +01:00
Anselm R Garbe 2ce37bc69e experimental xinerama support, two new actions, Mod1-w/e and Mod1-Shift-w/e 2009-06-20 15:10:04 +01:00
Anselm R Garbe f27ccc5c60 introduction of Monitor for better Xinerama support, work in progress 2009-06-19 20:15:15 +01:00
Anselm R Garbe 2dbfda72f0 removed MAXTAGLEN 2009-05-29 09:29:22 +01:00
Anselm R Garbe 7df39f3fc7 next version will be 5.6, shortened some very long lines 2009-04-20 11:03:33 +01:00
Anselm R Garbe 0b45199cec Added tag 5.5 for changeset deaa276abac1 2009-04-18 12:49:34 +01:00
Anselm R Garbe 3632d7132f applied Marc Andre Tanners showhide patch, the removal of ntiled 2009-03-19 13:06:15 +00:00
Anselm R Garbe 565697087b applied Gottox' patches, and also removed usegrab 2009-03-17 19:53:00 +00:00
arg@garbe.us ea0008cba2 applied the patch I missed from Gottox, thanks mate! 2009-03-03 11:22:16 +00:00
Anselm R Garbe af508c2e82 applied Gottox' resizehints patch, thanks Gottox! 2009-03-02 10:43:48 +00:00
Anselm R Garbe f0d1d5206f some NULL fixes 2009-02-21 19:20:11 +00:00
Anselm R Garbe 1c80c05587 override_redirect is Bool 2009-02-21 19:15:30 +00:00
Anselm R Garbe 1e350be229 applied Gottox' adjustborder removal patch (thanks!) 2009-02-21 19:12:46 +00:00
a@null 1a26389e2b applied nsz' remark 2009-02-14 11:21:24 +00:00
Premysl Hruby bf9da23f07 fix of typo, thx to Enno Gottox Boland 2009-02-12 17:26:12 +01:00
a@null 2373940215 Added tag 5.4.1 for changeset 85a78d8afa0f 2009-02-08 12:11:35 +00:00
a@null 90687482ad fixed an issue reported by Nibble, also fixed s/2008/2009/ 2009-02-08 12:11:22 +00:00
a@null 5ab627c06c Added tag 5.4 for changeset 8b7836a471f8 2009-02-08 09:47:02 +00:00
a@null 76d7e80fc4 avoid reverting the border if it's not necessary (avoids some flashing on view()) 2009-02-08 09:46:23 +00:00
a@null af8049bce8 spotted missing spaces 2008-12-20 12:02:14 +00:00
a@null 2bb51b3246 reverting some border patches 2008-12-20 00:02:56 +00:00
a@null b16d8282be changed adjustborder to be a macro 2008-12-19 23:56:00 +00:00
a@null fef4614772 applied yiyus applyrules() patch 2008-12-19 23:41:31 +00:00
a@null be39dddcc5 implemented noborder for 1 client in the view 2008-12-17 21:25:32 +00:00
a@null 6d209b9b29 made status script example of .xinitrc more useful 2008-12-13 20:20:26 +00:00
a@null 57a0788bd8 ok, using signal.h for portability reasons 2008-12-13 17:44:29 +00:00
a@null 3ad906eede removed unnecessary closure of stdin reported by Frederic Chardon, thx 2008-12-13 17:27:48 +00:00
a@null 0be9fb8797 added sys/signal.h inclusion for BSD compliance 2008-12-13 16:35:34 +00:00
a@null 62a491e36d re-applied Neale's spawn patch, credited Neale in LICENSE 2008-12-12 19:55:03 +00:00
a@null 0b5dcf229f applied Neale Pickett's xprop status reading patch, updated README and dwm.1 accordingly 2008-12-12 19:49:06 +00:00
arg@localhost.localdomain fda92f46aa applied yiyus fix 2008-12-06 16:20:14 +00:00
Anselm R Garbe a62ea4062f fix 2008-12-06 11:22:30 +00:00
Anselm R Garbe 7dc28d130f Added tag 5.3.1 for changeset 335301ed102f 2008-12-06 09:33:58 +00:00
Anselm R Garbe fbce733532 integrated yiyus clearurgent refactoring 2008-12-06 09:32:32 +00:00
arg@localhost.localdomain e7572804fa reverted spawn 2008-12-06 09:16:48 +00:00
Anselm R Garbe ed1bef1241 Added tag 5.3 for changeset 4004d6116035 2008-12-04 20:23:08 +00:00
Anselm R Garbe 2b047e460b added Neale Pickett's spawn patch, thanks Neale 2008-12-04 20:15:00 +00:00
Anselm R Garbe 5f74dc5e78 applied Gottox' comment fix (thanks) 2008-11-16 13:22:24 +00:00
Anselm R Garbe ea8a4ca46a several changes towards 5.3, XINERAMA is disabled by default, introduced usegrab Bool for grabbing the server during mouse-based resizals/movements (disabled by default), continued debugging tile() with resizehints == True and a lot of terminals supporting resizehints, still no optimal solution, I need to think about it, considering recursive algorithm for the space optimization 2008-10-19 12:59:18 +01:00
Premysl Hruby 4883a06221 removed NOBORDER(broken and badly used), introduce WIDTH/HEIGHT macros for computing client size with border added, fixes bug announced by sergey_m 2008-10-15 18:08:24 +02:00
Anselm R Garbe 4dea5324c0 Added tag 5.2 for changeset e4bcaca8e6ef 2008-09-09 20:47:01 +01:00
Anselm R Garbe 53cac17692 using malloc() instead of calloc() and sticking to static initializer and struct assignment, not using *c = (Client){}; right now to avoid some ugly gcc warning, possibly a gcc bug since we are using -std=c99 2008-09-08 22:24:05 +01:00
Anselm R Garbe 83abfc05eb applied XGetWMNormalHints fix 2008-09-07 09:53:59 +01:00
Anselm R Garbe 862b0d541d I prefer doing the check in showhide 2008-09-06 09:34:49 +01:00
Anselm R Garbe c1c6fdc5d8 applied Donald Chai's showhide patch in slightly modified ways 2008-09-06 09:21:32 +01:00
Anselm R Garbe 9a4d07d9de applied Martin Hurton's checkotherwm simplification 2008-09-06 08:59:51 +01:00
Anselm R Garbe 30410108eb applied Peter Hartlichs aspect revert fix 2008-09-02 22:36:06 +01:00
Anselm R Garbe 753e0e048e applied Gottox' grabkey patch 2008-09-02 18:47:01 +01:00
Anselm R Garbe d15d4ba45a applied yiyus tagbar patch 2008-09-01 22:18:50 +01:00
arg@localhost.localdomain 815f9c054d merged merge 2008-09-01 08:22:11 +00:00
Anselm R Garbe addc52c948 fixed 2008-08-29 11:29:42 +01:00
Anselm R Garbe 26f41c9055 checking result of XGetClassHint, removed some obsolete lines in initfont() 2008-08-29 10:13:47 +01:00
Anselm R Garbe 73ec124ae9 merged my changes 2008-08-27 15:03:35 +01:00
Anselm R Garbe ec11a3470c introduced NOBORDER macro to hide the nasty - 2 * c->bw in various calculations, moved tagset to config.def.h 2008-08-27 12:52:44 +01:00
Premysl Hruby 4b3b597da3 WM_NAME is builtin atom 2008-08-25 11:43:45 +02:00
Anselm R Garbe 288cf78b18 grabbuttons() and grabkeys() are now independent from prior numlockmask initialization 2008-08-25 09:44:23 +01:00
Anselm R Garbe 6411aa921b reverted some resize() changes, reverted setlocale removal 2008-08-25 09:37:39 +01:00
Anselm R Garbe db5db8806f applied Peter Hartlich's patch regarding aspect calculation with slight modifications 2008-08-23 09:54:55 +01:00
Anselm R Garbe 258c338030 removed artifact from wmii 2008-08-23 09:33:05 +01:00
Anselm R Garbe 85da537856 changed grabkeys, removed initmodmap 2008-08-23 09:31:28 +01:00
Anselm R Garbe 2b4157eccd applied Peter Hartlich's initmodmap patch 2008-08-23 09:26:11 +01:00
Premysl Hruby 0f26de991f applied fix of toggletag by Jan Kaliszewski 2008-08-22 15:26:30 +02:00
Anselm R Garbe 840f937a98 Martin Hurtons typo fix 2008-08-18 19:28:57 +01:00
Anselm R Garbe 6975a7e31a fixed error I did when applying Martin Hurton's drawtext patch 2008-08-18 19:23:03 +01:00
Anselm R Garbe 47f63dce55 applied Martin Hurtons resizemouse patch 2008-08-18 19:19:15 +01:00
Anselm R Garbe 02a8ca95cf applied Martin Hurton's movemouse() patch 2008-08-18 18:23:39 +01:00
Anselm R Garbe 2ce50a9cad using None instead of 0 for trans 2008-08-18 10:22:46 +01:00
Anselm R Garbe bfa5869da1 abc... 2008-08-18 10:21:24 +01:00
Anselm R Garbe 087a55f8d3 removed the i = textnw... as remarked by Martin Hurton 2008-08-18 10:16:36 +01:00
Anselm R Garbe 6d7285fd6e applied Martin Hurton's scan() patch with slight modifications 2008-08-18 10:14:51 +01:00
Anselm R Garbe 69c7b4b0ba changed order of variables in drawtext 2008-08-18 10:00:10 +01:00
Anselm R Garbe 97699e5b1b applied Martin Hurton's drawtext() patch 2008-08-18 09:55:36 +01:00
Anselm R Garbe 2dc7f42fd7 applied Martin Hurton's view() simplification, not checking arg 2008-08-18 09:49:44 +01:00
Anselm R Garbe 9f3a5cb754 making a comment more explicit 2008-08-18 09:39:52 +01:00
Anselm R Garbe b48fa3f101 removed setlocale() stuff, not necessary if Xmb in use 2008-08-18 09:31:55 +01:00
Anselm R Garbe 051a404b66 added a comment about FAQ regarding mfact meaning 2008-08-18 09:11:15 +01:00
Anselm R Garbe d8d733c34f added some comments regarding FAQ about s{x,y,w,h}, w{x,y,w,h}, b{y,h,lw} 2008-08-18 09:10:21 +01:00
Anselm R Garbe bb01e5a16f initialize trans with 0 2008-08-18 08:57:34 +01:00
Premysl Hruby 06f7eed103 fix of XGetTransientForHint in manage() 2008-08-14 22:35:52 +02:00
Premysl Hruby 0ffa6d1393 applied cleanup from M. Hurton and S. Nagy 2008-08-14 12:36:49 +02:00
Premysl Hruby 15ce143620 fixes using arg->i instead of arg->ui 2008-08-12 21:24:40 +02:00
anselm@anselm1 63d7190231 applied Johannes Hofmann's patch, please test 2008-08-04 17:39:36 +01:00
Anselm R Garbe b279cef670 made readin a config.h variable 2008-08-02 19:12:15 +01:00
Anselm R Garbe 6254ef9dc7 Added tag 5.1 for changeset ce355cea9bb8 2008-07-29 19:19:00 +01:00
Anselm R Garbe 4a2902efe4 forcing fullscreen windows to bw=0, though most fullscreen apps are broken anyways 2008-07-29 11:32:22 +01:00
Anselm R Garbe 6fad4c49f1 potential crash fix if xinerama behaves broken, though I doubt it 2008-07-18 20:18:45 +01:00
Premysl Hruby 78f0f8595f make hg tip compilable with default config 2008-07-18 10:57:32 +02:00
Anselm R Garbe 7ecadcee39 local use of xidx is useless, got rid of it, falling back to screen 0 if pointer query fails for whatever reason 2008-07-16 18:39:48 +01:00
Anselm R Garbe c86ed46a1b got rid of compile time xidx configuration, querying mouse pointer instead 2008-07-16 18:33:51 +01:00
Anselm R Garbe 9086f98068 reverted uint redefinition 2008-07-16 18:17:42 +01:00
anselm@aab 9aa4a9043d applied anydot's urgency hint patch, thanks! 2008-07-13 18:08:55 +01:00
Anselm R Garbe d5893f55be renamed eprint die 2008-07-03 17:05:56 +01:00
Anselm R Garbe f529d41ca1 simplified detach() 2008-07-03 10:58:35 +01:00
Anselm R Garbe 45768ee04b removed aux* stuff from Client 2008-07-02 11:54:36 +01:00
Anselm R Garbe a6d23fb61c removed useless comment 2008-07-02 11:19:02 +01:00
Anselm R Garbe bf76cefe47 minor fix to view() 2008-07-02 11:06:46 +01:00
Anselm R Garbe 9bb0f20515 applied Frederik Ternerot's grabbuttons patch with slight modifications 2008-07-01 19:26:17 +01:00
Anselm R Garbe 2431ae7df7 locale update 2008-06-30 09:57:45 +01:00
Anselm R Garbe 829b6b57e7 removed useless characters 2008-06-24 12:40:48 +01:00
Anselm R Garbe 7b4c512e62 applied James Turner's dwm.1 patch, thanks James! 2008-06-23 08:59:19 +01:00
Anselm R Garbe 7f7c3140a9 fix of monocle 2008-06-22 09:33:49 +01:00
Anselm R Garbe 277155cf77 another merge 2008-06-22 09:29:35 +01:00
Anselm R Garbe 0c38ec7cd6 does this fix anything? 2008-06-22 09:29:06 +01:00
Anselm R Garbe deef4c9bfd fixed Gottox' buttonpress/ClkTagBar code 2008-06-21 13:49:43 +01:00
Anselm R Garbe b86c818599 applied Gottox' ClkTagBar patch 2008-06-20 16:52:07 +01:00
Anselm R Garbe c2a916bf30 made arrange again like it was once 2008-06-19 14:58:19 +01:00
Anselm R Garbe 2bd46d1ce6 fix 2008-06-19 14:13:07 +01:00
Anselm R Garbe 6e0ce46365 use sel instead of seeking the list 2008-06-19 14:07:55 +01:00
Anselm R Garbe c853d5e9bb resize should apply if !banned 2008-06-19 14:01:40 +01:00
Anselm R Garbe 31da0b7525 applied Gottox patch 2008-06-19 12:28:56 +01:00
Anselm R Garbe 12ea925076 untested monocle 2008-06-19 11:38:53 +01:00
Anselm R Garbe 79ecbeca7e non-zero 2008-06-19 09:11:11 +01:00
Anselm R Garbe cf98ea2a9c Added tag 5.0 for changeset 06eb9644e2da 2008-06-18 18:22:54 +01:00
Anselm R Garbe d8fad9bf7a branch merge 2008-06-17 11:20:18 +01:00
Anselm R Garbe f25cc5678f tiled layout resizehints should be respected by default 2008-06-17 11:19:17 +01:00
Anselm R Garbe 5a92420fce restored y-coordinate fixing of client windows 2008-06-17 09:57:13 +01:00
arg@suckless.org ae1d865ac0 s/tags ref/tags mask/ 2008-06-15 23:27:08 +02:00
Anselm R Garbe 1ce173402f updated man page regarding Mod1-m 2008-06-15 18:59:52 +01:00
Anselm R Garbe a06b9193c7 minor fixes towards 5.0 2008-06-15 10:52:57 +01:00
Anselm R Garbe 43bb77a569 removed explicit warp in movemouse 2008-06-14 15:15:15 +01:00
Anselm R Garbe e3da222c1e removed scroll-wheel based focussing on window title clicks 2008-06-14 11:25:42 +01:00
Anselm R Garbe 66608a60fe fix of swapped focusstack mouse buttons 2008-06-14 11:23:16 +01:00
Anselm R Garbe b6aa84e51b removed the ButtonPressMask for root windows as well 2008-06-14 11:22:22 +01:00
Anselm R Garbe 9ff5143acb removed root window click handling 2008-06-14 11:21:50 +01:00
Anselm R Garbe 1edf6a7866 removed font and color definitions 2008-06-14 10:38:18 +01:00
Anselm R Garbe 4db2f44277 minor fix 2008-06-13 17:37:43 +01:00
Anselm R Garbe 1f1a132784 fixed tag click handling, however ClkRootWin doesn't work for me 2008-06-12 23:04:55 +01:00
Anselm R Garbe 512541bfbd update 2008-06-12 16:37:03 +01:00
Anselm R Garbe 709da0b858 some bugfixes of the patch application yesterday 2008-06-12 13:10:14 +01:00
Anselm R Garbe 5cd65f8cd8 integrated yiyus mouse.diff (though the bar click handling is slightly broken, I'm to tired to debug it now, yiyus could you please?) 2008-06-11 20:41:28 +01:00
Anselm R Garbe e3838e8585 made Xinerama screen index customizable 2008-06-11 19:55:07 +01:00
Anselm R Garbe 016dca4f69 removed trailing spaces reported by Soleen 2008-06-11 19:47:20 +01:00
Anselm R Garbe 8f052596b2 crash fix 2008-06-11 19:42:24 +01:00
Anselm R Garbe 9463d5354b made lt visible again in config.def.h 2008-06-11 17:01:30 +01:00
Anselm R Garbe d662f98d89 added nsz' patch 2008-06-11 14:10:18 +01:00
Anselm R Garbe e5a965a274 added SHCMD support for pipe-based commands due the new spawn() versio 2008-06-11 13:20:17 +01:00
Anselm R Garbe 5d422bb1ce using foo layout during cleanup (suggested by Gottox), add Arg->v handling for togglelayout() suggested by anydot 2008-06-11 10:26:57 +01:00
Anselm R Garbe 38a43c2dcc lt will point to a foo-layout during cleanup now (Gottox' suggestion), and togglelayout respects Arg->v 2008-06-11 10:25:02 +01:00
Anselm R Garbe c56533615f integrated Peter Hartlich's patch, removed const char *c from union, simplified togglelayout 2008-06-11 09:34:00 +01:00
Anselm R Garbe a8e0772c4d applied anydot's patchset.diff 2008-06-11 09:12:06 +01:00
arg@suckless.org 98e7950be8 final version -- Gottox verified it using the test driver 2008-06-09 11:24:33 +02:00
arg@suckless.org 88e6eb4a3a revert of introduced problem 2008-06-09 11:05:20 +02:00
arg@suckless.org 0840c1367c applied nsz' textnw patch thank you 2008-06-09 10:26:01 +02:00
arg@suckless.org 077d3e435b updated the for-loop with Gottox' proposal 2008-06-09 10:05:40 +02:00
arg@suckless.org d26b60b43e minor change 2008-06-06 11:49:31 +02:00
arg@suckless.org 32f36ab2d5 applied nsz's patches (many thanks!) 2008-06-04 11:49:46 +02:00
arg@suckless.org 08bcf721b4 small change to drawtext 2008-06-02 12:19:02 +02:00
Anselm R Garbe fc578c57e4 fixed the tile() issue with xpdf 2008-06-01 17:51:22 +01:00
Anselm R Garbe c8eaab21b6 using anydot's memcpy-approach in drawtext, however it still looks awkward to me 2008-06-01 17:41:15 +01:00
Anselm R Garbe c26e22ccee Gottox' drawtext simplification 2008-06-01 11:58:19 +01:00
Anselm R Garbe c2784e4a38 applied noviewprev.diff, fix.diff and unusedflags.diff 2008-06-01 10:54:02 +01:00
Anselm R Garbe 6e9387793b fix 2008-05-31 17:37:13 +01:00
Anselm R Garbe 92f3c181c3 lt->arrange in mfact 2008-05-31 17:05:28 +01:00
Anselm R Garbe d589f7679a isfixed implies isfloating 2008-05-30 23:03:03 +01:00
Anselm R Garbe 75690c808d applied nibbles fixes, slightly modified 2008-05-29 18:42:53 +01:00
Anselm R Garbe fde58d5e63 applied yiyus tip patch from tue 2008-05-29 18:22:51 +01:00
Anselm R Garbe e1002745fa core dump fix in cleanup 2008-05-28 10:45:18 +01:00
Anselm R Garbe 940a4cc6c6 updated the initial comment to reflect the use of bit arrays 2008-05-26 11:43:51 +01:00
Anselm R Garbe 64243ab05b slight changes 2008-05-26 11:42:02 +01:00
Anselm R Garbe 32c5046635 removed bx and bw, unnecessary 2008-05-26 10:28:18 +01:00
Anselm R Garbe 6c8618f502 renamed domax into ismax 2008-05-26 10:13:51 +01:00
Anselm R Garbe 9189f7a12d simplified tile() 2008-05-26 10:10:33 +01:00
Anselm R Garbe 2d4faae522 removed Layout->updategeom, unnecessary 2008-05-26 09:54:34 +01:00
Anselm R Garbe 5d2385b636 removed TEXTW 2008-05-26 09:45:34 +01:00
Anselm R Garbe 0fe2e783e9 applied yiyus domax patch with slight modifications 2008-05-26 09:39:57 +01:00
Anselm R Garbe cd3d83f571 replaced isvisible with a macro 2008-05-22 14:15:30 +01:00
Anselm R Garbe 0a9ef560c0 removed emallocz 2008-05-22 14:10:00 +01:00
Anselm R Garbe 0528a37c79 s/int/uint/ in config.h 2008-05-22 14:02:31 +01:00
Anselm R Garbe 56b2fece9e removed debug output, sanitized tag limit check 2008-05-22 13:35:45 +01:00
Anselm R Garbe 9f569fac74 setmfact argument was wrong 2008-05-22 12:00:50 +01:00
Anselm R Garbe 48d0c56eac Key.mod is uint, Client.[old]bw is int 2008-05-22 11:50:18 +01:00
Anselm R Garbe 825d6cb93a s/unsigned long/ulong/ 2008-05-22 11:16:23 +01:00
Anselm R Garbe f852504014 s/nextunfloating/nexttiled/, changed zoom() behavior 2008-05-22 11:12:22 +01:00
Anselm R Garbe c3fa9e879f s/unsigned int/uint/ 2008-05-22 11:10:08 +01:00
Anselm R Garbe 8e05f6c592 s/void */const void */ 2008-05-22 11:08:07 +01:00
Anselm R Garbe 39d1ecd5b0 applied Gottox bitmask + void *arg patch 2008-05-22 11:04:19 +01:00
anselm@anselm1 103fb58a44 some minor fixes 2008-05-19 20:29:57 +01:00
anselm@anselm1 5f55af40ae simplification 2008-05-19 20:13:24 +01:00
anselm@anselm1 f806a17692 reverted dist target in Makefile 2008-05-19 20:08:31 +01:00
anselm@anselm1 822101dd5b merged tile.c again into dwm.c 2008-05-19 20:07:12 +01:00
Anselm R Garbe 6bdef73a4f take bar into account 2008-05-19 17:27:30 +01:00
Anselm R Garbe 234b12eb73 be more polite to clients which like to appear outside the window area, but still on the screen 2008-05-19 17:23:49 +01:00
Anselm R Garbe bd4deaebfc fixed comment 2008-05-19 15:36:45 +01:00
Anselm R Garbe 499315c22c fix 2008-05-19 15:09:16 +01:00
Anselm R Garbe f22d047d41 make it easier for the user, if Xinerama support is given, always use the screen 0 as window area/bar area, everything else can be used for floating clients 2008-05-19 15:05:46 +01:00
Anselm R Garbe 4a5c8d84db improving space usage if master is left of stack (default) 2008-05-19 14:44:53 +01:00
Anselm R Garbe 71365a524f only snap within window area 2008-05-19 13:41:58 +01:00
Anselm R Garbe 3afca3e6a1 s/DEFGEOM/CUSTOMGEOM/ 2008-05-19 13:37:46 +01:00
Anselm R Garbe bdc80bdad6 update 2008-05-19 13:32:43 +01:00
Anselm R Garbe 64707da963 updatetilegeom should be fine for setmfact 2008-05-19 12:42:26 +01:00
Anselm R Garbe 549726869b recent changes, introduced togglebar, changed some defines into variable declarations where possible 2008-05-19 12:34:54 +01:00
Anselm R Garbe 42cb2bd3be new stuff 2008-05-17 14:51:12 +01:00
Anselm R Garbe 585294ce0f removed the <M> togglelayout call 2008-05-17 14:50:37 +01:00
Anselm R Garbe a864a82b34 s/tilegeom/updatetilegeom/ 2008-05-17 14:48:04 +01:00
Anselm R Garbe bd67a82fb5 removed monocle for now 2008-05-17 14:46:06 +01:00
Anselm R Garbe 14d8d828ab removed the exact focus mechanism of next/prev window 2008-05-17 14:41:41 +01:00
Anselm R Garbe 4246affc15 moved all tile()-related stuff into tile.c which is included from config.def.h, the default dwm is now nearly independent from the arrange() algorithm in use 2008-05-17 14:38:22 +01:00
Anselm R Garbe 42c4b31003 removed tileh, renamed tilev into tile again, removed counttiles, tilemaster 2008-05-17 14:23:05 +01:00
Anselm R Garbe a785a0d712 removed Layout->isfloating 2008-05-17 14:17:18 +01:00
Anselm R Garbe 489ac07e83 removed reapply() -- unnecessary 2008-05-17 14:06:41 +01:00
Anselm R Garbe 349d768b57 renamed setlayout into togglelayout 2008-05-17 14:04:27 +01:00
Anselm R Garbe 6dfa7cac56 removed temporary wildcard handling 2008-05-15 10:51:37 +01:00
Anselm R Garbe 71681c21a5 added wild-card handling for tags 2008-05-15 10:47:26 +01:00
Anselm R Garbe 704781875c applied nsz's another style patch 2008-05-14 11:24:35 +01:00
Anselm R Garbe d7cc0f6416 applied nsz's style.diff patch 2008-05-13 14:33:02 +01:00
Anselm R Garbe 6b79f3f326 just added a comment 2008-05-13 11:27:20 +01:00
Anselm R Garbe 446fa8c671 minor fixes 2008-05-11 20:27:01 +01:00
Anselm R Garbe fa244aa7fb having monocle on Mod1-m 2008-05-11 20:25:24 +01:00
Anselm R Garbe 7ac4f8a4af hotfix 2008-05-11 20:22:20 +01:00
Anselm R Garbe 7eb26288fc removed Geom stuff, introduced updategeom() again, still view is somewhat broken? 2008-05-11 20:20:53 +01:00
Anselm R Garbe 93a4fe1052 cleaned up config.def.h 2008-05-11 14:54:45 +01:00
Anselm R Garbe 5602f44b29 implemented exact focus next, if arg != NULL to focus{next,prev} 2008-05-11 14:40:37 +01:00
Anselm R Garbe b848f4bda8 applied the proposal by nsz 2008-05-06 15:52:44 +01:00
Anselm R Garbe 86c4797f2c applied JUCE patch 2008-05-06 15:13:36 +01:00
Anselm R Garbe c094ed2473 simplification of view() as proposed by anydot 2008-04-27 18:36:11 +01:00
Anselm R Garbe bfd6079a15 applied yiyus tagset patch 2008-04-27 18:33:31 +01:00
Anselm R Garbe 7f70d90219 applied yiyus fgeom patch 2008-04-27 18:22:52 +01:00
Anselm R Garbe 858251de46 applied dfenze drawtext simplifications 2008-04-27 18:00:45 +01:00
anselm@anselm1 d26c28c1e7 this is the correct way 2008-04-20 19:09:30 +01:00
anselm@anselm1 b6335776e4 copyright notice is in LICENSE 2008-04-20 19:09:00 +01:00
anselm@anselm1 c059625128 applied Ph's seltags-simplification with some modifications 2008-04-20 18:35:11 +01:00
anselm@anselm1 874837f653 applied Ph's MIN/MAX patch, nice work! 2008-04-20 18:28:21 +01:00
anselm@anselm1 5fa559dbfc applied Ph's patch regarding geom and lt initialization 2008-04-20 18:23:59 +01:00
anselm@anselm1 146ff227fe applied Gottox' applyrules() fix 2008-04-20 18:17:33 +01:00
Anselm R Garbe bb0a328978 geometry fix proposed by Jukka 2008-04-08 11:49:35 +01:00
Anselm R Garbe 721b208478 applied applyrules-fix by Jukka, thank you Jukka! 2008-04-07 09:05:41 +01:00
Anselm R Garbe 6229ed20c2 fix 2008-04-05 19:04:53 +01:00
Anselm R Garbe 940240e5e6 applied the proposed monocle patch from the mailinglist 2008-04-05 18:23:31 +01:00
Anselm R Garbe 08c596ed10 next version is 5.0 2008-04-04 11:15:37 +01:00
anselm@anselm1 9ce6abb95c Added tag 4.9 for changeset 22c669b2dd36 2008-04-03 21:57:32 +01:00
Anselm R Garbe 0e21794e02 yet another cleanup 2008-04-03 14:39:19 +01:00
Anselm R Garbe d477fb6927 some cleanup changes 2008-04-03 14:38:58 +01:00
anselm@anselm1 3d6630b7d2 uncommented dual layout in preparation of dwm 4.9 2008-04-02 22:18:09 +01:00
anselm@anselm1 c982bb1389 applied Peter Hartlich's simplification patch of setmfact and his revival of MFACT, appliead Janness Hofmann's simplification of grabbuttons() -- thanks guys! 2008-04-02 22:10:55 +01:00
Anselm R Garbe 6cf73e706a aspects hints seem broken for fullscreen apps 2008-04-01 15:46:00 +01:00
Anselm R Garbe a520ba3c0b removed uneccessary line 2008-03-31 10:09:48 +01:00
Anselm R Garbe 0c71b16b92 bugfix 2008-03-25 09:41:14 +00:00
Anselm R Garbe 00c28a7ef2 setmfact should not have any effect if in floating layout 2008-03-24 14:31:02 +00:00
Anselm R Garbe 5a3a2d6b63 minor fix 2008-03-24 14:24:57 +00:00
Anselm R Garbe a355782a77 revival of mfact and setmfact 2008-03-24 14:23:28 +00:00
Anselm R Garbe 20cd336087 setlayout and setgeom are now togglable again 2008-03-24 13:49:19 +00:00
Anselm R Garbe a6a216f28c geom indicator and layout indicator is only displayed if there are several geoms/layouts 2008-03-24 13:33:32 +00:00
anselm@anselm1 2c2063bc75 hotfix of idxoftag 2008-03-22 16:53:37 +00:00
anselm@anselm1 e6ede461a9 blw/bgw calculation bugfix 2008-03-22 12:47:12 +00:00
Anselm R Garbe 6877205e9d updated configurenotify 2008-03-19 09:27:17 +00:00
anselm@anselm1 fb5f99d935 minor bugfix in applyrules 2008-03-17 23:45:46 +00:00
Anselm R Garbe 7ebab7533a added sample of {grow,shrink}master to config.def.h 2008-03-17 17:33:25 +00:00
Anselm R Garbe 9fa5ca3538 renamed c->border into c->bw, fixed monocle to subtract c->bw from each h/w value 2008-03-17 16:29:50 +00:00
Anselm R Garbe fe6b0c0fc1 geoms are now drawed in the status bar 2008-03-17 16:26:06 +00:00
Anselm R Garbe aa2395b6a8 removed the string-based setgeom approach, introduced a new Geom type instead and a helper macro 2008-03-17 14:56:11 +00:00
Anselm R Garbe dba22848c7 made the string-based setgeom working 2008-03-15 14:17:42 +00:00
Anselm R Garbe 33b1960220 some experimental state DO NOT USE THIS, I plan to have a nicer interface to change geometries 2008-03-14 17:17:08 +00:00
Anselm R Garbe e237b2a76f some changes towards 4.9 2008-03-14 14:35:45 +00:00
Anselm R Garbe dd9ee6d248 Added tag 4.8 for changeset 607015ddb091 2008-03-13 16:56:11 +00:00
14 changed files with 2450 additions and 1761 deletions

53
.hgtags
View File

@ -1,53 +0,0 @@
d31b5ad96b0ba7b5b0a30928fcf000428339a577 0.1
0a6472e2203994bc5738d40a340d26f7ec9d6062 0.2
7e66082e5092fb0bccd18a3695a0bec52c80fdb2 0.3
eb3165734f00fe7f7da8aeebaed00e60a57caac9 0.4
22213b9a2114167ee8ba019a012e27da0422a61a 0.5
c11f86db4550cac5d0a648a3fe4d6d3b9a4fcf7e 0.6
3fb41412e2492f66476d92ce8f007a8b48fb1d2a 0.7
cd15de32e173f8ce97bfe1c9b6607937b59056b4 0.8
fae61afa861755636c4a1070694209ace8efbb6c 0.9
bbc98e77ae89a7c9232a5be0835f60ea00d8036e 1.0
44a55e6e46bf6c231780b09d919977d6f01083de 1.1
e3179ce2b90451d2807cd53b589d768412b8666b 1.2
f5f5cbf016a94b48a8fe9c47f0736e96d166d5d4 1.3
3cff9403766bf83a9fc2a0aef230115d68de2a8e 1.4
728c9089b079721b43c3347124639a29baa22a97 1.5
ad3fa2d185426c51fd5deceae809770363f8d33c 1.6
4dbdb61c8b8ce21dee5c7050a6b103855964ed20 1.7
d5ad819f2a66a40fa75dd2e44429f3bfc884d07b 1.7.1
c71952fa3c7ca848ec38a6923b5c6d0e18fff431 1.8
a5567a0d30112822db2627a04a2e7aa3b6c38148 1.9
12deea36603da407e3f32640048846a3bd74a9ec 2.0
a2c465098a3b972bbed00feda9804b6aae1e9531 2.1
7e92f58754ae6edb3225f26d754bd89c1ff458cf 2.2
719b37b37b0df829d7cf017ac70e353088fe5849 2.3
32b246925086910d63147483160281a91a47479f 2.4
dcbbfabc8ecc5f33a6cc950584de87da1a368045 2.5
c7f84f23ec5aef29988dcdc4ec22a7352ee8f58e 2.5.1
5308dd22b6ee8e3218c81d9e7e4125f235bb5778 2.6
21951c0dfbae5af68ed77821a4d87253ee91803f 2.7
107719a9ce3bd0c79f9f1f626596eb338a276561 2.8
3a5910fac3ccb522a98aeeba7af7008530b25092 2.9
76b58d21ea98257c05565a3b9c850b9b26a32968 3.0
e1c8bef05e6e48df4f26471ea0712aa43ab9d949 3.1
4ce65f61f01b055fa6c2901c6d2527ef741aa4bf 3.2
f2cabc83a18f9b5b548159329ddd4dee904fa31f 3.2.1
d3876aa792923f9a95f7ad0c7f0134533404df35 3.2.2
0f91934037b04221ff5d1ba3a6c39c1ff26e3661 3.3
9ede7b2d2450537e750d5505789fbe63960e97e6 3.4
63ad05e7f9e1f4f1881fb02f529cb6c6ae81e693 3.5
75b1b25fe0d7e29400baf30568153f668324928b 3.6
20ec6976cee1fcfee0c2f354ae382ee3f9f68efa 3.6.1
baee494346e520f8dee2cee9491b8350064770d2 3.7
2ea201354cf016407ea93e1e390d1422940d29b0 3.8
55478328b2422c700c5404a774c85e77322f41a3 3.9
018c3846842291cb6c009dc087e7fe2f0ef53bea 4.0
00f4180df72b49aadb2933804fde4bfb33e5666d 4.1
c13cb8c6b7a56af74cc88346e71d2490470b546f 4.2
e0ec0d5d8b1ef3ee04a83c7c0fee5853aa2ac6a6 4.3
408014d2126153d2b0fce26a13ba707db222b7b9 4.4
7c117df5d202530e85066d8b1ab02cef605c79ad 4.4.1
2acc60d6dfe28c101a8cd44a8aa710a38ae3607c 4.5
bcd7e18e196a00cc2e97ff3a4a58f3cdaba13856 4.6
d6d3085307d8d98b8b012b669e858fd787befeb1 4.7

21
LICENSE
View File

@ -1,12 +1,23 @@
MIT/X Consortium License
© 2006-2008 Anselm R Garbe <garbeam at gmail dot com>
© 2006-2019 Anselm R Garbe <anselm@garbe.ca>
© 2006-2009 Jukka Salmi <jukka at salmi dot ch>
© 2006-2007 Sander van Dijk <a dot h dot vandijk at gmail dot com>
© 2006-2007 Jukka Salmi <jukka at salmi dot ch>
© 2007 Premysl Hruby <dfenze at gmail dot com>
© 2007 Szabolcs Nagy <nszabolcs at gmail dot com>
© 2007 Christof Musik <christof at sendfax dot de>
© 2007-2011 Peter Hartlich <sgkkr at hartlich dot com>
© 2007-2009 Szabolcs Nagy <nszabolcs at gmail dot com>
© 2007-2009 Christof Musik <christof at sendfax dot de>
© 2007-2009 Premysl Hruby <dfenze at gmail dot com>
© 2007-2008 Enno Gottox Boland <gottox at s01 dot de>
© 2008 Martin Hurton <martin dot hurton at gmail dot com>
© 2008 Neale Pickett <neale dot woozle dot org>
© 2009 Mate Nagy <mnagy at port70 dot net>
© 2010-2016 Hiltjo Posthuma <hiltjo@codemadness.org>
© 2010-2012 Connor Lane Smith <cls@lubutu.com>
© 2011 Christoph Lohmann <20h@r-36.net>
© 2015-2016 Quentin Rameau <quinq@fifth.space>
© 2015-2016 Eric Pruitt <eric.pruitt@gmail.com>
© 2016-2017 Markus Teich <markus.teich@stusta.mhn.de>
© 2020-2022 Chris Down <chris@chrisdown.name>
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),

View File

@ -1,60 +1,45 @@
# dwm - dynamic window manager
# © 2006-2007 Anselm R. Garbe, Sander van Dijk
# See LICENSE file for copyright and license details.
include config.mk
SRC = dwm.c
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}"
all: dwm
.c.o:
@echo CC $<
@${CC} -c ${CFLAGS} $<
${CC} -c ${CFLAGS} $<
${OBJ}: config.h config.mk
config.h:
@echo creating $@ from config.def.h
@cp config.def.h $@
cp config.def.h $@
dwm: ${OBJ}
@echo CC -o $@
@${CC} -o $@ ${OBJ} ${LDFLAGS}
${CC} -o $@ ${OBJ} ${LDFLAGS}
clean:
@echo cleaning
@rm -f dwm ${OBJ} dwm-${VERSION}.tar.gz
rm -f dwm ${OBJ} dwm-${VERSION}.tar.gz
dist: clean
@echo creating dist tarball
@mkdir -p dwm-${VERSION}
@cp -R LICENSE Makefile README config.*.h config.mk \
dwm.1 ${SRC} dwm-${VERSION}
@tar -cf dwm-${VERSION}.tar dwm-${VERSION}
@gzip dwm-${VERSION}.tar
@rm -rf dwm-${VERSION}
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
@echo installing executable file to ${DESTDIR}${PREFIX}/bin
@mkdir -p ${DESTDIR}${PREFIX}/bin
@cp -f dwm ${DESTDIR}${PREFIX}/bin
@chmod 755 ${DESTDIR}${PREFIX}/bin/dwm
@echo installing manual page to ${DESTDIR}${MANPREFIX}/man1
@mkdir -p ${DESTDIR}${MANPREFIX}/man1
@sed "s/VERSION/${VERSION}/g" < dwm.1 > ${DESTDIR}${MANPREFIX}/man1/dwm.1
@chmod 644 ${DESTDIR}${MANPREFIX}/man1/dwm.1
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:
@echo removing executable file from ${DESTDIR}${PREFIX}/bin
@rm -f ${DESTDIR}${PREFIX}/bin/dwm
@echo removing manual page from ${DESTDIR}${MANPREFIX}/man1
@rm -f ${DESTDIR}${MANPREFIX}/man1/dwm.1
rm -f ${DESTDIR}${PREFIX}/bin/dwm\
${DESTDIR}${MANPREFIX}/man1/dwm.1
.PHONY: all options clean dist install uninstall
.PHONY: all clean dist install uninstall

9
README
View File

@ -18,9 +18,6 @@ necessary as root):
make clean install
If you are going to use the default bluegray color scheme it is highly
recommended to also install the bluegray files shipped in the dextra package.
Running dwm
-----------
@ -38,11 +35,11 @@ the DISPLAY environment variable is set correctly, e.g.:
In order to display status info in the bar, you can do something
like this in your .xinitrc:
while true
while xsetroot -name "`date` `uptime | sed 's/.*,//'`"
do
echo `date` `uptime | sed 's/.*,//'`
sleep 1
done | dwm
done &
exec dwm
Configuration

View File

@ -1,151 +0,0 @@
/* See LICENSE file for copyright and license details. */
/* appearance */
#define BORDERPX 1
#define FONT "-*-terminus-medium-r-normal-*-14-*-*-*-*-*-*-*"
#define NORMBORDERCOLOR "#cccccc"
#define NORMBGCOLOR "#cccccc"
#define NORMFGCOLOR "#000000"
#define SELBORDERCOLOR "#0066ff"
#define SELBGCOLOR "#0066ff"
#define SELFGCOLOR "#ffffff"
/* tagging */
const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
Rule rules[] = {
/* class:instance:title substr tags ref isfloating */
{ "Firefox", tags[8], False },
{ "Gimp", NULL, True },
{ "MPlayer", NULL, True },
{ "Acroread", NULL, True },
};
/* layout(s) */
#define RESIZEHINTS True /* False - respect size hints in tiled resizals */
#define SNAP 32 /* snap pixel */
Layout layouts[] = {
/* symbol function isfloating */
{ "[]|", tileh, False }, /* first entry is default */
{ "[]=", tilev, False },
{ "><>", floating, True },
{ "[M]", monocle, True },
};
void
setanselmgeoms(void) {
/* screen dimensions */
sx = 0;
sy = 0;
sw = DisplayWidth(dpy, screen);
sh = DisplayHeight(dpy, screen);
/* bar position */
bx = sx;
by = sy;
bw = 1280;
bh = dc.font.height + 2;
/* window area */
wx = sx;
wy = sy + bh;
ww = sw;
wh = sh - bh;
/* master area */
mx = wx;
my = wy;
mw = 1280;
mh = 800 - bh;
/* tile area */
tx = 1280;
ty = 0;
tw = sw - 1280;
th = sh;
/* monocle area */
mox = mx;
moy = my;
mow = mw;
moh = mh;
}
void
anselmgeoms(const char *arg) {
setgeoms = setanselmgeoms;
setgeoms();
updatebarpos();
setlayout("[]|");
}
void
defgeoms(const char *arg) {
setgeoms = setdefaultgeoms;
setgeoms();
updatebarpos();
setlayout("[]=");
}
/* key definitions */
#define MODKEY Mod1Mask
Key keys[] = {
/* modifier key function argument */
{ MODKEY, XK_p, spawn,
"exec dmenu_run -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"' -x 0 -y 0 -w 1280" },
{ MODKEY|ShiftMask, XK_Return, spawn, "exec uxterm" },
{ MODKEY, XK_a, anselmgeoms, NULL },
{ MODKEY, XK_d, defgeoms, NULL },
{ MODKEY, XK_j, focusnext, NULL },
{ MODKEY, XK_k, focusprev, NULL },
{ MODKEY, XK_r, reapply, NULL },
{ MODKEY, XK_Return, zoom, NULL },
{ MODKEY, XK_Tab, viewprevtag, NULL },
{ MODKEY, XK_m, setlayout, "[M]" },
{ MODKEY, XK_f, setlayout, "><>" },
{ MODKEY, XK_v, setlayout, "[]=" },
{ MODKEY, XK_h, setlayout, "[]|" },
{ MODKEY|ShiftMask, XK_space, togglefloating, NULL },
{ MODKEY|ShiftMask, XK_c, killclient, NULL },
{ MODKEY, XK_0, view, NULL },
{ MODKEY, XK_1, view, tags[0] },
{ MODKEY, XK_2, view, tags[1] },
{ MODKEY, XK_3, view, tags[2] },
{ MODKEY, XK_4, view, tags[3] },
{ MODKEY, XK_5, view, tags[4] },
{ MODKEY, XK_6, view, tags[5] },
{ MODKEY, XK_7, view, tags[6] },
{ MODKEY, XK_8, view, tags[7] },
{ MODKEY, XK_9, view, tags[8] },
{ MODKEY|ControlMask, XK_1, toggleview, tags[0] },
{ MODKEY|ControlMask, XK_2, toggleview, tags[1] },
{ MODKEY|ControlMask, XK_3, toggleview, tags[2] },
{ MODKEY|ControlMask, XK_4, toggleview, tags[3] },
{ MODKEY|ControlMask, XK_5, toggleview, tags[4] },
{ MODKEY|ControlMask, XK_6, toggleview, tags[5] },
{ MODKEY|ControlMask, XK_7, toggleview, tags[6] },
{ MODKEY|ControlMask, XK_8, toggleview, tags[7] },
{ MODKEY|ControlMask, XK_9, toggleview, tags[8] },
{ MODKEY|ShiftMask, XK_0, tag, NULL },
{ MODKEY|ShiftMask, XK_1, tag, tags[0] },
{ MODKEY|ShiftMask, XK_2, tag, tags[1] },
{ MODKEY|ShiftMask, XK_3, tag, tags[2] },
{ MODKEY|ShiftMask, XK_4, tag, tags[3] },
{ MODKEY|ShiftMask, XK_5, tag, tags[4] },
{ MODKEY|ShiftMask, XK_6, tag, tags[5] },
{ MODKEY|ShiftMask, XK_7, tag, tags[6] },
{ MODKEY|ShiftMask, XK_8, tag, tags[7] },
{ MODKEY|ShiftMask, XK_9, tag, tags[8] },
{ MODKEY|ControlMask|ShiftMask, XK_1, toggletag, tags[0] },
{ MODKEY|ControlMask|ShiftMask, XK_2, toggletag, tags[1] },
{ MODKEY|ControlMask|ShiftMask, XK_3, toggletag, tags[2] },
{ MODKEY|ControlMask|ShiftMask, XK_4, toggletag, tags[3] },
{ MODKEY|ControlMask|ShiftMask, XK_5, toggletag, tags[4] },
{ MODKEY|ControlMask|ShiftMask, XK_6, toggletag, tags[5] },
{ MODKEY|ControlMask|ShiftMask, XK_7, toggletag, tags[6] },
{ MODKEY|ControlMask|ShiftMask, XK_8, toggletag, tags[7] },
{ MODKEY|ControlMask|ShiftMask, XK_9, toggletag, tags[8] },
{ MODKEY|ShiftMask, XK_q, quit, NULL },
};

View File

@ -1,93 +1,116 @@
/* See LICENSE file for copyright and license details. */
/* appearance */
#define BORDERPX 1
#define FONT "-*-terminus-medium-r-normal-*-14-*-*-*-*-*-*-*"
#define NORMBORDERCOLOR "#cccccc"
#define NORMBGCOLOR "#cccccc"
#define NORMFGCOLOR "#000000"
#define SELBORDERCOLOR "#0066ff"
#define SELBGCOLOR "#0066ff"
#define SELFGCOLOR "#ffffff"
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 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 },
};
/* tagging */
const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
Rule rules[] = {
/* class:instance:title substr tags ref isfloating */
{ "Firefox", tags[8], False },
{ "Gimp", NULL, True },
{ "MPlayer", NULL, True },
{ "Acroread", NULL, True },
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) */
#define RESIZEHINTS True /* False - respect size hints in tiled resizals */
#define SNAP 32 /* snap pixel */
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 */
static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
Layout layouts[] = {
/* symbol function isfloating */
{ "[]=", tilev, False }, /* first entry is default */
{ "[]|", tileh, False },
{ "><>", floating, True },
{ "[M]", monocle, True },
static const Layout layouts[] = {
/* symbol arrange function */
{ "[]=", tile }, /* first entry is default */
{ "><>", NULL }, /* no layout function means floating behavior */
{ "[M]", monocle },
};
/* key definitions */
#define MODKEY Mod1Mask
Key keys[] = {
#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 const Key keys[] = {
/* modifier key function argument */
{ MODKEY, XK_p, spawn,
"exec dmenu_run -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'" },
{ MODKEY|ShiftMask, XK_Return, spawn, "exec uxterm" },
{ MODKEY, XK_j, focusnext, NULL },
{ MODKEY, XK_k, focusprev, NULL },
{ MODKEY, XK_r, reapply, NULL },
{ MODKEY, XK_Return, zoom, NULL },
{ MODKEY, XK_Tab, viewprevtag, NULL },
{ MODKEY, XK_m, setlayout, "[M]" },
{ MODKEY, XK_f, setlayout, "><>" },
{ MODKEY, XK_v, setlayout, "[]=" },
{ MODKEY, XK_h, setlayout, "[]|" },
{ MODKEY|ShiftMask, XK_space, togglefloating, NULL },
{ MODKEY|ShiftMask, XK_c, killclient, NULL },
{ MODKEY, XK_0, view, NULL },
{ MODKEY, XK_1, view, tags[0] },
{ MODKEY, XK_2, view, tags[1] },
{ MODKEY, XK_3, view, tags[2] },
{ MODKEY, XK_4, view, tags[3] },
{ MODKEY, XK_5, view, tags[4] },
{ MODKEY, XK_6, view, tags[5] },
{ MODKEY, XK_7, view, tags[6] },
{ MODKEY, XK_8, view, tags[7] },
{ MODKEY, XK_9, view, tags[8] },
{ MODKEY|ControlMask, XK_1, toggleview, tags[0] },
{ MODKEY|ControlMask, XK_2, toggleview, tags[1] },
{ MODKEY|ControlMask, XK_3, toggleview, tags[2] },
{ MODKEY|ControlMask, XK_4, toggleview, tags[3] },
{ MODKEY|ControlMask, XK_5, toggleview, tags[4] },
{ MODKEY|ControlMask, XK_6, toggleview, tags[5] },
{ MODKEY|ControlMask, XK_7, toggleview, tags[6] },
{ MODKEY|ControlMask, XK_8, toggleview, tags[7] },
{ MODKEY|ControlMask, XK_9, toggleview, tags[8] },
{ MODKEY|ShiftMask, XK_0, tag, NULL },
{ MODKEY|ShiftMask, XK_1, tag, tags[0] },
{ MODKEY|ShiftMask, XK_2, tag, tags[1] },
{ MODKEY|ShiftMask, XK_3, tag, tags[2] },
{ MODKEY|ShiftMask, XK_4, tag, tags[3] },
{ MODKEY|ShiftMask, XK_5, tag, tags[4] },
{ MODKEY|ShiftMask, XK_6, tag, tags[5] },
{ MODKEY|ShiftMask, XK_7, tag, tags[6] },
{ MODKEY|ShiftMask, XK_8, tag, tags[7] },
{ MODKEY|ShiftMask, XK_9, tag, tags[8] },
{ MODKEY|ControlMask|ShiftMask, XK_1, toggletag, tags[0] },
{ MODKEY|ControlMask|ShiftMask, XK_2, toggletag, tags[1] },
{ MODKEY|ControlMask|ShiftMask, XK_3, toggletag, tags[2] },
{ MODKEY|ControlMask|ShiftMask, XK_4, toggletag, tags[3] },
{ MODKEY|ControlMask|ShiftMask, XK_5, toggletag, tags[4] },
{ MODKEY|ControlMask|ShiftMask, XK_6, toggletag, tags[5] },
{ MODKEY|ControlMask|ShiftMask, XK_7, toggletag, tags[6] },
{ MODKEY|ControlMask|ShiftMask, XK_8, toggletag, tags[7] },
{ MODKEY|ControlMask|ShiftMask, XK_9, toggletag, tags[8] },
{ MODKEY|ShiftMask, XK_q, quit, NULL },
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
{ MODKEY, XK_b, togglebar, {0} },
{ MODKEY, XK_j, focusstack, {.i = +1 } },
{ MODKEY, XK_k, focusstack, {.i = -1 } },
{ MODKEY, XK_i, incnmaster, {.i = +1 } },
{ MODKEY, XK_d, incnmaster, {.i = -1 } },
{ MODKEY, XK_h, setmfact, {.f = -0.05} },
{ MODKEY, XK_l, setmfact, {.f = +0.05} },
{ MODKEY, XK_Return, zoom, {0} },
{ MODKEY, XK_Tab, view, {0} },
{ MODKEY|ShiftMask, XK_c, killclient, {0} },
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
{ MODKEY, XK_space, setlayout, {0} },
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
{ MODKEY, XK_0, view, {.ui = ~0 } },
{ MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } },
{ MODKEY, XK_comma, focusmon, {.i = -1 } },
{ MODKEY, XK_period, focusmon, {.i = +1 } },
{ MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
{ MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
TAGKEYS( XK_1, 0)
TAGKEYS( XK_2, 1)
TAGKEYS( XK_3, 2)
TAGKEYS( XK_4, 3)
TAGKEYS( XK_5, 4)
TAGKEYS( XK_6, 5)
TAGKEYS( XK_7, 6)
TAGKEYS( XK_8, 7)
TAGKEYS( XK_9, 8)
{ MODKEY|ShiftMask, XK_q, quit, {0} },
};
/* button definitions */
/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
static const 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} },
};

View File

@ -1,5 +1,5 @@
# dwm version
VERSION = 4.8
VERSION = 6.5
# Customize below to fit your system
@ -10,20 +10,30 @@ 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
#MANPREFIX = ${PREFIX}/man
# includes and libs
INCS = -I. -I/usr/include -I${X11INC}
LIBS = -L/usr/lib -lc -L${X11LIB} -lX11
INCS = -I${X11INC} -I${FREETYPEINC}
LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS}
# flags
CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\"
LDFLAGS = -s ${LIBS}
#CFLAGS = -g -std=c99 -pedantic -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" -DWORK
#LDFLAGS = -g ${LIBS}
CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700L -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}
#CFLAGS += -xtarget=ultra
# compiler and linker
CC = cc

450
drw.c Normal file
View File

@ -0,0 +1,450 @@
/* See LICENSE file for copyright and license details. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <X11/Xlib.h>
#include <X11/Xft/Xft.h>
#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.");
}
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)
{
int i, ty, ellipsis_x = 0;
unsigned int tmpw, ew, ellipsis_w = 0, ellipsis_len;
XftDraw *d = NULL;
Fnt *usedfont, *curfont, *nextfont;
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, overflow = 0;
/* keep track of a couple codepoints for which we have no match. */
enum { nomatches_len = 64 };
static struct { long codepoint[nomatches_len]; unsigned int idx; } nomatches;
static unsigned int ellipsis_width = 0;
if (!drw || (render && (!drw->scheme || !w)) || !text || !drw->fonts)
return 0;
if (!render) {
w = invert ? invert : ~invert;
} 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;
if (!ellipsis_width && render)
ellipsis_width = drw_fontset_getwidth(drw, "...");
while (1) {
ew = ellipsis_len = 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) {
drw_font_getexts(curfont, text, utf8charlen, &tmpw, NULL);
if (ew + ellipsis_width <= w) {
/* keep track where the ellipsis still fits */
ellipsis_x = x + ew;
ellipsis_w = w - ew;
ellipsis_len = utf8strlen;
}
if (ew + tmpw > w) {
overflow = 1;
/* called from drw_fontset_getwidth_clamp():
* it wants the width AFTER the overflow
*/
if (!render)
x += tmpw;
else
utf8strlen = ellipsis_len;
} else if (curfont == usedfont) {
utf8strlen += utf8charlen;
text += utf8charlen;
ew += tmpw;
} else {
nextfont = curfont;
}
break;
}
}
if (overflow || !charexists || nextfont)
break;
else
charexists = 0;
}
if (utf8strlen) {
if (render) {
ty = y + (h - usedfont->h) / 2 + usedfont->xfont->ascent;
XftDrawStringUtf8(d, &drw->scheme[invert ? ColBg : ColFg],
usedfont->xfont, x, ty, (XftChar8 *)utf8str, utf8strlen);
}
x += ew;
w -= ew;
}
if (render && overflow)
drw_text(drw, ellipsis_x, y, ellipsis_w, h, 0, "...", invert);
if (!*text || overflow) {
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;
for (i = 0; i < nomatches_len; ++i) {
/* avoid calling XftFontMatch if we know we won't find a match */
if (utf8codepoint == nomatches.codepoint[i])
goto no_match;
}
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);
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);
nomatches.codepoint[++nomatches.idx % nomatches_len] = utf8codepoint;
no_match:
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);
}
unsigned int
drw_fontset_getwidth_clamp(Drw *drw, const char *text, unsigned int n)
{
unsigned int tmp = 0;
if (drw && drw->fonts && text && n)
tmp = drw_text(drw, 0, 0, 0, 0, 0, text, n);
return MIN(n, tmp);
}
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);
}

58
drw.h Normal file
View File

@ -0,0 +1,58 @@
/* 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);
unsigned int drw_fontset_getwidth_clamp(Drw *drw, const char *text, unsigned int n);
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);

135
dwm.1
View File

@ -10,8 +10,9 @@ and floating layouts. Either layout can be applied dynamically, optimising the
environment for the application in use and the task performed.
.P
In tiled layouts windows are managed in a master and stacking area. The master
area contains the window which currently needs most attention, whereas the
stacking area contains all other windows. In monocle layout all windows are
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.
@ -19,25 +20,27 @@ layout applied.
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
dwm contains a small status bar which displays all available tags, the layout,
the title of the focused window, and the text read from standard input. 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.
Each screen contains a small status bar which displays all available tags, the
layout, the title of the focused window, and the text read from the root window
name property, if the screen is focused. A floating window is indicated with an
empty square and a maximised floating window is indicated with a filled square
before the windows title. The selected tags are indicated with a different
color. The tags of the focused window are indicated with a filled square in the
top left corner. The tags which are applied to one or more windows are
indicated with an empty square in the top left corner.
.P
dwm draws a small border around windows to indicate the focus state.
.SH OPTIONS
.TP
.B \-v
prints version information to standard output, then exits.
prints version information to stderr, then exits.
.SH USAGE
.SS Status bar
.TP
.B Standard input
is read and displayed in the status text area.
.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
@ -55,19 +58,39 @@ click on a tag label adds/removes that tag to/from the focused window.
.TP
.B Mod1\-Shift\-Return
Start
.BR xterm.
.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
Applies floating layout.
Sets floating layout.
.TP
.B Mod1\-m
Applies monocle layout.
Sets monocle layout.
.TP
.B Mod1\-v
Applies vertical tiled layout.
.TP
.B Mod1\-h
Applies horizontal tiled layout.
.B Mod1\-space
Toggles between current and previous layout.
.TP
.B Mod1\-j
Focus next window.
@ -75,6 +98,18 @@ Focus next window.
.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
@ -87,34 +122,23 @@ Toggle focused window between tiled and floating state.
.B Mod1\-Tab
Toggles to the previously selected tags.
.TP
.B Mod1\-r
Re-applies tagging rules to all windows.
.TP
.B Mod1\-Shift\-[1..n]
Apply
.RB nth
tag to focused window.
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
.B nth
tag to/from focused window.
Add/remove nth tag to/from focused window.
.TP
.B Mod1\-[1..n]
View all windows with
.BR nth
tag.
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
.BR nth
tag to/from the view.
Add/remove all windows with nth tag to/from the view.
.TP
.B Mod1\-Shift\-q
Quit dwm.
@ -124,7 +148,7 @@ Quit dwm.
Move focused window while dragging. Tiled windows will be toggled to the floating state.
.TP
.B Mod1\-Button2
Zooms/cycles focused window to/from master area. If it is floating (but not fixed) it will be toggled to the tiled state instead.
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.
@ -132,26 +156,21 @@ Resize focused window while dragging. Tiled windows will be toggled to the float
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)
.SH BUGS
The status bar may display
.BR "EOF"
when dwm has been started by an X session manager like
.BR xdm (1),
because those close standard output before executing dwm.
.P
.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. As a workaround
you can use JDK 1.4 (which doesn't contain the XToolkit/XAWT backend) or you
can set the following environment variable (to use the older Motif
backend instead):
.BR AWT_TOOLKIT=MToolkit .
.P
GTK 2.10.9+ versions contain a broken
.BR Save\-As
file dialog implementation,
which requests to reconfigure its window size in an endless loop. However, its
window is still respondable during this state, so you can simply ignore the flicker
until a new GTK version appears, which will fix this bug, approximately
GTK 2.10.12+ versions.
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.

2936
dwm.c

File diff suppressed because it is too large Load Diff

42
transient.c Normal file
View File

@ -0,0 +1,42 @@
/* cc transient.c -o transient -lX11 */
#include <stdlib.h>
#include <unistd.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
int main(void) {
Display *d;
Window r, f, t = None;
XSizeHints h;
XEvent e;
d = XOpenDisplay(NULL);
if (!d)
exit(1);
r = DefaultRootWindow(d);
f = XCreateSimpleWindow(d, r, 100, 100, 400, 400, 0, 0, 0);
h.min_width = h.max_width = h.min_height = h.max_height = 400;
h.flags = PMinSize | PMaxSize;
XSetWMNormalHints(d, f, &h);
XStoreName(d, f, "floating");
XMapWindow(d, f);
XSelectInput(d, f, ExposureMask);
while (1) {
XNextEvent(d, &e);
if (t == None) {
sleep(5);
t = XCreateSimpleWindow(d, r, 50, 50, 100, 100, 0, 0, 0);
XSetTransientForHint(d, t, f);
XStoreName(d, t, "transient");
XMapWindow(d, t);
XSelectInput(d, t, ExposureMask);
}
}
XCloseDisplay(d);
exit(0);
}

36
util.c Normal file
View File

@ -0,0 +1,36 @@
/* See LICENSE file for copyright and license details. */
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "util.h"
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);
}
void *
ecalloc(size_t nmemb, size_t size)
{
void *p;
if (!(p = calloc(nmemb, size)))
die("calloc:");
return p;
}

8
util.h Normal file
View File

@ -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);