2016-04-16 21:27:59 -04:00
|
|
|
;;; module-cc.el --- C, C++, and Objective-C
|
2015-06-15 09:06:10 +02:00
|
|
|
|
|
|
|
(use-package cc-mode
|
|
|
|
:commands (c-mode c++-mode objc-mode java-mode)
|
2016-05-12 22:11:43 -04:00
|
|
|
:mode ("\\.mm" . objc-mode)
|
2015-06-15 09:06:10 +02:00
|
|
|
:init
|
2016-05-20 22:37:30 -04:00
|
|
|
(add-hook! c++-mode '(highlight-numbers-mode doom|init-c++-C11-highlights))
|
|
|
|
(add-hook 'c-initialization-hook 'doom|init-c/c++-settings)
|
2016-04-19 02:42:07 -04:00
|
|
|
|
|
|
|
;; C++ header files
|
2016-05-12 22:11:43 -04:00
|
|
|
(push (cons (lambda () (and (f-ext? buffer-file-name "h")
|
|
|
|
(or (f-exists? (f-swap-ext buffer-file-name "cpp"))
|
|
|
|
(awhen (car-safe (projectile-get-other-files (buffer-file-name) (projectile-current-project-files)))
|
|
|
|
(f-ext? it "cpp")))))
|
|
|
|
'c++-mode)
|
2016-04-19 02:42:07 -04:00
|
|
|
magic-mode-alist)
|
|
|
|
|
|
|
|
;; Obj-C
|
2016-05-12 22:11:43 -04:00
|
|
|
(push (cons (lambda () (and (f-ext? buffer-file-name "h")
|
|
|
|
(re-search-forward "@\\<interface\\>" magic-mode-regexp-match-limit t)))
|
|
|
|
'objc-mode)
|
2016-04-19 02:42:07 -04:00
|
|
|
magic-mode-alist)
|
2016-04-08 14:02:55 -04:00
|
|
|
|
2016-04-23 22:08:46 -04:00
|
|
|
:config
|
2016-05-01 01:10:30 -04:00
|
|
|
(def-electric! (c-mode c++-mode objc-mode) :chars (?\n ?\}))
|
|
|
|
(def-company-backend! (c-mode c++-mode objc-mode) (irony-c-headers irony))
|
2016-05-13 00:27:10 -04:00
|
|
|
(def-docset! c-mode "c,sdl,glib,gl2,gl3,gl4,manpages")
|
|
|
|
(def-docset! c++-mode "cpp,sdl,net,boost,qt,cvcpp,cocos2dx,c,manpages")
|
2016-05-01 01:10:30 -04:00
|
|
|
|
2016-04-23 22:08:46 -04:00
|
|
|
(setq c-tab-always-indent nil
|
|
|
|
c-electric-flag nil)
|
2015-06-15 09:06:10 +02:00
|
|
|
|
2016-05-20 22:37:30 -04:00
|
|
|
(map! :map c-mode-base-map (:localleader :nv ";" 'doom/append-semicolon))
|
2016-03-23 11:58:08 -04:00
|
|
|
|
2016-04-23 22:08:46 -04:00
|
|
|
(sp-with-modes '(c-mode c++-mode objc-mode java-mode)
|
2016-05-20 22:37:30 -04:00
|
|
|
(sp-local-pair "<" ">" :when '(doom/sp-point-is-template-p doom/sp-point-after-include-p))
|
2016-04-23 22:08:46 -04:00
|
|
|
(sp-local-pair "/*" "*/" :post-handlers '(("||\n[i]" "RET") ("| " "SPC")))
|
|
|
|
;; Doxygen blocks
|
|
|
|
(sp-local-pair "/**" "*/" :post-handlers '(("||\n[i]" "RET") ("||\n[i]" "SPC")))
|
|
|
|
(sp-local-pair "/*!" "*/" :post-handlers '(("||\n[i]" "RET") ("[d-1]< | " "SPC"))))
|
|
|
|
|
|
|
|
;; Improve indentation of inline lambdas in C++11
|
2016-05-20 22:37:30 -04:00
|
|
|
(advice-add 'c-lineup-arglist :around 'doom/c-lineup-arglist))
|
2016-04-23 22:08:46 -04:00
|
|
|
|
|
|
|
(use-package irony
|
|
|
|
:after cc-mode
|
|
|
|
:config
|
2016-05-20 22:37:30 -04:00
|
|
|
(setq irony-server-install-prefix (concat doom-temp-dir "/irony/"))
|
2016-05-07 22:04:47 -04:00
|
|
|
(add-hook! c++-mode
|
|
|
|
(make-variable-buffer-local 'irony-additional-clang-options)
|
|
|
|
(push "-std=c++11" irony-additional-clang-options))
|
2016-04-23 22:08:46 -04:00
|
|
|
|
|
|
|
(require 'irony-eldoc)
|
|
|
|
(require 'company-irony)
|
|
|
|
(require 'company-irony-c-headers)
|
|
|
|
(require 'flycheck-irony)
|
|
|
|
(flycheck-irony-setup)
|
|
|
|
|
|
|
|
;; some c-mode dervied modes wrongfully trigger these hooks (like php-mode)
|
2016-05-12 22:11:43 -04:00
|
|
|
(add-hook! (c-mode c++-mode objc-mode)
|
2016-04-23 22:08:46 -04:00
|
|
|
(when (memq major-mode '(c-mode c++-mode objc-mode))
|
|
|
|
(flycheck-mode +1)
|
|
|
|
(irony-mode +1)
|
|
|
|
(eldoc-mode +1)
|
|
|
|
(irony-eldoc +1))))
|
|
|
|
|
|
|
|
(use-package disaster :commands (disaster))
|
|
|
|
|
|
|
|
;;
|
|
|
|
(use-package cmake-mode
|
|
|
|
:mode "CMakeLists\\.txt$"
|
2016-05-01 01:10:30 -04:00
|
|
|
:config (def-company-backend! cmake-mode (cmake yasnippet)))
|
2016-05-01 17:23:14 -04:00
|
|
|
|
2016-04-23 22:08:46 -04:00
|
|
|
(use-package company-cmake :after cmake-mode)
|
2015-06-15 09:06:10 +02:00
|
|
|
|
2016-04-23 22:08:46 -04:00
|
|
|
(use-package glsl-mode :mode ("\\.glsl\\'" "\\.vert\\'" "\\.frag\\'" "\\.geom\\'"))
|
2015-06-15 09:06:10 +02:00
|
|
|
|
2016-04-23 22:08:46 -04:00
|
|
|
(use-package cuda-mode :mode "\\.cuh?$")
|
2015-06-15 09:06:10 +02:00
|
|
|
|
2016-05-01 17:23:14 -04:00
|
|
|
(use-package opencl-mode :mode "\\.cl$")
|
|
|
|
|
|
|
|
(use-package demangle-mode
|
|
|
|
:commands demangle-mode
|
|
|
|
:init (add-hook 'llvm-mode-hook 'demangle-mode))
|
|
|
|
|
2015-06-15 09:06:10 +02:00
|
|
|
(provide 'module-cc)
|
|
|
|
;;; module-cc.el ends here
|