Browse Source

add editorconfig to emacs

pull/1/head
Brett Langdon 12 years ago
parent
commit
f41a99d20a
2 changed files with 165 additions and 2 deletions
  1. +1
    -2
      emacs
  2. +164
    -0
      emacs.d/editorconfig.el

+ 1
- 2
emacs View File

@ -1,5 +1,4 @@
; load all the other good things
(add-to-list 'load-path "~/.emacs.d")
(add-to-list 'load-path "~/.emacs.d/powerline-2.2")
(add-to-list 'load-path "~/.emacs.d/elpa/projectile-0.9.2")
@ -33,7 +32,7 @@
(setq-default c-basic-offset 4
tab-width 4
indent-tabs-mode nil)
(load "~/.emacs.d/editorconfig")
;auto-indent
(define-key global-map (kbd "RET") 'newline-and-indent)


+ 164
- 0
emacs.d/editorconfig.el View File

@ -0,0 +1,164 @@
;;; editorconfig.el --- EditorConfig Emacs extension
;; Copyright (C) 2011-2013 EditorConfig Team
;; Author: EditorConfig Team <editorconfig@googlegroups.com>
;; Version: 0.3
;; URL: http://github.com/editorconfig/editorconfig-emacs#readme
;; See
;; http://github.com/editorconfig/editorconfig-emacs/graphs/contributors
;; or the CONTRIBUTORS file for the list of contributors.
;; Redistribution and use in source and binary forms, with or without
;; modification, are permitted provided that the following conditions are met:
;;
;; 1. Redistributions of source code must retain the above copyright notice,
;; this list of conditions and the following disclaimer.
;; 2. Redistributions in binary form must reproduce the above copyright notice,
;; this list of conditions and the following disclaimer in the documentation
;; and/or other materials provided with the distribution.
;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
;; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
;; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
;; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
;; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
;; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
;; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
;; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
;; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
;; POSSIBILITY OF SUCH DAMAGE.
;;; Commentary:
;; EditorConfig helps developers define and maintain consistent
;; coding styles between different editors and IDEs.
;; The EditorConfig project consists of a file format for defining
;; coding styles and a collection of text editor plugins that enable
;; editors to read the file format and adhere to defined styles.
;; EditorConfig files are easily readable and they work nicely with
;; version control systems.
;;; Code:
(defvar edconf-exec-path "editorconfig")
(defun edconf-set-indentation (style &optional size tab_width)
(setq web-mode-indent-style 2)
"Set indentation type from given style and size"
(when (equal style "space")
(setq indent-tabs-mode nil
size (string-to-number size)
LaTeX-indent-level size
LaTeX-item-indent size
TeX-brace-indent-level size
c-basic-offset size
cperl-indent-level size
haskell-indent-offset size
shm-indent-spaces size
js-indent-level size
js2-basic-offset size
lisp-indent-offset size
perl-indent-level size
py-indent-offset size
python-indent size
ruby-indent-level size
sh-basic-offset size
web-mode-markup-indent-offset size
web-mode-css-indent-offset size
web-mode-code-indent-offset size
;(make-local-variable 'sgml-basic-offset) size
tab-stop-list (let ((stops (cons size ())))
(while (< (car stops) 120)
(setq stops (cons
(+ size (car stops))
stops)))
(nreverse stops))))
(when (equal style "tab")
(setq indent-tabs-mode t))
(if tab_width
(setq tab-width (string-to-number tab_width))))
(defun edconf-set-line-ending (end-of-line)
"Set line ending style to CR, LF, or CRLF"
(set-buffer-file-coding-system
(cond
((equal end-of-line "lf") 'undecided-unix)
((equal end-of-line "cr") 'undecided-mac)
((equal end-of-line "crlf") 'undecided-dos)
(t 'undecided))
nil t))
(defun edconf-set-trailing-nl (final-newline)
(cond
((equal final-newline "true")
;; keep prefs around how/when the nl is added, if set - otherwise add on save
(setq require-final-newline (or require-final-newline t)
mode-require-final-newline (or mode-require-final-newline t)))
((equal final-newline "false")
;; FIXME: Add functionality for actually REMOVING any trailing newlines here!
;; (rather than just making sure we don't automagically ADD a new one)
(setq require-final-newline nil
mode-require-final-newline nil))))
(defun edconf-set-trailing-ws (trim-trailing-ws)
"set up trimming of trailing whitespace at end of lines"
(make-local-variable 'write-file-functions) ;; just current buffer
(when (equal trim-trailing-ws "true")
;; when true we push delete-trailing-whitespace (emacs > 21)
;; to write-file-functions
(add-to-list
'write-file-functions
'delete-trailing-whitespace))
(when (equal trim-trailing-ws "false")
;; when false we remove every delete-trailing-whitespace
;; from write-file-functions
(setq
write-file-functions
(delete
'delete-trailing-whitespace
write-file-functions))))
(defun edconf-get-properties ()
"Call EditorConfig core and return output"
(let ((oldbuf (current-buffer)))
(call-process edconf-exec-path nil "ecbuffer" nil (buffer-file-name oldbuf))
(set-buffer (get-buffer "ecbuffer"))
(let (props-string)
(setq props-string (buffer-string))
(set-buffer oldbuf)
(kill-buffer (get-buffer "ecbuffer"))
props-string)))
(defun edconf-parse-properties (props-string)
"Create properties hash table from string of properties"
(let (props-list properties)
(setq props-list (split-string props-string "\n")
properties (make-hash-table :test 'equal))
(dolist (prop props-list properties)
(let ((key-val (split-string prop " *= *")))
(when (> (length key-val) 1)
(let ((key (intern (car key-val)))
(val (mapconcat 'identity (cdr key-val) "")))
(puthash key val properties)))))))
;;;###autoload
(defun edconf-find-file-hook ()
(when (executable-find edconf-exec-path)
(let ((props (edconf-parse-properties (edconf-get-properties))))
(edconf-set-indentation (gethash 'indent_style props)
(gethash 'indent_size props)
(gethash 'tab_width props))
(edconf-set-line-ending (gethash 'end_of_line props))
(edconf-set-trailing-nl (gethash 'insert_final_newline props))
(edconf-set-trailing-ws (gethash 'trim_trailing_whitespace props)))))
;;;###autoload
(add-hook 'find-file-hook 'edconf-find-file-hook)
(provide 'editorconfig)
;;; editorconfig.el ends here

Loading…
Cancel
Save