seat: add keyboard grabs to close sessions and start new terminals
You can now use ctrl+alt+w to close the current session and ctrl+alt+Return to start a new terminal (if it is built-in). Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit is contained in:
parent
c22fac0129
commit
9946a9e458
@ -103,18 +103,22 @@ static void print_help()
|
||||
"\t --xkb-repeat-rate <msecs> [50]\n"
|
||||
"\t Delay between two key-repeats in ms\n"
|
||||
"\n"
|
||||
"\t --grab-scroll-up <grab> [<Shift>Up]\n"
|
||||
"\t Shortcut to scroll up\n"
|
||||
"\t --grab-scroll-down <grab> [<Shift>Down]\n"
|
||||
"\t Shortcut to scroll down\n"
|
||||
"\t --grab-page-up <grab> [<Shift>Prior]\n"
|
||||
"\t Shortcut to scroll page up\n"
|
||||
"\t --grab-page-down <grab> [<Shift>Next]\n"
|
||||
"\t Shortcut to scroll page down\n"
|
||||
"\t --grab-session-next <grab> [<Ctrl><Alt>Right]\n"
|
||||
"\t Switch to next session\n"
|
||||
"\t --grab-session-prev <grab> [<Ctrl><Alt>Left]\n"
|
||||
"\t Switch to previous session\n"
|
||||
"\t --grab-scroll-up <grab> [<Shift>Up]\n"
|
||||
"\t Shortcut to scroll up\n"
|
||||
"\t --grab-scroll-down <grab> [<Shift>Down]\n"
|
||||
"\t Shortcut to scroll down\n"
|
||||
"\t --grab-page-up <grab> [<Shift>Prior]\n"
|
||||
"\t Shortcut to scroll page up\n"
|
||||
"\t --grab-page-down <grab> [<Shift>Next]\n"
|
||||
"\t Shortcut to scroll page down\n"
|
||||
"\t --grab-session-next <grab> [<Ctrl><Alt>Right]\n"
|
||||
"\t Switch to next session\n"
|
||||
"\t --grab-session-prev <grab> [<Ctrl><Alt>Left]\n"
|
||||
"\t Switch to previous session\n"
|
||||
"\t --grab-session-close <grab> [<Ctrl><Alt>W]\n"
|
||||
"\t Close current session\n"
|
||||
"\t --grab-terminal-new <grab> [<Ctrl><Alt>Return]\n"
|
||||
"\t Create new terminal session\n"
|
||||
"\n"
|
||||
"Font Options:\n"
|
||||
"\t --font-engine <engine> [pango]\n"
|
||||
@ -255,6 +259,12 @@ static struct conf_grab def_grab_session_next =
|
||||
static struct conf_grab def_grab_session_prev =
|
||||
CONF_SINGLE_GRAB(SHL_CONTROL_MASK | SHL_ALT_MASK, XKB_KEY_Left);
|
||||
|
||||
static struct conf_grab def_grab_session_close =
|
||||
CONF_SINGLE_GRAB(SHL_CONTROL_MASK | SHL_ALT_MASK, XKB_KEY_w);
|
||||
|
||||
static struct conf_grab def_grab_terminal_new =
|
||||
CONF_SINGLE_GRAB(SHL_CONTROL_MASK | SHL_ALT_MASK, XKB_KEY_Return);
|
||||
|
||||
struct conf_option options[] = {
|
||||
CONF_OPTION_BOOL('h', "help", aftercheck_help, &kmscon_conf.help, false),
|
||||
CONF_OPTION_BOOL('v', "verbose", NULL, &kmscon_conf.verbose, false),
|
||||
@ -277,6 +287,8 @@ struct conf_option options[] = {
|
||||
CONF_OPTION_GRAB(0, "grab-page-down", NULL, &kmscon_conf.grab_page_down, &def_grab_page_down),
|
||||
CONF_OPTION_GRAB(0, "grab-session-next", NULL, &kmscon_conf.grab_session_next, &def_grab_session_next),
|
||||
CONF_OPTION_GRAB(0, "grab-session-prev", NULL, &kmscon_conf.grab_session_prev, &def_grab_session_prev),
|
||||
CONF_OPTION_GRAB(0, "grab-session-close", NULL, &kmscon_conf.grab_session_close, &def_grab_session_close),
|
||||
CONF_OPTION_GRAB(0, "grab-terminal-new", NULL, &kmscon_conf.grab_terminal_new, &def_grab_terminal_new),
|
||||
CONF_OPTION_STRING(0, "xkb-layout", NULL, &kmscon_conf.xkb_layout, "us"),
|
||||
CONF_OPTION_STRING(0, "xkb-variant", NULL, &kmscon_conf.xkb_variant, ""),
|
||||
CONF_OPTION_STRING(0, "xkb-options", NULL, &kmscon_conf.xkb_options, ""),
|
||||
|
@ -85,6 +85,10 @@ struct kmscon_conf_t {
|
||||
struct conf_grab *grab_session_next;
|
||||
/* session-prev grab */
|
||||
struct conf_grab *grab_session_prev;
|
||||
/* session-close grab */
|
||||
struct conf_grab *grab_session_close;
|
||||
/* terminal-new grab */
|
||||
struct conf_grab *grab_terminal_new;
|
||||
|
||||
/* seats */
|
||||
char **seats;
|
||||
|
@ -303,6 +303,8 @@ static void seat_input_event(struct uterm_input *input,
|
||||
void *data)
|
||||
{
|
||||
struct kmscon_seat *seat = data;
|
||||
struct kmscon_session *s;
|
||||
int ret;
|
||||
|
||||
if (ev->handled)
|
||||
return;
|
||||
@ -319,6 +321,26 @@ static void seat_input_event(struct uterm_input *input,
|
||||
seat_activate_prev(seat);
|
||||
return;
|
||||
}
|
||||
if (conf_grab_matches(kmscon_conf.grab_session_close,
|
||||
ev->mods, ev->num_syms, ev->keysyms)) {
|
||||
ev->handled = true;
|
||||
kmscon_session_unregister(seat->cur_sess);
|
||||
return;
|
||||
}
|
||||
if (conf_grab_matches(kmscon_conf.grab_terminal_new,
|
||||
ev->mods, ev->num_syms, ev->keysyms)) {
|
||||
ev->handled = true;
|
||||
ret = kmscon_terminal_register(&s, seat);
|
||||
if (ret == -EOPNOTSUPP) {
|
||||
log_notice("terminal support not compiled in");
|
||||
} else if (ret) {
|
||||
log_error("cannot register terminal session: %d", ret);
|
||||
} else {
|
||||
kmscon_session_enable(s);
|
||||
kmscon_session_activate(s);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
int kmscon_seat_new(struct kmscon_seat **out,
|
||||
|
Loading…
x
Reference in New Issue
Block a user