X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=emacs.d%2Fconfig.org;h=976bc82704dc3c8865ec55cde380f24cd3f45ee3;hb=937131850a4324bbf8bbf2cf108375ce124f3bd1;hp=0c1fd5a985656229ec72737854feea1ba6ebcedb;hpb=ce562e8d702a6af572e9955c7c0ee713516b6b37;p=dotfiles.git diff --git a/emacs.d/config.org b/emacs.d/config.org index 0c1fd5a..976bc82 100644 --- a/emacs.d/config.org +++ b/emacs.d/config.org @@ -32,6 +32,10 @@ Set system PATH and emacs exec path #+BEGIN_SRC emacs-lisp :tangle yes :results silent (defconst my-name "Peng Li") (defconst my-email "seudut@gmail.com") + (defconst MY-EMACS-DIR (concat (getenv "HOME") "/.emacs.d")) + (defconst MY-EMACS-TMP (concat MY-EMACS-DIR "/temp")) + (unless (file-exists-p MY-EMACS-TMP) + (mkdir MY-EMACS-TMP)) #+END_SRC ** General Setting @@ -60,6 +64,8 @@ Set system PATH and emacs exec path (when (display-graphic-p) (fringe-mode '(0 . 0))) + + (blink-cursor-mode 0) ;; (setq-default indicate-empty-lines t) ;; (setq-default indicate-abuffer-boundaries 'right) #+END_SRC @@ -199,7 +205,7 @@ Setting the fonts alignment issue (if window-system (when sd/fixed-font-family (set-frame-font sd/fixed-font-family) - (set-face-attribute 'default nil :font sd/fixed-font-family :height 140) + (set-face-attribute 'default nil :font sd/fixed-font-family :height 120) (set-face-font 'default sd/fixed-font-family))) #+END_SRC @@ -702,7 +708,8 @@ let helm windows split inside current window (use-package ivy :ensure t) (ivy-mode 1) (setq ivy-use-virtual-buffers nil - ivy-wrap t) + ivy-wrap t + ivy-count-format "%d/%d ") (set-face-attribute 'ivy-current-match nil :background "Orange" :foreground "black") (global-set-key (kbd "M-x") 'counsel-M-x) ;; (global-set-key (kbd "C-h f") 'counsel-describe-function) @@ -711,9 +718,14 @@ let helm windows split inside current window (define-key read-expression-map (kbd "C-r") 'counsel-expression-history) (global-set-key (kbd "C-c C-r") 'ivy-resume)) - (use-package counsel-projectile - :ensure t - :defer t) + ;; (use-package counsel-projectile + ;; :ensure t + ;; :defer t) + + (add-to-list 'load-path "~/project/counsel-projectile/") + (require 'counsel-projectile) + (setq counsel-projectile-use-buffer-preselect t) + (setq projectile-completion-system 'ivy) #+END_SRC #+BEGIN_SRC emacs-lisp :tangle yes :results silent @@ -723,6 +735,8 @@ let helm windows split inside current window 'ivy--switch-buffer-other-window-action) ((eq (ivy-state-caller ivy-last) 'counsel-recentf) 'find-file-other-window) + ((eq (ivy-state-caller ivy-last) 'projectile-find-file) + 'projectile-find-file-other-window) ((eq (ivy-state-caller ivy-last) 'counsel-projectile-find-file) 'counsel-projectile-find-file-action-other-window) (t @@ -1517,8 +1531,19 @@ Refer [[https://github.com/abo-abo/hydra/blob/master/hydra-examples.el][hydra-ex ("u" winner-undo "window-Undo" :exit t) ("r" winner-redo "window-Redo" :exit t)) - ;; (with-eval-after-load "evil" - ;; (define-key evil-normal-state-map (kbd ";t") 'sd/hydra-window-layout/body)) + (defhydra sd/hydra-gtags (:color red :colums nil) + "ggtags - global" + ("d" sd/ggtags-find-definition "Definition" :exit t) + ("r" ggtags-find-reference "Reference" :exit t) + ("s" sd/ggtags-find-symbol "Symbol" :exit t)) + + (defhydra sd/hydra-projectile (:color red :column nil) + "Projectile: " + ("s" projectile-switch-open-project "Switch" :exit t) + ("f" projectile-find-file "File" :exit t) + ("b" projectile-switch-to-buffer "Buffer" :exit t)) + + #+END_SRC @@ -1784,8 +1809,8 @@ Wiki [[http://stackoverflow.com/questions/3480173/show-keys-in-emacs-keymap-valu ** goto-last-change #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package goto-last-change - :ensure t) + ;; (use-package goto-last-change + ;; :ensure t) #+END_SRC ** Ag @@ -2028,7 +2053,7 @@ here on Mac, just use "open" commands to pen =.pdf=, =.html= and image files ("\\.csv\\'" "libreoffice") ("\\.tex\\'" "pdflatex" "latex") ("\\.\\(?:mp4\\|mkv\\|avi\\|rmvb\\|flv\\|ogv\\)\\(?:\\.part\\)?\\'" "mplayer") - ("\\.\\(?:mp3\\|flac\\)\\'" "rhythmbox") + ("\\.\\(?:mp3\\|flac\\|wav\\)\\'" "mplayer") ("\\.html?\\'" "open") ("\\.dmg\\'" "open") ("\\.cue?\\'" "audacious"))) @@ -2036,30 +2061,27 @@ here on Mac, just use "open" commands to pen =.pdf=, =.html= and image files (defun sd/dired-start-process (cmd &optional file-list) (interactive - (let ((files (dired-get-marked-files - t current-prefix-arg))) + (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)) + (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 "\" \"")))))) + ;; (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 @@ -2123,6 +2145,8 @@ here on Mac, just use "open" commands to pen =.pdf=, =.html= and image files (use-package company-statistics :ensure t + :init + (setq company-statistics-file (concat MY-EMACS-TMP "/company-statistics-cache.el")) :config (company-statistics-mode)) @@ -2145,6 +2169,24 @@ here on Mac, just use "open" commands to pen =.pdf=, =.html= and image files (yas-reload-all)) #+END_SRC +** YouCompleteMe +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package ycmd + :ensure t + :init + (use-package company-ycmd + :ensure t + :init + (setq company-ycmd-enable-fuzzy-matching nil) + :config + (company-ycmd-setup)) + (setq ycmd-force-semantic-completion t) + (add-hook 'c++-mode-hook 'ycmd-mode) + (add-hook 'c-mode-hook 'ycmd-mode) + (set-variable 'ycmd-server-command '("python" "/Users/peng/project/ycmd/ycmd")) + (set-variable 'ycmd-global-config "/Users/peng/project/ycmd/cpp/ycm/.ycm_extra_conf.py")) +#+END_SRC + ** company and yasnippet Add yasnippet as the company candidates @@ -2271,14 +2313,21 @@ Refer, [[http://emacs.stackexchange.com/questions/7908/how-to-make-yasnippet-and (set-face-attribute 'font-lock-function-name-face nil :foreground "#A6E22E" :weight 'normal :slant 'normal) (set-face-attribute 'font-lock-variable-name-face nil :foreground "#00FF00") - (font-lock-add-keywords 'c-mode - ;; highlight %s \n - '(("\\([%\\][a-zA-Z]\\)" (1 font-lock-keyword-face prepend)) - ("[^[:alpha:]]\\([[:digit:]]*\\)[^[:alpha:]]" (1 font-lock-constant-face append)) - ;; hex number - ("[^[:alpha:]]\\(0[x\\|X][0-9a-fA-F]*\\)[^[:alpha:]]" (1 font-lock-constant-face append)) - ;; hightlight the function call - ("\\s\"?\\(\\(\\sw\\|\\s_\\)+\\(<-\\)?\\)\\s\"?*\\s-*(" (1 font-lock-function-name-face))) t) + (dolist (mode '(c-mode + c++-mode)) + (font-lock-add-keywords mode + ;; highlight %s \n + '(("\\([%\\][a-zA-Z]\\)" (1 font-lock-keyword-face prepend)) + ("[^[:alpha:]]\\([[:digit:]]*\\)[^[:alpha:]]" (1 font-lock-constant-face append)) + ;; hex number + ("[^[:alpha:]]\\(0[x\\|X][0-9a-fA-F]*\\)[^[:alpha:]]" (1 font-lock-constant-face append)) + ;; hightlight the function call + ("\\s\"?\\(\\(\\sw\\|\\s_\\)+\\(<-\\)?\\)\\s\"?*\\s-*(" (1 font-lock-function-name-face))) t)) + + (font-lock-add-keywords 'c++-mode + '( + ("[\s\\|::]\\(cin\\|cout\\|endl\\)[^[:alpha:][:digit:]]" (1 font-lock-constant-face append)) + ) t) #+END_SRC ** Emacs Lisp @@ -2416,12 +2465,12 @@ then install irony searver, and =LIBCLANG_LIBRARY= and =LIBCLANG_INCLUDE_DIR= ac **** 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)) + ;; (use-package irony + ;; :ensure t + ;; :init + ;; (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 @@ -2449,28 +2498,28 @@ irony-mode-hook, copied from [[https://github.com/Sarcasm/irony-mode][irony-mode irony-company #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package company-irony - :ensure t) + ;; (use-package company-irony + ;; :ensure t) - (use-package flycheck-irony - :ensure t) + ;; (use-package flycheck-irony + ;; :ensure t) - (use-package company-c-headers - :ensure t - :config - (add-to-list 'company-c-headers-path-system "/usr/include/c++/4.2.1/") - (add-to-list 'company-c-headers-path-system "/usr/local/include/")) + ;; (use-package company-c-headers + ;; :ensure t + ;; :config + ;; (add-to-list 'company-c-headers-path-system "/usr/include/c++/4.2.1/") + ;; (add-to-list 'company-c-headers-path-system "/usr/local/include/")) ;; (with-eval-after-load 'company ;; (add-to-list 'company-backends 'company-irony) ;; (add-to-list 'company-backends 'company-c-headers)) - (with-eval-after-load 'company - (push '(company-irony :with company-yasnippet) company-backends) - (push '(company-c-headers :with company-yasnippet) company-backends)) + ;; (with-eval-after-load 'company + ;; (push '(company-irony :with company-yasnippet) company-backends) + ;; (push '(company-c-headers :with company-yasnippet) company-backends)) - (with-eval-after-load 'flycheck - (add-hook 'flycheck-mode-hook #'flycheck-irony-setup)) + ;; (with-eval-after-load 'flycheck + ;; (add-hook 'flycheck-mode-hook #'flycheck-irony-setup)) #+END_SRC *** flycheck @@ -2499,8 +2548,23 @@ irony-company (when (derived-mode-p 'c-mode 'c++-mode 'java-mode) (ggtags-mode 1)))) + (defun sd/ggtags-find-definition () + "Find the definition with current name completing." + (interactive) + (setq current-prefix-arg '(4)) + (call-interactively 'ggtags-find-definition)) + + (defun sd/ggtags-find-symbol () + "Find symbol" + (interactive) + (setq current-prefix-arg '(4)) + (call-interactively 'ggtags-find-other-symbol)) + (require 'cc-mode) (require 'semantic) + (setq semanticdb-default-save-directory (concat MY-EMACS-TMP "/semantic/")) + (unless (file-exists-p semanticdb-default-save-directory) + (make-directory semanticdb-default-save-directory)) (global-semanticdb-minor-mode 1) (global-semantic-idle-scheduler-mode 1) @@ -2581,7 +2645,6 @@ Install =guile=, =guile= is an implementation of =Scheme= programming language. (add-to-list 'auto-mode-alist '("\\.rkt\\'" . racket-mode)) #+END_SRC - * Compile Set the environments vairables in compilation mode #+BEGIN_SRC emacs-lisp :tangle yes :results silent @@ -3152,7 +3215,8 @@ Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g= (setq projectile-cache-file (concat sd-temp-directory "projectile.cache")) :config (add-to-list 'projectile-globally-ignored-files "GTAGS") - (projectile-global-mode t)) + (projectile-global-mode t) + (global-set-key (kbd "C-M-p") 'projectile-switch-project)) ;; change default-directory of scratch buffer to projectile-project-root (defun sd/project-switch-action () @@ -3437,17 +3501,17 @@ Search, replace and hightlight will in later paragraph :config (avy-setup-default)) - (global-set-key (kbd "C-M-j") 'avy-goto-line-below) - (global-set-key (kbd "C-M-n") 'avy-goto-line-below) - (global-set-key (kbd "C-M-k") 'avy-goto-line-above) - (global-set-key (kbd "C-M-p") 'avy-goto-line-above) + ;; (global-set-key (kbd "C-M-j") 'avy-goto-line-below) + ;; (global-set-key (kbd "C-M-n") 'avy-goto-line-below) + ;; (global-set-key (kbd "C-M-k") 'avy-goto-line-above) + ;; (global-set-key (kbd "C-M-p") 'avy-goto-line-above) - (global-set-key (kbd "C-M-f") 'avy-goto-word-1-below) - (global-set-key (kbd "C-M-b") 'avy-goto-word-1-above) + ;; (global-set-key (kbd "C-M-f") 'avy-goto-word-1-below) + ;; (global-set-key (kbd "C-M-b") 'avy-goto-word-1-above) ;; (global-set-key (kbd "M-g e") 'avy-goto-word-0) - (global-set-key (kbd "C-M-w") 'avy-goto-char-timer) - (global-set-key (kbd "C-M-l") 'avy-goto-char-in-line) + ;; (global-set-key (kbd "C-M-w") 'avy-goto-char-timer) + ;; (global-set-key (kbd "C-M-l") 'avy-goto-char-in-line) ;; ;; will delete above ;; (global-set-key (kbd "M-g j") 'avy-goto-line-below)