Hello Reid, Nice work. We'll fix the other minor issues. Let us track this on bugzilla.gnome Do file a bug for this and Cc me in there. TIA
Regards, --Bharath On Tue, 2009-06-16 at 15:40 -0400, Reid Thompson wrote: > This appears to work for me, opening the email in gvim with the cursor > properly located. > Along with a review, it likely needs a 'quickfix' with regard to the > htmlengine.h include. I'm not familiar enough with the build environment > to know if there is a more proper/correct way of getting it included. > > There is also a single change to mono-plugin.c that I had to make in order to > get mono-plugin.c to compile. > > Signed-off-by: Reid Thompson <jreidthomp...@nc.rr.com> > --- > plugins/external-editor/external-editor.c | 66 > ++++++++++++++++++++++++++++- > plugins/mono/mono-plugin.c | 2 +- > 2 files changed, 66 insertions(+), 2 deletions(-) > > diff --git a/plugins/external-editor/external-editor.c > b/plugins/external-editor/external-editor.c > index a7f06b6..0ed4d8f 100644 > --- a/plugins/external-editor/external-editor.c > +++ b/plugins/external-editor/external-editor.c > @@ -34,6 +34,8 @@ > #include <e-msg-composer.h> > #include <camel/camel-mime-filter-tohtml.h> > > +#include "/media/disk-1/home/evo-src/git/gtkhtml/gtkhtml/htmlengine.h" > + > #include <glib/gi18n-lib.h> > #include <glib-object.h> > #include <glib.h> > @@ -62,6 +64,7 @@ static void ee_editor_immediate_launch_changed (GtkWidget > *checkbox); > static void async_external_editor (EMsgComposer *composer); > static gboolean editor_running (void); > static gboolean key_press_cb(GtkWidget * widget, GdkEventKey * event, > EMsgComposer *composer); > +static gint numlines(gchar *text, gint pos); > > /* used to track when the external editor is active */ > static GThread *editor_thread; > @@ -214,8 +217,19 @@ async_external_editor (EMsgComposer *composer) > GConfClient *gconf; > gchar *editor_cmd_line = NULL; > gint fd; > + GtkHTML *html; > + GtkhtmlEditor *editor; > + gint cursor_position = 0; > + gint cursor_offset = 0; > + gint lineno = 0; > + gchar *contents; > + gchar *linenostr; > + gchar *cursor_offsetstr; > + gsize length = 0; > > - fd = g_file_open_tmp (NULL, &filename, NULL); > + > + /* prefix temp files with evo so .*vimrc can be setup to recognize them > */ > + fd = g_file_open_tmp ("evoXXXXXX", &filename, NULL); > if (fd > 0) { > close (fd); > /* Push the text (if there is one) from the composer to the > file */ > @@ -242,6 +256,35 @@ async_external_editor (EMsgComposer *composer) > } > g_object_unref (gconf); > > + /* if gvim is editor, configure editor_cmd_line to pass cursor location > */ > + if (g_strrstr(editor_cmd_line, "vim") != NULL) > + { > + editor = GTKHTML_EDITOR (composer); > + html = gtkhtml_editor_get_html (editor); > + cursor_position = html->engine->cursor->position; > + cursor_offset = html->engine->cursor->offset; > + > + /* increment 1 so that entering vim insert mode places you in > the same > + * entry position you were at in the html */ > + ++cursor_offset; > + > + /* calculate the line number that the cursor is in */ > + contents = gtkhtml_editor_get_text_plain (editor, &length); > + lineno = numlines(contents, cursor_position); > + g_free(contents); > + > + /* setup the editor_cmd_line */ > + editor_cmd_line = g_strconcat(editor_cmd_line, " \"+call > cursor(", NULL); > + linenostr = g_strdup_printf("%d", lineno); > + editor_cmd_line = g_strconcat(editor_cmd_line, linenostr, NULL); > + editor_cmd_line = g_strconcat(editor_cmd_line, ",", NULL); > + cursor_offsetstr = g_strdup_printf("%d", cursor_offset); > + editor_cmd_line = g_strconcat(editor_cmd_line, > cursor_offsetstr, NULL); > + editor_cmd_line = g_strconcat(editor_cmd_line, ")\"", NULL); > + g_free(linenostr); > + g_free(cursor_offsetstr); > + } > + > editor_cmd_line = g_strconcat(editor_cmd_line, " ", filename, NULL); > > if (!g_spawn_command_line_sync(editor_cmd_line, NULL, NULL, &status, > NULL)) > @@ -393,3 +436,24 @@ e_plugin_ui_init (GtkUIManager *manager, EMsgComposer > *composer) > > return TRUE; > } > + > +static gint > +numlines(gchar *text, gint pos) > +{ > + gint ctr = 0; > + gint lineno = 0; > + > + for (ctr = 0; ctr <= pos; ++ctr) > + { > + if (text[ctr] == '\n') > + { > + ++lineno; > + } > + } > + if (lineno > 0) > + { > + ++lineno; > + } > + > + return(lineno); > +} > diff --git a/plugins/mono/mono-plugin.c b/plugins/mono/mono-plugin.c > index 76b1e42..86bbb43 100644 > --- a/plugins/mono/mono-plugin.c > +++ b/plugins/mono/mono-plugin.c > @@ -159,7 +159,7 @@ epm_invoke(EPlugin *ep, const gchar *name, gpointer data) > > if (res) { > gpointer *p = mono_object_unbox(res); > - d(printf("mono method returned '%p' %ld\n", *p, (long gint)*p)); > + d(printf("mono method returned '%p' %ld\n", *p, (long int)*p)); > return *p; > } else > return NULL; > -- > 1.6.0.6 > _______________________________________________ Evolution-list mailing list Evolution-list@gnome.org http://mail.gnome.org/mailman/listinfo/evolution-list