添加 raise or run 功能并添加对应快捷键

This commit is contained in:
2025-08-27 04:27:12 +08:00
parent 8d9becbf0f
commit 96629c3045
3 changed files with 48 additions and 10 deletions

View File

@@ -101,7 +101,7 @@ void quit(const user_action_arg_t *arg) {
void select_tag(const user_action_arg_t *arg) {
uint32_t tags_mask = get_tags_mask_of_monitor(current_monitor);
uint32_t target_tag = (1 << arg->ui) & tags_mask;
uint32_t target_tag = arg->ui & tags_mask;
if (!target_tag || current_monitor->selected_tags == target_tag) return;
current_monitor->selected_tags = target_tag;
@@ -161,6 +161,29 @@ void focus_monitor(const user_action_arg_t *arg) {
/* TODO: 调整鼠标光标 */
}
void raise_or_run(const user_action_arg_t *arg) {
const char *class = ((const char **)arg->ptr)[0];
const char *command = ((const char **)arg->ptr)[1];
user_action_arg_t argument;
for (monitor_t *m = monitors; m; m = m->next) {
for (client_t *c = m->clients; c; c = c->next) {
window_class_instance_t class_instance;
get_window_class_instance(c->window, &class_instance);
if (!strncmp(class, class_instance.class, sizeof(class_instance.class))) {
current_monitor = m;
argument.ui = c->tags;
select_tag(&argument);
focus(c);
raise_window(c->window);
return;
}
}
}
argument.ptr = command;
spawn(&argument);
}
/* 调试函数,开发完成后删除 */
static void print_monitor_list_info(monitor_t *monitor_list) {
logger("========================= monitor info =========================\n");