emacs - irony completion option, add Local variable hook for modes
[dotfiles.git] / emacs.d / config.org
index f412f50..913aac4 100644 (file)
@@ -1104,7 +1104,6 @@ Toggle an eshell in split window below, refer [[http://www.howardism.org/Technic
 #+END_SRC
 
 * Misc Settings
-
 ** [[https://github.com/abo-abo/hydra][Hydra]]
 *** hydra install
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
@@ -1444,6 +1443,19 @@ brew install the-silver-searcher
     :ensure t)
 #+END_SRC
 
+** Local Variable hooks
+[[https://www.emacswiki.org/emacs/LocalVariables][LocalVariables]], use =hack-local-variables-hook=, run a hook to set local variable in mode hook
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  ;; make Emacs run a new "local variables hook" for each major mode
+  (add-hook 'hack-local-variables-hook 'run-local-vars-mode-hook)
+
+  (defun run-local-vars-mode-hook ()
+    "Run a hook for the major-mode after the local variables have been processed."
+    (run-hooks (intern (concat (symbol-name major-mode) "-local-vars-hook"))))
+
+  ;;   (add-hook 'c++-mode-local-vars-hook #'sd/c++-mode-local-vars)
+#+END_SRC
+
 * Dired
 ** Dired bindings
 =C-o= is defined as a global key for window operation, here unset it in dired mode
@@ -1760,6 +1772,10 @@ to call =compilation=  interactively.
 #+END_SRC
 
 ** C & C++
+C/C++ ide tools
+1. completion (file name, function name, variable name)
+2. template yasnippet (keywords, if, function)
+3. tags jump
 *** c/c++ style
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (setq c-default-style "stroustrup"
@@ -1773,15 +1789,7 @@ to call =compilation=  interactively.
 #+END_SRC
 
 *** irony
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-  (use-package irony
-    :ensure t
-    :config
-    (add-hook 'c++-mode-hook 'irony-mode)
-    (add-hook 'c-mode-hook 'irony-mode)
-    (add-hook 'objc-mode-hook 'irony-mode))
-#+END_SRC
-
+**** install irony server
 Install clang, on mac, it has =libclang.dylib=, but no develop headers. Install by =brew=
 #+BEGIN_SRC sh
   brew install llvm --with-clang
@@ -1799,17 +1807,38 @@ then install irony searver, and =LIBCLANG_LIBRARY= and =LIBCLANG_INCLUDE_DIR= ac
         /Users/peli3/.emacs.d/elpa/irony-20160713.1245/server && cmake --build . --use-stderr --config Release --target install 
 #+END_SRC
 
+**** irony config
 irony-mode-hook, copied from [[https://github.com/Sarcasm/irony-mode][irony-mode]] github
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (use-package irony
+    :ensure t
+    :config
+    (add-hook 'c++-mode-hook 'irony-mode)
+    (add-hook 'c-mode-hook 'irony-mode)
+    (add-hook 'objc-mode-hook 'irony-mode))
+
   ;; replace the `completion-at-point' and `complete-symbol' bindings in
   ;; irony-mode's buffers by irony-mode's function
+
   (defun my-irony-mode-hook ()
     (define-key irony-mode-map [remap completion-at-point]
       'irony-completion-at-point-async)
     (define-key irony-mode-map [remap complete-symbol]
       'irony-completion-at-point-async))
+
   (add-hook 'irony-mode-hook 'my-irony-mode-hook)
   (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options)
+
+  (add-hook 'c++-mode-local-vars-hook #'sd/c++-mode-local-vars)
+
+  ;; add C++ completions, because by default c++ file can not complete
+  ;; c++ std functions, another method is create .dir-local.el file, for p
+  ;; for project see irony
+  (defun sd/c++-mode-local-vars ()
+    (setq irony--compile-options
+        '("-std=c++11"
+          "-stdlib=libc++"
+          "-I/usr/include/c++/4.2.1")))
 #+END_SRC
 
 irony-company
@@ -1817,14 +1846,21 @@ irony-company
   (use-package company-irony
     :ensure t)
 
-  (eval-after-load 'company
-    '(add-to-list 'company-backends 'company-irony))
-
   (use-package flycheck-irony
     :ensure t)
 
-  (eval-after-load 'flycheck
-    '(add-hook 'flycheck-mode-hook #'flycheck-irony-setup))
+  (use-package company-c-headers
+    :ensure t
+    :config
+    (add-to-list 'company-c-headers-path-system "/usr/include/c++/4.2.1/"))
+
+  (with-eval-after-load 'company
+    (add-to-list 'company-backends 'company-irony)
+    (add-to-list 'company-backends 'company-c-headers))
+
+
+  (with-eval-after-load 'flycheck
+    (add-hook 'flycheck-mode-hook #'flycheck-irony-setup))
 #+END_SRC
 
 *** gtags
@@ -1850,7 +1886,14 @@ irony-company
 *** yasnippet
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package yasnippet
-    :ensure t)
+    :ensure t
+    :defer t
+    ;; :config
+    )
+  ;; (yas-reload-all)
+  ;; (add-hook 'prog-mode-hook #'yas-minor-mode)
+  ;; (yas-global-mode 1)
+
 #+END_SRC
 
 *** semantic
@@ -1863,7 +1906,8 @@ irony-company
   (use-package google-c-style
     :ensure t
     :config
-    (add-hook 'c-mode-hook 'google-set-c-style))
+    (add-hook 'c-mode-hook 'google-set-c-style)
+    (add-hook 'c++-mode-hook 'google-set-c-style))
 #+END_SRC
 
 ** Lua