commit ad7e16b38ac2774c2f8f9f6522c3625019ad2d0f
parent 80bb4b8ab7db1044d16b6e76ac5ca9ef2c13f12b
Author: bakkeby <bakkeby@gmail.com>
Date: Sun, 16 May 2021 11:40:15 +0200
Adding swapmouse patch ref. #28
Diffstat:
3 files changed, 46 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
@@ -15,6 +15,8 @@ Refer to [https://st.suckless.org/](https://st.suckless.org/) for details on the
### Changelog:
+2021-05-16 - Added swapmouse patch
+
2021-05-11 - Added default cursor patch
2021-05-10 - Upgrade to 46b02f, 2021-03-28
@@ -180,7 +182,8 @@ Refer to [https://st.suckless.org/](https://st.suckless.org/) for details on the
[theme.sh](https://github.com/lemnos/theme.sh) which expect these colours to be distinct
- [relativeborder](https://st.suckless.org/patches/relativeborder/)
- - allows you to specify a border that is relative in size to the width of a cell in the terminal
+ - allows you to specify a border that is relative in size to the width of a cell in the
+ terminal
- [right-click-to-plumb](https://st.suckless.org/patches/right_click_to_plumb/)
- allows you to right-click on some selected text to send it to the plumbing program of choice
@@ -192,16 +195,23 @@ Refer to [https://st.suckless.org/](https://st.suckless.org/) for details on the
- this patch adds SIXEL graphics support
- st-embedder
- - this patch allows clients to embed into the st window and can be useful if you tend to start X applications from the terminal
+ - this patch allows clients to embed into the st window and can be useful if you tend to
+ start X applications from the terminal
- the behavior is similar to Plan 9 where applications can take over windows
- [spoiler](https://st.suckless.org/patches/spoiler/)
- use inverted defaultbg/fg for selection when bg/fg are the same
+ - [swapmouse](https://st.suckless.org/patches/swapmouse/)
+ - changes the mouse shape to the global default when the running program subscribes for mouse
+ events, for instance, in programs like ranger and fzf
+ - it emulates the behaviour shown by vte terminals like termite
+
- [sync](https://st.suckless.org/patches/sync/)
- adds synchronized-updates/application-sync support in st
- this has no effect except when an application uses the synchronized-update escape sequences
- - with this patch nearly all cursor flicker is eliminated in tmux, and tmux detects it automatically via terminfo
+ - with this patch nearly all cursor flicker is eliminated in tmux, and tmux detects it
+ automatically via terminfo
- [themed-cursor](https://st.suckless.org/patches/themed_cursor/)
- instead of a default X cursor, use the xterm cursor from your cursor theme
diff --git a/patches.def.h b/patches.def.h
@@ -293,6 +293,13 @@
*/
#define SPOILER_PATCH 0
+/* This patch changes the mouse shape to the global default when the running program subscribes
+ * for mouse events, for instance, in programs like ranger and fzf. It emulates the behaviour
+ * shown by vte terminals like termite.
+ * https://st.suckless.org/patches/swapmouse/
+ */
+#define SWAPMOUSE_PATCH 0
+
/* This patch adds synchronized-updates/application-sync support in st.
* This will have no effect except when an application uses the synchronized-update escape
* sequences. With this patch nearly all cursor flicker is eliminated in tmux, and tmux detects
diff --git a/x.c b/x.c
@@ -199,6 +199,10 @@ static int bellon = 0; /* visual bell status */
#if RELATIVEBORDER_PATCH
int borderpx;
#endif // RELATIVEBORDER_PATCH
+#if SWAPMOUSE_PATCH
+static Cursor cursor;
+static XColor xmousefg, xmousebg;
+#endif // SWAPMOUSE_PATCH
#include "patch/x_include.c"
@@ -723,7 +727,14 @@ bmotion(XEvent *e)
{
#if HIDECURSOR_PATCH
if (!xw.pointerisvisible) {
+ #if SWAPMOUSE_PATCH
+ if (win.mode & MODE_MOUSE)
+ XUndefineCursor(xw.dpy, xw.win);
+ else
+ XDefineCursor(xw.dpy, xw.win, xw.vpointer);
+ #else
XDefineCursor(xw.dpy, xw.win, xw.vpointer);
+ #endif // SWAPMOUSE_PATCH
xw.pointerisvisible = 1;
if (!IS_SET(MODE_MOUSEMANY))
xsetpointermotion(0);
@@ -1255,12 +1266,14 @@ xinit(int cols, int rows)
XGCValues gcvalues;
#if HIDECURSOR_PATCH
Pixmap blankpm;
- #else
+ #elif !SWAPMOUSE_PATCH
Cursor cursor;
#endif // HIDECURSOR_PATCH
Window parent;
pid_t thispid = getpid();
+ #if !SWAPMOUSE_PATCH
XColor xmousefg, xmousebg;
+ #endif // SWAPMOUSE_PATCH
#if ALPHA_PATCH
XWindowAttributes attr;
XVisualInfo vis;
@@ -2398,6 +2411,18 @@ xsetmode(int set, unsigned int flags)
{
int mode = win.mode;
MODBIT(win.mode, set, flags);
+ #if SWAPMOUSE_PATCH
+ if ((flags & MODE_MOUSE)
+ #if HIDECURSOR_PATCH
+ && xw.pointerisvisible
+ #endif // HIDECURSOR_PATCH
+ ) {
+ if (win.mode & MODE_MOUSE)
+ XUndefineCursor(xw.dpy, xw.win);
+ else
+ XDefineCursor(xw.dpy, xw.win, cursor);
+ }
+ #endif // SWAPMOUSE_PATCH
if ((win.mode & MODE_REVERSE) != (mode & MODE_REVERSE))
redraw();
}