aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.def.h10
-rw-r--r--main.c6
2 files changed, 15 insertions, 1 deletions
diff --git a/config.def.h b/config.def.h
index 76df792..587e85b 100644
--- a/config.def.h
+++ b/config.def.h
@@ -32,6 +32,10 @@ static void _kbd_insmode(Cinnamon* cinnamon, void* arg) {
set_mode(cinnamon, 1);
}
+static void _kbd_passthru(Cinnamon* cinnamon, void* arg) {
+ set_mode(cinnamon, 2);
+}
+
static void _kbd_tabopen(Cinnamon* cinnamon, void* arg) {
/* wrapper to satisfy the arg + keep keybinds isolated */
tabopen(cinnamon);
@@ -69,10 +73,16 @@ static void _kbd_tabclose(Cinnamon* cinnamon, void* arg) {
tabclose(cinnamon);
}
+static void _kbd_toggletabs(Cinnamon* cinnamon, void* arg) {
+ gtk_notebook_set_show_tabs(GTK_NOTEBOOK(cinnamon->notebook), !gtk_notebook_get_show_tabs(GTK_NOTEBOOK(cinnamon->notebook)));
+}
+
static const Keybind keybinds[] = {
{ "t", &_kbd_tabopen, NULL },
{ "d", &_kbd_tabclose, NULL },
// { "o", ":commandline_show \":open\"" },
+ { "s", &_kbd_toggletabs, NULL },
+ { "<S-i>", &_kbd_passthru, NULL },
{ "i", &_kbd_insmode, NULL },
{ "j", &_kbd_scroll, "down" },
{ "k", &_kbd_scroll, "up" },
diff --git a/main.c b/main.c
index 5f2ef12..f585465 100644
--- a/main.c
+++ b/main.c
@@ -46,6 +46,7 @@ static void parse_keybind(const char *key, guint *keyval, GdkModifierType *mods)
if (strstr(key, "A-")) *mods |= GDK_MOD1_MASK;
/* everything after the last '-' and before '>' */
+ /* this means we can't have things like <S-A-z> for example, but too bad so sad. cannot be bothered to implement that at the moment */
start = strrchr(key, '-') + 1;
end = strchr(key, '>');
snprintf(name, sizeof(name), "%.*s", (int)(end - start), start);
@@ -60,6 +61,7 @@ static void on_title_changed(WebKitWebView *webview, GParamSpec *pspec, GtkNoteb
static gboolean on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer data) {
Cinnamon* cinnamon = (Cinnamon*)data;
+ GdkModifierType relevant = GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK;
if (mode == 1 || mode == 2) {
if (mode == 1 && event->keyval == GDK_KEY_Escape) {
set_mode(cinnamon, 0);
@@ -68,6 +70,9 @@ static gboolean on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer dat
cmdbar_focused = false;
}
}
+ if (mode == 2 && event->keyval == GDK_KEY_Escape && (event->state & relevant) == GDK_SHIFT_MASK) {
+ set_mode(cinnamon, 0);
+ }
}
else {
if (event->keyval == GDK_KEY_colon) {
@@ -82,7 +87,6 @@ static gboolean on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer dat
guint keyval;
GdkModifierType mods;
parse_keybind(keybinds[i].key, &keyval, &mods);
- GdkModifierType relevant = GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK;
if (gdk_keyval_to_lower(event->keyval) == keyval && (event->state & relevant) == mods) {
/* we dont know what to do yet, printf */
keybinds[i].fptr(cinnamon, keybinds[i].arg);