Skip to content

Commit f86b597

Browse files
committed
make process name also match bundle name and bundle id
1 parent a7105d5 commit f86b597

File tree

4 files changed

+63
-1
lines changed

4 files changed

+63
-1
lines changed

src/carbon.c

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,44 @@ find_active_process_name(void)
3030
GetFrontProcess(&psn);
3131
return find_process_name_for_psn(&psn);
3232
}
33+
34+
static inline char *
35+
find_process_bundle_id_for_psn(ProcessSerialNumber *psn)
36+
{
37+
CFDictionaryRef process_info_ref = ProcessInformationCopyDictionary(psn, kProcessDictionaryIncludeAllInformationMask);
38+
CFStringRef process_bundle_id_ref = CFDictionaryGetValue(process_info_ref, kCFBundleIdentifierKey);
39+
char *process_bundle_id = copy_cfstring(process_bundle_id_ref);
40+
for (char *s = process_bundle_id; *s; ++s) *s = tolower(*s);
41+
CFRelease(process_info_ref);
42+
return process_bundle_id;
43+
}
44+
45+
static inline char *
46+
find_active_process_bundle_id(void)
47+
{
48+
ProcessSerialNumber psn;
49+
GetFrontProcess(&psn);
50+
return find_process_bundle_id_for_psn(&psn);
51+
}
52+
53+
static inline char *
54+
find_process_bundle_name_for_psn(ProcessSerialNumber *psn)
55+
{
56+
CFDictionaryRef process_info_ref = ProcessInformationCopyDictionary(psn, kProcessDictionaryIncludeAllInformationMask);
57+
CFStringRef process_bundle_name_ref = CFDictionaryGetValue(process_info_ref, kCFBundleNameKey);
58+
char *process_bundle_name = copy_cfstring(process_bundle_name_ref);
59+
for (char *s = process_bundle_name; *s; ++s) *s = tolower(*s);
60+
CFRelease(process_info_ref);
61+
return process_bundle_name;
62+
}
63+
64+
static inline char *
65+
find_active_process_bundle_name(void)
66+
{
67+
ProcessSerialNumber psn;
68+
GetFrontProcess(&psn);
69+
return find_process_bundle_name_for_psn(&psn);
70+
}
3371
#pragma clang diagnostic pop
3472

3573
static OSStatus
@@ -55,6 +93,20 @@ carbon_event_handler(EventHandlerCallRef ref, EventRef event, void *context)
5593

5694
carbon->process_name = find_process_name_for_psn(&psn);
5795

96+
if (carbon->process_bundle_id) {
97+
free(carbon->process_bundle_id);
98+
carbon->process_bundle_id = NULL;
99+
}
100+
101+
carbon->process_bundle_id = find_process_bundle_id_for_psn(&psn);
102+
103+
if (carbon->process_bundle_name) {
104+
free(carbon->process_bundle_name);
105+
carbon->process_bundle_name = NULL;
106+
}
107+
108+
carbon->process_bundle_name = find_process_bundle_name_for_psn(&psn);
109+
58110
return noErr;
59111
}
60112

@@ -65,6 +117,8 @@ bool carbon_event_init(struct carbon_event *carbon)
65117
carbon->type.eventClass = kEventClassApplication;
66118
carbon->type.eventKind = kEventAppFrontSwitched;
67119
carbon->process_name = find_active_process_name();
120+
carbon->process_bundle_id = find_active_process_bundle_id();
121+
carbon->process_bundle_name = find_active_process_bundle_name();
68122

69123
return InstallEventHandler(carbon->target,
70124
carbon->handler,

src/carbon.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ struct carbon_event
1010
EventTypeSpec type;
1111
EventHandlerRef handler_ref;
1212
char * volatile process_name;
13+
char * volatile process_bundle_id;
14+
char * volatile process_bundle_name;
1315
};
1416

1517
char *find_process_name_for_pid(pid_t pid);

src/hotkey.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,9 @@ find_process_command_mapping(struct hotkey *hotkey, uint32_t *capture, struct ca
147147
bool found = false;
148148

149149
for (int i = 0; i < buf_len(hotkey->process_name); ++i) {
150-
if (same_string(carbon->process_name, hotkey->process_name[i])) {
150+
if (same_string(carbon->process_name, hotkey->process_name[i])
151+
|| same_string(carbon->process_bundle_id, hotkey->process_name[i])
152+
|| same_string(carbon->process_bundle_name, hotkey->process_name[i])) {
151153
result = hotkey->command[i];
152154
found = true;
153155
break;

src/skhd.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,8 @@ static EVENT_TAP_CALLBACK(key_handler)
170170
} break;
171171
case kCGEventKeyDown: {
172172
if (table_find(&blacklst, carbon.process_name)) return event;
173+
if (table_find(&blacklst, carbon.process_bundle_id)) return event;
174+
if (table_find(&blacklst, carbon.process_bundle_name)) return event;
173175
if (!current_mode) return event;
174176

175177
BEGIN_TIMED_BLOCK("handle_keypress");
@@ -181,6 +183,8 @@ static EVENT_TAP_CALLBACK(key_handler)
181183
} break;
182184
case NX_SYSDEFINED: {
183185
if (table_find(&blacklst, carbon.process_name)) return event;
186+
if (table_find(&blacklst, carbon.process_bundle_id)) return event;
187+
if (table_find(&blacklst, carbon.process_bundle_name)) return event;
184188
if (!current_mode) return event;
185189

186190
struct hotkey eventkey;

0 commit comments

Comments
 (0)