[Builder] Emacs mode and keybindings
- From: Alexander Larsson <alexl redhat com>
- To: builder-list gnome org
- Subject: [Builder] Emacs mode and keybindings
- Date: Wed, 18 Feb 2015 09:23:30 +0100
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]