Update Emacs configuration
authorPeter Eisentraut <[email protected]>
Wed, 14 Aug 2013 00:08:44 +0000 (20:08 -0400)
committerPeter Eisentraut <[email protected]>
Wed, 14 Aug 2013 00:08:44 +0000 (20:08 -0400)
Update emacs.samples with new configuration snippets that match pgindent
et al. formatting more accurately and follow Emacs Lisp best practices
better.

Add .dir-locals.el with a subset of that configuration for casual
editing and viewing.

Reviewed-by: Dimitri Fontaine <[email protected]>
Reviewed-by: Noah Misch <[email protected]>
.dir-locals.el [new file with mode: 0644]
src/tools/editors/emacs.samples

diff --git a/.dir-locals.el b/.dir-locals.el
new file mode 100644 (file)
index 0000000..bc1bc7b
--- /dev/null
@@ -0,0 +1,18 @@
+;; see also src/tools/editors/emacs.samples for more complete settings
+
+((c-mode . ((c-basic-offset . 4)
+            (c-file-style . "bsd")
+            (fill-column . 78)
+            (indent-tabs-mode . t)
+            (tab-width . 4)))
+ (dsssl-mode . ((indent-tabs-mode . nil)))
+ (nxml-mode . ((indent-tabs-mode . nil)))
+ (perl-mode . ((perl-indent-level . 4)
+               (perl-continued-statement-offset . 4)
+               (perl-continued-brace-offset . 4)
+               (perl-brace-offset . 0)
+               (perl-brace-imaginary-offset . 0)
+               (perl-label-offset . -2)
+               (tab-width . 4)))
+ (sgml-mode . ((fill-column . 78)
+               (indent-tabs-mode . nil))))
index c8d8d07a20b640269fbb0d605b9f46a23538e546..e469d5525ebda2da299be3e9b6b6d1e39dc66a09 100644 (file)
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;
-;;; This file contains several examples of how to set up emacs and/or xemacs
-;;; to edit PostgreSQL code.
-;;;
-;;; Whichever set you choose would go in your .emacs file or equivalent.
-;;;
-;;; You only need one of these.
-;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;;; Mode for C files to match src/tools/pgindent/pgindent formatting
-
-;;; This set is known to work with old versions of emacs
-
-(setq auto-mode-alist
-  (cons '("\\(postgres\\|pgsql\\).*\\.[ch]\\'" . pgsql-c-mode)
-        auto-mode-alist))
-(setq auto-mode-alist
-  (cons '("\\(postgres\\|pgsql\\).*\\.cc\\'" . pgsql-c-mode)
-        auto-mode-alist))
-
-(defun pgsql-c-mode ()
-  ;; sets up formatting for PostgreSQL C code
-  (interactive)
-  (c-mode)
-  (setq-default tab-width 4)
-  (c-set-style "bsd")             ; set c-basic-offset to 4, plus other stuff
-  (c-set-offset 'case-label '+)   ; tweak case indent to match PG custom
-  (setq fill-column 79)           ; matches what pgindent does
-  (setq indent-tabs-mode t))      ; make sure we keep tabs when indenting
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;;; Similar approach, known to work with xemacs
-;;; Use of a named style makes it easy to use the style elsewhere
-
-(c-add-style "pgsql"
-                      '("bsd"
-                                 (fill-column . 79)
-                                 (indent-tabs-mode . t)
-                                 (c-basic-offset   . 4)
-                                 (tab-width . 4)
-                                 (c-offsets-alist .
-                                            ((case-label . +)))
-                      )
-                      nil ) ; t = set this mode, nil = don't
-
-(defun pgsql-c-mode ()
-  (c-mode)
-  (c-set-style "pgsql")
-)
-
-(setq auto-mode-alist
-  (cons '("\\(postgres\\|pgsql\\).*\\.[chyl]\\'" . pgsql-c-mode)
-        auto-mode-alist))
-(setq auto-mode-alist
-  (cons '("\\(postgres\\|pgsql\\).*\\.cc\\'" . pgsql-c-mode)
-        auto-mode-alist))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;;; Slightly different approach - use a hook instead of a mode
+;; -*- mode: emacs-lisp -*-
+
+;; This file contains code to set up Emacs to edit PostgreSQL source
+;; code.  Copy these snippets into your .emacs file or equivalent, or
+;; use load-file to load this file directly.
+;;
+;; Note also that there is a .dir-locals.el file at the top of the
+;; PostgreSQL source tree, which contains many of the settings shown
+;; here (but not all, mainly because not all settings are allowed as
+;; local variables).  So for light editing, you might not need any
+;; additional Emacs configuration.
+
+
+;;; C files
+
+;; Style that matches the formatting used by
+;; src/tools/pgindent/pgindent.  Many extension projects also use this
+;; style.
+(c-add-style "postgresql"
+             '("bsd"
+               (c-auto-align-backslashes . nil)
+               (c-basic-offset . 4)
+               (c-offsets-alist . ((case-label . +)
+                                   (label . -)
+                                   (statement-case-open . +)))
+               (fill-column . 78)
+               (indent-tabs-mode . t)
+               (tab-width . 4)))
 
 (add-hook 'c-mode-hook
-         (function
-          (lambda nil
-            (if (string-match "postgresql" buffer-file-name)
-                (progn
-                  (c-set-style "bsd")
-                  (setq c-basic-offset 4)
-                  (setq tab-width 4)
-                  (c-set-offset 'case-label '+)
-                  (setq fill-column 79)
-                  (setq indent-tabs-mode t)
-                  )
-              ))))
+          (defun postgresql-c-mode-hook ()
+            (when (string-match "/postgres\\(ql\\)?/" buffer-file-name)
+              (c-set-style "postgresql"))))
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-;;; Mode for Perl files to match src/tools/pgindent/perltidyrc formatting
+;;; Perl files
 
+;; Style that matches the formatting used by
+;; src/tools/pgindent/perltidyrc.
 (defun pgsql-perl-style ()
   "Perl style adjusted for PostgreSQL project"
   (interactive)
-  (setq tab-width 4)
-  (setq perl-indent-level 4)
-  (setq perl-continued-statement-offset 4)
-  (setq perl-continued-brace-offset 4)
-  (setq perl-brace-offset 0)
   (setq perl-brace-imaginary-offset 0)
-  (setq perl-label-offset -2))
+  (setq perl-brace-offset 0)
+  (setq perl-continued-brace-offset 4)
+  (setq perl-continued-statement-offset 4)
+  (setq perl-indent-level 4)
+  (setq perl-label-offset -2)
+  (setq tab-width 4))
 
 (add-hook 'perl-mode-hook
-           (lambda ()
-             (if (string-match "postgresql" buffer-file-name)
-                 (pgsql-perl-style))))
+          (defun postgresql-perl-mode-hook ()
+             (when (string-match "/postgres\\(ql\\)?/" buffer-file-name)
+               (pgsql-perl-style))))
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-;;; To work on the documentation, the following (or a variant, as above)
-;;; can be helpful.
+;;; documentation files
 
-(defun pgsql-sgml-mode ()
-  "SGML mode adjusted for PostgreSQL project"
-  (interactive)
-  (sgml-mode)
+(add-hook 'sgml-mode-hook
+          (defun postgresql-sgml-mode-hook ()
+             (when (string-match "/postgres\\(ql\\)?/" buffer-file-name)
+               (setq fill-column 78)
+               (setq indent-tabs-mode nil)
+               (setq sgml-basic-offset 1))))
 
-  (setq indent-tabs-mode nil)
-  (setq sgml-basic-offset 1)
-)
 
-(setq auto-mode-alist
-  (cons '("\\(postgres\\|pgsql\\).*\\.sgml\\'" . pgsql-sgml-mode)
-        auto-mode-alist))
+;;; Makefiles
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; use GNU make mode instead of plain make mode
+(add-to-list 'auto-mode-alist '("/postgres\\(ql\\)?/.*Makefile.*" . makefile-gmake-mode))
+(add-to-list 'auto-mode-alist '("/postgres\\(ql\\)?/.*\\.mk\\'" . makefile-gmake-mode))