contrib: add emacs config for hacking on NM
authorDan Winship <danw@redhat.com>
Sun, 9 Aug 2015 14:52:10 +0000 (10:52 -0400)
committerDan Winship <danw@redhat.com>
Tue, 11 Aug 2015 17:42:26 +0000 (13:42 -0400)
https://bugzilla.gnome.org/show_bug.cgi?id=753411

contrib/editors/networkmanager-style.el [new file with mode: 0644]

diff --git a/contrib/editors/networkmanager-style.el b/contrib/editors/networkmanager-style.el
new file mode 100644 (file)
index 0000000..69c7ac5
--- /dev/null
@@ -0,0 +1,61 @@
+;;; Emacs support for hacking on NetworkManager
+
+(c-add-style "NetworkManager"
+             '(
+               ; Start with the "bsd" style
+               "bsd"
+
+               ; ...but remove the rule saying labels must be indented at
+               ; least one space
+               (c-label-minimum-indentation . 0)
+
+               ; 4-space tabs/indents
+               (tab-width . 4)
+               (c-basic-offset . 4)
+
+               ; Use smart-tabs-mode (see below) to get tabs for indentation
+               ; but spaces for alignment of continuation lines.
+               (smart-tabs-mode . t)
+
+               ; Multi-line "if" conditions are indented like this:
+               ;     if (   foo
+               ;         && bar)
+               ; (You have to add the spaces on the first line yourself, but
+               ; this will make emacs align the "&&" correctly.)
+               (c-offsets-alist (arglist-cont-nonempty . (nm-lineup-arglist))
+                                (arglist-close . (nm-lineup-arglist)))
+
+               ; NM's comments use two spaces after a period and are
+               ; (generally) wrapped at 80 characters
+               (sentence-end-double-space . t)
+               (fill-column . 80)
+               ))
+
+;; http://www.emacswiki.org/emacs/SmartTabs
+(require 'smart-tabs-mode)
+
+;; The smart-tabs-mode documentation tells you to use
+;; smart-tabs-insinuate to set it up, but that will cause it to be
+;; enabled for *all* C code. We only want to enable it for
+;; NetworkManager, so we have to manually set it up first.
+(smart-tabs-advice c-indent-line c-basic-offset)
+(smart-tabs-advice c-indent-region c-basic-offset)
+
+
+;; Implements the weird "if" alignment
+(defun nm-lineup-arglist (langelem)
+  (save-excursion
+    (back-to-indentation)
+    (c-go-up-list-backward)
+    (vector (+ (current-column) 1))))
+
+
+(dir-locals-set-class-variables 'nm '((c-mode . ((c-file-style . "NetworkManager")))))
+
+;; Now add a line like the following for every directory where you want the
+;; "NetworkManager" style to be the default
+
+; (dir-locals-set-directory-class "/home/danw/gnome/NetworkManager/" 'nm)
+; (dir-locals-set-directory-class "/home/danw/gnome/network-manager-applet/" 'nm)
+
+(provide 'networkmanager-style)