emacs - company mapping tab to select
[dotfiles.git] / emacs.d / config.org
index d1b099a..8116e5c 100644 (file)
@@ -144,13 +144,12 @@ Check out [[http://tapoueh.org/emacs/el-get.html][el-get]].
 #+END_SRC
 
 * Color and Fonts Settings
-
 ** highlight current line
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
-  (global-hl-line-mode)
-
+  ;; (global-hl-line-mode)
+  ;; don't want high light current line in eshell/term mode
+  (add-hook 'prog-mode-hook 'hl-line-mode)
+  (add-hook 'text-mode-hook 'hl-line-mode)
 #+END_SRC
 
 ** Smart Comments
@@ -349,7 +348,6 @@ clean mode line, Refer to [[https://www.masteringemacs.org/article/hiding-replac
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (defvar mode-line-cleaner-alist
     `((auto-complete-mode . " α")
-      (yas/minor-mode . " υ")
       (paredit-mode . " π")
       (eldoc-mode . "")
       (abbrev-mode . "")
@@ -370,6 +368,7 @@ clean mode line, Refer to [[https://www.masteringemacs.org/article/hiding-replac
       (flyspell-mode . "")
       (irony-mode . "")
       (page-break-lines-mode . "")
+      (yas-minor-mode . "y")
       ;; Major modes
       (lisp-interaction-mode . "λ")
       (hi-lock-mode . "")
@@ -1241,9 +1240,20 @@ I like [[https://github.com/coldnew/linum-relative][linum-relative]], just like
 #+END_SRC
 
 ** Multi-term
+define =multi-term= mapping to disable some mapping which is used globally.
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package multi-term
     :ensure t)
+
+  (defun sd/term-mode-mapping ()
+    (mapcar (lambda (map)
+              (define-key map (kbd "C-o") nil)
+              (define-key map (kbd "C-g") nil))
+            (list term-mode-map
+                  term-raw-map)))
+
+  (with-eval-after-load 'multi-term
+    (sd/term-mode-mapping))
 #+END_SRC
 
 ** ace-link
@@ -1443,6 +1453,24 @@ 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
+
+** Table
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (add-hook 'text-mode-hook 'table-recognize)
+#+END_SRC
+
 * Dired
 ** Dired bindings
 =C-o= is defined as a global key for window operation, here unset it in dired mode
@@ -1638,13 +1666,21 @@ here on Mac, just use "open" commands to pen =.pdf=,  =.html= and image files
 #+END_SRC
 
 * Completion
-company mode and company-statistics
+** company mode and company-statistics
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package company
     :ensure t
     :diminish company-mode
     :init (setq company-idle-delay 0.1)
+    (setq company-selection-wrap-around t)
     :config
+    (define-key company-active-map (kbd "M-n") nil)
+    (define-key company-active-map (kbd "M-p") nil)
+    (define-key company-active-map (kbd "C-n") #'company-select-next)
+    (define-key company-active-map (kbd "C-p") #'company-select-previous)
+     ;; should map both (kbd "TAB") and [tab],https://github.com/company-mode/company-mode/issues/75
+    (define-key company-active-map (kbd "TAB") #'company-complete-selection)
+    (define-key company-active-map [tab] #'company-complete-selection)
     (global-company-mode))
 
   (use-package company-statistics
@@ -1759,16 +1795,22 @@ 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"
         c-basic-offset 4)
-#+END_SRC
 
-*** flycheck
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-  (use-package flycheck
-    :ensure t)
+  ;; "C-M-j" is my global binding for avy goto line below
+  ;; disable it in c mode
+  (mapcar '(lambda (map)
+             (define-key map (kbd "C-M-j") nil))
+          (list c-mode-map
+                c++-mode-map
+                objc-mode-map))
 #+END_SRC
 
 *** irony
@@ -1808,8 +1850,20 @@ irony-mode-hook, copied from [[https://github.com/Sarcasm/irony-mode][irony-mode
       '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
@@ -1821,20 +1875,50 @@ irony-company
     :ensure t)
 
   (use-package company-c-headers
-    :ensure t)
+    :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 company-c-headers)))
+    (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
 
+*** flycheck
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (use-package flycheck
+    :ensure t)
+#+END_SRC
+
+*** yasnippet
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (use-package yasnippet
+    :ensure t
+    :defer t
+    :init
+    (add-hook 'prog-mode-hook #'yas-minor-mode)
+    :config
+    (yas-reload-all))
+#+END_SRC
+
 *** gtags
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package ggtags
-    :ensure t)
+    :ensure t
+    :config
+    (define-key ggtags-mode-map (kbd "M-g d") 'ggtags-find-definition)
+    (define-key ggtags-mode-map (kbd "M-g r") 'ggtags-find-reference)
+    (define-key ggtags-mode-map (kbd "M-g r") 'ggtags-find-reference)
+    (define-key ggtags-mode-map (kbd "C-c g s") 'ggtags-find-other-symbol)
+    (define-key ggtags-mode-map (kbd "C-c g h") 'ggtags-view-tag-history)
+    (define-key ggtags-mode-map (kbd "C-c g r") 'ggtags-find-reference)
+    (define-key ggtags-mode-map (kbd "C-c g f") 'ggtags-find-file)
+    (define-key ggtags-mode-map (kbd "C-c g c") 'ggtags-create-tags)
+    (define-key ggtags-mode-map (kbd "C-c g u") 'ggtags-update-tags))
 
   (add-hook 'c-mode-common-hook
             (lambda ()
@@ -1851,24 +1935,6 @@ irony-company
 
 #+END_SRC
 
-*** yasnippet
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-  (use-package yasnippet
-    :ensure t
-    :defer t
-    ;; :config
-    )
-  ;; (yas-reload-all)
-  ;; (add-hook 'prog-mode-hook #'yas-minor-mode)
-  ;; (yas-global-mode 1)
-
-#+END_SRC
-
-*** semantic
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
-#+END_SRC
-
 *** google C style
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package google-c-style
@@ -1901,6 +1967,8 @@ Set the environments vairables in compilation mode
     (define-key compilation-mode-map (kbd "n") 'compilation-next-error)
     (define-key compilation-mode-map (kbd "p") 'compilation-previous-error)
     (define-key compilation-mode-map (kbd "r") #'recompile))
+
+  (global-set-key (kbd "s-r") 'compile)
 #+END_SRC
 
 * Auto-Insert
@@ -2493,6 +2561,7 @@ Most use =C-o C-o= to switch buffers; =C-o x, v= to split window; =C-o o= to del
     ;; other special buffers
     ("d" sd/project-or-dired-jump nil :exit t)
     ("b" ibuffer nil :exit t)
+    ("t" multi-term nil :exit t)
     ("e" sd/toggle-project-eshell nil :exit t)
     ("m" bookmark-jump-other-window nil :exit t)
     ("M" bookmark-set nil :exit t)
@@ -2938,6 +3007,18 @@ stolen from [[https://github.com/mariolong/emacs.d/blob/f6a061594ef1b5d1f4750e9d
 #+END_SRC
 
 *** TODO make expand-region hydra work with lispy selected
+** =C-w= delete backward word
+Refer [[https://github.com/fnwiya/dotfiles/blob/c9ca79f1b22c919d9f4c3a0f944ba8281255a594/setup/.emacs.d/loader-init/_90-kill-region-or-backward-kill-word.el][kill-region-or-backward-kill-word]]
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (defun sd/kill-region-or-backward-kill-word ()
+    (interactive)
+    (if (region-active-p)
+        (kill-region (point) (mark))
+      (backward-kill-word 1)))
+
+  (global-set-key (kbd "C-w") 'sd/kill-region-or-backward-kill-word)
+#+END_SRC
+
 * key
 - passion
 - vision