emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master a654ab4 25/40: Rename to gnome-c-style


From: Daiki Ueno
Subject: [elpa] master a654ab4 25/40: Rename to gnome-c-style
Date: Fri, 22 Jan 2016 22:48:44 +0000

branch: master
commit a654ab4a50b5e598b55a2802b82a1884985b384a
Author: Daiki Ueno <address@hidden>
Commit: Daiki Ueno <address@hidden>

    Rename to gnome-c-style
    
    Suggested by Bill Wohler and  Artur Malabarba.
---
 Makefile                           |    4 +-
 README.md                          |    8 +-
 gnome-align.el => gnome-c-align.el |  299 ++++++++++-----------
 gnome-c-snippet.el                 |  520 ++++++++++++++++++++++++++++++++++++
 gnome-c-style.el                   |   55 ++++
 gnome-tests.el => gnome-c-tests.el |   84 +++---
 gnome-minor-mode.el                |   65 -----
 gnome-snippet.el                   |  520 ------------------------------------
 8 files changed, 770 insertions(+), 785 deletions(-)

diff --git a/Makefile b/Makefile
index 3e031e6..571841e 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 EMACS ?= emacs
 RM ?= rm
-ELC = gnome-align.elc gnome-snippet.elc gnome-minor-mode.elc
+ELC = gnome-c-align.elc gnome-c-snippet.elc gnome-c-style.elc
 
 all: $(ELC)
 
@@ -10,7 +10,7 @@ all: $(ELC)
 
 check:
        $(EMACS) -Q -batch --eval "(setq load-path (cons nil load-path))" \
-               -l ert -l gnome-tests.el -f ert-run-tests-batch-and-exit
+               -l ert -l gnome-c-tests.el -f ert-run-tests-batch-and-exit
 
 clean:
        $(RM) -rf $(ELC)
diff --git a/README.md b/README.md
index a8f06a5..336a462 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-gnome-minor-mode
+gnome-c-style
 ======
 
 In the C coding style commonly used in GNOME, identifiers are written
@@ -6,7 +6,7 @@ in camel case and function arguments are aligned to the right 
end.
 That makes it a bit cumbersome to keep your code consistent with the
 style, even with align.el or plugins like yasnippet.
 
-gnome-minor-mode is an Emacs minor mode intended to help editing C
+gnome-c-style is an Emacs minor mode intended to help editing C
 source code in that style.  It mainly provides two features: text
 alignment and snippet insersion.
 
@@ -18,8 +18,8 @@ Install
 * Add the following lines to ~/.emacs/init.el:
 
 ```
-(autoload 'gnome-minor-mode "gnome-minor-mode" "GNOME minor mode" t)
-(add-hook 'c-mode-hook 'gnome-minor-mode)
+(autoload 'gnome-c-style-mode "gnome-c-style" "GNOME-style C minor mode" t)
+(add-hook 'c-mode-hook 'gnome-c-style-mode)
 ```
 
 Usage
diff --git a/gnome-align.el b/gnome-c-align.el
similarity index 55%
rename from gnome-align.el
rename to gnome-c-align.el
index 644c0eb..d8c6d11 100644
--- a/gnome-align.el
+++ b/gnome-c-align.el
@@ -1,4 +1,4 @@
-;; gnome-align.el --- GNOME-style code alignment -*- lexical-binding: t; -*-
+;; gnome-c-align.el --- GNOME-style code alignment -*- lexical-binding: t; -*-
 ;; Copyright (C) 2016 Daiki Ueno <address@hidden>
 
 ;; Author: Daiki Ueno <address@hidden>
@@ -25,29 +25,24 @@
 (require 'cc-mode)
 (require 'cl-lib)
 
-(defgroup gnome-minor-mode nil
-  "GNOME-style C source code editing"
-  :prefix "gnome-"
-  :group 'c)
-
-(defcustom gnome-align-max-column 80
+(defcustom gnome-c-align-max-column 80
   "Maximum number of columns per line."
   :type '(choice (integer :tag "Columns")
                 (const :tag "No wrap"))
-  :group 'gnome-minor-mode)
+  :group 'gnome-c-style)
 
-(defvar gnome-align-identifier-start-column nil)
-(make-variable-buffer-local 'gnome-align-identifier-start-column)
+(defvar gnome-c-align-identifier-start-column nil)
+(make-variable-buffer-local 'gnome-c-align-identifier-start-column)
 
-(defvar gnome-align-arglist-start-column nil)
-(make-variable-buffer-local 'gnome-align-arglist-start-column)
+(defvar gnome-c-align-arglist-start-column nil)
+(make-variable-buffer-local 'gnome-c-align-arglist-start-column)
 
-(defvar gnome-align-arglist-identifier-start-column nil)
-(make-variable-buffer-local 'gnome-align-arglist-identifier-start-column)
+(defvar gnome-c-align-arglist-identifier-start-column nil)
+(make-variable-buffer-local 'gnome-c-align-arglist-identifier-start-column)
 
-(cl-defstruct (gnome-align--argument
+(cl-defstruct (gnome-c-align--argument
               (:constructor nil)
-              (:constructor gnome-align--make-argument (type-start
+              (:constructor gnome-c-align--make-argument (type-start
                                                         type-identifier-end
                                                         type-end
                                                         identifier-start
@@ -60,12 +55,12 @@
   (identifier-start nil :read-only t)
   (identifier-end nil :read-only t))
 
-(defun gnome-align--marker-column (marker)
+(defun gnome-c-align--marker-column (marker)
   (save-excursion
     (goto-char marker)
     (current-column)))
 
-(defun gnome-align--indent-to-column (column)
+(defun gnome-c-align--indent-to-column (column)
   ;; Prefer 'char **foo' than 'char ** foo'
   (when (looking-back "\*+" nil t)
     (setq column (- column (- (match-end 0) (match-beginning 0))))
@@ -74,41 +69,41 @@
   (let (indent-tabs-mode)
     (indent-to-column column)))
 
-(defun gnome-align--argument-type-width (arg)
-  (- (gnome-align--marker-column (gnome-align--argument-type-end arg))
-     (gnome-align--marker-column (gnome-align--argument-type-start arg))))
+(defun gnome-c-align--argument-type-width (arg)
+  (- (gnome-c-align--marker-column (gnome-c-align--argument-type-end arg))
+     (gnome-c-align--marker-column (gnome-c-align--argument-type-start arg))))
 
-(defun gnome-align--argument-type-identifier-width (arg)
-  (- (gnome-align--marker-column
-      (gnome-align--argument-type-identifier-end arg))
-     (gnome-align--marker-column
-      (gnome-align--argument-type-start arg))))
+(defun gnome-c-align--argument-type-identifier-width (arg)
+  (- (gnome-c-align--marker-column
+      (gnome-c-align--argument-type-identifier-end arg))
+     (gnome-c-align--marker-column
+      (gnome-c-align--argument-type-start arg))))
 
-(defun gnome-align--arglist-identifier-start-column (arglist start-column)
+(defun gnome-c-align--arglist-identifier-start-column (arglist start-column)
   (let ((max-type-identifier-width
         (apply #'max
-               (mapcar #'gnome-align--argument-type-identifier-width arglist)))
+               (mapcar #'gnome-c-align--argument-type-identifier-width 
arglist)))
        (max-extra-width
         (apply #'max
                (mapcar
                 (lambda (argument)
-                  (- (gnome-align--argument-type-end argument)
-                     (gnome-align--argument-type-identifier-end argument)))
+                  (- (gnome-c-align--argument-type-end argument)
+                     (gnome-c-align--argument-type-identifier-end argument)))
                 arglist))))
     (+ start-column max-type-identifier-width max-extra-width)))
 
-(defun gnome-align--argument-identifier-width (argument)
-  (if (gnome-align--argument-identifier-start argument)
-      (- (gnome-align--marker-column
-         (gnome-align--argument-identifier-end argument))
-        (gnome-align--marker-column
-         (gnome-align--argument-identifier-start argument)))
+(defun gnome-c-align--argument-identifier-width (argument)
+  (if (gnome-c-align--argument-identifier-start argument)
+      (- (gnome-c-align--marker-column
+         (gnome-c-align--argument-identifier-end argument))
+        (gnome-c-align--marker-column
+         (gnome-c-align--argument-identifier-start argument)))
     0))
 
-(defun gnome-align--arglist-identifier-width (arglist)
-  (apply #'max (mapcar #'gnome-align--argument-identifier-width arglist)))
+(defun gnome-c-align--arglist-identifier-width (arglist)
+  (apply #'max (mapcar #'gnome-c-align--argument-identifier-width arglist)))
 
-(defun gnome-align--normalize-arglist-region (beg end)
+(defun gnome-c-align--normalize-arglist-region (beg end)
   (save-excursion
     (save-restriction
       (narrow-to-region beg end)
@@ -128,7 +123,7 @@
       (goto-char (point-min))
       (delete-matching-lines "^$"))))
 
-(defun gnome-align--parse-arglist (beg end)
+(defun gnome-c-align--parse-arglist (beg end)
   (save-excursion
     (save-restriction
       (narrow-to-region beg end)
@@ -172,7 +167,7 @@
              (skip-chars-backward "*" type-start)
              (c-backward-syntactic-ws)
              (setq type-identifier-end (point-marker))))
-         (push (gnome-align--make-argument type-start
+         (push (gnome-c-align--make-argument type-start
                                            type-identifier-end
                                            type-end
                                            identifier-start
@@ -181,35 +176,35 @@
        arglist))))
 
 ;;;###autoload
-(defun gnome-align-at-point (&optional identifier-start-column)
+(defun gnome-c-align-at-point (&optional identifier-start-column)
   "Reformat argument list at point, aligning argument to the right end."
   (interactive)
   (save-excursion
     (let* (start-column arglist)
       (cl-destructuring-bind (beg end)
-         (gnome-align--arglist-region-at-point (point))
+         (gnome-c-align--arglist-region-at-point (point))
        (goto-char beg)
        (setq start-column (current-column))
        (save-restriction
          (narrow-to-region beg end)
-         (setq arglist (gnome-align--parse-arglist (point-min) (point-max)))
-         (gnome-align--normalize-arglist-region (point-min) (point-max))
+         (setq arglist (gnome-c-align--parse-arglist (point-min) (point-max)))
+         (gnome-c-align--normalize-arglist-region (point-min) (point-max))
          (unless identifier-start-column
            (setq identifier-start-column
-                 (gnome-align--arglist-identifier-start-column arglist 0)))
+                 (gnome-c-align--arglist-identifier-start-column arglist 0)))
          (dolist (argument arglist)
-           (goto-char (gnome-align--argument-type-start argument))
+           (goto-char (gnome-c-align--argument-type-start argument))
            (let ((column (if (bobp) 0 start-column)))
              (when (not (bobp))
-               (gnome-align--indent-to-column start-column))
-             (when (gnome-align--argument-identifier-start argument)
+               (gnome-c-align--indent-to-column start-column))
+             (when (gnome-c-align--argument-identifier-start argument)
                (setq column (+ column identifier-start-column))
-               (goto-char (gnome-align--argument-identifier-start argument))
-               (gnome-align--indent-to-column column)))))))))
+               (goto-char (gnome-c-align--argument-identifier-start argument))
+               (gnome-c-align--indent-to-column column)))))))))
 
-(cl-defstruct (gnome-align--decl
+(cl-defstruct (gnome-c-align--decl
               (:constructor nil)
-              (:constructor gnome-align--make-decl (start
+              (:constructor gnome-c-align--make-decl (start
                                                       end
                                                       identifier-start
                                                       identifier-end
@@ -226,31 +221,31 @@
   (arglist-end nil :read-only t)
   (arglist nil :read-only t))
 
-(defun gnome-align--decls-identifier-start-column (decls start-column)
+(defun gnome-c-align--decls-identifier-start-column (decls start-column)
   (apply #'max
         (delq nil
               (mapcar
                (lambda (decl)
                  (let ((decl-column
                         (+ start-column
-                           (gnome-align--marker-column
-                            (gnome-align--decl-identifier-start decl)))))
-                   (if (and gnome-align-max-column
-                            (> decl-column gnome-align-max-column))
+                           (gnome-c-align--marker-column
+                            (gnome-c-align--decl-identifier-start decl)))))
+                   (if (and gnome-c-align-max-column
+                            (> decl-column gnome-c-align-max-column))
                        nil
                      decl-column)))
                decls))))
 
-(defun gnome-align--decl-identifier-width (decl)
-  (- (gnome-align--marker-column
-      (gnome-align--decl-identifier-end decl))
-     (gnome-align--marker-column
-      (gnome-align--decl-identifier-start decl))))
+(defun gnome-c-align--decl-identifier-width (decl)
+  (- (gnome-c-align--marker-column
+      (gnome-c-align--decl-identifier-end decl))
+     (gnome-c-align--marker-column
+      (gnome-c-align--decl-identifier-start decl))))
 
-(defun gnome-align--decls-arglist-start-column (decls start-column)
+(defun gnome-c-align--decls-arglist-start-column (decls start-column)
   (let ((arglist-width
-        (+ (gnome-align--decls-arglist-identifier-start-column decls 0)
-           (gnome-align--decls-arglist-identifier-width decls)
+        (+ (gnome-c-align--decls-arglist-identifier-start-column decls 0)
+           (gnome-c-align--decls-arglist-identifier-width decls)
            (length ");"))))
     (apply #'max
           (delq nil
@@ -258,30 +253,30 @@
                  (lambda (decl)
                    (let ((decl-column
                           (+ start-column
-                             (gnome-align--decl-identifier-width decl)
+                             (gnome-c-align--decl-identifier-width decl)
                              1)))
-                     (if (and gnome-align-max-column
+                     (if (and gnome-c-align-max-column
                               (> (+ decl-column arglist-width)
-                                 gnome-align-max-column))
+                                 gnome-c-align-max-column))
                          nil
                        decl-column)))
                  decls)))))
 
-(defun gnome-align--decls-arglist-identifier-width (decls)
+(defun gnome-c-align--decls-arglist-identifier-width (decls)
   (apply #'max (mapcar (lambda (decl)
-                        (gnome-align--arglist-identifier-width
-                         (gnome-align--decl-arglist decl)))
+                        (gnome-c-align--arglist-identifier-width
+                         (gnome-c-align--decl-arglist decl)))
                       decls)))
 
-(defun gnome-align--decls-arglist-identifier-start-column (decls start-column)
+(defun gnome-c-align--decls-arglist-identifier-start-column (decls 
start-column)
   (apply #'max (mapcar (lambda (decl)
                         ;; FIXME: should wrap lines inside argument list?
-                        (gnome-align--arglist-identifier-start-column
-                         (gnome-align--decl-arglist decl)
+                        (gnome-c-align--arglist-identifier-start-column
+                         (gnome-c-align--decl-arglist decl)
                          start-column))
                       decls)))
 
-(defun gnome-align--parse-decl (beg end)
+(defun gnome-c-align--parse-decl (beg end)
   ;; Parse at most one func declaration found in BEG END.
   (save-excursion
     (save-restriction
@@ -315,29 +310,29 @@
            (goto-char arglist-start)
            (c-forward-sexp)
            (setq arglist-end (point-marker))
-           (gnome-align--make-decl beg end
+           (gnome-c-align--make-decl beg end
                                      identifier-start identifier-end
                                      arglist-start arglist-end
-                                     (gnome-align--parse-arglist
+                                     (gnome-c-align--parse-arglist
                                       (1+ arglist-start)
                                       (1- arglist-end)))))))))
 
-(defun gnome-align--normalize-decl (decl)
+(defun gnome-c-align--normalize-decl (decl)
   (save-excursion
     (save-restriction
-      (narrow-to-region (gnome-align--decl-identifier-start decl)
-                       (gnome-align--decl-arglist-end decl))
+      (narrow-to-region (gnome-c-align--decl-identifier-start decl)
+                       (gnome-c-align--decl-arglist-end decl))
       (goto-char (point-min))
       (while (re-search-forward "\n" nil t)
        (replace-match " ")))
     (save-restriction
-      (narrow-to-region (gnome-align--decl-start decl)
-                       (gnome-align--decl-end decl))
+      (narrow-to-region (gnome-c-align--decl-start decl)
+                       (gnome-c-align--decl-end decl))
       (goto-char (point-min))
       (while (re-search-forward "\\s-+" nil t)
        (replace-match " ")))))
 
-(defun gnome-align--arglist-region-at-point (point)
+(defun gnome-c-align--arglist-region-at-point (point)
   (save-excursion
     (let (start)
       (goto-char point)
@@ -355,7 +350,7 @@
       (list start (point)))))
 
 ;;;###autoload
-(defun gnome-align-set-column (symbol)
+(defun gnome-c-align-set-column (symbol)
   "Set alignment column of SYMBOL."
   (interactive
    (let ((symbol-name (completing-read "Symbol to change: "
@@ -363,10 +358,10 @@
                                         "arglist-start"
                                         "arglist-identifier-start")
                                       nil t)))
-     (list (intern (format "gnome-align-%s-column" symbol-name)))))
+     (list (intern (format "gnome-c-align-%s-column" symbol-name)))))
   (set symbol (current-column)))
 
-(defun gnome-align--scan-decls (beg end)
+(defun gnome-c-align--scan-decls (beg end)
   (save-excursion
     (save-restriction
       (narrow-to-region beg end)
@@ -378,27 +373,27 @@
            (setq decl-start (point-marker))
            (c-end-of-statement)
            (setq decl-end (point-marker))
-           (setq decl (gnome-align--parse-decl decl-start decl-end))
+           (setq decl (gnome-c-align--parse-decl decl-start decl-end))
            (when decl
              (push decl decls))))
        decls))))
 
-(defun gnome-align--compute-optimal-columns (beg end)
+(defun gnome-c-align--compute-optimal-columns (beg end)
   (let ((buffer (current-buffer))
        decls)
     (with-temp-buffer
       (insert-buffer-substring-no-properties buffer beg end)
       (c-mode)
-      (setq decls (gnome-align--scan-decls (point-min) (point-max)))
-      (mapc #'gnome-align--normalize-decl decls)
+      (setq decls (gnome-c-align--scan-decls (point-min) (point-max)))
+      (mapc #'gnome-c-align--normalize-decl decls)
       (let* ((identifier-start-column
-             (gnome-align--decls-identifier-start-column
+             (gnome-c-align--decls-identifier-start-column
               decls 0))
             (arglist-start-column
-             (gnome-align--decls-arglist-start-column
+             (gnome-c-align--decls-arglist-start-column
               decls identifier-start-column))
             (arglist-identifier-start-column
-             (gnome-align--decls-arglist-identifier-start-column
+             (gnome-c-align--decls-arglist-identifier-start-column
               decls (+ (length "(") arglist-start-column))))
        (list (cons 'identifier-start-column
                    identifier-start-column)
@@ -408,99 +403,99 @@
                    arglist-identifier-start-column))))))
 
 ;;;###autoload
-(defun gnome-align-compute-optimal-columns (beg end)
+(defun gnome-c-align-compute-optimal-columns (beg end)
   "Compute the optimal alignment rule from the declarations in BEG and END.
 
-This sets `gnome-align-identifier-start-column',
-`gnome-align-arglist-start-column', and
-`gnome-align-arglist-identifier-start-column'."
+This sets `gnome-c-align-identifier-start-column',
+`gnome-c-align-arglist-start-column', and
+`gnome-c-align-arglist-identifier-start-column'."
   (interactive "r")
-  (let ((columns (gnome-align--compute-optimal-columns beg end)))
-    (setq gnome-align-identifier-start-column
+  (let ((columns (gnome-c-align--compute-optimal-columns beg end)))
+    (setq gnome-c-align-identifier-start-column
          (cdr (assq 'identifier-start-column columns))
-         gnome-align-arglist-start-column
+         gnome-c-align-arglist-start-column
          (cdr (assq 'arglist-start-column columns))
-         gnome-align-arglist-identifier-start-column
+         gnome-c-align-arglist-identifier-start-column
          (cdr (assq 'arglist-identifier-start-column columns)))
     (message
      "identifier-start: %d, arglist-start: %d, arglist-identifier-start: %d"
-     gnome-align-identifier-start-column
-     gnome-align-arglist-start-column
-     gnome-align-arglist-identifier-start-column)))
+     gnome-c-align-identifier-start-column
+     gnome-c-align-arglist-start-column
+     gnome-c-align-arglist-identifier-start-column)))
 
 ;;;###autoload
-(defun gnome-align-guess-columns (beg end)
+(defun gnome-c-align-guess-columns (beg end)
   "Guess the existing alignment rule from the declarations in BEG and END.
 
-This sets `gnome-align-identifier-start-column',
-`gnome-align-arglist-start-column', and
-`gnome-align-arglist-identifier-start-column'."
+This sets `gnome-c-align-identifier-start-column',
+`gnome-c-align-arglist-start-column', and
+`gnome-c-align-arglist-identifier-start-column'."
   (interactive "r")
-  (let ((decls (gnome-align--scan-decls beg end))
+  (let ((decls (gnome-c-align--scan-decls beg end))
        arglist)
     (unless decls
       (error "No function declaration in the region"))
-    (setq arglist (gnome-align--parse-arglist
-                  (1+ (gnome-align--decl-arglist-start (car decls)))
-                  (1- (gnome-align--decl-arglist-end (car decls)))))
+    (setq arglist (gnome-c-align--parse-arglist
+                  (1+ (gnome-c-align--decl-arglist-start (car decls)))
+                  (1- (gnome-c-align--decl-arglist-end (car decls)))))
     (unless arglist
       (error "Empty argument list"))
-    (unless (gnome-align--argument-identifier-start (car arglist))
+    (unless (gnome-c-align--argument-identifier-start (car arglist))
       (error "No identifier in the argument list"))
-    (setq gnome-align-identifier-start-column
-         (gnome-align--marker-column
-          (gnome-align--decl-identifier-start (car decls)))
-         gnome-align-arglist-start-column
-         (gnome-align--marker-column
-          (gnome-align--decl-arglist-start (car decls)))
-         gnome-align-arglist-identifier-start-column
-         (gnome-align--marker-column
-          (gnome-align--argument-identifier-start (car arglist))))
+    (setq gnome-c-align-identifier-start-column
+         (gnome-c-align--marker-column
+          (gnome-c-align--decl-identifier-start (car decls)))
+         gnome-c-align-arglist-start-column
+         (gnome-c-align--marker-column
+          (gnome-c-align--decl-arglist-start (car decls)))
+         gnome-c-align-arglist-identifier-start-column
+         (gnome-c-align--marker-column
+          (gnome-c-align--argument-identifier-start (car arglist))))
     (message
      "identifier-start: %d, arglist-start: %d, arglist-identifier-start: %d"
-     gnome-align-identifier-start-column
-     gnome-align-arglist-start-column
-     gnome-align-arglist-identifier-start-column)))
+     gnome-c-align-identifier-start-column
+     gnome-c-align-arglist-start-column
+     gnome-c-align-arglist-identifier-start-column)))
 
 ;;;###autoload
-(defun gnome-align-region (beg end)
+(defun gnome-c-align-region (beg end)
   "Reformat function declarations in the region between BEG and END."
   (interactive "r")
   (save-excursion
     (let (decls)
       (save-restriction
        (narrow-to-region beg end)
-       (unless (and gnome-align-identifier-start-column
-                    gnome-align-arglist-start-column
-                    gnome-align-arglist-identifier-start-column)
-         (let ((columns (gnome-align--compute-optimal-columns beg end)))
-           (unless gnome-align-identifier-start-column
-             (setq gnome-align-identifier-start-column
+       (unless (and gnome-c-align-identifier-start-column
+                    gnome-c-align-arglist-start-column
+                    gnome-c-align-arglist-identifier-start-column)
+         (let ((columns (gnome-c-align--compute-optimal-columns beg end)))
+           (unless gnome-c-align-identifier-start-column
+             (setq gnome-c-align-identifier-start-column
                    (cdr (assq 'identifier-start-column columns))))
-           (unless gnome-align-arglist-start-column
-             (setq gnome-align-arglist-start-column
+           (unless gnome-c-align-arglist-start-column
+             (setq gnome-c-align-arglist-start-column
                    (cdr (assq 'arglist-start-column columns))))
-           (unless gnome-align-arglist-identifier-start-column
-             (setq gnome-align-arglist-identifier-start-column
+           (unless gnome-c-align-arglist-identifier-start-column
+             (setq gnome-c-align-arglist-identifier-start-column
                    (cdr (assq 'arglist-identifier-start-column columns))))))
-       (setq decls (gnome-align--scan-decls beg end))
-       (mapc #'gnome-align--normalize-decl decls)
+       (setq decls (gnome-c-align--scan-decls beg end))
+       (mapc #'gnome-c-align--normalize-decl decls)
        (dolist (decl decls)
-         (goto-char (gnome-align--decl-identifier-start decl))
-         (gnome-align--indent-to-column
-          gnome-align-identifier-start-column)
-         (goto-char (gnome-align--decl-identifier-end decl))
-         (when (>= (current-column) gnome-align-arglist-start-column)
+         (goto-char (gnome-c-align--decl-identifier-start decl))
+         (gnome-c-align--indent-to-column
+          gnome-c-align-identifier-start-column)
+         (goto-char (gnome-c-align--decl-identifier-end decl))
+         (when (>= (current-column) gnome-c-align-arglist-start-column)
            (insert "\n"))
-         (goto-char (gnome-align--decl-arglist-start decl))
-         (gnome-align--indent-to-column
-          gnome-align-arglist-start-column)
+         (goto-char (gnome-c-align--decl-arglist-start decl))
+         (gnome-c-align--indent-to-column
+          gnome-c-align-arglist-start-column)
          (forward-char)
-         (gnome-align-at-point
-          (- (- gnome-align-arglist-identifier-start-column
+         (gnome-c-align-at-point
+          (- (- gnome-c-align-arglist-identifier-start-column
                 (length "("))
-             gnome-align-arglist-start-column)))))))
+             gnome-c-align-arglist-start-column)))))))
 
-(provide 'gnome-align)
+(provide 'gnome-c-align)
 
-;;; gnome-align.el ends here
+;;; gnome-c-align.el ends here
diff --git a/gnome-c-snippet.el b/gnome-c-snippet.el
new file mode 100644
index 0000000..0f18834
--- /dev/null
+++ b/gnome-c-snippet.el
@@ -0,0 +1,520 @@
+;;; gnome-c-snippet.el --- GNOME-style code generation -*- lexical-binding: t; 
-*-
+;; Copyright (C) 2016 Daiki Ueno <address@hidden>
+
+;; Author: Daiki Ueno <address@hidden>
+;; Keywords: GNOME, C, coding style
+
+;; This file is not part of GNU Emacs.
+
+;; This program is free software: you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation, either version 3 of the
+;; License, or (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see
+;; <http://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(require 'gnome-c-align)
+
+(eval-when-compile
+  (require 'subword))
+
+(declare-function subword-forward "subword.el" (&optional arg))
+
+(defvar gnome-c-snippet-package nil)
+(make-variable-buffer-local 'gnome-c-snippet-package)
+
+(defvar gnome-c-snippet-class nil)
+(make-variable-buffer-local 'gnome-c-snippet-class)
+
+(defvar gnome-c-snippet-parent-package nil)
+(make-variable-buffer-local 'gnome-c-snippet-parent-package)
+
+(defvar gnome-c-snippet-parent-class nil)
+(make-variable-buffer-local 'gnome-c-snippet-parent-class)
+
+(defcustom gnome-c-snippet-align-arglist t
+  "Whether to align argument list of the inserted snippet"
+  :type 'boolean
+  :group 'gnome-c-style)
+
+(make-variable-buffer-local 'gnome-c-snippet-align-arglist)
+
+(defun gnome-c-snippet--parse-name (name)
+  (require 'subword)
+  (with-temp-buffer
+    (let (words)
+      (insert name)
+      (goto-char (point-min))
+      (while (not (eobp))
+       ;; Skip characters not recognized by subword-mode.
+       (if (looking-at "[^[:lower:][:upper:][:digit:]]+")
+           (goto-char (match-end 0)))
+       (push (buffer-substring (point) (progn (subword-forward 1)
+                                              (point)))
+             words))
+      (nreverse words))))
+
+(defun gnome-c-snippet--read-package-and-class (package-prompt
+                                               class-prompt
+                                               package-symbol
+                                               class-symbol)
+  (when (or current-prefix-arg
+           (not (and (symbol-value package-symbol)
+                     (symbol-value class-symbol))))
+    (set package-symbol
+        (gnome-c-snippet--parse-name
+         (read-string (or package-prompt
+                          "Package (CamelCase): ")
+                      (if (symbol-value package-symbol)
+                          (gnome-c-snippet--format-Package
+                           (symbol-value package-symbol))))))
+    (set class-symbol
+        (gnome-c-snippet--parse-name
+         (read-string (or class-prompt
+                          "Class (CamelCase): ")
+                      (if (symbol-value class-symbol)
+                          (gnome-c-snippet--format-Class
+                           (symbol-value class-symbol)))))))
+  (list (symbol-value package-symbol) (symbol-value class-symbol)))
+
+(defun gnome-c-snippet--format-PACKAGE (package)
+  (mapconcat #'upcase package "_"))
+(defalias 'gnome-c-snippet--format-CLASS 'gnome-c-snippet--format-PACKAGE)
+
+(defun gnome-c-snippet--format-PACKAGE_CLASS (package class)
+  (concat (gnome-c-snippet--format-PACKAGE package)
+         "_"
+         (gnome-c-snippet--format-CLASS class)))
+
+(defun gnome-c-snippet--format-package (package)
+  (mapconcat #'downcase package "_"))
+(defalias 'gnome-c-snippet--format-class 'gnome-c-snippet--format-package)
+
+(defun gnome-c-snippet--format-package_class (package class)
+  (concat (gnome-c-snippet--format-package package)
+         "_"
+         (gnome-c-snippet--format-class class)))
+
+(defun gnome-c-snippet--format-Package (package)
+  (mapconcat #'identity package ""))
+(defalias 'gnome-c-snippet--format-Class 'gnome-c-snippet--format-Package)
+
+(defun gnome-c-snippet--format-PackageClass (package class)
+  (concat (gnome-c-snippet--format-Package package)
+         (gnome-c-snippet--format-Class class)))
+
+;;;###autoload
+(defun gnome-c-snippet-insert-package_class (package class)
+  "Insert the class name before the current point."
+  (interactive (gnome-c-snippet--read-package-and-class
+               nil nil
+               'gnome-c-snippet-package
+               'gnome-c-snippet-class))
+  (insert (gnome-c-snippet--format-package_class package class)))
+
+;;;###autoload
+(defun gnome-c-snippet-insert-PACKAGE_CLASS (package class)
+  "Insert the class name before the current point."
+  (interactive (gnome-c-snippet--read-package-and-class
+               nil nil
+               'gnome-c-snippet-package
+               'gnome-c-snippet-class))
+  (insert (gnome-c-snippet--format-PACKAGE_CLASS package class)))
+
+;;;###autoload
+(defun gnome-c-snippet-insert-PackageClass (package class)
+  "Insert the class name (in CamelCase) before the current point."
+  (interactive (gnome-c-snippet--read-package-and-class
+               nil nil
+               'gnome-c-snippet-package
+               'gnome-c-snippet-class))
+  (insert (gnome-c-snippet--format-PackageClass package class)))
+
+(defun gnome-c-snippet-insert-interface-declaration (package iface
+                                                            parent-package 
parent-class)
+  "Insert interface declaration for PACKAGE and IFACE"
+  (interactive
+   (append (gnome-c-snippet--read-package-and-class
+           nil
+           "Interface (CamelCase): "
+           'gnome-c-snippet-package
+           'gnome-c-snippet-class)
+          (gnome-c-snippet--read-package-and-class
+           "Parent package (CamelCase): "
+           "Parent class (CamelCase): "
+           'gnome-c-snippet-parent-package
+           'gnome-c-snippet-parent-class)))
+  (insert "\
+#define " (gnome-c-snippet--format-PACKAGE package) "_TYPE_" 
(gnome-c-snippet--format-CLASS iface) " (" (gnome-c-snippet--format-package 
package) "_" (gnome-c-snippet--format-class iface) "_get_type ())
+G_DECLARE_INTERFACE (" (gnome-c-snippet--format-PackageClass package iface) ", 
"
+(gnome-c-snippet--format-package_class package iface) ", " 
(gnome-c-snippet--format-PACKAGE package) ", " (gnome-c-snippet--format-CLASS 
iface) ", " (gnome-c-snippet--format-PackageClass parent-package parent-class) 
")
+"))
+
+(defun gnome-c-snippet--insert-class-declaration (package
+                                                 class
+                                                 parent-package
+                                                 parent-class
+                                                 derivable)
+  (insert "\
+#define " (gnome-c-snippet--format-PACKAGE package) "_TYPE_" 
(gnome-c-snippet--format-CLASS class) " (" 
(gnome-c-snippet--format-package_class package class) "_get_type ())
+G_DECLARE_" (if derivable "DERIVABLE" "FINAL") "_TYPE (" 
(gnome-c-snippet--format-PackageClass package class) ", "
+(gnome-c-snippet--format-package_class package class) ", " 
(gnome-c-snippet--format-PACKAGE package) ", " (gnome-c-snippet--format-CLASS 
class) ", " (gnome-c-snippet--format-PackageClass parent-package parent-class) 
")
+"))
+
+(defun gnome-c-snippet-insert-final-class-declaration (package
+                                                    class
+                                                    parent-package
+                                                    parent-class)
+  "Insert final class declaration for PACKAGE and CLASS."
+  (interactive
+   (append (gnome-c-snippet--read-package-and-class
+           nil nil
+           'gnome-c-snippet-package
+           'gnome-c-snippet-class)
+          (gnome-c-snippet--read-package-and-class
+           "Parent package (CamelCase): "
+           "Parent class (CamelCase): "
+           'gnome-c-snippet-parent-package
+           'gnome-c-snippet-parent-class)))
+  (gnome-c-snippet--insert-class-declaration package
+                                            class
+                                            parent-package
+                                            parent-class
+                                            nil))
+
+(defun gnome-c-snippet-insert-derivable-class-declaration (package
+                                                        class
+                                                        parent-package
+                                                        parent-class)
+  "Insert derivable class declaration for PACKAGE and CLASS."
+  (interactive
+   (append (gnome-c-snippet--read-package-and-class
+           nil nil
+           'gnome-c-snippet-package
+           'gnome-c-snippet-class)
+          (gnome-c-snippet--read-package-and-class
+           "Parent package (CamelCase): "
+           "Parent class (CamelCase): "
+           'gnome-c-snippet-parent-package
+           'gnome-c-snippet-parent-class)))
+  (gnome-c-snippet--insert-class-declaration package
+                                            class
+                                            parent-package
+                                            parent-class
+                                            t))
+
+(defun gnome-c-snippet-insert-interface-definition (package
+                                                 iface
+                                                 parent-package
+                                                 parent-class)
+  "Insert class definition for PACKAGE and CLASS."
+  (interactive
+   (append (gnome-c-snippet--read-package-and-class
+           nil
+           "Interface (CamelCase): "
+           'gnome-c-snippet-package
+           'gnome-c-snippet-class)
+          (gnome-c-snippet--read-package-and-class
+           "Parent package (CamelCase): "
+           "Parent class (CamelCase): "
+           'gnome-c-snippet-parent-package
+           'gnome-c-snippet-parent-class)))
+  (insert "\
+static void
+" (gnome-c-snippet--format-package_class package iface) "_default_init (" 
(gnome-c-snippet--format-PackageClass package iface) "Interface *iface) {
+}
+
+G_DEFINE_INTERFACE (" (gnome-c-snippet--format-PackageClass package iface) ", "
+(gnome-c-snippet--format-package_class package iface) ", " 
(gnome-c-snippet--format-PACKAGE parent-package) "_TYPE_" 
(gnome-c-snippet--format-CLASS parent-class) ")
+"))
+
+(defun gnome-c-snippet--insert-class-definition (package
+                                              class
+                                              parent-package
+                                              parent-class
+                                              abstract)
+  (insert "\
+G_DEFINE_" (if abstract "ABSTRACT_" "") "TYPE (" 
(gnome-c-snippet--format-PackageClass package class) ", "
+(gnome-c-snippet--format-package_class package class) ", " 
(gnome-c-snippet--format-PACKAGE parent-package) "_TYPE_" 
(gnome-c-snippet--format-CLASS parent-class) ")
+
+static void
+" (gnome-c-snippet--format-package_class package class) "_class_init (" 
(gnome-c-snippet--format-PackageClass package class) "Class *klass)
+{
+}
+
+static void
+" (gnome-c-snippet--format-package_class package class) "_init (" 
(gnome-c-snippet--format-PackageClass package class) " *self)
+{
+}
+"))
+
+(defun gnome-c-snippet-insert-class-definition (package
+                                             class
+                                             parent-package
+                                             parent-class)
+  "Insert class definition for PACKAGE and CLASS."
+  (interactive
+   (append (gnome-c-snippet--read-package-and-class
+           nil nil
+           'gnome-c-snippet-package
+           'gnome-c-snippet-class)
+          (gnome-c-snippet--read-package-and-class
+           "Parent package (CamelCase): "
+           "Parent class (CamelCase): "
+           'gnome-c-snippet-parent-package
+           'gnome-c-snippet-parent-class)))
+  (gnome-c-snippet--insert-class-definition package
+                                         class
+                                         parent-package
+                                         parent-class
+                                         nil))
+
+(defun gnome-c-snippet-insert-abstract-class-definition (package
+                                                      class
+                                                      parent-package
+                                                      parent-class)
+  "Insert abstract class definition for PACKAGE and CLASS."
+  (interactive
+   (append (gnome-c-snippet--read-package-and-class
+           nil nil
+           'gnome-c-snippet-package
+           'gnome-c-snippet-class)
+          (gnome-c-snippet--read-package-and-class
+           "Parent package (CamelCase): "
+           "Parent class (CamelCase): "
+           'gnome-c-snippet-parent-package
+           'gnome-c-snippet-parent-class)))
+  (gnome-c-snippet--insert-class-definition package
+                                         class
+                                         parent-package
+                                         parent-class
+                                         t))
+
+(defun gnome-c-snippet-insert-constructor (package class)
+  "Insert 'constructor' vfunc of GObjectClass for PACKAGE and CLASS."
+  (interactive
+   (gnome-c-snippet--read-package-and-class
+    nil nil
+    'gnome-c-snippet-package
+    'gnome-c-snippet-class))
+  (let (arglist-start body-start)
+    (insert "\
+static GObject *
+" (gnome-c-snippet--format-package_class package class) "_constructor (")
+    (setq arglist-start (point-marker))
+    (insert "GType *object,
+guint n_construct_properties,
+GObjectConstructParam *construct_properties)\n")
+    (setq body-start (point-marker))
+    (if gnome-c-snippet-align-arglist
+       (progn
+         (goto-char arglist-start)
+         (gnome-c-align-at-point))
+      (indent-region arglist-start (point)))
+    (goto-char body-start)
+    (insert "{
+  " (gnome-c-snippet--format-PackageClass package class) " *self = "
+  (gnome-c-snippet--format-PACKAGE_CLASS package class) " (object);
+
+  G_OBJECT_CLASS (" (gnome-c-snippet--format-package_class package class) 
"_parent_class)->constructed (object);
+}
+")
+    (indent-region body-start (point))))
+
+(defun gnome-c-snippet-insert-set_property (package class)
+  "Insert 'set_property' vfunc of GObjectClass for PACKAGE and CLASS."
+  (interactive
+   (gnome-c-snippet--read-package-and-class
+    nil nil
+    'gnome-c-snippet-package
+    'gnome-c-snippet-class))
+  (let (arglist-start body-start)
+    (insert "\
+static void
+" (gnome-c-snippet--format-package_class package class) "_set_property (")
+    (setq arglist-start (point-marker))
+    (insert "GObject *object,
+guint prop_id,
+const GValue *value,
+GParamSpec *pspec)\n")
+    (setq body-start (point-marker))
+    (if gnome-c-snippet-align-arglist
+       (progn
+         (goto-char arglist-start)
+         (gnome-c-align-at-point))
+      (indent-region arglist-start (point)))
+    (goto-char body-start)
+    (insert "{
+  " (gnome-c-snippet--format-PackageClass package class) " *self = "
+  (gnome-c-snippet--format-PACKAGE_CLASS package class) " (object);
+
+  switch (prop_id)
+    {
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+")
+    (indent-region body-start (point))))
+
+(defun gnome-c-snippet-insert-get_property (package class)
+  "Insert 'get_property' vfunc of GObjectClass for PACKAGE and CLASS."
+  (interactive
+   (gnome-c-snippet--read-package-and-class
+    nil nil
+    'gnome-c-snippet-package
+    'gnome-c-snippet-class))
+  (let (arglist-start body-start)
+    (insert "\
+static void
+" (gnome-c-snippet--format-package_class package class) "_get_property (")
+    (setq arglist-start (point-marker))
+    (insert "GObject *object,
+guint prop_id,
+GValue *value,
+GParamSpec *pspec)\n")
+    (setq body-start (point-marker))
+    (if gnome-c-snippet-align-arglist
+       (progn
+         (goto-char arglist-start)
+         (gnome-c-align-at-point))
+      (indent-region arglist-start (point)))
+    (goto-char body-start)
+    (insert "{
+  " (gnome-c-snippet--format-PackageClass package class) " *self = "
+(gnome-c-snippet--format-PACKAGE_CLASS package class) " (object);
+
+  switch (prop_id)
+    {
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+")
+    (indent-region body-start (point))))
+
+(defun gnome-c-snippet-insert-dispose (package class)
+  "Insert 'dispose' vfunc of GObjectClass for PACKAGE and CLASS."
+  (interactive
+   (gnome-c-snippet--read-package-and-class
+    nil nil
+    'gnome-c-snippet-package
+    'gnome-c-snippet-class))
+  (let (body-start)
+    (insert "\
+static void
+" (gnome-c-snippet--format-package_class package class) "_dispose (GObject 
*object)\n")
+    (setq body-start (point-marker))
+    (insert "{
+  " (gnome-c-snippet--format-PackageClass package class) " *self = "
+  (gnome-c-snippet--format-PACKAGE_CLASS package class) " (object);
+
+  G_OBJECT_CLASS (" (gnome-c-snippet--format-package_class package class) 
"_parent_class)->dispose (object);
+}
+")
+    (indent-region body-start (point))))
+
+(defun gnome-c-snippet-insert-finalize (package class)
+  "Insert 'finalize' vfunc of GObjectClass for PACKAGE and CLASS."
+  (interactive
+   (gnome-c-snippet--read-package-and-class
+    nil nil
+    'gnome-c-snippet-package
+    'gnome-c-snippet-class))
+  (let (body-start)
+    (insert "\
+static void
+" (gnome-c-snippet--format-package_class package class) "_finalize (GObject 
*object)\n")
+    (setq body-start (point-marker))
+    (insert "{
+  " (gnome-c-snippet--format-PackageClass package class) " *self = "
+  (gnome-c-snippet--format-PACKAGE_CLASS package class) " (object);
+
+  G_OBJECT_CLASS (" (gnome-c-snippet--format-package_class package class) 
"_parent_class)->finalize (object);
+}
+")
+    (indent-region body-start (point))))
+
+(defun gnome-c-snippet-insert-notify (package class)
+  "Insert 'notify' vfunc of GObjectClass for PACKAGE and CLASS."
+  (interactive
+   (gnome-c-snippet--read-package-and-class
+    nil nil
+    'gnome-c-snippet-package
+    'gnome-c-snippet-class))
+  (let (body-start)
+    (insert "\
+static void
+" (gnome-c-snippet--format-package_class package class) "_notify (GObject 
*object)\n")
+    (setq body-start (point-marker))
+    (insert "{
+  " (gnome-c-snippet--format-PackageClass package class) " *self = "
+  (gnome-c-snippet--format-PACKAGE_CLASS package class) " (object);
+
+  G_OBJECT_CLASS (" (gnome-c-snippet--format-package_class package class) 
"_parent_class)->finalize (object);
+}
+")
+    (indent-region body-start (point))))
+
+(defun gnome-c-snippet-insert-constructed (package class)
+  "Insert 'constructed' vfunc of GObjectClass for PACKAGE and CLASS."
+  (interactive
+   (gnome-c-snippet--read-package-and-class
+    nil nil
+    'gnome-c-snippet-package
+    'gnome-c-snippet-class))
+  (let (body-start)
+    (insert "\
+static void
+" (gnome-c-snippet--format-package_class package class) "_constructed (GObject 
*object)\n")
+    (setq body-start (point-marker))
+    (insert "{
+  " (gnome-c-snippet--format-PackageClass package class) " *self = "
+  (gnome-c-snippet--format-PACKAGE_CLASS package class) " (object);
+
+  G_OBJECT_CLASS (" (gnome-c-snippet--format-package_class package class) 
"_parent_class)->constructed (object);
+}
+")
+    (indent-region body-start (point))))
+
+(defvar gnome-c-snippet-snippet-commands
+  '(("G_DECLARE_INTERFACE" . gnome-c-snippet-insert-interface-declaration)
+    ("G_DECLARE_FINAL_TYPE" . gnome-c-snippet-insert-final-class-declaration)
+    ("G_DECLARE_DERIVABLE_TYPE" .
+     gnome-c-snippet-insert-derivable-class-declaration)
+    ("G_DEFINE_INTERFACE" . gnome-c-snippet-insert-interface-definition)
+    ("G_DEFINE_TYPE" . gnome-c-snippet-insert-class-definition)
+    ("G_DEFINE_ABSTRACT_TYPE" .
+     gnome-c-snippet-insert-abstract-class-definition)
+    ("GObjectClass.constructor" . gnome-c-snippet-insert-constructor)
+    ("GObjectClass.set_property" . gnome-c-snippet-insert-set_property)
+    ("GObjectClass.get_property" . gnome-c-snippet-insert-get_property)
+    ("GObjectClass.dispose" . gnome-c-snippet-insert-dispose)
+    ("GObjectClass.finalize" . gnome-c-snippet-insert-finalize)
+    ;; GObjectClass.dispatch_properties_changed
+    ("GObjectClass.notify" . gnome-c-snippet-insert-notify)
+    ("GObjectClass.contructed" . gnome-c-snippet-insert-constructed)))
+
+;;;###autoload
+(defun gnome-c-snippet-insert (snippet)
+  (interactive
+   (list (completing-read "Snippet: " gnome-c-snippet-snippet-commands nil t)))
+  (let ((entry (assoc snippet gnome-c-snippet-snippet-commands)))
+    (unless entry
+      (error "Unknown snippet: %s" snippet))
+    (call-interactively (cdr entry))))
+
+(provide 'gnome-c-snippet)
+
+;;; gnome-c-snippet.el ends here
diff --git a/gnome-c-style.el b/gnome-c-style.el
new file mode 100644
index 0000000..197db13
--- /dev/null
+++ b/gnome-c-style.el
@@ -0,0 +1,55 @@
+;;; gnome-c-style.el --- minor mode for editing GNOME-style C source code -*- 
lexical-binding: t; -*-
+;; Copyright (C) 2016 Daiki Ueno <address@hidden>
+
+;; Author: Daiki Ueno <address@hidden>
+;; Keywords: GNOME, C, coding style
+;; Version: 0.1
+;; Maintainer: Daiki Ueno <address@hidden>
+
+;; This file is not part of GNU Emacs.
+
+;; This program is free software: you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation, either version 3 of the
+;; License, or (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see
+;; <http://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(require 'gnome-c-align)
+(require 'gnome-c-snippet)
+
+(defgroup gnome-c-style nil
+  "GNOME-style C source code editing"
+  :prefix "gnome-c-"
+  :group 'c)
+
+(defvar gnome-c-style-mode-map
+  (let ((keymap (make-sparse-keymap)))
+    (define-key keymap "\C-c\C-ga" 'gnome-c-align-at-point)
+    (define-key keymap "\C-c\C-gr" 'gnome-c-align-region)
+    (define-key keymap "\C-c\C-gf" 'gnome-c-align-set-column)
+    (define-key keymap "\C-c\C-gg" 'gnome-c-align-guess-columns)
+    (define-key keymap "\C-c\C-g\C-g" 'gnome-c-align-compute-optimal-columns)
+    (define-key keymap "\C-c\C-gc" 'gnome-c-snippet-insert-package_class)
+    (define-key keymap "\C-c\C-gC" 'gnome-c-snippet-insert-PACKAGE_CLASS)
+    (define-key keymap "\C-c\C-g\C-c" 'gnome-c-snippet-insert-PackageClass)
+    (define-key keymap "\C-c\C-gs" 'gnome-c-snippet-insert)
+    keymap))
+
+;;;###autoload
+(define-minor-mode gnome-c-style-mode
+  "A minor-mode for editing GNOME-style C source code."
+  nil " GNOME" gnome-c-style-map)
+
+(provide 'gnome-c-style)
+
+;;; gnome-c-style.el ends here
diff --git a/gnome-tests.el b/gnome-c-tests.el
similarity index 60%
rename from gnome-tests.el
rename to gnome-c-tests.el
index 8245407..ad4c9b2 100644
--- a/gnome-tests.el
+++ b/gnome-c-tests.el
@@ -1,6 +1,6 @@
-(require 'gnome-align)
+(require 'gnome-c-align)
 
-(defconst gnome-test-program-1 "\
+(defconst gnome-c-test-program-1 "\
 GGpgCtx *g_gpg_ctx_new (GError **error);
 
 typedef void (*GGpgProgressCallback) (gpointer user_data,
@@ -19,7 +19,7 @@ GGpgKey *g_gpg_ctx_get_signer (GGpgCtx *ctx, guint index);
 void g_gpg_ctx_clear_signers (GGpgCtx *ctx);
 ")
 
-(defconst gnome-test-program-1-aligned "\
+(defconst gnome-c-test-program-1-aligned "\
 GGpgCtx *g_gpg_ctx_new                   (GError              **error);
 
 typedef void (*GGpgProgressCallback) (gpointer user_data,
@@ -40,12 +40,12 @@ GGpgKey *g_gpg_ctx_get_signer            (GGpgCtx           
   *ctx,
 void     g_gpg_ctx_clear_signers         (GGpgCtx              *ctx);
 ")
 
-(defconst gnome-test-program-2 "\
+(defconst gnome-c-test-program-2 "\
 GDK_AVAILABLE_IN_3_16
 const gchar **          gtk_widget_list_action_prefixes (GtkWidget             
*widget);
 ")
 
-(defconst gnome-test-program-3 "\
+(defconst gnome-c-test-program-3 "\
   /* overridable methods */
   void       (*set_property)            (GObject        *object,
                                          guint           property_id,
@@ -57,68 +57,68 @@ const gchar **          gtk_widget_list_action_prefixes 
(GtkWidget             *
                                          GParamSpec     *pspec);
 ")
 
-(defconst gnome-test-program-4 "\
+(defconst gnome-c-test-program-4 "\
 FOO_AVAILABLE_IN_ALL
 int foo (struct foo ***a, int b, ...) G_GNUC_CONST;
 ")
 
-(defconst gnome-test-program-4-aligned "\
+(defconst gnome-c-test-program-4-aligned "\
 FOO_AVAILABLE_IN_ALL
 int foo (struct foo ***a,
          int           b,
          ...) G_GNUC_CONST;
 ")
 
-(ert-deftest gnome-test-align--compute-optimal-columns ()
-  "Tests the `gnome-align--compute-optimal-columns'."
+(ert-deftest gnome-c-test-align--compute-optimal-columns ()
+  "Tests the `gnome-c-align--compute-optimal-columns'."
   (with-temp-buffer
-    (insert gnome-test-program-1)
+    (insert gnome-c-test-program-1)
     (c-mode)
-    (let* (gnome-align-max-column
+    (let* (gnome-c-align-max-column
           (columns
-           (gnome-align--compute-optimal-columns (point-min) (point-max))))
+           (gnome-c-align--compute-optimal-columns (point-min) (point-max))))
       (should (= (cdr (assq 'identifier-start-column columns)) 9))
       (should (= (cdr (assq 'arglist-start-column columns)) 41))
       (should (= (cdr (assq 'arglist-identifier-start-column columns)) 64)))))
 
-(ert-deftest gnome-test-align-region ()
-  "Tests the `gnome-align-region'."
+(ert-deftest gnome-c-test-align-region ()
+  "Tests the `gnome-c-align-region'."
   (with-temp-buffer
-    (insert gnome-test-program-1)
+    (insert gnome-c-test-program-1)
     (c-mode)
-    (let (gnome-align-max-column)
-      (gnome-align-compute-optimal-columns (point-min) (point-max))
-      (gnome-align-region (point-min) (point-max)))
-    (should (equal (buffer-string) gnome-test-program-1-aligned))))
+    (let (gnome-c-align-max-column)
+      (gnome-c-align-compute-optimal-columns (point-min) (point-max))
+      (gnome-c-align-region (point-min) (point-max)))
+    (should (equal (buffer-string) gnome-c-test-program-1-aligned))))
 
-(ert-deftest gnome-test-align-region-2 ()
-  "Tests the `gnome-align-region'."
+(ert-deftest gnome-c-test-align-region-2 ()
+  "Tests the `gnome-c-align-region'."
   (with-temp-buffer
-    (insert gnome-test-program-4)
+    (insert gnome-c-test-program-4)
     (c-mode)
-    (let (gnome-align-max-column)
-      (gnome-align-compute-optimal-columns (point-min) (point-max))
-      (gnome-align-region (point-min) (point-max)))
-    (should (equal (buffer-string) gnome-test-program-4-aligned))))
+    (let (gnome-c-align-max-column)
+      (gnome-c-align-compute-optimal-columns (point-min) (point-max))
+      (gnome-c-align-region (point-min) (point-max)))
+    (should (equal (buffer-string) gnome-c-test-program-4-aligned))))
 
-(ert-deftest gnome-test-align-guess-columns-1 ()
-  "Tests the `gnome-align-guess-columns'."
+(ert-deftest gnome-c-test-align-guess-columns-1 ()
+  "Tests the `gnome-c-align-guess-columns'."
   (with-temp-buffer
-    (insert gnome-test-program-2)
+    (insert gnome-c-test-program-2)
     (c-mode)
-    (let (gnome-align-max-column)
-      (gnome-align-guess-columns (point-min) (point-max)))
-    (should (= gnome-align-identifier-start-column 24))
-    (should (= gnome-align-arglist-start-column 56))
-    (should (= gnome-align-arglist-identifier-start-column 80))))
+    (let (gnome-c-align-max-column)
+      (gnome-c-align-guess-columns (point-min) (point-max)))
+    (should (= gnome-c-align-identifier-start-column 24))
+    (should (= gnome-c-align-arglist-start-column 56))
+    (should (= gnome-c-align-arglist-identifier-start-column 80))))
 
-(ert-deftest gnome-test-align-guess-columns-2 ()
-  "Tests the `gnome-align-guess-columns'."
+(ert-deftest gnome-c-test-align-guess-columns-2 ()
+  "Tests the `gnome-c-align-guess-columns'."
   (with-temp-buffer
-    (insert gnome-test-program-3)
+    (insert gnome-c-test-program-3)
     (c-mode)
-    (let (gnome-align-max-column)
-      (gnome-align-guess-columns (point-min) (point-max)))
-    (should (= gnome-align-identifier-start-column 13))
-    (should (= gnome-align-arglist-start-column 40))
-    (should (= gnome-align-arglist-identifier-start-column 57))))
+    (let (gnome-c-align-max-column)
+      (gnome-c-align-guess-columns (point-min) (point-max)))
+    (should (= gnome-c-align-identifier-start-column 13))
+    (should (= gnome-c-align-arglist-start-column 40))
+    (should (= gnome-c-align-arglist-identifier-start-column 57))))
diff --git a/gnome-minor-mode.el b/gnome-minor-mode.el
deleted file mode 100644
index b2930be..0000000
--- a/gnome-minor-mode.el
+++ /dev/null
@@ -1,65 +0,0 @@
-;;; gnome-minor-mode.el --- minor mode for editing GNOME-style C source code 
-*- lexical-binding: t; -*-
-;; Copyright (C) 2016 Daiki Ueno <address@hidden>
-
-;; Author: Daiki Ueno <address@hidden>
-;; Keywords: GNOME, C, coding style
-;; Version: 0.1
-;; Maintainer: Daiki Ueno <address@hidden>
-
-;; This file is not part of GNU Emacs.
-
-;; This program is free software: you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as
-;; published by the Free Software Foundation, either version 3 of the
-;; License, or (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-;; General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see
-;; <http://www.gnu.org/licenses/>.
-
-;;; Code:
-
-(autoload 'gnome-align-at-point "gnome-align")
-(autoload 'gnome-align-region "gnome-align")
-(autoload 'gnome-align-set-column "gnome-align")
-(autoload 'gnome-align-guess-columns "gnome-align")
-(autoload 'gnome-align-compute-optimal-columns "gnome-align")
-(autoload 'gnome-snippet-insert-package_class "gnome-snippet")
-(autoload 'gnome-snippet-insert-PACKAGE_CLASS "gnome-snippet")
-(autoload 'gnome-snippet-insert-PackageClass "gnome-snippet")
-(autoload 'gnome-snippet-insert-interface-declation "gnome-snippet")
-(autoload 'gnome-snippet-insert-class-declation "gnome-snippet")
-(autoload 'gnome-snippet-insert-set_property "gnome-snippet")
-(autoload 'gnome-snippet-insert-get_property "gnome-snippet")
-(autoload 'gnome-snippet-insert-dispose "gnome-snippet")
-(autoload 'gnome-snippet-insert-finalize "gnome-snippet")
-(autoload 'gnome-snippet-insert-notify "gnome-snippet")
-(autoload 'gnome-snippet-insert-constructed "gnome-snippet")
-(autoload 'gnome-snippet-insert "gnome-snippet")
-
-(defvar gnome-minor-mode-map
-  (let ((keymap (make-sparse-keymap)))
-    (define-key keymap "\C-c\C-ga" 'gnome-align-at-point)
-    (define-key keymap "\C-c\C-gr" 'gnome-align-region)
-    (define-key keymap "\C-c\C-gf" 'gnome-align-set-column)
-    (define-key keymap "\C-c\C-gg" 'gnome-align-guess-columns)
-    (define-key keymap "\C-c\C-g\C-g" 'gnome-align-compute-optimal-columns)
-    (define-key keymap "\C-c\C-gc" 'gnome-snippet-insert-package_class)
-    (define-key keymap "\C-c\C-gC" 'gnome-snippet-insert-PACKAGE_CLASS)
-    (define-key keymap "\C-c\C-g\C-c" 'gnome-snippet-insert-PackageClass)
-    (define-key keymap "\C-c\C-gs" 'gnome-snippet-insert)
-    keymap))
-
-;;;###autoload
-(define-minor-mode gnome-minor-mode
-  "A minor-mode for editing GNOME-style C source code."
-  nil " GNOME" gnome-minor-mode-map)
-
-(provide 'gnome-c-mode)
-
-;;; gnome-c-mode.el ends here
diff --git a/gnome-snippet.el b/gnome-snippet.el
deleted file mode 100644
index a2862ab..0000000
--- a/gnome-snippet.el
+++ /dev/null
@@ -1,520 +0,0 @@
-;;; gnome-snippet.el --- GNOME-style code generation -*- lexical-binding: t; 
-*-
-;; Copyright (C) 2016 Daiki Ueno <address@hidden>
-
-;; Author: Daiki Ueno <address@hidden>
-;; Keywords: GNOME, C, coding style
-
-;; This file is not part of GNU Emacs.
-
-;; This program is free software: you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as
-;; published by the Free Software Foundation, either version 3 of the
-;; License, or (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-;; General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see
-;; <http://www.gnu.org/licenses/>.
-
-;;; Code:
-
-(require 'gnome-align)
-
-(eval-when-compile
-  (require 'subword))
-
-(declare-function subword-forward "subword.el" (&optional arg))
-
-(defvar gnome-snippet-package nil)
-(make-variable-buffer-local 'gnome-snippet-package)
-
-(defvar gnome-snippet-class nil)
-(make-variable-buffer-local 'gnome-snippet-class)
-
-(defvar gnome-snippet-parent-package nil)
-(make-variable-buffer-local 'gnome-snippet-parent-package)
-
-(defvar gnome-snippet-parent-class nil)
-(make-variable-buffer-local 'gnome-snippet-parent-class)
-
-(defcustom gnome-snippet-align-arglist t
-  "Whether to align argument list of the inserted snippet"
-  :type 'boolean
-  :group 'gnome-minor-mode)
-
-(make-variable-buffer-local 'gnome-snippet-align-arglist)
-
-(defun gnome-snippet--parse-name (name)
-  (require 'subword)
-  (with-temp-buffer
-    (let (words)
-      (insert name)
-      (goto-char (point-min))
-      (while (not (eobp))
-       ;; Skip characters not recognized by subword-mode.
-       (if (looking-at "[^[:lower:][:upper:][:digit:]]+")
-           (goto-char (match-end 0)))
-       (push (buffer-substring (point) (progn (subword-forward 1)
-                                              (point)))
-             words))
-      (nreverse words))))
-
-(defun gnome-snippet--read-package-and-class (package-prompt
-                                               class-prompt
-                                               package-symbol
-                                               class-symbol)
-  (when (or current-prefix-arg
-           (not (and (symbol-value package-symbol)
-                     (symbol-value class-symbol))))
-    (set package-symbol
-        (gnome-snippet--parse-name
-         (read-string (or package-prompt
-                          "Package (CamelCase): ")
-                      (if (symbol-value package-symbol)
-                          (gnome-snippet--format-Package
-                           (symbol-value package-symbol))))))
-    (set class-symbol
-        (gnome-snippet--parse-name
-         (read-string (or class-prompt
-                          "Class (CamelCase): ")
-                      (if (symbol-value class-symbol)
-                          (gnome-snippet--format-Class
-                           (symbol-value class-symbol)))))))
-  (list (symbol-value package-symbol) (symbol-value class-symbol)))
-
-(defun gnome-snippet--format-PACKAGE (package)
-  (mapconcat #'upcase package "_"))
-(defalias 'gnome-snippet--format-CLASS 'gnome-snippet--format-PACKAGE)
-
-(defun gnome-snippet--format-PACKAGE_CLASS (package class)
-  (concat (gnome-snippet--format-PACKAGE package)
-         "_"
-         (gnome-snippet--format-CLASS class)))
-
-(defun gnome-snippet--format-package (package)
-  (mapconcat #'downcase package "_"))
-(defalias 'gnome-snippet--format-class 'gnome-snippet--format-package)
-
-(defun gnome-snippet--format-package_class (package class)
-  (concat (gnome-snippet--format-package package)
-         "_"
-         (gnome-snippet--format-class class)))
-
-(defun gnome-snippet--format-Package (package)
-  (mapconcat #'identity package ""))
-(defalias 'gnome-snippet--format-Class 'gnome-snippet--format-Package)
-
-(defun gnome-snippet--format-PackageClass (package class)
-  (concat (gnome-snippet--format-Package package)
-         (gnome-snippet--format-Class class)))
-
-;;;###autoload
-(defun gnome-snippet-insert-package_class (package class)
-  "Insert the class name before the current point."
-  (interactive (gnome-snippet--read-package-and-class
-               nil nil
-               'gnome-snippet-package
-               'gnome-snippet-class))
-  (insert (gnome-snippet--format-package_class package class)))
-
-;;;###autoload
-(defun gnome-snippet-insert-PACKAGE_CLASS (package class)
-  "Insert the class name before the current point."
-  (interactive (gnome-snippet--read-package-and-class
-               nil nil
-               'gnome-snippet-package
-               'gnome-snippet-class))
-  (insert (gnome-snippet--format-PACKAGE_CLASS package class)))
-
-;;;###autoload
-(defun gnome-snippet-insert-PackageClass (package class)
-  "Insert the class name (in CamelCase) before the current point."
-  (interactive (gnome-snippet--read-package-and-class
-               nil nil
-               'gnome-snippet-package
-               'gnome-snippet-class))
-  (insert (gnome-snippet--format-PackageClass package class)))
-
-(defun gnome-snippet-insert-interface-declaration (package iface
-                                                            parent-package 
parent-class)
-  "Insert interface declaration for PACKAGE and IFACE"
-  (interactive
-   (append (gnome-snippet--read-package-and-class
-           nil
-           "Interface (CamelCase): "
-           'gnome-snippet-package
-           'gnome-snippet-class)
-          (gnome-snippet--read-package-and-class
-           "Parent package (CamelCase): "
-           "Parent class (CamelCase): "
-           'gnome-snippet-parent-package
-           'gnome-snippet-parent-class)))
-  (insert "\
-#define " (gnome-snippet--format-PACKAGE package) "_TYPE_" 
(gnome-snippet--format-CLASS iface) " (" (gnome-snippet--format-package 
package) "_" (gnome-snippet--format-class iface) "_get_type ())
-G_DECLARE_INTERFACE (" (gnome-snippet--format-PackageClass package iface) ", "
-(gnome-snippet--format-package_class package iface) ", " 
(gnome-snippet--format-PACKAGE package) ", " (gnome-snippet--format-CLASS 
iface) ", " (gnome-snippet--format-PackageClass parent-package parent-class) ")
-"))
-
-(defun gnome-snippet--insert-class-declaration (package
-                                                 class
-                                                 parent-package
-                                                 parent-class
-                                                 derivable)
-  (insert "\
-#define " (gnome-snippet--format-PACKAGE package) "_TYPE_" 
(gnome-snippet--format-CLASS class) " (" (gnome-snippet--format-package_class 
package class) "_get_type ())
-G_DECLARE_" (if derivable "DERIVABLE" "FINAL") "_TYPE (" 
(gnome-snippet--format-PackageClass package class) ", "
-(gnome-snippet--format-package_class package class) ", " 
(gnome-snippet--format-PACKAGE package) ", " (gnome-snippet--format-CLASS 
class) ", " (gnome-snippet--format-PackageClass parent-package parent-class) ")
-"))
-
-(defun gnome-snippet-insert-final-class-declaration (package
-                                                    class
-                                                    parent-package
-                                                    parent-class)
-  "Insert final class declaration for PACKAGE and CLASS."
-  (interactive
-   (append (gnome-snippet--read-package-and-class
-           nil nil
-           'gnome-snippet-package
-           'gnome-snippet-class)
-          (gnome-snippet--read-package-and-class
-           "Parent package (CamelCase): "
-           "Parent class (CamelCase): "
-           'gnome-snippet-parent-package
-           'gnome-snippet-parent-class)))
-  (gnome-snippet--insert-class-declaration package
-                                            class
-                                            parent-package
-                                            parent-class
-                                            nil))
-
-(defun gnome-snippet-insert-derivable-class-declaration (package
-                                                        class
-                                                        parent-package
-                                                        parent-class)
-  "Insert derivable class declaration for PACKAGE and CLASS."
-  (interactive
-   (append (gnome-snippet--read-package-and-class
-           nil nil
-           'gnome-snippet-package
-           'gnome-snippet-class)
-          (gnome-snippet--read-package-and-class
-           "Parent package (CamelCase): "
-           "Parent class (CamelCase): "
-           'gnome-snippet-parent-package
-           'gnome-snippet-parent-class)))
-  (gnome-snippet--insert-class-declaration package
-                                            class
-                                            parent-package
-                                            parent-class
-                                            t))
-
-(defun gnome-snippet-insert-interface-definition (package
-                                                 iface
-                                                 parent-package
-                                                 parent-class)
-  "Insert class definition for PACKAGE and CLASS."
-  (interactive
-   (append (gnome-snippet--read-package-and-class
-           nil
-           "Interface (CamelCase): "
-           'gnome-snippet-package
-           'gnome-snippet-class)
-          (gnome-snippet--read-package-and-class
-           "Parent package (CamelCase): "
-           "Parent class (CamelCase): "
-           'gnome-snippet-parent-package
-           'gnome-snippet-parent-class)))
-  (insert "\
-static void
-" (gnome-snippet--format-package_class package iface) "_default_init (" 
(gnome-snippet--format-PackageClass package iface) "Interface *iface) {
-}
-
-G_DEFINE_INTERFACE (" (gnome-snippet--format-PackageClass package iface) ", "
-(gnome-snippet--format-package_class package iface) ", " 
(gnome-snippet--format-PACKAGE parent-package) "_TYPE_" 
(gnome-snippet--format-CLASS parent-class) ")
-"))
-
-(defun gnome-snippet--insert-class-definition (package
-                                              class
-                                              parent-package
-                                              parent-class
-                                              abstract)
-  (insert "\
-G_DEFINE_" (if abstract "ABSTRACT_" "") "TYPE (" 
(gnome-snippet--format-PackageClass package class) ", "
-(gnome-snippet--format-package_class package class) ", " 
(gnome-snippet--format-PACKAGE parent-package) "_TYPE_" 
(gnome-snippet--format-CLASS parent-class) ")
-
-static void
-" (gnome-snippet--format-package_class package class) "_class_init (" 
(gnome-snippet--format-PackageClass package class) "Class *klass)
-{
-}
-
-static void
-" (gnome-snippet--format-package_class package class) "_init (" 
(gnome-snippet--format-PackageClass package class) " *self)
-{
-}
-"))
-
-(defun gnome-snippet-insert-class-definition (package
-                                             class
-                                             parent-package
-                                             parent-class)
-  "Insert class definition for PACKAGE and CLASS."
-  (interactive
-   (append (gnome-snippet--read-package-and-class
-           nil nil
-           'gnome-snippet-package
-           'gnome-snippet-class)
-          (gnome-snippet--read-package-and-class
-           "Parent package (CamelCase): "
-           "Parent class (CamelCase): "
-           'gnome-snippet-parent-package
-           'gnome-snippet-parent-class)))
-  (gnome-snippet--insert-class-definition package
-                                         class
-                                         parent-package
-                                         parent-class
-                                         nil))
-
-(defun gnome-snippet-insert-abstract-class-definition (package
-                                                      class
-                                                      parent-package
-                                                      parent-class)
-  "Insert abstract class definition for PACKAGE and CLASS."
-  (interactive
-   (append (gnome-snippet--read-package-and-class
-           nil nil
-           'gnome-snippet-package
-           'gnome-snippet-class)
-          (gnome-snippet--read-package-and-class
-           "Parent package (CamelCase): "
-           "Parent class (CamelCase): "
-           'gnome-snippet-parent-package
-           'gnome-snippet-parent-class)))
-  (gnome-snippet--insert-class-definition package
-                                         class
-                                         parent-package
-                                         parent-class
-                                         t))
-
-(defun gnome-snippet-insert-constructor (package class)
-  "Insert 'constructor' vfunc of GObjectClass for PACKAGE and CLASS."
-  (interactive
-   (gnome-snippet--read-package-and-class
-    nil nil
-    'gnome-snippet-package
-    'gnome-snippet-class))
-  (let (arglist-start body-start)
-    (insert "\
-static GObject *
-" (gnome-snippet--format-package_class package class) "_constructor (")
-    (setq arglist-start (point-marker))
-    (insert "GType *object,
-guint n_construct_properties,
-GObjectConstructParam *construct_properties)\n")
-    (setq body-start (point-marker))
-    (if gnome-snippet-align-arglist
-       (progn
-         (goto-char arglist-start)
-         (gnome-align-at-point))
-      (indent-region arglist-start (point)))
-    (goto-char body-start)
-    (insert "{
-  " (gnome-snippet--format-PackageClass package class) " *self = "
-  (gnome-snippet--format-PACKAGE_CLASS package class) " (object);
-
-  G_OBJECT_CLASS (" (gnome-snippet--format-package_class package class) 
"_parent_class)->constructed (object);
-}
-")
-    (indent-region body-start (point))))
-
-(defun gnome-snippet-insert-set_property (package class)
-  "Insert 'set_property' vfunc of GObjectClass for PACKAGE and CLASS."
-  (interactive
-   (gnome-snippet--read-package-and-class
-    nil nil
-    'gnome-snippet-package
-    'gnome-snippet-class))
-  (let (arglist-start body-start)
-    (insert "\
-static void
-" (gnome-snippet--format-package_class package class) "_set_property (")
-    (setq arglist-start (point-marker))
-    (insert "GObject *object,
-guint prop_id,
-const GValue *value,
-GParamSpec *pspec)\n")
-    (setq body-start (point-marker))
-    (if gnome-snippet-align-arglist
-       (progn
-         (goto-char arglist-start)
-         (gnome-align-at-point))
-      (indent-region arglist-start (point)))
-    (goto-char body-start)
-    (insert "{
-  " (gnome-snippet--format-PackageClass package class) " *self = "
-  (gnome-snippet--format-PACKAGE_CLASS package class) " (object);
-
-  switch (prop_id)
-    {
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-    }
-}
-")
-    (indent-region body-start (point))))
-
-(defun gnome-snippet-insert-get_property (package class)
-  "Insert 'get_property' vfunc of GObjectClass for PACKAGE and CLASS."
-  (interactive
-   (gnome-snippet--read-package-and-class
-    nil nil
-    'gnome-snippet-package
-    'gnome-snippet-class))
-  (let (arglist-start body-start)
-    (insert "\
-static void
-" (gnome-snippet--format-package_class package class) "_get_property (")
-    (setq arglist-start (point-marker))
-    (insert "GObject *object,
-guint prop_id,
-GValue *value,
-GParamSpec *pspec)\n")
-    (setq body-start (point-marker))
-    (if gnome-snippet-align-arglist
-       (progn
-         (goto-char arglist-start)
-         (gnome-align-at-point))
-      (indent-region arglist-start (point)))
-    (goto-char body-start)
-    (insert "{
-  " (gnome-snippet--format-PackageClass package class) " *self = "
-(gnome-snippet--format-PACKAGE_CLASS package class) " (object);
-
-  switch (prop_id)
-    {
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-    }
-}
-")
-    (indent-region body-start (point))))
-
-(defun gnome-snippet-insert-dispose (package class)
-  "Insert 'dispose' vfunc of GObjectClass for PACKAGE and CLASS."
-  (interactive
-   (gnome-snippet--read-package-and-class
-    nil nil
-    'gnome-snippet-package
-    'gnome-snippet-class))
-  (let (body-start)
-    (insert "\
-static void
-" (gnome-snippet--format-package_class package class) "_dispose (GObject 
*object)\n")
-    (setq body-start (point-marker))
-    (insert "{
-  " (gnome-snippet--format-PackageClass package class) " *self = "
-  (gnome-snippet--format-PACKAGE_CLASS package class) " (object);
-
-  G_OBJECT_CLASS (" (gnome-snippet--format-package_class package class) 
"_parent_class)->dispose (object);
-}
-")
-    (indent-region body-start (point))))
-
-(defun gnome-snippet-insert-finalize (package class)
-  "Insert 'finalize' vfunc of GObjectClass for PACKAGE and CLASS."
-  (interactive
-   (gnome-snippet--read-package-and-class
-    nil nil
-    'gnome-snippet-package
-    'gnome-snippet-class))
-  (let (body-start)
-    (insert "\
-static void
-" (gnome-snippet--format-package_class package class) "_finalize (GObject 
*object)\n")
-    (setq body-start (point-marker))
-    (insert "{
-  " (gnome-snippet--format-PackageClass package class) " *self = "
-  (gnome-snippet--format-PACKAGE_CLASS package class) " (object);
-
-  G_OBJECT_CLASS (" (gnome-snippet--format-package_class package class) 
"_parent_class)->finalize (object);
-}
-")
-    (indent-region body-start (point))))
-
-(defun gnome-snippet-insert-notify (package class)
-  "Insert 'notify' vfunc of GObjectClass for PACKAGE and CLASS."
-  (interactive
-   (gnome-snippet--read-package-and-class
-    nil nil
-    'gnome-snippet-package
-    'gnome-snippet-class))
-  (let (body-start)
-    (insert "\
-static void
-" (gnome-snippet--format-package_class package class) "_notify (GObject 
*object)\n")
-    (setq body-start (point-marker))
-    (insert "{
-  " (gnome-snippet--format-PackageClass package class) " *self = "
-  (gnome-snippet--format-PACKAGE_CLASS package class) " (object);
-
-  G_OBJECT_CLASS (" (gnome-snippet--format-package_class package class) 
"_parent_class)->finalize (object);
-}
-")
-    (indent-region body-start (point))))
-
-(defun gnome-snippet-insert-constructed (package class)
-  "Insert 'constructed' vfunc of GObjectClass for PACKAGE and CLASS."
-  (interactive
-   (gnome-snippet--read-package-and-class
-    nil nil
-    'gnome-snippet-package
-    'gnome-snippet-class))
-  (let (body-start)
-    (insert "\
-static void
-" (gnome-snippet--format-package_class package class) "_constructed (GObject 
*object)\n")
-    (setq body-start (point-marker))
-    (insert "{
-  " (gnome-snippet--format-PackageClass package class) " *self = "
-  (gnome-snippet--format-PACKAGE_CLASS package class) " (object);
-
-  G_OBJECT_CLASS (" (gnome-snippet--format-package_class package class) 
"_parent_class)->constructed (object);
-}
-")
-    (indent-region body-start (point))))
-
-(defvar gnome-snippet-snippet-commands
-  '(("G_DECLARE_INTERFACE" . gnome-snippet-insert-interface-declaration)
-    ("G_DECLARE_FINAL_TYPE" . gnome-snippet-insert-final-class-declaration)
-    ("G_DECLARE_DERIVABLE_TYPE" .
-     gnome-snippet-insert-derivable-class-declaration)
-    ("G_DEFINE_INTERFACE" . gnome-snippet-insert-interface-definition)
-    ("G_DEFINE_TYPE" . gnome-snippet-insert-class-definition)
-    ("G_DEFINE_ABSTRACT_TYPE" .
-     gnome-snippet-insert-abstract-class-definition)
-    ("GObjectClass.constructor" . gnome-snippet-insert-constructor)
-    ("GObjectClass.set_property" . gnome-snippet-insert-set_property)
-    ("GObjectClass.get_property" . gnome-snippet-insert-get_property)
-    ("GObjectClass.dispose" . gnome-snippet-insert-dispose)
-    ("GObjectClass.finalize" . gnome-snippet-insert-finalize)
-    ;; GObjectClass.dispatch_properties_changed
-    ("GObjectClass.notify" . gnome-snippet-insert-notify)
-    ("GObjectClass.contructed" . gnome-snippet-insert-constructed)))
-
-;;;###autoload
-(defun gnome-snippet-insert (snippet)
-  (interactive
-   (list (completing-read "Snippet: " gnome-snippet-snippet-commands nil t)))
-  (let ((entry (assoc snippet gnome-snippet-snippet-commands)))
-    (unless entry
-      (error "Unknown snippet: %s" snippet))
-    (call-interactively (cdr entry))))
-
-(provide 'gnome-snippet)
-
-;;; gnome-snippet.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]