[gnome-builder/wip/alexl/emacs-css-keys: 5/5] Replace gb-emacs-source with CSS based keybindings
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/alexl/emacs-css-keys: 5/5] Replace gb-emacs-source with CSS based keybindings
- Date: Wed, 18 Feb 2015 17:21:32 +0000 (UTC)
commit d21fa4ec2e9ac9149f40b3c0dc4d3b4cf73e8032
Author: Alexander Larsson <alexl redhat com>
Date: Wed Feb 18 18:17:13 2015 +0100
Replace gb-emacs-source with CSS based keybindings
This also adds a bunch of stuff from the default.ini keybindings
file that was not bound in emacs mode before.
src/app/gb-application.c | 21 +-
src/editor/gb-source-view.c | 22 -
src/editor/gb-source-view.h | 2 -
src/emacs/gb-source-emacs.c | 1365 -----------------------------
src/emacs/gb-source-emacs.h | 65 --
src/gnome-builder.mk | 2 -
src/resources/css/emacs.css | 107 +++
src/resources/gnome-builder.gresource.xml | 1 +
8 files changed, 128 insertions(+), 1457 deletions(-)
---
diff --git a/src/app/gb-application.c b/src/app/gb-application.c
index d7f6271..ec59bf9 100644
--- a/src/app/gb-application.c
+++ b/src/app/gb-application.c
@@ -37,6 +37,7 @@
#include "gb-workbench.h"
#define ADWAITA_CSS "resource:///org/gnome/builder/css/builder.Adwaita.css"
+#define EMACS_CSS "resource:///org/gnome/builder/css/emacs.css"
#define LANGUAGE_SCHEMA "org.gnome.builder.editor.language"
#define LANGUAGE_PATH "/org/gnome/builder/editor/language/"
#define GSV_PATH "resource:///org/gnome/builder/styles/"
@@ -46,6 +47,7 @@ struct _GbApplicationPrivate
GbKeybindings *keybindings;
GSettings *editor_settings;
GbPreferencesWindow *preferences_window;
+ GtkCssProvider *emacs_provider;
};
G_DEFINE_TYPE_WITH_PRIVATE (GbApplication, gb_application, GTK_TYPE_APPLICATION)
@@ -356,11 +358,28 @@ gb_application_emacs_mode_changed (GbApplication *self,
if (g_settings_get_boolean (settings, "emacs-mode"))
{
+ if (self->priv->emacs_provider == NULL)
+ {
+ GFile *file = g_file_new_for_uri (EMACS_CSS);
+ self->priv->emacs_provider = gtk_css_provider_new ();
+ gtk_css_provider_load_from_file (self->priv->emacs_provider, file, NULL);
+ g_object_unref (file);
+ }
+
+ gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
+ GTK_STYLE_PROVIDER (self->priv->emacs_provider),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+
g_settings_set_boolean (settings, "vim-mode", FALSE);
gb_application_load_keybindings (self, "emacs");
}
else
- gb_application_load_keybindings (self, "default");
+ {
+ if (self->priv->emacs_provider)
+ gtk_style_context_remove_provider_for_screen (gdk_screen_get_default (),
+ GTK_STYLE_PROVIDER (self->priv->emacs_provider));
+ gb_application_load_keybindings (self, "default");
+ }
}
static void
diff --git a/src/editor/gb-source-view.c b/src/editor/gb-source-view.c
index fa98f46..09c58d4 100644
--- a/src/editor/gb-source-view.c
+++ b/src/editor/gb-source-view.c
@@ -44,7 +44,6 @@
#include "gb-source-snippet-private.h"
#include "gb-source-view.h"
#include "gb-source-vim.h"
-#include "gb-source-emacs.h"
#include "gb-source-view-mode.h"
#include "gb-widget.h"
@@ -62,7 +61,6 @@ struct _GbSourceViewPrivate
GtkSourceCompletionProvider *snippets_provider;
GtkSourceCompletionProvider *words_provider;
GbSourceVim *vim;
- GbSourceEmacs *emacs;
GtkCssProvider *css_provider;
GbSourceViewMode *mode;
@@ -131,14 +129,6 @@ gb_source_view_get_vim (GbSourceView *view)
return view->priv->vim;
}
-GbSourceEmacs *
-gb_source_view_get_emacs (GbSourceView *view)
-{
- g_return_val_if_fail (GB_IS_SOURCE_VIEW (view), NULL);
-
- return view->priv->emacs;
-}
-
gboolean
gb_source_view_get_insert_matching_brace (GbSourceView *view)
{
@@ -249,7 +239,6 @@ gb_source_view_disconnect_settings (GbSourceView *view)
g_settings_unbind (view, "tab-width");
g_settings_unbind (view, "font-name");
g_settings_unbind (view->priv->vim, "enabled");
- g_settings_unbind (view->priv->emacs, "enabled");
g_clear_object (&view->priv->language_settings);
g_clear_object (&view->priv->editor_settings);
@@ -316,8 +305,6 @@ gb_source_view_connect_settings (GbSourceView *view)
buffer, "style-scheme-name", G_SETTINGS_BIND_GET);
g_settings_bind (view->priv->editor_settings, "vim-mode",
view->priv->vim, "enabled", G_SETTINGS_BIND_GET);
- g_settings_bind (view->priv->editor_settings, "emacs-mode",
- view->priv->emacs, "enabled", G_SETTINGS_BIND_GET);
g_settings_bind (view->priv->editor_settings, "word-completion",
view, "enable-word-completion", G_SETTINGS_BIND_GET);
g_settings_bind (view->priv->editor_settings, "show-line-numbers",
@@ -2158,7 +2145,6 @@ gb_source_view_finalize (GObject *object)
g_clear_object (&priv->snippets_provider);
g_clear_object (&priv->words_provider);
g_clear_object (&priv->vim);
- g_clear_object (&priv->emacs);
g_clear_object (&priv->css_provider);
g_clear_object (&priv->mode);
@@ -2544,14 +2530,6 @@ gb_source_view_init (GbSourceView *view)
G_CONNECT_SWAPPED);
/*
- * Setup Emacs integration.
- */
- view->priv->emacs = g_object_new (GB_TYPE_SOURCE_EMACS,
- "enabled", FALSE,
- "text-view", view,
- NULL);
-
- /*
* We block completion when we are not focused so that two SourceViews
* viewing the same GtkTextBuffer do not both show completion windows.
*/
diff --git a/src/editor/gb-source-view.h b/src/editor/gb-source-view.h
index 53a094c..11bc2dd 100644
--- a/src/editor/gb-source-view.h
+++ b/src/editor/gb-source-view.h
@@ -24,7 +24,6 @@
#include "gb-source-auto-indenter.h"
#include "gb-source-snippet.h"
#include "gb-source-vim.h"
-#include "gb-source-emacs.h"
G_BEGIN_DECLS
@@ -96,7 +95,6 @@ void gb_source_view_set_overwrite_braces (GbSourceView
void gb_source_view_set_show_shadow (GbSourceView *view,
gboolean show_shadow);
GbSourceVim *gb_source_view_get_vim (GbSourceView *view);
-GbSourceEmacs *gb_source_view_get_emacs (GbSourceView *view);
G_END_DECLS
diff --git a/src/gnome-builder.mk b/src/gnome-builder.mk
index da9a579..6a29c32 100644
--- a/src/gnome-builder.mk
+++ b/src/gnome-builder.mk
@@ -102,8 +102,6 @@ libgnome_builder_la_SOURCES = \
src/editor/gb-source-view.h \
src/editor/gb-source-view-mode.c \
src/editor/gb-source-view-mode.h \
- src/emacs/gb-source-emacs.c \
- src/emacs/gb-source-emacs.h \
src/fuzzy/fuzzy.c \
src/fuzzy/fuzzy.h \
src/gca/gca-diagnostics.c \
diff --git a/src/resources/css/emacs.css b/src/resources/css/emacs.css
new file mode 100644
index 0000000..528ecf6
--- /dev/null
+++ b/src/resources/css/emacs.css
@@ -0,0 +1,107 @@
+ binding-set builder-emacs-text-entry
+{
+ bind "<ctrl>b" { "move-cursor" (logical-positions, -1, 0) };
+ bind "<shift><ctrl>b" { "move-cursor" (logical-positions, -1, 1) };
+ bind "<ctrl>f" { "move-cursor" (logical-positions, 1, 0) };
+ bind "<shift><ctrl>f" { "move-cursor" (logical-positions, 1, 1) };
+
+ bind "<alt>b" { "move-cursor" (words, -1, 0) };
+ bind "<shift><alt>b" { "move-cursor" (words, -1, 1) };
+ bind "<alt>f" { "move-cursor" (words, 1, 0) };
+ bind "<shift><alt>f" { "move-cursor" (words, 1, 1) };
+
+ bind "<ctrl>a" { "move-cursor" (paragraph-ends, -1, 0) };
+ bind "<shift><ctrl>a" { "move-cursor" (paragraph-ends, -1, 1) };
+ bind "<ctrl>e" { "move-cursor" (paragraph-ends, 1, 0) };
+ bind "<shift><ctrl>e" { "move-cursor" (paragraph-ends, 1, 1) };
+
+ bind "<ctrl>w" { "cut-clipboard" () };
+ bind "<alt>w" { "copy-clipboard" () };
+ bind "<ctrl>y" { "paste-clipboard" () };
+
+ bind "<ctrl>d" { "delete-from-cursor" (chars, 1) };
+ bind "<alt>d" { "delete-from-cursor" (word-ends, 1) };
+ bind "<ctrl>k" { "delete-from-cursor" (paragraph-ends, 1) };
+ bind "<alt>backslash" { "delete-from-cursor" (whitespace, 1) };
+
+ bind "<alt>space" { "delete-from-cursor" (whitespace, 1)
+ "insert-at-cursor" (" ") };
+ bind "<alt>KP_Space" { "delete-from-cursor" (whitespace, 1)
+ "insert-at-cursor" (" ") };
+}
+
+/*
+ * Bindings for GtkTextView
+ */
+ binding-set builder-emacs-text-view
+{
+ bind "<ctrl>p" { "move-cursor" (display-lines, -1, 0) };
+ bind "<shift><ctrl>p" { "move-cursor" (display-lines, -1, 1) };
+ bind "<ctrl>n" { "move-cursor" (display-lines, 1, 0) };
+ bind "<shift><ctrl>n" { "move-cursor" (display-lines, 1, 1) };
+
+ bind "<ctrl>space" { "set-anchor" () };
+ bind "<ctrl>KP_Space" { "set-anchor" () };
+}
+
+ binding-set builder-emacs-source-view
+{
+ bind "<ctrl>x" { "set-mode" ("emacs-x", transient) };
+ bind "<ctrl>underscore" { "undo" () };
+ bind "<alt>x" { "action" ("win", "show-command-bar", "") };
+ bind "<ctrl>s" { "action" ("editor-frame", "find", "") };
+ bind "<ctrl>period" { "action" ("win", "global-search", "") };
+ bind "<ctrl>comma" { "action" ("app", "preferences", "") };
+ bind "<alt>n" { "action" ("editor-frame", "next-diagnostic", "") };
+ bind "<alt>p" { "action" ("editor-frame", "previous-diagnostic", "") };
+ bind "<ctrl>j" { "action" ("editor-view", "switch-pane", "") };
+ bind "<shift><ctrl>j" { "action" ("editor-view", "toggle-split", "") };
+ bind "<ctrl><alt>Page_Up" { "action" ("stack", "previous-document", "") };
+ bind "<ctrl><alt>Page_Down" { "action" ("stack", "next-document", "") };
+}
+
+ binding-set builder-emacs-source-view-x
+{
+ bind "<ctrl>c" { "action" ("app", "quit", "") };
+ bind "0" { "action" ("stack", "close", "") };
+ bind "k" { "action" ("stack", "close", "") };
+ bind "<ctrl>f" { "action" ("workspace", "open", "") };
+ bind "<ctrl>s" { "action" ("stack", "save", "") };
+ bind "s" { "action" ("win", "save-all", "") };
+ bind "b" { "action" ("workspace", "new-document", "") };
+ bind "<ctrl>w" { "action" ("stack", "save-as", "") };
+ bind "u" { "redo" () };
+ bind "2" { "action" ("editor-view", "toggle-split", "") };
+ bind "3" { "action" ("stack", "split-document-right", "") };
+ bind "o" { "action" ("stack", "focus-right", "") };
+}
+
+/*
+ * Bindings for GtkTreeView
+ */
+ binding-set builder-emacs-tree-view
+{
+ bind "<ctrl>s" { "start-interactive-search" () };
+ bind "<ctrl>f" { "move-cursor" (logical-positions, 1) };
+ bind "<ctrl>b" { "move-cursor" (logical-positions, -1) };
+}
+
+GtkEntry {
+ gtk-key-bindings: builder-emacs-text-entry;
+}
+
+GtkTextView {
+ gtk-key-bindings: builder-emacs-text-entry, builder-emacs-text-view;
+}
+
+GtkSourceView {
+ gtk-key-bindings: builder-emacs-text-entry, builder-emacs-source-view, builder-emacs-text-view;
+}
+
+GbSourceViewMode.emacs-x {
+ gtk-key-bindings: builder-emacs-source-view-x;
+}
+
+GtkTreeView {
+ gtk-key-bindings: builder-emacs-tree-view;
+}
diff --git a/src/resources/gnome-builder.gresource.xml b/src/resources/gnome-builder.gresource.xml
index c6c6c57..5298619 100644
--- a/src/resources/gnome-builder.gresource.xml
+++ b/src/resources/gnome-builder.gresource.xml
@@ -2,6 +2,7 @@
<gresources>
<gresource prefix="/org/gnome/builder">
<file>css/builder.Adwaita.css</file>
+ <file>css/emacs.css</file>
<file>css/markdown.css</file>
<file>editor/uncrustify/uncrustify.c.cfg</file>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]