47 lines
1.9 KiB
Markdown
47 lines
1.9 KiB
Markdown
|
---
|
|||
|
layout: post
|
|||
|
title: "Emacs package to generate GObject boilerplate"
|
|||
|
date: 2016-09-28 15:40:15
|
|||
|
tags: [gnome, development]
|
|||
|
published: true
|
|||
|
author:
|
|||
|
name: Gergely Polonkai
|
|||
|
email: gergely@polonkai.eu
|
|||
|
---
|
|||
|
|
|||
|
Before I started using Vala (and sometimes even after that) I often
|
|||
|
needed to generate new classes based
|
|||
|
on [GObject](https://developer.gnome.org/gobject/stable/).
|
|||
|
|
|||
|
If you have ever worked with GObject in C, you know how tedious it can
|
|||
|
be. You need a pretty long boilerplate just to register your class,
|
|||
|
and, if you want to be introspectable (and readable, actually), your
|
|||
|
function names can grow really long.
|
|||
|
|
|||
|
To overcome this problem back in my ViM days, I used template files,
|
|||
|
where I could replace class prefixes and names with a few keyboard
|
|||
|
macros. As I never really dug into ViM scripting other than using some
|
|||
|
plugins, I never got farther than
|
|||
|
that. [Then came Emacs]({% post_url 2014-09-17-nyanmacs %}).
|
|||
|
|
|||
|
I use Emacs for about two years now very extensively, up to and
|
|||
|
including GLib-based development. I tried the template approach, but
|
|||
|
it felt to be a really poor experience, especially given that I made
|
|||
|
my feet wet with Emacs Lisp. So I dug deeper, and created a package
|
|||
|
for that.
|
|||
|
|
|||
|
![A screenshot of GobGen in action]({{ site_url }}/images/screenshot-gobgen.png)
|
|||
|
|
|||
|
GobGen has its own buffer with some widgets, a bit similar to
|
|||
|
`customize`. You can enter the name of your new object and its parent,
|
|||
|
specify some settings. Then you press Generate, and you are presented
|
|||
|
with two new buffers, one for the `.c` and another for the `.h`
|
|||
|
boilerplate.
|
|||
|
|
|||
|
There are a lot of things to do, actually. There is already an open
|
|||
|
issue for creating a major mode for this buffer, and there are some
|
|||
|
minor switches I’d like to add, but it is already usable. You can grab
|
|||
|
it from [MELPA](https://melpa.org/#/gobgen) (my first package there;
|
|||
|
woo!) or from
|
|||
|
my [GitHub account](https://github.com/gergelypolonkai/gobgen.el).
|