[Builder] Emacs mode and keybindings



I just tested the emacs mode, and it has some issues.
Some commands worked for me, but then it suddently didn't work at all
anymore. I put a printf of priv->cmd  into
gb_source_emacs_key_press_event_cb, and the cause was obvious.
To do key binding matches it creates a string of each key pressed with a
modifier in order, then matches these against a set of regexps.
So, if i type ctrl+x and ctrl+c then it becomes "C-x C-c", which matches
the "^C-x C-c$" exit-the-app regexp.

There are several issues with this:

If I enter any non-matching command, say "C-c C-c" it never detects that
there is no such command, so it never resets. I get this:
 priv->cmd: C-c C-c C-x C-c C-c C-c C-c C-c C-c C-x C-c C-x C-c C-x C-c
Which will never match anything, and i suddenly can't use any emacs
commands anymore.

Secondly this is not how emacs works. Emacs has one global keymap which
is the "normal" commands like entering text or pasting with ctrl-y. But
it also has commands like Ctrl-X which *completely* swap the current
keymap, disabling all global keymaps operations. This is how Ctrl-x
Ctrl-C works, Ctrl-x swaps the keymaps and Ctrl-C is a keybinding in the
new keymap. At any point in a non-global keymap, if you type something
that is not bound you get a beep and "XXX is undefined" warning and get
back to the global keymap. This is different from the above because if
you press ctrl-x first, you can then use the regular key bindings.
For instance you can press ctrl-x, then left arrow (moving the cursor)
and *then* ctrl-c, exiting the app.

Third, this is not how Gtk+ keybindings work. In fact, gtk+ already has
some level of emacs keybindings:
https://git.gnome.org/browse/gtk+/tree/gtk/gtk-keys.css.emacs
If you set the key theme to Emacs you get these everywhere.
I think we should use the same method (CSS + GtkBindingSet) to define
keyboard bindings for gnome-builder. All we need is a way to temporarily
disable the global key bindings and apply a new binding set while we're
in e.g. the Ctrl-x "mode". In fact, it seems to me like this could be
used to implement Vi mode too.

I'll have a quick look at this today, but unfortunately I don't have a
lot of time to work on this atm...

-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 Alexander Larsson                                            Red Hat, Inc 
       alexl redhat com            alexander larsson gmail com 
He's an oversexed coffee-fuelled paramedic on the hunt for the last 
specimen of a great and near-mythical creature. She's a mentally unstable 
psychic research scientist trying to make a difference in a man's world. 
They fight crime! 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]