1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
gedit development - getting started
===================================
The following explanations can be improved over time, if you see something
missing, a feedback is welcome.
Programming languages and paradigms
-----------------------------------
gedit is mostly written in C, with some plugins in Python. The
[Meson](https://mesonbuild.com/) build system is used.
The code is object-oriented and event-driven. In C, it's thanks to the use of
the GObject library (see next section). If you open some `*.c` or `*.h` files,
you may be frightened but – don't panic – it's just some C/GObject boilerplate
code, and that boilerplate can be generated by a tool. So once you've learned
GObject, you will no longer be afraid ;-)
Libraries used
--------------
As every GNOME application, gedit uses the GLib, GObject and GTK libraries. To
modify the gedit source code, you should be familiar with those libraries. See
the [GTK website](https://www.gtk.org/) and
[The GLib/GTK Development Platform – A Getting Started Guide](https://github.com/gdev-technology/glib-gtk-learning).
The main "text area" in gedit is a GtkTextView widget. This widget is part of
GTK. You can learn it with the
[GtkTextView tutorial](http://www.bravegnu.org/gtktext/). The tutorial is a bit
old but the GtkTextView API has not changed a lot. (By the way, contributing to
update the tutorial would be a useful task!).
GtkTextView provides the basis, and is extended by other libraries to add more
features. See [Gedit Technology](https://gedit-technology.github.io/).
For its plugin system, gedit uses
[libpeas](https://wiki.gnome.org/Projects/Libpeas).
Plugins may have other dependencies, for example the spell-checking plugin uses
[gspell](https://gitlab.gnome.org/GNOME/gspell).
gedit architecture
------------------
The [gedit git repository](https://gitlab.gnome.org/World/gedit/gedit) contains:
- The "gedit core" in the `gedit/` directory.
- The default plugins in `plugins/`.
There is also the
[gedit-plugins git repository](https://gitlab.gnome.org/World/gedit/gedit-plugins)
for additional official plugins.
The gedit core provides:
- A basic text editor.
- The integration of libpeas, with an API for plugins.
There is a class diagram of gedit core in the file
[class-diagram.dia](class-diagram.dia) (but it may be outdated, see the Git log
for that file).
Build/Installation
------------------
See the file [build.md](build.md).
Suggestions
-----------
A good way to learn a lot of things is to write a new plugin (it can be a
third-party plugin at first).
Improving the API reference of the gedit core would be useful, because some
parts lack proper documentation.
A potentially easy task is to fix compilation warnings, for example when a
deprecated function is used. If you encounter a runtime warning or critical
message, it is also a good idea to fix it.
Note that gedit is an old piece of software. Some parts are legacy code and
would benefit from some refactoring.
|