Commit Graph

1796 Commits

Author SHA1 Message Date
mihirlad55
4a230d362a [PATCH] Add IPC support through a unix socket
This patch currently supports the following requests:
* Run custom commands with arguments (similar to key bind functions)
* Get monitor properties
* Get all available layouts
* Get available tags
* Get client properties
* Subscribe to tag change, client focus change, and layout change,
  monitor focus change, focused title change, and client state change
  events

This patch includes a dwm-msg cli program that supports all of the
above requests for easy integration into shell scripts.

The messages are sent in a JSON format to promote integration to
increase scriptability in languages like Python/JavaScript.

The patch requires YAJL for JSON parsing and a system with epoll
support. Portability is planned to be increased in the future.

This patch is best applied after all other patches to avoid merge
conflicts.

For more info on the IPC implementation and how to send/receive
messages, documentation can be found at
https://github.com/mihirlad55/dwm-ipc
2023-08-04 21:33:07 +02:00
Przemek Grondek
adda93ff82 Add key shortcut for emoji picker 2023-08-04 09:19:58 +02:00
Przemek Grondek
b4dc856afb Probably fix firefox PiP floating window 2023-07-29 11:58:34 +02:00
Przemek Grondek
9091f0c403 Update hotkeys for flameshot 2023-07-29 10:24:52 +02:00
Przemek Grondek
2ff154d1a3 Fix borders for scratchpad 2023-07-29 10:20:20 +02:00
Przemek Grondek
ca3cf62435 Fix gaps on stack on tile layout 2023-07-29 10:06:01 +02:00
Przemek Grondek
995615d95e Update shortcuts 2023-07-29 09:58:56 +02:00
Przemek Grondek
f916445cac Add brightness control 2023-07-29 09:54:33 +02:00
Przemek Grondek
5cdd3b25d6 Update borders
Fix semi transparent borders
Change active window border color
2023-07-29 01:45:41 +02:00
Przemek Grondek
a5b1ae0e02 Add another steam rule 2023-07-29 01:06:26 +02:00
5cf38785d5 Fix fakefullscreen 2023-06-14 20:39:38 +02:00
8cd6ccf437 Fix steam and firefox rules 2023-05-14 11:10:59 +02:00
5cc0f6e86a Add different tags icons for Monitor 0 2023-03-20 12:39:49 +01:00
e3173ac946 Revert "Hide vacant tags"
This reverts commit b774677b
2023-03-20 12:37:04 +01:00
e240a2a8ad Tags per monitor 2023-03-20 12:16:58 +01:00
e7d5655e90 Changes in configurations
Changes in tag icons
 Added more rules for tags
2023-03-20 11:53:31 +01:00
f9038f2d95 Changes in configurations
Added Font Awesome
 Added rules for applications
 Added icons for tags
2023-03-20 02:40:36 +01:00
ec2b390354 Revert "Configure Three Column Layout"
This reverts commit a44e4648
2023-03-19 21:32:32 +01:00
c644af303e Revert "Three Column Layout"
This reverts commit 02dfb51d
2023-03-19 21:30:30 +01:00
e46e3b5016 Configure cyclelayout 2023-03-19 21:29:16 +01:00
Christopher Drelich
bd79444b3c [PATCH] Function to cycle through available layouts.
MOD-CTRL-, and MOD-CTRL-.
cycle backwards and forwards through available layouts.
Probably only useful if you have a lot of additional layouts.
The NULL, NULL layout should always be the last layout in your list,
in order to guarantee consistent behavior.
2023-03-19 21:18:30 +01:00
73a7246f2f Add config for ceneredmaster layout 2023-03-19 21:16:26 +01:00
021f5f6d9b centeredmaster layout
Jérôme Andrieux - jerome@gcu.info
    Laslo Hunhold - dev@frign.de (6.1, git ports)
2023-03-19 21:16:09 +01:00
a44e464824 Configure Three Column Layout 2023-03-19 17:26:46 +01:00
Chris Truett
02dfb51d07 Three Column Layout 2023-03-19 17:26:34 +01:00
Przemek Grondek
f8656ec0f2 Don't count windows that are on all tags when showing icons for tags 2023-03-05 02:46:55 +01:00
Przemek Grondek
dd46203749 Make scratchpad like a quake console 2023-02-17 01:17:54 +01:00
Przemek Grondek
175f76256f Add scratchpad for terminal 2023-02-17 00:58:21 +01:00
20edd67116 Fix shortcut for picom 2023-01-17 23:38:04 +01:00
Przemek Grondek
ea0611f930 Add Super+Launch1 to reload picom 2023-01-17 02:59:04 +01:00
Przemek Grondek
2d40900619 Fix 6.4 for ubuntu 22.04 2022-10-14 01:00:30 +02:00
Przemek Grondek
5f8d048afd Merge tag '6.4' 2022-10-14 00:41:27 +02:00
Przemek Grondek
2e59cd6c58 Update config to 6.3 2022-10-14 00:36:12 +02:00
Przemek Grondek
94c93ee532 Merge tag '6.3' 2022-10-14 00:34: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
9b342a6bcb Fix picom dwmtray 2022-09-03 18:34:56 +02:00
bba5360831 Remove border px 2022-09-03 15:36:29 +02:00
ed022553b9 Add editor config 2022-09-03 15:36:13 +02:00
57b595556c Small changes in color 2022-09-03 11:52:50 +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
8e7c4d64d2 Remove looking-glass-client configuration 2022-08-04 19:33:26 +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