Re: Code completion proposal for GtkSourceView
- From: Emmanuele Bassi <ebassi gmail com>
- To: Paolo Maggi <paolo maggi polito it>
- Cc: Gnome Devtools <gnome-devtools gnome org>
- Subject: Re: Code completion proposal for GtkSourceView
- Date: Sun, 16 Jan 2005 23:58:43 +0100
* Paolo Maggi <paolo maggi polito it>:
> I have read your specification but I'm unable to comment on it since I
> have not understood how your GtkSourceCompletionEngine is going to
> interact with GtkSourceBuffer. Could you please try to be more clear
> about this really important aspect?
Right now, and as a first implementation of my specs, I was planning
little or no interaction; basically, the GtkSourceCompletionEngine class
will hold a reference to the GtkSourceBuffer.
> Why complete takes two GtkTextIter as parameters and can_complete does
> not?
The ::complete vfunc is were the magic happens, i.e.:
GtkSourceBuffer *sb;
GtkSourceCompletionEngine *sce;
GSList *alternatives;
sce = my_code_completion_engine ();
gtk_source_completion_engine_set_buffer (sce, GTK_TEXT_BUFFER (sb));
alternatives = gtk_source_completion_engine (sce);
...
A basic form of code completion feature should be implemented like this.
The ::can_complete method is a flag setter like GtkSourceUndoManager::can_undo.
Imagine a completion engine implemented upon CTags: if ctags has not
been found on the system, code completion will be disabled at runtime; the
code above would become:
GtkSourceBuffer *sb;
GtkSourceCompletionEngine *sce;
GSList *alternatives;
sce = my_code_completion_engine ();
+ if (! gtk_source_completion_engine_can_complete (sce))
+ {
+ error_message_dialog ("No code completion available");
+ return;
+ }
+
gtk_source_completion_engine_set_buffer (sce, GTK_TEXT_BUFFER (sb));
alternatives = gtk_source_completion_engine (sce);
...
> I'm not sure that complete should return a list of strings. I think you
> should return some more complex object. For example, you would have to
> show the user the visibility (public/private/protected) of the function
> you are going to complete and eventually some form of documentation.
This would mean creating a CompletionMeta object, which could contain
some user stuff. Something along these lines:
/* visibility flags */
typedef enum {
GTK_SOURCE_META_PUBLIC = 1<<0,
GTK_SOURCE_META_PRIVATE = 1<<1,
GTK_SOURCE_META_PROTECTED = 1<<2,
...
} GtkSourceMetaVisibility;
/* function */
struct _GtkSourceFunctionMeta
{
gint visibility : 1;
gchar *name;
gint args_num;
gchar **args_types;
gchar *return_type;
};
/* variable */
struct _GtkSourceVariableMeta
{
gint visibility : 1;
gchar *name;
gchar *type;
};
/* symbolic stuff (label, macro, etc.) */
struct _GtkSourceSymbolicMeta
{
gchar *name;
}
/* opaque container types */
typedef enum {
GTK_SOURCE_META_FUNCTION = 0,
GTK_SOURCE_META_VARIABLE,
GTK_SOURCE_META_SYMBOL,
...
} GtkSourceMetaType;
/* the opaque container for metadata */
struct _GtkSourceCompletionMeta
{
GtkSourceMetaType type;
union {
GtkSourceFunctionMeta *function;
GtkSourceVariableMeta *variable;
GtkSourceSymbolicMeta *symbol;
...
} d;
};
> I gave the problem of displaying an autocompletion list some thought
> last year and I should have a prototype on one of my PC... I will send
> you it if I will be able to find it.
That would be most useful.
Regards,
Emmanuele.
--
Emmanuele Bassi (Zefram) [ http://www.emmanuelebassi.net ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738 08BD 8ECC DB8F A432 0FF4
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]