summaryrefslogtreecommitdiffstats
path: root/docs/gedit-development-getting-started.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/gedit-development-getting-started.md')
-rw-r--r--docs/gedit-development-getting-started.md100
1 files changed, 100 insertions, 0 deletions
diff --git a/docs/gedit-development-getting-started.md b/docs/gedit-development-getting-started.md
new file mode 100644
index 0000000..4f930af
--- /dev/null
+++ b/docs/gedit-development-getting-started.md
@@ -0,0 +1,100 @@
+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 or
+[Vala](https://wiki.gnome.org/Projects/Vala/). The build system is in
+[Meson](https://mesonbuild.com/).
+
+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 think “what is this horror?!” 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 document
+[The GLib/GTK Development Platform – A Getting Started Guide](https://people.gnome.org/~swilmet/glib-gtk-book/).
+
+The main widget used by gedit is GtkTextView, a general-purpose multiline text
+editor. To learn that widget API, read the excellent
+[GtkTextView tutorial](http://www.bravegnu.org/gtktext/) (a bit old but still
+mostly valid). But GtkTextView is not enough for source code edition. gedit
+actually uses the
+[GtkSourceView](https://wiki.gnome.org/Projects/GtkSourceView) library, which
+contains a subclass of GtkTextView with many features useful for a text editor
+or an IDE. But GtkSourceView is not enough to have a full-blown text editor,
+gedit is actually in the process of using more features from the
+[Tepl](https://wiki.gnome.org/Projects/Tepl) library, and to further develop
+Tepl alongside gedit.
+
+For its plugin system, gedit uses the
+[libpeas](https://wiki.gnome.org/Projects/Libpeas) library.
+
+Plugins may have other dependencies, for example the spell-checking plugin uses
+[gspell](https://wiki.gnome.org/Projects/gspell).
+
+gedit architecture
+------------------
+
+The [gedit Git repository](https://gitlab.gnome.org/GNOME/gedit) contains the
+_gedit core_ plus the default plugins. There is also the
+[gedit-plugins Git repository](https://gitlab.gnome.org/GNOME/gedit-plugins)
+for additional official plugins. The gedit core source code is in the `gedit/`
+directory. The plugins are in … `plugins/`!
+
+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).
+
+First contribution
+------------------
+
+See the [Newcomers](https://wiki.gnome.org/Newcomers/) page to start
+contributing to GNOME in general. But perhaps some things explained there are
+not relevant for gedit, in case of doubt the gedit documentation takes
+precedence.
+
+To know how to contribute to gedit specifically, read the
+[README.md](../README.md) and [CONTRIBUTING.md](../CONTRIBUTING.md) files
+present in the Git repository (and then you'll see that the `CONTRIBUTING.md`
+file refers to this file, but please don't end up in an infinite reading loop).
+
+A good way to learn a lot of things is to write a new plugin (as a third-party
+plugin first).
+
+A potentially easy task (but not always) 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.
+
+Improvements to the documentation (for users or developers) is also useful,
+especially to improve the API reference for developing gedit plugins.
+
+Note that gedit, although simple to use, is old. Some parts of the code is
+legacy code. The remaining tasks to do are often not simple, the codebase needs
+a lot of refactoring, and to do it properly an experienced developer is advised.
+That's why writing plugins is normally easier.
+
+Interesting article to read, written by a GNOME developer:
+[Working on Free Software](http://ometer.com/hacking.html)
+
+Happy hacking!\
+the gedit developers.