X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=project.el;h=74eafadbaf21f408464dcdf62a593cdead44e94c;hb=f2f5d59e83863f3b513950173baee1b6da2aee3c;hp=a1310e264d997110d59b483d535a5b012d903717;hpb=dc4bee654ab0eef2fb6b1392e4328221d83e62f2;p=senf.git diff --git a/project.el b/project.el index a1310e2..74eafad 100644 --- a/project.el +++ b/project.el @@ -1,12 +1,20 @@ ;; Configuration file for cc-ide.el (Emacs C++ IDE extension, see http://g0dil.de) +(defun check-namespace-indent (arg) + (save-excursion + (back-to-indentation) + (if (and (looking-at "namespace") + (looking-at ".*{") + (not (looking-at ".*}"))) + [0] '+))) + (defconst senf-c-style '((c-basic-offset . 4) - (c-cleanup-list . (empty-defun-braces - defun-close-semi - list-close-comma - scope-operator - compact-empty-funcall)) + (c-backslash-column . 98) + (c-cleanup-list . (empty-defun-braces + defun-close-semi + list-close-comma + scope-operator)) (c-hanging-braces-alist . ((namespace-open after) (namespace-close before after) (brace-list-open) @@ -16,9 +24,9 @@ (extern-lang-open after) (inexpr-class-open after) (inexpr-class-close before))) - (c-offsets-alist . ((namespace-open . 0) - (namespace-close . -) - (innamespace . +) + (c-offsets-alist . ((namespace-open . [0]) + (namespace-close . [0]) + (innamespace . check-namespace-indent) (statement-block-intro . +) (substatement-open . 0) (label . 0) @@ -27,10 +35,12 @@ (c-add-style "senf" senf-c-style) (set (make-local-variable 'ccide-file-vars) - '(( fill-column . 100 ) + '(( fill-column . 100 ) + ( comment-column . 40 ) ( c-file-style . "senf" ) ( indent-tabs-mode . nil ) - ( ispell-local-dictionary . "american" ))) + ( ispell-local-dictionary . "american" ) + ( compile-command . "scons -u test") )) (set (make-local-variable 'ccide-default-copyright) (concat "//\n" @@ -49,6 +59,47 @@ "// Free Software Foundation, Inc.,\n" "// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n")) +(set (make-local-variable 'ccide-project-name) "SENF") + (let ((local-conf (ccide-project-search-upwards "project-local.el"))) (if local-conf (load-file local-conf))) + +(defun flyspell-cc-progmode-verify () + "Replacement for standard flyspell-generic-progmode-verify which +checks for C/C++ preproc directives. Additionally, anything after ^L +is ignored (Those are the file local variables and local words)." + (let ((f (get-text-property (point) 'face))) + (and (memq f flyspell-prog-text-faces) + (not (save-excursion + (beginning-of-line) + (looking-at "\\(//\\)?#"))) + (not (let ((l (max (point-min) (- (point-max) 4096)))) + (and (< l (point)) + (save-excursion (search-backward " " l t)))))))) + +(defun flyspell-cc-mode () + "Torn on `flyspell-mode` for comments and strings in C/C++ mode." + (interactive) + (setq flyspell-generic-check-word-p 'flyspell-cc-progmode-verify) + (flyspell-mode 1)) + +;; Better set this here than in the file variables since the setting +;; is only valid if project.el is loaded ... +(set (make-local-variable 'ispell-personal-dictionary) + (expand-file-name "senf.dict" ccide-project-root)) +(flyspell-cc-mode) + +(defun senf-new-file-hook () + (when (string-match "\\.test\\.cc$" (buffer-file-name)) + (save-excursion + (goto-char (point-min)) + (search-forward "auto_unit_test.hpp") + (beginning-of-line) + (delete-region (point) (progn (end-of-line) (point))) + (insert "#include \"" + (string-replace "[^/]+/" "../" (substring (file-name-directory (buffer-file-name)) + (length ccide-project-root)) t) + "Utils/auto_unit_test.hh\"")))) + +(add-hook 'ccide-new-file-hooks 'senf-new-file-hook nil t)