The SSH host key has changed on 8 April, 2022 to this one: SHA256:573uTBSeh74kvOo0HJXi5ijdzRm8me27suzNEDlGyrQ
Sources of the site gergely.polonkai.eu, Jekyll version
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

2.0 KiB

Emacs package to generate GObject boilerplate

date

2016-09-28T15:40:15Z

category

blog

tags

gnome,development

url

2016/09/28/emacs-package-to-generate-gobject-boilerplate/

save_as

2016/09/28/emacs-package-to-generate-gobject-boilerplate/index.html

status

published

author

Gergely Polonkai

Before I started using Vala (and sometimes even after that) I often needed to generate new classes based on GObject.

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.

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

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 (my first package there; woo!) or from my GitHub account.