| ;; -*- 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 |
| (defun postgresql-c-mode-hook () |
| (when (or (string-match "/postgres\\(ql\\)?/" buffer-file-name) |
| (string-match "/cbdb/" buffer-file-name) |
| (string-match "/cloudberry/" buffer-file-name)) |
| (c-set-style "postgresql") |
| ;; Don't override the style we just set with the style in |
| ;; `dir-locals-file'. Emacs 23.4.1 needs this; it is obsolete, |
| ;; albeit harmless, by Emacs 24.3.1. |
| (set (make-local-variable 'ignored-local-variables) |
| (append '(c-file-style) ignored-local-variables))))) |
| |
| |
| ;;; 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 perl-brace-imaginary-offset 0) |
| (setq perl-brace-offset 0) |
| (setq perl-continued-statement-offset 2) |
| (setq perl-continued-brace-offset (- perl-continued-statement-offset)) |
| (setq perl-indent-level 4) |
| (setq perl-label-offset -2) |
| ;; Next two aren't marked safe-local-variable, so .dir-locals.el omits them. |
| (setq perl-indent-continued-arguments 4) |
| (setq perl-indent-parens-as-block t) |
| (setq indent-tabs-mode t) |
| (setq tab-width 4)) |
| |
| (add-hook 'perl-mode-hook |
| (defun postgresql-perl-mode-hook () |
| (when (or (string-match "/postgres\\(ql\\)?/" buffer-file-name) |
| (string-match "/cbdb/" buffer-file-name) |
| (string-match "/cloudberry/" buffer-file-name)) |
| (pgsql-perl-style)))) |
| |
| |
| ;;; documentation files |
| |
| ;; *.sgml files are actually XML |
| (add-to-list 'auto-mode-alist '("/postgres\\(ql\\)?/.*\\.sgml\\'" . nxml-mode)) |
| |
| (add-hook 'nxml-mode-hook |
| (defun postgresql-xml-mode-hook () |
| (when (string-match "/postgres\\(ql\\)?/" buffer-file-name) |
| (setq fill-column 78) |
| (setq indent-tabs-mode nil)))) |
| |
| ;; The *.xsl files use 2-space indent, which is consistent with |
| ;; docbook-xsl sources and also the nxml-mode default. But the *.sgml |
| ;; files use 1-space indent, mostly for historical reasons at this |
| ;; point. |
| (add-hook 'nxml-mode-hook |
| (defun postgresql-xml-src-mode-hook () |
| (when (string-match "/postgres\\(ql\\)?/.*\\.sgml\\'" buffer-file-name) |
| (setq nxml-child-indent 1)))) |
| |
| |
| ;;; 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)) |
| (add-to-list 'auto-mode-alist '("/cloudberry/.*Makefile.*" . makefile-gmake-mode)) |
| (add-to-list 'auto-mode-alist '("/cloudberry/.*\\.mk\\'" . makefile-gmake-mode)) |
| (add-to-list 'auto-mode-alist '("/cbdb/.*Makefile.*" . makefile-gmake-mode)) |
| (add-to-list 'auto-mode-alist '("/cbdb/.*\\.mk\\'" . makefile-gmake-mode)) |