X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=emacs.d%2Fconfig.org;h=d0e298e494fb83b70ede42bb300802a56c6dc228;hb=69448f079379d8883c219136ca9b8e22d93635bd;hp=d1b099a71a9916cdf7850e83066e3c3cb333346e;hpb=166668ed684ff7f2f9e1ddbcf83a8edcf7c06e44;p=dotfiles.git diff --git a/emacs.d/config.org b/emacs.d/config.org index d1b099a..d0e298e 100644 --- a/emacs.d/config.org +++ b/emacs.d/config.org @@ -47,6 +47,9 @@ Set the emacs load path (show-paren-mode 1) ;; don't backupf (setq make-backup-files nil) + + ;;supress the redefined warning at startup + (setq ad-redefinition-action 'accept) #+END_SRC *** Custom file @@ -144,13 +147,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 @@ -166,39 +168,29 @@ Check out [[http://tapoueh.org/emacs/el-get.html][el-get]]. #+END_SRC ** Font Setting - syntax highlighting - #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (global-font-lock-mode 1) - #+END_SRC [[https://github.com/i-tu/Hasklig][Hasklig]] and Source Code Pro, defined fonts family - #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (if window-system (defvar sd/fixed-font-family (cond ((x-list-fonts "Hasklig") "Hasklig") - ((x-list-fonts "Source Code Pro") "Source Code Pro:weight:light") + ((x-list-fonts "Source Code Pro") "Source Code Pro:weight") ((x-list-fonts "Anonymous Pro") "Anonymous Pro") ((x-list-fonts "M+ 1mn") "M+ 1mn")) "The fixed width font based on what is installed, `nil' if not defined.")) - #+END_SRC Setting the fonts - #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (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 130) (set-face-font 'default sd/fixed-font-family))) - #+END_SRC ** Color Theme @@ -206,7 +198,6 @@ Setting the fonts Loading theme should be after all required loaded, refere [[https://github.com/jwiegley/use-package][:defer]] in =use-package= #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (setq vc-follow-symlinks t) (use-package color-theme @@ -216,7 +207,9 @@ Loading theme should be after all required loaded, refere [[https://github.com/j :ensure t :no-require t :config - (load-theme 'sanityinc-tomorrow-bright t))) + ;; (load-theme 'sanityinc-tomorrow-bright t) + (load-theme 'molokai t) + )) ;(eval-after-load 'color-theme ; (load-theme 'sanityinc-tomorrow-bright t)) @@ -349,7 +342,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 +362,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 . "") @@ -592,7 +585,7 @@ Use [[https://github.com/DarwinAwardWinner/ido-ubiquitous][ido-ubiquitous]] for (use-package ido-exit-target :ensure t :init - (mapcar '(lambda (map) + (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 @@ -1241,9 +1234,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 +1447,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 +1660,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 @@ -1653,6 +1683,116 @@ company mode and company-statistics (company-statistics-mode)) #+END_SRC +** YASnippet +*** 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 + + +** company and yasnippet +Add yasnippet as the company candidates +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + ;Add yasnippet support for all company backends + ;https://github.com/syl20bnr/spacemacs/pull/179 + (defvar company-mode/enable-yas t + "Enable yasnippet for all backends.") + + (defun company-mode/backend-with-yas (backend) + (if (or (not company-mode/enable-yas) (and (listp backend) (member 'company-yasnippet backend))) + backend + (append (if (consp backend) backend (list backend)) + '(:with company-yasnippet)))) + + (setq company-backends (mapcar #'company-mode/backend-with-yas company-backends)) +#+END_SRC + +Refer, [[http://emacs.stackexchange.com/questions/7908/how-to-make-yasnippet-and-company-work-nicer][how-to-make-yasnippet-and-company-work-nicer]] +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (defun check-expansion () + (save-excursion + (if (looking-at "\\_>") t + (backward-char 1) + (if (looking-at "\\.") t + (backward-char 1) + (if (looking-at "->") t nil))))) + + (defun do-yas-expand () + (let ((yas/fallback-behavior 'return-nil)) + (yas/expand))) + + (defun tab-indent-or-complete () + (interactive) + (cond + ((minibufferp) + (minibuffer-complete)) + (t + (indent-for-tab-command) + (if (or (not yas/minor-mode) + (null (do-yas-expand))) + (if (check-expansion) + (progn + (company-manual-begin) + (if (null company-candidates) + (progn + (company-abort) + (indent-for-tab-command))))))))) + + (defun tab-complete-or-next-field () + (interactive) + (if (or (not yas/minor-mode) + (null (do-yas-expand))) + (if company-candidates + (company-complete-selection) + (if (check-expansion) + (progn + (company-manual-begin) + (if (null company-candidates) + (progn + (company-abort) + (yas-next-field)))) + (yas-next-field))))) + + (defun expand-snippet-or-complete-selection () + (interactive) + (if (or (not yas/minor-mode) + (null (do-yas-expand)) + (company-abort)) + (company-complete-selection))) + + (defun abort-company-or-yas () + (interactive) + (if (null company-candidates) + (yas-abort-snippet) + (company-abort))) + + ' + ;; (require 'company) + ;; (require 'yasnippet) + + + ;; (global-set-key [tab] 'tab-indent-or-complete) + ;; (global-set-key (kbd "TAB") 'tab-indent-or-complete) + ;; (global-set-key [(control return)] 'company-complete-common) + + ;; (define-key company-active-map [tab] 'expand-snippet-or-complete-selection) + ;; (define-key company-active-map (kbd "TAB") 'expand-snippet-or-complete-selection) + + ;; (define-key yas-minor-mode-map [tab] nil) + ;; (define-key yas-minor-mode-map (kbd "TAB") nil) + + ;; (define-key yas-keymap [tab] 'tab-complete-or-next-field) + ;; (define-key yas-keymap (kbd "TAB") 'tab-complete-or-next-field) + ;; (define-key yas-keymap [(control tab)] 'yas-next-field) + ;; (define-key yas-keymap (kbd "C-g") 'abort-company-or-yas) +#+END_SRC + * Libs #+BEGIN_SRC emacs-lisp :tangle yes :results silent (use-package s @@ -1759,16 +1899,25 @@ 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)) + + ;; objective c + (add-to-list 'auto-mode-alist '("\\.mm\\'" . objc-mode)) #+END_SRC *** irony @@ -1808,8 +1957,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 +1982,42 @@ 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))) + ;; (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 '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 + *** 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 () @@ -1848,25 +2031,6 @@ irony-company (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 - :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 @@ -1901,6 +2065,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 +2659,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 +3105,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