emacs - only highlight line mode for prog and text mode, disable it in
[dotfiles.git] / emacs.d / config.org
index 70d381a..336ab89 100644 (file)
@@ -100,6 +100,11 @@ Make a temp directory for all cache/history files
   (setq auto-save-list-file-prefix (concat sd-temp-directory "auto-save-list/.saves-"))
 #+END_SRC
 
+*** Max file size
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (setq large-file-warning-threshold nil)
+#+END_SRC
+
 * Package Management Tools
 ** Use-package
 Using [[https://github.com/jwiegley/use-package][use-package]] to manage emacs packages
@@ -141,11 +146,11 @@ Check out [[http://tapoueh.org/emacs/el-get.html][el-get]].
 * 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
@@ -344,7 +349,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 . "")
@@ -365,6 +369,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 . "")
@@ -587,8 +592,8 @@ Use [[https://github.com/DarwinAwardWinner/ido-ubiquitous][ido-ubiquitous]] for
   (use-package ido-exit-target
     :ensure t
     :init
-    (mapcar (lambda (map)
-              (define-key map (kbd "C-j") #'ido-exit-target-split-window-right)
+    (mapcar '(lambda (map)
+              (define-key map (kbd "C-j") #'ido-exit-target-other-window)
               (define-key map (kbd "C-k") #'ido-exit-target-split-window-below))
             (list ido-buffer-completion-map
                   ;; ido-common-completion-map
@@ -652,7 +657,8 @@ Always indents header, and hide header leading starts so that no need type =#+ST
     (setq org-src-tab-acts-natively t)
     (setq org-confirm-babel-evaluate nil)
     (setq org-use-speed-commands t)
-    (setq org-completion-use-ido t))
+    (setq org-completion-use-ido t)
+    (setq org-startup-with-inline-images t))
 
   (org-babel-do-load-languages
    'org-babel-load-languages
@@ -712,18 +718,10 @@ In =worf-mode=, it is mapping =[=, =]= as =worf-backward= and =worf-forward= in
 cause we cannot input =[= and =]=, so here I unset this mappings. And redifined this two to
 =M-[= and =M-]=. see this [[https://github.com/abo-abo/worf/issues/19#issuecomment-223756599][issue]]
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
   (use-package worf
     :ensure t
     :commands worf-mode
-    :init (add-hook 'org-mode-hook 'worf-mode)
-    ;; :config
-    ;; (define-key worf-mode-map "[" nil)
-    ;; (define-key worf-mode-map "]" nil)
-    ;; (define-key worf-mode-map (kbd "M-[") 'worf-backward)
-    ;; (define-key worf-mode-map (kbd "M-]") 'worf-forward)
-    )
-
+    :init (add-hook 'org-mode-hook 'worf-mode))
 #+END_SRC
 
 ** Get Things Done
@@ -747,12 +745,9 @@ Replace the list bullet =-=, =+=,  with =•=, a litter change based [[https://g
 #+END_SRC
  
 *** Todo Keywords
-
 refer to [[http://coldnew.github.io/coldnew-emacs/#orgheadline94][fancy todo states]], 
-
 To track TODO state changes, the =!= is to insert a timetamp, =@= is to insert a note with
 timestamp for the state change.
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
     ;; (setq org-todo-keywords
     ;;        '((sequence "☛ TODO(t)" "|" "✔ DONE(d)")
@@ -985,14 +980,16 @@ Install MacTex-basic [[http://www.tug.org/mactex/morepackages.html][MacTex-basic
 ** Org structure template
 extend org-mode's easy templates, refer to [[http://coldnew.github.io/coldnew-emacs/#orgheadline94][Extend org-modes' esay templates]]
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-  (add-to-list 'org-structure-template-alist
-               '("E" "#+BEGIN_SRC emacs-lisp :tangle yes :results silent\n?\n#+END_SRC"))
-  (add-to-list 'org-structure-template-alist
-               '("S" "#+BEGIN_SRC sh\n?\n#+END_SRC"))
-  (add-to-list 'org-structure-template-alist
-               '("p" "#+BEGIN_SRC plantuml :file uml.png \n?\n#+END_SRC"))
-  (add-to-list 'org-structure-template-alist
-               '("P" "#+BEGIN_SRC perl \n?\n#+END_SRC"))
+    (add-to-list 'org-structure-template-alist
+                 '("E" "#+BEGIN_SRC emacs-lisp :tangle yes :results silent\n?\n#+END_SRC"))
+    (add-to-list 'org-structure-template-alist
+                 '("S" "#+BEGIN_SRC sh :results output replace\n?\n#+END_SRC"))
+    (add-to-list 'org-structure-template-alist
+                 '("p" "#+BEGIN_SRC plantuml :file uml.png \n?\n#+END_SRC"))
+    (add-to-list 'org-structure-template-alist
+                 '("P" "#+BEGIN_SRC perl \n?\n#+END_SRC"))
+    (add-to-list 'org-structure-template-alist
+                 '("f" "#+BEGIN_SRC fundamental :tangle ?\n\n#+END_SRC"))
 #+END_SRC
 
 * Magit
@@ -1107,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
@@ -1245,9 +1241,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
@@ -1436,6 +1443,35 @@ When see function by =C-h f=, and visit the source code, I would like the buffer
     :ensure t)
 #+END_SRC
 
+** Ag
+install =ag=, =the-silver-searcher= by homebrew on mac
+#+BEGIN_SRC sh
+brew install the-silver-searcher
+#+END_SRC
+
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (use-package ag
+    :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
@@ -1496,7 +1532,7 @@ When see function by =C-h f=, and visit the source code, I would like the buffer
     (interactive)
     (dired-why)
     (message
-     "Δ: d-delete, u-ndelete, x-punge, f-ind, o-ther window, R-ename, C-opy, c-create, +new dir, r-evert, /-filter, h-summary, ?-help"))
+     "Δ: d-delete, u-ndelete, x-punge, f-ind, o-ther window, R-ename, C-opy, c-create, +new dir, r-evert, /-filter, v-iew, l-ist, z-Size, h-summary, ?-help"))
 
   (defun sd/dired-high-level-dir ()
     "Go to higher level directory"
@@ -1752,28 +1788,26 @@ 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
-#+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
@@ -1791,17 +1825,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
@@ -1809,20 +1864,54 @@ 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
+
+*** 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 ()
@@ -1839,23 +1928,13 @@ irony-company
 
 #+END_SRC
 
-*** yasnippet
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-  (use-package yasnippet
-    :ensure t)
-#+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
     :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
@@ -1881,6 +1960,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
@@ -2423,15 +2504,18 @@ Most use =C-o C-o= to switch buffers; =C-o x, v= to split window; =C-o o= to del
 
   (defhydra sd/hydra-window (:color red :columns nil)
     "Window"
-    ;; windows split
+    ;; windows switch
     ("h" windmove-left nil :exit t)
     ("j" windmove-down nil :exit t)
     ("k" windmove-up nil :exit t)
     ("l" windmove-right nil :exit t)
+    ("C-o" other-window nil :exit t)
+    ;; window resize
     ("H" hydra-move-splitter-left nil)
     ("J" hydra-move-splitter-down nil)
     ("K" hydra-move-splitter-up nil)
     ("L" hydra-move-splitter-right nil)
+    ;; windows split
     ("v" (lambda ()
            (interactive)
            (split-window-right)
@@ -2442,33 +2526,40 @@ Most use =C-o C-o= to switch buffers; =C-o x, v= to split window; =C-o o= to del
            (split-window-below)
            (windmove-down))
      "horz" :exit t)
-
     ;; buffer / windows switch
     ("o" sd/toggle-max-windows "one" :exit t)
     ("C-k" sd/delete-current-window "del" :exit t)
-    ("D" (lambda ()
+    ("C-d" (lambda ()
              (interactive)
              (kill-buffer)
              (sd/delete-current-window))
      "kill" :exit t)
-    ("'" other-window "other" :exit t)
+
+    ;; ace-window
+    ;; ("'" other-window "other" :exit t)
     ;; ("a" ace-window "ace")
     ("s" ace-swap-window "swap")
+    ("D" ace-delete-window "ace-one" :exit t)
     ;; ("i" ace-maximize-window "ace-one" :exit t)
-
+    ;; Windows undo - redo
     ("u" (progn (winner-undo) (setq this-command 'winner-undo)) "undo")
     ("r" (progn (winner-redo) (setq this-command 'winner-redo)) "redo")
-
+    
     ;; ibuffer, dired, eshell, bookmarks
-    ;; ("d" ace-delete-window "ace-one" :exit t)
-    ("C-o" ido-switch-buffer nil :exit t)
+    ;; ("C-i" other-window nil :exit t)
+    ("C-b" ido-switch-buffer nil :exit t)
+    ("C-f" projectile-find-file nil :exit t)
+    ("C-p" persp-switch :exit t)
+
+    ;; 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)
     ("g" magit-status nil :exit t)
-    ("p" paradox-list-packages nil :exit t)
+    ;; ("p" paradox-list-packages nil :exit t)
 
     ;; quit
     ("q" nil "cancel")