upload
This commit is contained in:
commit
4ba4305b3e
3 changed files with 211 additions and 0 deletions
8
.gitignore
vendored
Normal file
8
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
#*
|
||||
%*
|
||||
tramp
|
||||
elpa
|
||||
url
|
||||
*.data
|
||||
eshell
|
||||
auto-save-list
|
||||
4
.gitignore~
Normal file
4
.gitignore~
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
#*
|
||||
%*
|
||||
tramp
|
||||
elpa
|
||||
199
elisp/openbsd-knf-style.el
Normal file
199
elisp/openbsd-knf-style.el
Normal file
|
|
@ -0,0 +1,199 @@
|
|||
;;
|
||||
;; OpenBSD KNF style
|
||||
;;
|
||||
;; Copyright (c) 2014,2015 Doug Hogan <doug@openbsd.org>
|
||||
;; Copyright (c) 2005 Nicholas Marriott <nicm@openbsd.org>
|
||||
;;
|
||||
;; Permission to use, copy, modify, and distribute this software for any
|
||||
;; purpose with or without fee is hereby granted, provided that the above
|
||||
;; copyright notice and this permission notice appear in all copies.
|
||||
;;
|
||||
;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
;;
|
||||
|
||||
;; This function is from nicm@
|
||||
(defun openbsd-knf-space-indent (langelem)
|
||||
"Indents either 4 spaces or none.
|
||||
|
||||
This function is from nicm@ and also in gsoares@'s config.
|
||||
Most useful with c-offset-alist entries that are lists such as
|
||||
arglist-cont-nonempty"
|
||||
(save-excursion
|
||||
(goto-char (cdr langelem))
|
||||
(setq syntax (car (car (c-guess-basic-syntax))))
|
||||
(while (or (eq syntax 'arglist-intro)
|
||||
(or (eq syntax 'arglist-cont)
|
||||
(eq syntax 'arglist-cont-nonempty)))
|
||||
(forward-line -1)
|
||||
(setq syntax (car (car (c-guess-basic-syntax)))))
|
||||
(beginning-of-line)
|
||||
(re-search-forward "[^ \t]" (c-point 'eol))
|
||||
(goto-char (+ (match-beginning 0) 4))
|
||||
(vector (current-column))))
|
||||
|
||||
;; OpenBSD KNF that doug@ uses.
|
||||
(defconst openbsd-knf-style
|
||||
'(
|
||||
;; Debugging
|
||||
;; (c-echo-syntactic-information-p . t) ;; display C-c C-s when hit 'tab'
|
||||
;;
|
||||
;; General settings that should be enabled in c-mode
|
||||
(indent-tabs-mode . t) ;; use tabs whenever feasible
|
||||
(fill-column . 80) ;; Assume KNF tries to maintain 80 char lines
|
||||
(show-trailing-whitespace . t) ;; KNF says to not have trailing WS
|
||||
(tab-width . 8) ;; When displaying literal tab, show 8 spaces
|
||||
;; c-mode
|
||||
(c-progress-interval . 1) ;; display progress meter during long indents
|
||||
(c-basic-offset . 8) ;; KNF uses 8 space tabs
|
||||
(c-comment-only-line-offset . 0) ;; don't indent comments extra
|
||||
(c-backspace-function . delete-backward-char)
|
||||
(c-delete-function . delete-char)
|
||||
(c-syntactic-indentation-in-macros . t) ;; indent inside macro defs
|
||||
(c-tab-always-indent . t) ;; indent line: Use C-q 'tab' to insert literal
|
||||
(c-continued-statement-offset 0)
|
||||
;; (c-electric-flag . nil) ;; if you don't like auto-indent
|
||||
(c-electric-continued-statement . t)
|
||||
;;
|
||||
(c-indent-comments-syntactically-p . nil)
|
||||
;;
|
||||
;; Offsets for the various c-mode symbols. Offsets are sometimes based
|
||||
;; upon other offsets. For instance, arglist-intro is the 1st argument
|
||||
;; line. If you define arglist-cont, it uses arglist-intro plus that.
|
||||
;; c-echo-syntactic-information-p is your friend when debugging indents.
|
||||
;;
|
||||
;; [N] means absolute column. All the others are relative.
|
||||
;; 0 = no extra indentation. For literal column 0, use [0]
|
||||
;; N = extra N spaces. For literal column N, use [N]
|
||||
;; ++ = c-basic-offset * 2
|
||||
;; -- = c-basic-offset * -2
|
||||
;; + = c-basic-offset * 1
|
||||
;; - = c-basic-offset * -1
|
||||
;; * = c-basic-offset * 0.5
|
||||
;; / = c-basic-offset * -0.5
|
||||
(c-offsets-alist . (
|
||||
;; Literal symbols
|
||||
(func-decl-cont . 0) ; C++ style func mod
|
||||
(block-open . 0) ; '{' for block
|
||||
(label . [1]) ; goto label in column 1
|
||||
(comment-intro . 0) ; C comment
|
||||
(cpp-macro . [0]) ; #define in column 0
|
||||
;; Multiline macro symbols
|
||||
(cpp-define-intro . [0]) ; first list = column 0
|
||||
(cpp-macro-cont . +) ; add'l lines in macro
|
||||
;; Function symbols
|
||||
(defun-open . 0) ; '{' alone for func
|
||||
(defun-close . 0) ; '}' alone for func
|
||||
(defun-block-intro . +) ; first line of func
|
||||
(topmost-intro . 0) ; outermost part
|
||||
(topmost-intro-cont . 0) ; outermost part cont
|
||||
(statement . 0) ; func stmt (already off)
|
||||
;; XXX statement-cont should be 4 unless
|
||||
;; it is part of a macro, then 8.
|
||||
(statement-cont . *) ; continue stmt
|
||||
;; Class symbols. XXX Should add support since there
|
||||
;; is a little C++ in the tree (GNU)
|
||||
;; Java
|
||||
;; K&R
|
||||
(knr-argdecl-intro . +) ; rare K&R (from KNF)
|
||||
(knr-argdecl . 0) ; add'l indent for rest
|
||||
;; Conditional construct symbols
|
||||
(block-close . 0) ; '}' for block
|
||||
(statement-block-intro . +) ; stmt in loop/cond
|
||||
(substatement . +) ; non-braced stmt if()
|
||||
(substatement-open . 0) ; '{' in loop/cond
|
||||
(substatement-label . [1]) ; goto label in loop/cond
|
||||
(do-while-closure . 0) ; 'while' alone in 'do'
|
||||
(else-clause . 0) ; 'else' when not nested
|
||||
;; Brace list symbols
|
||||
(brace-list-close . 0) ; enum/agg list close
|
||||
(brace-list-intro . +) ; 1st line of enum/agg
|
||||
(brace-list-entry . 0) ; add'l indent for entries
|
||||
(brace-list-open . 0) ; enum/agg init open
|
||||
;; Switch statement symbols
|
||||
(statement-case-open . +) ; '{' in case
|
||||
(statement-case-intro . +) ; 1st line in case stmt
|
||||
(case-label . 0) ; case label in switch
|
||||
;; Paren list symbols
|
||||
;; XXX This is typically a list so need to handle it
|
||||
;; differently from the rest. Emacs adds the indents.
|
||||
(arglist-intro . openbsd-knf-space-indent) ; 1st line
|
||||
(arglist-cont . openbsd-knf-space-indent)
|
||||
(arglist-cont-nonempty . openbsd-knf-space-indent)
|
||||
(arglist-close . 0) ; ')' alone
|
||||
;; External scope symbols
|
||||
(extern-lang-open . [0]) ; '{' alone in 'extern C'
|
||||
(extern-lang-close . [0]) ; '}' alone in 'extern C'
|
||||
(inextern-lang . +) ; lines inside 'extern C'
|
||||
;; Statement block
|
||||
(inexpr-statement . +))) ; gcc extension stmt expr
|
||||
;; If not specified, the default is "before after". All variables are
|
||||
;; defined here.
|
||||
(c-hanging-braces-alist . (
|
||||
;; All variables
|
||||
(defun-open before after) ; function, enum
|
||||
(defun-close before after) ; function
|
||||
(class-open after) ; struct too
|
||||
(class-close before after)
|
||||
(inline-open after)
|
||||
(inline-close before after)
|
||||
(block-open after)
|
||||
(block-close . c-snug-do-while)
|
||||
(statement-cont after)
|
||||
(substatement-open after)
|
||||
(statement-case-open before after)
|
||||
(brace-list-open after)
|
||||
(brace-list-close before close)
|
||||
(brace-list-intro after)
|
||||
(brace-entry-open after)
|
||||
(extern-lang-open after)
|
||||
(extern-lang-close before after)
|
||||
(namespace-open after) ;; C++
|
||||
(namespace-close before afetr) ;; C++
|
||||
(module-open after) ;; CORBA
|
||||
(module-close before after) ;; CORBA
|
||||
(composition-open after) ;; CORBA
|
||||
(composition-close before after) ;; CORBA
|
||||
(inexpr-class-open after)
|
||||
(inexpr-class-close before after)
|
||||
(arglist-cont-nonempty before after)))
|
||||
;; Whether to auto-insert newline before/after colon
|
||||
(c-hanging-colons-alist . ((case-label after)
|
||||
(label after)
|
||||
(access-label after) ;; C++
|
||||
(member-init-intro before)
|
||||
(inher-intro)))
|
||||
;; Whether to insert newlines after ';' or ','
|
||||
(c-hanging-semi&comma-criteria . (
|
||||
;; supress newline when next line non-blank
|
||||
c-semi&comma-no-newlines-before-nonblanks
|
||||
;; suppress newline in paren (for loop etc)
|
||||
c-semi&comma-inside-parenlist
|
||||
;; supress newline for one liner
|
||||
c-semi&comma-no-newlines-for-oneline-inliners))
|
||||
;; When autonewline mode is enabled, clean up some extra newlines
|
||||
(c-cleanup-list . (brace-else-brace ; } else {
|
||||
brace-elseif-brace ; } else if {
|
||||
brace-catch-brace ; } catch (...) {
|
||||
;; empty-defun-braces ; {} instead of multiple lines
|
||||
defun-close-semi ; struct: no \n between '}' and ';'
|
||||
list-close-comma ; remove final comma
|
||||
scope-operator
|
||||
;; space-before-funcall ; GNU standard
|
||||
;; compact-empty-funcall ; another GNU standard
|
||||
;; comment-close-slash ; term comment with slash
|
||||
))
|
||||
))
|
||||
|
||||
(defun openbsd-set-knf-style ()
|
||||
"Set OpenBSD style in a 'c-mode-common-hook'.
|
||||
Or interactively enable it in a buffer."
|
||||
(interactive)
|
||||
(c-add-style "OpenBSD" openbsd-knf-style t))
|
||||
|
||||
(provide 'openbsd-knf-style)
|
||||
Loading…
Add table
Add a link
Reference in a new issue