Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package sxhkd for openSUSE:Factory checked 
in at 2026-09-17 15:24:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/sxhkd (Old)
 and      /work/SRC/openSUSE:Factory/.sxhkd.new.383539 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "sxhkd"

Thu Sep 17 15:24:01 2026 rev:6 rq:1378451 version:0.6.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/sxhkd/sxhkd.changes      2021-01-21 
21:57:41.233864442 +0100
+++ /work/SRC/openSUSE:Factory/.sxhkd.new.383539/sxhkd.changes  2026-09-17 
15:24:09.909921682 +0200
@@ -1,0 +2,15 @@
+Wed Sep 16 20:24:01 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 0.6.3:
+  * Hardcode Mode_switch as Mod5 so bindings work with
+    xkeyboard-config >= 2.37
+  * Enable XKB detectable auto-repeat (ignore extra KeyRelease)
+  * Export SXHKD_PID; SIGALRM aborts the current chord chain
+  * Close the command log fd before exec
+  * Add XF86Keyboard/WWAN/RFKill/AudioPreset/RotationLockToggle/
+    FullScreen keysyms
+  * Warn on interfering hotkeys; document brace escaping
+- Add pkgconfig(xcb-xkb) BuildRequires (now linked)
+- Spec cleanup: drop Group, add gcc/make
+
+-------------------------------------------------------------------

Old:
----
  sxhkd-0.6.2.tar.gz

New:
----
  sxhkd-0.6.3.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ sxhkd.spec ++++++
--- /var/tmp/diff_new_pack.x85sTw/_old  2026-09-17 15:24:11.726997955 +0200
+++ /var/tmp/diff_new_pack.x85sTw/_new  2026-09-17 15:24:11.729998080 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package sxhkd
 #
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
 # Copyright (c) 2017 Luke Jones, [email protected]
 #
 # All modifications and additions to the file contributed by third parties
@@ -18,18 +18,20 @@
 
 
 Name:           sxhkd
-Version:        0.6.2
+Version:        0.6.3
 Release:        0
 Summary:        Simple X hotkey daemon
 License:        BSD-2-Clause
-Group:          System/GUI/Other
 URL:            https://github.com/baskerville/sxhkd
 Source0:        
https://github.com/baskerville/sxhkd/archive/%{version}.tar.gz#/%{name}-%{version}.tar.gz
 Source1:        
https://raw.githubusercontent.com/baskerville/bspwm/master/examples/sxhkdrc
+BuildRequires:  gcc
+BuildRequires:  make
 BuildRequires:  pkgconfig
 BuildRequires:  pkgconfig(xcb)
 BuildRequires:  pkgconfig(xcb-keysyms)
 BuildRequires:  pkgconfig(xcb-util)
+BuildRequires:  pkgconfig(xcb-xkb)
 
 %description
 sxhkd is a simple X hotkey daemon with a powerful and compact configuration 
syntax.

++++++ sxhkd-0.6.2.tar.gz -> sxhkd-0.6.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sxhkd-0.6.2/Makefile new/sxhkd-0.6.3/Makefile
--- old/sxhkd-0.6.2/Makefile    2020-08-02 09:53:02.000000000 +0200
+++ new/sxhkd-0.6.3/Makefile    2025-09-27 16:46:34.000000000 +0200
@@ -5,7 +5,7 @@
 CPPFLAGS += -D_POSIX_C_SOURCE=200112L -DVERSION=\"$(VERSION)\"
 CFLAGS   += -std=c99 -pedantic -Wall -Wextra
 LDFLAGS  ?=
-LDLIBS    = $(LDFLAGS) -lxcb -lxcb-keysyms
+LDLIBS    = $(LDFLAGS) -lxcb -lxcb-keysyms -lxcb-xkb
 
 PREFIX    ?= /usr/local
 BINPREFIX ?= $(PREFIX)/bin
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sxhkd-0.6.2/README.md new/sxhkd-0.6.3/README.md
--- old/sxhkd-0.6.2/README.md   2020-08-02 09:53:02.000000000 +0200
+++ new/sxhkd-0.6.3/README.md   2025-09-27 16:46:34.000000000 +0200
@@ -58,10 +58,16 @@
 ## Editor Plugins
 
 ### Vim
-
 - [vim-sxhkdrc](https://github.com/baskerville/vim-sxhkdrc).
 - [sxhkd-vim](https://github.com/kovetskiy/sxhkd-vim).
 
+### VS Code
+- [sxhkdrc-syntax](https://github.com/mosbasik/sxhkdrc-syntax).
+
+### Emacs
+- [sxhkd-mode](https://github.com/xFA25E/sxhkd-mode)
+- [sxhkdrc-mode](https://github.com/protesilaos/sxhkdrc-mode)
+
 ----
 
 For further information, check the `man` pages.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sxhkd-0.6.2/VERSION new/sxhkd-0.6.3/VERSION
--- old/sxhkd-0.6.2/VERSION     2020-08-02 09:53:02.000000000 +0200
+++ new/sxhkd-0.6.3/VERSION     2025-09-27 16:46:34.000000000 +0200
@@ -1 +1 @@
-0.6.2
\ No newline at end of file
+0.6.3
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sxhkd-0.6.2/doc/sxhkd.1 new/sxhkd-0.6.3/doc/sxhkd.1
--- old/sxhkd-0.6.2/doc/sxhkd.1 2020-08-02 09:53:02.000000000 +0200
+++ new/sxhkd-0.6.3/doc/sxhkd.1 2025-09-27 16:46:34.000000000 +0200
@@ -2,12 +2,12 @@
 .\"     Title: sxhkd
 .\"    Author: [see the "Author" section]
 .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\"      Date: 08/02/2020
+.\"      Date: 09/27/2025
 .\"    Manual: Sxhkd Manual
-.\"    Source: Sxhkd 0.6.2
+.\"    Source: Sxhkd 0.6.3
 .\"  Language: English
 .\"
-.TH "SXHKD" "1" "08/02/2020" "Sxhkd 0\&.6\&.2" "Sxhkd Manual"
+.TH "SXHKD" "1" "09/27/2025" "Sxhkd 0\&.6\&.3" "Sxhkd Manual"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -88,10 +88,14 @@
 .sp
 If \fBsxhkd\fR receives a \fISIGUSR1\fR (resp\&. \fISIGUSR2\fR) signal, it 
will reload its configuration file (resp\&. toggle the grabbing state of all 
its bindings)\&.
 .sp
+If \fBsxhkd\fR recieves a \fISIGALRM\fR signal, it will break the current 
chain if there is one in progress\&.
+.sp
 The commands are executed via \fBSHELL\fR \fI\-c\fR \fBCOMMAND\fR (hence you 
can use environment variables)\&.
 .sp
 \fBSHELL\fR will be the content of the first defined environment variable in 
the following list: \fBSXHKD_SHELL\fR, \fBSHELL\fR\&.
 .sp
+\fBSXHKD_PID\fR will be automatically set to the pid of \fBsxhkd\fR in 
processes spawned by \fBsxhkd\fR, which may be used by the child process to 
send easily signals such as \fISIGALRM\fR to the correct instance of 
\fBsxhkd\fR\&.
+.sp
 If you have a non\-QWERTY keyboard or a non\-standard layout configuration, 
you should provide a \fICOUNT\fR of \fI1\fR to the \fB\-m\fR option or 
\fI\-1\fR (interpreted as infinity) if you constantly switch from one layout to 
the other (\fBsxhkd\fR ignores all mapping notify events by default because the 
majority of those events are pointless)\&.
 .SH "CONFIGURATION"
 .sp
@@ -168,7 +172,7 @@
 .sp
 Pointer hotkeys can be defined by using one of the following special keysym 
names: \fIbutton1\fR, \fIbutton2\fR, \fIbutton3\fR, \&..., \fIbutton24\fR\&.
 .sp
-The hotkey and the command may contain sequences of the form 
\fI{STRING_1,\&...,STRING_N}\fR\&.
+The hotkey and the command may contain sequences of the form 
\fI{STRING_1,\&...,STRING_N}\fR\&. Braces can be escaped with \fB\e\fR\&.
 .sp
 In addition, the sequences can contain ranges of the form \fIA\fR\-\fIZ\fR 
where \fIA\fR and \fIZ\fR are alphanumeric characters\&.
 .sp
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sxhkd-0.6.2/doc/sxhkd.1.asciidoc 
new/sxhkd-0.6.3/doc/sxhkd.1.asciidoc
--- old/sxhkd-0.6.2/doc/sxhkd.1.asciidoc        2020-08-02 09:53:02.000000000 
+0200
+++ new/sxhkd-0.6.3/doc/sxhkd.1.asciidoc        2025-09-27 16:46:34.000000000 
+0200
@@ -60,10 +60,14 @@
 
 If *sxhkd* receives a _SIGUSR1_ (resp. _SIGUSR2_) signal, it will reload its 
configuration file (resp. toggle the grabbing state of all its bindings).
 
+If *sxhkd* recieves a _SIGALRM_ signal, it will break the current chain if 
there is one in progress.
+
 The commands are executed via *SHELL* _-c_ *COMMAND* (hence you can use 
environment variables).
 
 *SHELL* will be the content of the first defined environment variable in the 
following list: *SXHKD_SHELL*, *SHELL*.
 
+*SXHKD_PID* will be automatically set to the pid of *sxhkd* in processes 
spawned by *sxhkd*, which may be used by the child process to send easily 
signals such as _SIGALRM_ to the correct instance of *sxhkd*.
+
 If you have a non-QWERTY keyboard or a non-standard layout configuration, you 
should provide a _COUNT_ of _1_ to the *-m* option or _-1_ (interpreted as 
infinity) if you constantly switch from one layout to the other (*sxhkd* 
ignores all mapping notify events by default because the majority of those 
events are pointless).
 
 
@@ -107,7 +111,7 @@
 
 Pointer hotkeys can be defined by using one of the following special keysym 
names: _button1_, _button2_, _button3_, …, _button24_.
 
-The hotkey and the command may contain sequences of the form 
'{STRING_1,…,STRING_N}'.
+The hotkey and the command may contain sequences of the form 
'{STRING_1,…,STRING_N}'. Braces can be escaped with *\*.
 
 In addition, the sequences can contain ranges of the form _A_-_Z_ where _A_ 
and _Z_ are alphanumeric characters.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sxhkd-0.6.2/src/helpers.c 
new/sxhkd-0.6.3/src/helpers.c
--- old/sxhkd-0.6.2/src/helpers.c       2020-08-02 09:53:02.000000000 +0200
+++ new/sxhkd-0.6.3/src/helpers.c       2025-09-27 16:46:34.000000000 +0200
@@ -79,6 +79,7 @@
        if (redir_fd != -1) {
                dup2(redir_fd, STDOUT_FILENO);
                dup2(redir_fd, STDERR_FILENO);
+               close(redir_fd);
        }
        execvp(cmd[0], cmd);
        err("Spawning failed.\n");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sxhkd-0.6.2/src/parse.c new/sxhkd-0.6.3/src/parse.c
--- old/sxhkd-0.6.2/src/parse.c 2020-08-02 09:53:02.000000000 +0200
+++ new/sxhkd-0.6.3/src/parse.c 2025-09-27 16:46:34.000000000 +0200
@@ -33,7 +33,7 @@
 #include "parse.h"
 
 xcb_keysym_t Alt_L, Alt_R, Super_L, Super_R, Hyper_L, Hyper_R,
-             Meta_L, Meta_R, Mode_switch, Num_Lock, Scroll_Lock;
+             Meta_L, Meta_R, Num_Lock, Scroll_Lock;
 
 keysym_dict_t nks_dict[] = {/*{{{*/
        {"VoidSymbol"                  , 0xffffff}   ,
@@ -2347,6 +2347,12 @@
        {"XF86TouchpadOn"                  , 0x1008FFB0} ,
        {"XF86TouchpadOff"                 , 0x1008FFB1} ,
        {"XF86AudioMicMute"                , 0x1008FFB2} ,
+       {"XF86Keyboard"                    , 0x1008FFB3} ,
+       {"XF86WWAN"                        , 0x1008FFB4} ,
+       {"XF86RFKill"                      , 0x1008FFB5} ,
+       {"XF86AudioPreset"                 , 0x1008FFB6} ,
+       {"XF86RotationLockToggle"          , 0x1008FFB7} ,
+       {"XF86FullScreen"                  , 0x1008FFB8} ,
        {"XF86Switch_VT_1"                 , 0x1008FE01} ,
        {"XF86Switch_VT_2"                 , 0x1008FE02} ,
        {"XF86Switch_VT_3"                 , 0x1008FE03} ,
@@ -2470,6 +2476,11 @@
                chain_t *chain = make_chain();
                if (parse_chain(hotkey, chain)) {
                        hotkey_t *hk = make_hotkey(chain, command);
+                       for (hotkey_t* i = hotkeys_head; i; i = i->next) {
+                               if (chains_interfere(i->chain, hk->chain)) {
+                                       warn("Hotkey interference found and may 
not be matched: '%s' (from '%s').\n", hotkey, hotkey_string);
+                               }
+                       }
                        add_hotkey(hk);
                        if (strcmp(hotkey, last_hotkey) == 0)
                                num_same++;
@@ -2739,7 +2750,7 @@
                *modfield |= (modfield_from_keysym(Meta_L) | 
modfield_from_keysym(Meta_R));
                return true;
        } else if (strcmp(name, "mode_switch") == 0) {
-               *modfield |= modfield_from_keysym(Mode_switch);
+               *modfield |= XCB_MOD_MASK_5;
                return true;
        } else if (strcmp(name, "mod1") == 0) {
                *modfield |= XCB_MOD_MASK_1;
@@ -2797,7 +2808,6 @@
        GETKS(Super_R)
        GETKS(Hyper_L)
        GETKS(Hyper_R)
-       GETKS(Mode_switch)
        GETKS(Num_Lock)
        GETKS(Scroll_Lock)
 #undef GETKS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sxhkd-0.6.2/src/sxhkd.c new/sxhkd-0.6.3/src/sxhkd.c
--- old/sxhkd-0.6.2/src/sxhkd.c 2020-08-02 09:53:02.000000000 +0200
+++ new/sxhkd-0.6.3/src/sxhkd.c 2025-09-27 16:46:34.000000000 +0200
@@ -23,6 +23,7 @@
  */
 
 #include <xcb/xcb_event.h>
+#include <xcb/xkb.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -51,6 +52,8 @@
 int mapping_count;
 int timeout;
 
+char sxhkd_pid[MAXLEN];
+
 hotkey_t *hotkeys_head, *hotkeys_tail;
 bool running, grabbed, toggle_grab, reload, bell, chained, locked;
 xcb_keysym_t abort_keysym;
@@ -281,6 +284,8 @@
        dpy = xcb_connect(NULL, &screen_idx);
        if (xcb_connection_has_error(dpy))
                err("Can't open display.\n");
+       xcb_xkb_use_extension(dpy, XCB_XKB_MAJOR_VERSION, 
XCB_XKB_MINOR_VERSION);
+       xcb_xkb_per_client_flags(dpy, XCB_XKB_ID_USE_CORE_KBD, 
XCB_XKB_PER_CLIENT_FLAG_DETECTABLE_AUTO_REPEAT, 1, 0, 0, 0);
        xcb_screen_t *screen = NULL;
        xcb_screen_iterator_t screen_iter = 
xcb_setup_roots_iterator(xcb_get_setup(dpy));
        for (; screen_iter.rem; xcb_screen_next(&screen_iter), screen_idx--) {
@@ -297,6 +302,9 @@
        symbols = xcb_key_symbols_alloc(dpy);
        hotkeys_head = hotkeys_tail = NULL;
        progress[0] = '\0';
+
+       snprintf(sxhkd_pid, MAXLEN, "%i", getpid());
+       setenv("SXHKD_PID", sxhkd_pid, 1);
 }
 
 void cleanup(void)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sxhkd-0.6.2/src/types.c new/sxhkd-0.6.3/src/types.c
--- old/sxhkd-0.6.2/src/types.c 2020-08-02 09:53:02.000000000 +0200
+++ new/sxhkd-0.6.3/src/types.c 2025-09-27 16:46:34.000000000 +0200
@@ -113,6 +113,25 @@
        return false;
 }
 
+bool chains_interfere(chain_t* a, chain_t* b) {
+       chord_t* i = a->head;
+       chord_t* j = b->head;
+       for (; i && j; i = i->next, j = j->next) {
+               bool match = false;
+               for (chord_t* k = i; k; k = k->more) {
+                       if (match_chord(j, k->event_type, k->keysym, k->button, 
k->modfield)) {
+                               match = true;
+                               break;
+                       }
+               }
+               if (!match) {
+                       break;
+               }
+       }
+       bool result = !i || !j;
+       return result;
+}
+
 chord_t *make_chord(xcb_keysym_t keysym, xcb_button_t button, uint16_t 
modfield, uint8_t event_type, bool replay_event, bool lock_chain)
 {
        chord_t *chord;
@@ -126,7 +145,7 @@
                                for (unsigned char col = 0; col < 
KEYSYMS_PER_KEYCODE; col++) {
                                        xcb_keysym_t ks = 
xcb_key_symbols_get_keysym(symbols, *kc, col);
                                        if (ks == keysym) {
-                                               uint16_t implicit_modfield = 
(col & 1 ? XCB_MOD_MASK_SHIFT : 0) | (col & 2 ? 
modfield_from_keysym(Mode_switch) : 0);
+                                               uint16_t implicit_modfield = 
(col & 1 ? XCB_MOD_MASK_SHIFT : 0) | (col & 2 ? XCB_MOD_MASK_5 : 0);
                                                uint16_t explicit_modfield = 
modfield | implicit_modfield;
                                                chord = malloc(sizeof(chord_t));
                                                bool unique = true;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sxhkd-0.6.2/src/types.h new/sxhkd-0.6.3/src/types.h
--- old/sxhkd-0.6.2/src/types.h 2020-08-02 09:53:02.000000000 +0200
+++ new/sxhkd-0.6.3/src/types.h 2025-09-27 16:46:34.000000000 +0200
@@ -34,8 +34,6 @@
 #define ESCAPE_KEYSYM        0xff1b
 #define SYNCHRONOUS_CHAR     ';'
 
-extern xcb_keysym_t Mode_switch;
-
 typedef struct chord_t chord_t;
 struct chord_t {
        char repr[MAXLEN];
@@ -77,6 +75,7 @@
 
 hotkey_t *find_hotkey(xcb_keysym_t keysym, xcb_button_t button, uint16_t 
modfield, uint8_t event_type, bool *replay_event);
 bool match_chord(chord_t *chord, uint8_t event_type, xcb_keysym_t keysym, 
xcb_button_t button, uint16_t modfield);
+bool chains_interfere(chain_t* a, chain_t* b);
 chord_t *make_chord(xcb_keysym_t keysym, xcb_button_t button, uint16_t 
modfield, uint8_t event_type, bool replay_event, bool lock_chain);
 void add_chord(chain_t *chain, chord_t *chord);
 chain_t *make_chain(void);

Reply via email to