add study note file
[dotfiles.git] / emacs.d / config.org
index 9e8e6f6..8e6bbe7 100644 (file)
@@ -8,29 +8,22 @@ Most config are just copied from [[https://github.com/howardabrams/dot-files][ho
 
 * Basic Settings
 ** Setting loading Path
-
 Set system PATH and emacs exec path
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
   (setenv "PATH" (concat (getenv "PATH")
                          ":" "/usr/local/bin"
                          ":" "/Library/TeX/texbin"))
   (setq exec-path (append exec-path '("/usr/local/bin")))
   (setq exec-path (append exec-path '("/Library/TeX/texbin/")))
-
 #+END_SRC
 
 Set the emacs load path
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   ;; (add-to-list 'load-path "~/.emacs.d/elisp")
 #+END_SRC
 
 ** Package Initialization
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
   (require 'package)
 
   (setq package-archives '(("mepla" . "http://melpa.milkbox.net/packages/")
@@ -38,7 +31,6 @@ Set the emacs load path
                            ("org" . "http://orgmode.org/elpa/")))
 
   (package-initialize)
-
 #+END_SRC       
 
 ** General Setting
@@ -109,7 +101,6 @@ Make a temp directory for all cache/history files
 #+END_SRC
 
 * Package Management Tools
-
 ** Use-package
 Using [[https://github.com/jwiegley/use-package][use-package]] to manage emacs packages
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
@@ -136,6 +127,17 @@ Check out [[http://tapoueh.org/emacs/el-get.html][el-get]].
     :ensure t)
 #+END_SRC
 
+* Mac Specific
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  ;; (defconst *is-a-mac* (eq system-type 'darwin))
+  ;; (setq mouse-wheel-scroll-amount '(1
+  ;;                                   ((shift) . 5)
+  ;;                                   ((control))))
+
+
+  ;; (setq-default indicate-empty-lines t)
+#+END_SRC
+
 * Color and Fonts Settings
 
 ** highlight current line
@@ -314,14 +316,13 @@ improve color for org-mode
 #+END_SRC
 
 ** page-break-lines
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
   (use-package page-break-lines
     :ensure t
     :config
-    (turn-on-page-break-lines-mode))
-
+    (global-page-break-lines-mode)
+    ;; (turn-on-page-break-lines-mode)
+    )
 #+END_SRC
 
 ** rainbow-mode
@@ -338,11 +339,8 @@ Enable rainbow mode in emacs lisp mode
 #+END_SRC
 
 * Mode-line
-
 ** clean mode line
-
-clean mode line, Refer to [[https://www.masteringemacs.org/article/hiding-replacing-modeline-strings][Marstering Emacs]]
-
+clean mode line, Refer to [[https://www.masteringemacs.org/article/hiding-replacing-modeline-strings][Marstering Emacs]], some greek character see [[http://xahlee.info/math/math_unicode_greek.html][math_unicode_greek]]
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (defvar mode-line-cleaner-alist
     `((auto-complete-mode . " α")
@@ -365,12 +363,17 @@ clean mode line, Refer to [[https://www.masteringemacs.org/article/hiding-replac
       (org-indent-mode . "")
       ;; default is  Fly
       (flyspell-mode . "")
+      (irony-mode . "")
+      (page-break-lines-mode . "")
       ;; Major modes
       (lisp-interaction-mode . "λ")
       (hi-lock-mode . "")
       (python-mode . "Py")
       (emacs-lisp-mode . "EL")
-      (eshell-mode . "ε")
+      (eshell-mode . "𝞔")
+      (dired-mode . "𝞓")
+      (ibuffer-mode . "𝞑")
+      (org-mode . "𝞞")
       (nxhtml-mode . "nx"))
     "Alist for `clean-mode-line'.
 
@@ -396,9 +399,7 @@ clean mode line, Refer to [[https://www.masteringemacs.org/article/hiding-replac
 #+END_SRC
 
 ** Powerline mode
-
 Install powerline mode [[https://github.com/milkypostman/powerline][powerline]]
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package powerline
     :ensure t
@@ -524,7 +525,7 @@ set height in mode line
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package ido
     :ensure t
-    :init (setq ido-enable-flex-matching t
+    :init (setq ido-enable-flex-matching nil
                 ido-ignore-extensions t
                 ido-use-virtual-buffers t
                 ido-everywhere t)
@@ -541,9 +542,9 @@ set height in mode line
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package flx-ido
     :ensure t
-    :init (setq ido-enable-flex-matching t
+    :init (setq ido-enable-flex-matching nil
                 ido-use-faces nil)
-    :config (flx-ido-mode 1))
+    :config (flx-ido-mode nil))
 #+END_SRC
 
 ** IDO-vertically
@@ -639,11 +640,8 @@ let helm windows split inside current window
 #+END_SRC
 
 * Org-mode Settings
-
 ** Org-mode Basic setting
-
 Always indents header, and hide header leading starts so that no need type =#+STATUP: indent= 
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package org
     :ensure t
@@ -665,6 +663,7 @@ Always indents header, and hide header leading starts so that no need type =#+ST
      (latex . t)
      (java . t)
      (ruby . t)
+     (lua . t)
      (lisp . t)
      (scheme . t)
      (sh . t)
@@ -685,12 +684,14 @@ Always indents header, and hide header leading starts so that no need type =#+ST
   (unless 
       (file-exists-p org-ditaa-jar-path)
     (error "seudut: ditaa.jar not found at %s " org-ditaa-jar-path))
+
+  ;; Lua support
+  (use-package ob-lua
+    :ensure t)
 #+END_SRC
 
 ** Org-bullets
-
 use [[https://github.com/sabof/org-bullets][org-bullets]] package to show utf-8 charactes
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package org-bullets
     :ensure t
@@ -706,12 +707,10 @@ use [[https://github.com/sabof/org-bullets][org-bullets]] package to show utf-8
 #+END_SRC
 
 ** Worf Mode
-
 [[https://github.com/abo-abo/worf][worf]] mode is an extension of vi-like binding for org-mode. 
 In =worf-mode=, it is mapping =[=, =]= as =worf-backward= and =worf-forward= in global, wich
 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
@@ -728,12 +727,9 @@ cause we cannot input =[= and =]=, so here I unset this mappings. And redifined
 #+END_SRC
 
 ** Get Things Done
-
 Refer to [[http://doc.norang.ca/org-mode.html][Organize Your Life in Plain Text]]
 *** basic setup
-
 standard key binding
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (global-set-key "\C-cl" 'org-store-link)
   (global-set-key "\C-ca" 'org-agenda)
@@ -741,9 +737,7 @@ standard key binding
 #+END_SRC
 
 *** Plain List 
-
 Replace the list bullet =-=, =+=,  with =•=, a litter change based [[https://github.com/howardabrams/dot-files/blob/master/emacs-org.org][here]]
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   ;; (use-package org-mode
   ;;   :init
@@ -906,6 +900,8 @@ Setting agenda files and the agenda view
 ** Export PDF
 Install MacTex-basic [[http://www.tug.org/mactex/morepackages.html][MacTex-basic]]  and some tex packages
 #+BEGIN_SRC sh 
+  wget http://tug.org/cgi-bin/mactex-download/BasicTeX.pkg
+
   sudo tlmgr update --self
 
   sudo tlmgr install titlesec framed threeparttable wrapfig multirow enumitem bbding titling tabu mdframed tcolorbox textpos import varwidth needspace tocloft ntheorem environ trimspaces collection-fontsrecommended capt-of
@@ -986,19 +982,17 @@ Install MacTex-basic [[http://www.tug.org/mactex/morepackages.html][MacTex-basic
 
 #+END_SRC
 
-** others
-
+** 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"))
+               '("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"))
 #+END_SRC
 
 * Magit
@@ -1069,7 +1063,7 @@ Toggle an eshell in split window below, refer [[http://www.howardism.org/Technic
                     nil nil)
       ret))
 
-  (defun sd/toggle-eshell-here ()
+  (defun sd/toggle-project-eshell ()
     "Toggle a eshell buffer vertically"
     (interactive)
     (if (sd/window-has-eshell)
@@ -1080,31 +1074,38 @@ Toggle an eshell in split window below, refer [[http://www.howardism.org/Technic
                 (delete-window)))
           (select-window (sd/window-has-eshell)))
       (progn
-        (let ((dir default-directory))
+        (split-window-vertically (- (/ (window-total-height) 3)))
+        (other-window 1)
+        (if (projectile-project-p)
+            (projectile-run-eshell)
+          (eshell))
+        ;; (let ((dir default-directory))
         
-          (split-window-vertically (- (/ (window-total-height) 3)))
-          (other-window 1)
-          (unless (and (boundp 'eshell-buffer-name) (get-buffer eshell-buffer-name))
-            (eshell))
-          (switch-to-buffer eshell-buffer-name)
-          (goto-char (point-max))
-          (eshell-kill-input)
-          (insert (format "cd %s" dir))
-          (eshell-send-input)))))
+        ;;   (split-window-vertically (- (/ (window-total-height) 3)))
+        ;;   (other-window 1)
+        ;;   (unless (and (boundp 'eshell-buffer-name) (get-buffer eshell-buffer-name))
+        ;;     (eshell))
+        ;;   (switch-to-buffer eshell-buffer-name)
+        ;;   (goto-char (point-max))
+        ;;   (eshell-kill-input)
+        ;;   (insert (format "cd %s" dir))
+        ;;   (eshell-send-input))
+        )))
 
   ;; (global-unset-key (kbd "M-`"))
-  (global-set-key (kbd "s-e") 'sd/toggle-eshell-here)
+  (global-set-key (kbd "s-e") 'sd/toggle-project-eshell)
 #+END_SRC
 
 ** exec-path-from-shell
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package exec-path-from-shell
     :ensure t
+    :init
+    (setq exec-path-from-shell-check-startup-files nil)
     :config
     (exec-path-from-shell-initialize))
 #+END_SRC
 
-** TODO smart display
 * Misc Settings
 
 ** [[https://github.com/abo-abo/hydra][Hydra]]
@@ -1244,68 +1245,50 @@ I like [[https://github.com/coldnew/linum-relative][linum-relative]], just like
 #+END_SRC
 
 ** Multi-term
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
   (use-package multi-term
     :ensure t)
-
 #+END_SRC
 
 ** ace-link
-
 [[https://github.com/abo-abo/ace-link][ace-link]] is a package written by [[https://github.com/abo-abo][Oleh Krehel]]. It is convenient to jump to link in help mode, info-mode, etc
 Type =o= to go to the link
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
   (use-package ace-link
     :ensure t
     :init
     (ace-link-setup-default))
-
 #+END_SRC
 
 ** Smart Parens
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
   (use-package smartparens
     :ensure t
     :config
     (progn
       (require 'smartparens-config)
       (add-hook 'prog-mode-hook 'smartparens-mode)))
-
 #+END_SRC
 
 ** Ace-Windows
-
 [[https://github.com/abo-abo/ace-window][ace-window]] 
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
   (use-package ace-window
     :ensure t
     :defer t
-  ;  :init
-  ;  (global-set-key (kbd "M-o") 'ace-window)
+                                          ;  :init
+                                          ;  (global-set-key (kbd "M-o") 'ace-window)
     :config
     (setq aw-keys '(?a ?s ?d ?f ?j ?k ?l)))
-
 #+END_SRC
 
 ** Which key
-
 [[https://github.com/justbur/emacs-which-key][which-key]] show the key bindings 
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
   (use-package which-key
     :ensure t
     :config
     (which-key-mode))
-
 #+END_SRC
 
 ** View only for some directory
@@ -1317,15 +1300,39 @@ When see function by =C-h f=, and visit the source code, I would like the buffer
              (show-trailing-whitespace . nil)
              (tab-width . 8)
              (eval . (whitespace-mode -1))
-             (eval . (when buffer-file-name
-                       (setq-local view-no-disable-on-exit t)
-                       (view-mode-enter)))))))
+             ;; (eval . (when buffer-file-name
+             ;;           (setq-local view-no-disable-on-exit t)
+             ;;           (view-mode-enter)))
+             ))))
 
   ;; (dir-locals-set-directory-class (expand-file-name "/usr/local/share/emacs") 'emacs)
   (dir-locals-set-directory-class "/usr/local/Cellar/emacs" 'emacs)
   ;; (dir-locals-set-directory-class "~/.emacs.d/elpa" 'emacs)
   (dir-locals-set-directory-class "~/dotfiles/emacs.d/elpa" 'emacs)
   (dir-locals-set-directory-class "~/dotfiles/emacs.d/el-get" 'emacs)
+
+  ;; temp-mode.el
+  ;; Temporary minor mode
+  ;; Main use is to enable it only in specific buffers to achieve the goal of
+  ;; buffer-specific keymaps
+
+  ;; (defvar sd/temp-mode-map (make-sparse-keymap)
+  ;;   "Keymap while temp-mode is active.")
+
+  ;; ;;;###autoload
+  ;; (define-minor-mode sd/temp-mode
+  ;;   "A temporary minor mode to be activated only specific to a buffer."
+  ;;   nil
+  ;;   :lighter " Temp"
+  ;;   sd/temp-mode-map)
+
+  ;; (defun sd/temp-hook ()
+  ;;   (if sd/temp-mode
+  ;;       (progn
+  ;;      (define-key sd/temp-mode-map (kbd "q") 'quit-window))))
+
+  ;; (add-hook 'lispy-mode-hook (lambda ()
+  ;;                           (sd/temp-hook)))
 #+END_SRC
 
 ** Info plus
@@ -1339,9 +1346,6 @@ When see function by =C-h f=, and visit the source code, I would like the buffer
     (require 'info+))
 #+END_SRC
 
-** TODO bookmark
-
-** TODO Calendar
 ** advice info
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (defun sd/info-mode ()
@@ -1363,15 +1367,6 @@ When see function by =C-h f=, and visit the source code, I would like the buffer
     (sd/delete-current-window))
 #+END_SRC
 
-** TODO Man mode
-Color for Man-mode
-
-** TODO UTF8
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-  ;; (set-language-environment "UTF-8")
-  ;; (set-default-coding-systems 'utf-8)
-#+END_SRC
-
 ** Demo It
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   ;; (el-get-bundle howardabrams/demo-it)
@@ -1418,6 +1413,40 @@ Color for Man-mode
     (define-key pdf-outline-buffer-mode-map (kbd "k") 'previous-line))
 #+END_SRC
 
+** help-mode
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (defun sd/help-mode-hook ()
+    "Mapping for help mode"
+    (define-key help-mode-map "j" 'next-line)
+    (define-key help-mode-map "k" 'previous-line)
+    (define-key help-mode-map "h" 'forward-char)
+    (define-key help-mode-map "l" 'forward-char)
+    (define-key help-mode-map "H" 'describe-mode)
+    (define-key help-mode-map "v" 'recenter-top-bottom)
+    (define-key help-mode-map "i" 'forward-button)
+    (define-key help-mode-map "I" 'backward-button)
+    (define-key help-mode-map "o" 'ace-link-help))
+
+  (add-hook 'help-mode-hook 'sd/help-mode-hook)
+#+END_SRC
+
+** goto-last-change
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (use-package goto-last-change
+    :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
+
 * Dired
 ** Dired bindings
 =C-o= is defined as a global key for window operation, here unset it in dired mode
@@ -1448,7 +1477,7 @@ Color for Man-mode
     (define-key dired-mode-map (kbd "h") 'dired-summary)
     (define-key dired-mode-map (kbd "r") 'revert-buffer)
     (define-key dired-mode-map (kbd "l") 'dired-display-file)
-    (define-key dired-mode-map [C-backspace] 'sd/dired-high-level-dir)
+    (define-key dired-mode-map [C-backspace] 'dired-up-directory)
     (define-key dired-mode-map (kbd "?") 'describe-mode)
     (define-key dired-mode-map (kbd "z") #'sd/dired-get-size)
     (define-key dired-mode-map (kbd "C-d") 'dired-kill-subdir)
@@ -1546,6 +1575,34 @@ here on Mac, just use "open" commands to pen =.pdf=,  =.html= and image files
           ("\\.html?\\'" "open")
           ("\\.dmg\\'" "open")
           ("\\.cue?\\'" "audacious")))
+
+
+  (defun sd/dired-start-process (cmd &optional file-list)
+    (interactive
+     (let ((files (dired-get-marked-files
+                   t current-prefix-arg)))
+       (list
+        (unless (eq system-type 'windows-nt)
+          (dired-read-shell-command "& on %s: "
+                                    current-prefix-arg files))
+        files)))
+    
+    (if (eq system-type 'windows-nt)
+        (dolist (file file-list)
+          (w32-shell-execute "open" (expand-file-name file)))
+      (let (list-switch)
+        (start-process
+         cmd nil shell-file-name
+         shell-command-switch
+         (format
+          "nohup 1>/dev/null 2>/dev/null %s \"%s\""
+          cmd
+          ;; (if (and (> (length file-list) 1)
+          ;;          (setq list-switch
+          ;;                (cadr (assoc cmd ora-dired-filelist-cmd))))
+          ;;     (format "%s %s" cmd list-switch)
+          ;;   cmd)
+          (mapconcat #'expand-file-name file-list "\" \""))))))
 #+END_SRC
 
 ** dired-hacks
@@ -1574,7 +1631,14 @@ here on Mac, just use "open" commands to pen =.pdf=,  =.html= and image files
     (define-key ibuffer-mode-map (kbd "j") 'ibuffer-forward-line)
     (define-key ibuffer-mode-map (kbd "k") 'ibuffer-backward-line)
     (define-key ibuffer-mode-map (kbd "r") 'ibuffer-update)
-    (define-key ibuffer-mode-map (kbd "g") 'ibuffer-jump-to-buffer))
+    (define-key ibuffer-mode-map (kbd "g") 'ibuffer-jump-to-buffer)
+    (define-key ibuffer-mode-map (kbd "h") 'sd/ibuffer-summary))
+
+  (defun sd/ibuffer-summary ()
+    "Show summary of keybindings in ibuffer mode"
+    (interactive)
+    (message
+     "Β: m|u - (un)mark, /-filter, //-remove filter, t, RET, g, k, S, D, Q; q to quit; h for help"))
 #+END_SRC
 
 * Completion
@@ -1593,6 +1657,12 @@ company mode and company-statistics
     (company-statistics-mode))
 #+END_SRC
 
+* Libs
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (use-package s
+    :ensure t)
+#+END_SRC
+
 * Programming Language
 ** Emacs Lisp
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
@@ -1693,11 +1763,118 @@ to call =compilation=  interactively.
 #+END_SRC
 
 ** C & C++
+*** 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)
+#+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 clang, on mac, it has =libclang.dylib=, but no develop headers. Install by =brew=
+#+BEGIN_SRC sh
+  brew install llvm --with-clang
+#+END_SRC
+
+then install irony searver, and =LIBCLANG_LIBRARY= and =LIBCLANG_INCLUDE_DIR= accordingly
+#+BEGIN_SRC emacs-lisp :tangle no :results silent
+  (irony-install-server)
+#+END_SRC
+
+#+BEGIN_SRC sh
+  cmake -DLIBCLANG_LIBRARY\=/usr/local/Cellar/llvm/3.6.2/lib/libclang.dylib \
+        -DLIBCLANG_INCLUDE_DIR=/usr/local/Cellar/llvm/3.6.2/include \
+        -DCMAKE_INSTALL_PREFIX\=/Users/peli3/.emacs.d/irony/ \
+        /Users/peli3/.emacs.d/elpa/irony-20160713.1245/server && cmake --build . --use-stderr --config Release --target install 
+#+END_SRC
+
+irony-mode-hook, copied from [[https://github.com/Sarcasm/irony-mode][irony-mode]] github
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  ;; 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)
+#+END_SRC
+
+irony-company
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (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))
+#+END_SRC
+
+*** gtags
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (use-package ggtags
+    :ensure t)
+
+  (add-hook 'c-mode-common-hook
+            (lambda ()
+              (when (derived-mode-p 'c-mode 'c++-mode 'java-mode)
+                (ggtags-mode 1))))
+
+  (require 'cc-mode)
+  (require 'semantic)
+
+  (global-semanticdb-minor-mode 1)
+  (global-semantic-idle-scheduler-mode 1)
+
+  (semantic-mode 1)
+
+#+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))
+#+END_SRC
+
+** Lua
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (use-package lua-mode
+    :ensure t)
+#+END_SRC
+
 * Compile
 Set the environments vairables in compilation mode
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
@@ -1727,14 +1904,14 @@ Set the environments vairables in compilation mode
 ** C++ Auto Insert
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (eval-after-load 'autoinsert
-    '(define-auto-insert '("\\.cpp\\'" . "C++ skeleton")
+    '(define-auto-insert '("\\.cpp\\|.cc\\'" . "C++ skeleton")
        '(
          "Short description:"
          "/*"
          "\n * " (file-name-nondirectory (buffer-file-name))
          "\n */" > \n \n
          "#include <iostream>" \n
-         "#include \""
+         "//#include \""
          (file-name-sans-extension
           (file-name-nondirectory (buffer-file-name)))
          ".hpp\"" \n \n
@@ -1742,7 +1919,7 @@ Set the environments vairables in compilation mode
          "int main ()"
          "\n{" \n 
          > _ \n
-         "return 1;"
+         "return 0;"
          "\n}" > \n
          )))
 
@@ -1754,16 +1931,21 @@ Set the environments vairables in compilation mode
          " * " (file-name-nondirectory (buffer-file-name)) "\n"
          " */" > \n \n
          "#include <stdio.h>" \n
-         "#include \""
+         "//#include \""
          (file-name-sans-extension
           (file-name-nondirectory (buffer-file-name)))
          ".h\"" \n \n
          "int main ()\n"
          "{" \n
          > _ \n
-         "return 1;\n"
+         "return 0;\n"
          "}" > \n
          )))
+
+  (eval-after-load 'autoinsert
+    '(define-auto-insert '("\\.h\\|.hpp\\'" . "c/c++ header")
+       '((s-upcase (s-snake-case (file-name-nondirectory buffer-file-name)))
+         "#ifndef " str n "#define " str "\n\n" _ "\n\n#endif  // " str)))
 #+END_SRC
 
 ** Python template
@@ -1992,6 +2174,11 @@ See [[https://www.emacswiki.org/emacs/GnusWindowLayout][GnusWindowLayout]]
 #+END_SRC
 
 * Gnu Plot
+Install =gnuplot= on Mac
+#+BEGIN_SRC sh
+  brew install gnuplot --with-qt
+#+END_SRC
+
 To fix some issue that =toolbar-make-button-list= is void, see the [[https://github.com/bruceravel/gnuplot-mode/issues/31][issue]], here I set some variable as =nil=
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package gnuplot
@@ -2110,7 +2297,9 @@ Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g=
     :ensure t
     :init
     (setq projectile-enable-caching t)
-    (setq projectile-switch-project-action 'projectile-dired)
+    (setq projectile-switch-project-action (lambda ()
+                                             (projectile-dired)
+                                             (sd/project-switch-action)))
     (setq projectile-cache-file (concat sd-temp-directory "projectile.cache"))
     :config
     (add-to-list 'projectile-globally-ignored-files "GTAGS")
@@ -2124,9 +2313,23 @@ Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g=
     (:map projectile-mode-map
           ("s-t" . projectile-persp-switch-project)))
 
-  ;; projectile-find-file
-  ;; projectile-switch-buffer
-  ;; projectile-find-file-other-window
+  ;; (defun sd/change-default-directory (buffer dir)
+  ;;   "change defafult directory of buffer to dir"
+  ;;   (with-current-buffer buffer
+  ;;     (cd dir)))
+
+  ;; change default-directory of scratch buffer to projectile-project-root 
+  (defun sd/project-switch-action ()
+    "Change default-directory of scratch buffer to current projectile-project-root directory"
+    (interactive)
+    (dolist (buffer (buffer-list))
+      (if (string-match (concat "scratch.*" (projectile-project-name))
+                        (buffer-name buffer))
+          (let ((root (projectile-project-root)))
+            (with-current-buffer buffer
+              (cd root)))
+        ;; (sd/change-default-directory buffer (projectile-project-root))
+        )))
 #+END_SRC
 
 *** project config =super= keybindings
@@ -2146,6 +2349,7 @@ Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g=
 
   (global-set-key (kbd "s-n") 'persp-next)
   (global-set-key (kbd "s-p") 'persp-prev)
+  (global-set-key (kbd "s-;") 'persp-switch-last)
 
   (global-set-key (kbd "s-=") 'text-scale-increase)
   (global-set-key (kbd "s--") 'text-scale-decrease)
@@ -2253,7 +2457,7 @@ Most use =C-o C-o= to switch buffers; =C-o x, v= to split window; =C-o o= to del
     ;; 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))
@@ -2270,8 +2474,8 @@ Most use =C-o C-o= to switch buffers; =C-o x, v= to split window; =C-o o= to del
     ;; ("d" ace-delete-window "ace-one" :exit t)
     ("C-o" ido-switch-buffer nil :exit t)
     ("d" sd/project-or-dired-jump nil :exit t)
-    ("b" ibuffer nil n:exit t)
-    ("e" eshell nil :exit t)
+    ("b" ibuffer 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)
@@ -2716,69 +2920,14 @@ stolen from [[https://github.com/mariolong/emacs.d/blob/f6a061594ef1b5d1f4750e9d
 #+END_SRC
 
 *** TODO make expand-region hydra work with lispy selected
-
-* TODO Convert ASCII to key
-** map =function-key-map= [[http://academic.evergreen.edu/projects/biophysics/technotes/program/ascii_ctrl.htm][ascii_ctrl]]
-new file =C-x C-f C-f=
-
-** write color syntax for =Man-mode=
-
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-  (font-lock-add-keywords 'perl-mode '(("\\(|\\w+?\\(,\\w+?\\)?|\\)" 1 'py-builtins-face)))
-#+END_SRC
-
-* TODO jump last change point
-* TODO emms mode-line
-
-* =C-u C-h a= search funtions 
-=apropos-command= 
-
 * key
 - passion
 - vision
 - mission
 
-* M prefix
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
-  ;; M-h - mark-paragraph
-  ;; M-j - new line indent
-  ;; M-k - kill-sentence
-  ;; M-l - downcase words     ====== goto-line
-  ;; M-; - comments
-  ;; M-'- abbrev-prefix-mark  =======
-  ;; M-RET none                ======
-
-  ;; M-y - yank
-  ;; M-u - upcase word
-  ;; M-i -                 ====== imenu
-  ;; M-o             ====== prefix
-  ;; M-p
-  ;; M-[                   =====
-  ;; M-]              ========
-  ;; M-\   deleter horizontal space =====
-
-  ;; M-n 
-  ;; M-m ---- indent
-  ;; M-, --- mark stack====== =
-  ;; M-. lisp-goto-symboo, find definitation
-
-  ;; M-a 
-  ;; M-s ===== 
-  ;; M-d
-  ;; M-f
-  ;; M-g - prefix
-
-  ;; M-q - lisp fill, fill paragraph
-  ;; M-w 
-  ;; M-e
-  ;; M-r  - rePositioning 
-  ;; M-t transpose word 
-
-  ;; M-z zap-to-char
-  ;; M-x
-  ;; M-c  capitalize-word
-  ;; M-v 
-  ;; M-b 
-#+END_SRC
-
+* TODO todolist
+** rucket
+** player video on iphone for 
+** SICP
+** music searcher
+search music on some music web site