From 940a50a6fa35c9f139ca6a8c225dcbb3d4ed32e9 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sat, 16 Apr 2016 00:46:59 -0400 Subject: [PATCH] c/c++: fix < > delimiters; add highlight-numbers-mode --- modules/defuns/defuns-cc.el | 64 +++++++++++++++++++++---------------- modules/module-cc.el | 9 +++--- 2 files changed, 41 insertions(+), 32 deletions(-) diff --git a/modules/defuns/defuns-cc.el b/modules/defuns/defuns-cc.el index da38730c8..d632fdebd 100644 --- a/modules/defuns/defuns-cc.el +++ b/modules/defuns/defuns-cc.el @@ -11,35 +11,36 @@ ;;;###autoload (defun narf|init-c/c++-settings () - (c-toggle-electric-state -1) - (c-toggle-auto-newline -1) - (c-set-offset 'substatement-open '0) ; brackets should be at same indentation level as the statements they open - (c-set-offset 'inline-open '+) - (c-set-offset 'block-open '+) - (c-set-offset 'brace-list-open '+) ; all "opens" should be indented by the c-indent-level - (c-set-offset 'case-label '+) ; indent case labels by c-indent-level, too - (c-set-offset 'access-label '-) - (c-set-offset 'inclass 'narf--c-lineup-inclass) - (c-set-offset 'arglist-intro '+) - (c-set-offset 'arglist-close '0) - ;; Certain mappings interfere with smartparens and custom bindings - (define-key c-mode-map (kbd "DEL") nil) - (define-key c-mode-base-map "#" 'self-insert-command) - (define-key c-mode-base-map "{" 'self-insert-command) - (define-key c-mode-base-map "}" 'self-insert-command) - (define-key c-mode-base-map "/" 'self-insert-command) - (define-key c-mode-base-map "*" 'self-insert-command) - (define-key c-mode-base-map ";" 'self-insert-command) - (define-key c-mode-base-map "," 'self-insert-command) - (define-key c-mode-base-map ":" 'self-insert-command) - (define-key c-mode-base-map "(" 'self-insert-command) - (define-key c-mode-base-map ")" 'self-insert-command) + (when (memq major-mode '(c-mode c++-mode objc-mode)) + (c-toggle-electric-state -1) + (c-toggle-auto-newline -1) + (c-set-offset 'substatement-open '0) ; brackets should be at same indentation level as the statements they open + (c-set-offset 'inline-open '+) + (c-set-offset 'block-open '+) + (c-set-offset 'brace-list-open '+) ; all "opens" should be indented by the c-indent-level + (c-set-offset 'case-label '+) ; indent case labels by c-indent-level, too + (c-set-offset 'access-label '-) + (c-set-offset 'inclass 'narf--c-lineup-inclass) + (c-set-offset 'arglist-intro '+) + (c-set-offset 'arglist-close '0) + ;; Certain mappings interfere with smartparens and custom bindings + (define-key c-mode-map (kbd "DEL") nil) + (define-key c-mode-base-map "#" 'self-insert-command) + (define-key c-mode-base-map "{" 'self-insert-command) + (define-key c-mode-base-map "}" 'self-insert-command) + (define-key c-mode-base-map "/" 'self-insert-command) + (define-key c-mode-base-map "*" 'self-insert-command) + (define-key c-mode-base-map ";" 'self-insert-command) + (define-key c-mode-base-map "," 'self-insert-command) + (define-key c-mode-base-map ":" 'self-insert-command) + (define-key c-mode-base-map "(" 'self-insert-command) + (define-key c-mode-base-map ")" 'self-insert-command) - (define-key c++-mode-map "}" nil) - ;; FIXME: fix smartparens - ;; (define-key c++-mode-map ">" nil) - (map! :map c++-mode-map :i ">" 'narf/autoclose->-maybe) - (define-key c++-mode-map "<" nil)) + (define-key c++-mode-map "}" nil) + ;; FIXME: fix smartparens + ;; (define-key c++-mode-map ">" nil) + (map! :map (c-mode-base-map c++-mode-map) :i ">" 'narf/autoclose->-maybe) + (define-key c++-mode-map "<" nil))) ;;;###autoload (defun narf/autoclose->-maybe () @@ -127,5 +128,12 @@ (and (sp-in-code-p id action context) (sp-point-after-word-p id action context))) +;;;###autoload +(defun narf/sp-point-after-include-p (id action context) + (and (sp-in-code-p id action context) + (save-excursion + (goto-char (line-beginning-position)) + (looking-at-p "[ ]*#include[^<]+")))) + (provide 'defuns-cc) ;;; defuns-cc.el ends here diff --git a/modules/module-cc.el b/modules/module-cc.el index 06f403e9d..c2a5fcaed 100644 --- a/modules/module-cc.el +++ b/modules/module-cc.el @@ -21,16 +21,17 @@ :commands (c-mode c++-mode objc-mode java-mode) :init (associate! objc-mode :match "\\.mm$") - (add-hook! (c-mode c++-mode) '(narf|init-c/c++-settings)) + (add-hook 'c-initialization-hook 'narf|init-c/c++-settings) + (add-hook 'c++-mode-hook 'highlight-numbers-mode) :config (setq c-tab-always-indent nil c-electric-flag nil) (map! (:map c-mode-base-map - (:localleader - :nv ";" 'narf/append-semicolon))) + (:localleader :nv ";" 'narf/append-semicolon))) - (sp-local-pair 'c++-mode "<" ">" :when '(narf/sp-point-is-template-p)) + (define-text-object! "<" "<" ">") + (sp-local-pair '(c-mode c++-mode) "<" ">" :when '(narf/sp-point-is-template-p narf/sp-point-after-include-p)) (sp-with-modes '(c-mode c++-mode objc-mode java-mode) (sp-local-pair "/*" "*/" :post-handlers '(("||\n[i]" "RET") ("| " "SPC"))) ;; Doxygen blocks