X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=emacs.d%2Fconfig.org;h=8bb6d51e8fb8236ab14d04d19b69e8c981b664bf;hb=e04c0fcc7bd57fb36ced8539e56db4ab652ff468;hp=cca09e91843d6d462ed9f1fb0a141b59839ce99b;hpb=ee7faeb4ebc9a906020a8e9578f3da579a97536d;p=dotfiles.git diff --git a/emacs.d/config.org b/emacs.d/config.org index cca09e9..8bb6d51 100644 --- a/emacs.d/config.org +++ b/emacs.d/config.org @@ -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 @@ -55,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 @@ -108,8 +103,12 @@ 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 -* Package Management Tools +*** 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 #+BEGIN_SRC emacs-lisp :tangle yes :results silent @@ -136,14 +135,25 @@ Check out [[http://tapoueh.org/emacs/el-get.html][el-get]]. :ensure t) #+END_SRC -* Color and Fonts Settings - -** highlight current line - +* 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)))) + - (global-hl-line-mode) + ;; (setq-default indicate-empty-lines t) +#+END_SRC +* Color and Fonts Settings +** highlight current line +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + ;; (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) + (add-hook 'dired-mode-hook 'hl-line-mode) #+END_SRC ** Smart Comments @@ -159,39 +169,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 @@ -199,7 +199,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 @@ -209,7 +208,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)) @@ -336,14 +337,17 @@ Enable rainbow mode in emacs lisp mode #+END_SRC -* Mode-line +** cusor color +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (set-cursor-color 'red) +#+END_SRC +* Mode-line ** clean mode line 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 . " α") - (yas/minor-mode . " υ") (paredit-mode . " π") (eldoc-mode . "") (abbrev-mode . "") @@ -362,7 +366,9 @@ clean mode line, Refer to [[https://www.masteringemacs.org/article/hiding-replac (org-indent-mode . "") ;; default is Fly (flyspell-mode . "") - (irony-mode . "I") + (irony-mode . "") + (page-break-lines-mode . "") + (yas-minor-mode . "y") ;; Major modes (lisp-interaction-mode . "λ") (hi-lock-mode . "") @@ -585,8 +591,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 @@ -638,11 +644,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 @@ -653,7 +656,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 @@ -664,6 +668,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) @@ -684,12 +689,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 @@ -705,34 +712,21 @@ 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 :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 - 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) @@ -740,9 +734,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 @@ -752,12 +744,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)") @@ -905,6 +894,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 @@ -985,19 +976,19 @@ 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")) - (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 + '("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 @@ -1068,7 +1059,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) @@ -1079,20 +1070,26 @@ 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 @@ -1105,9 +1102,7 @@ Toggle an eshell in split window below, refer [[http://www.howardism.org/Technic (exec-path-from-shell-initialize)) #+END_SRC -** TODO smart display * Misc Settings - ** [[https://github.com/abo-abo/hydra][Hydra]] *** hydra install #+BEGIN_SRC emacs-lisp :tangle yes :results silent @@ -1213,9 +1208,10 @@ Fix the font size of line number I like [[https://github.com/coldnew/linum-relative][linum-relative]], just like the =set relativenumber= on =vim= #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package linum-relative :ensure t + :init + (setq linum-relative-current-symbol "") :config (defun linum-new-mode () "If line numbers aren't displayed, then display them. @@ -1230,7 +1226,6 @@ I like [[https://github.com/coldnew/linum-relative][linum-relative]], just like ;; auto enable linum-new-mode in programming modes (add-hook 'prog-mode-hook 'linum-relative-mode) - #+END_SRC ** Save File Position @@ -1245,68 +1240,61 @@ 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 - [[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 @@ -1318,15 +1306,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 @@ -1340,9 +1352,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 () @@ -1364,15 +1373,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) @@ -1419,6 +1419,80 @@ 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 + +** 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 + +** url-download +Refer [[http://stackoverflow.com/questions/4448055/download-a-file-with-emacs-lisp][download-a-file-with-emacs-lisp]] +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (defun sd/download-file (&optional url download-dir download-name) + (interactive) + (let ((url (or url + (read-string "Enter download URL: "))) + (download-dir (or (read-string "Save to (~/Downloads): ") "~/Downloads"))) + (let ((download-buffer (url-retrieve-synchronously url))) + (save-excursion + (set-buffer download-buffer) + ;; we may have to trim the http response + (goto-char (point-min)) + (re-search-forward "^$" nil 'move) + (forward-char) + (delete-region (point-min) (point)) + (write-file (concat (or download-dir + "~/Downloads/") + (or download-name + (car (last (split-string url "/" t)))))))))) +#+END_SRC + * Dired ** Dired bindings =C-o= is defined as a global key for window operation, here unset it in dired mode @@ -1458,7 +1532,8 @@ Color for Man-mode (define-key dired-mode-map (kbd "TAB") 'diredp-next-subdir) (define-key dired-mode-map (kbd "K") 'diredp-prev-subdir) (define-key dired-mode-map (kbd "O") 'dired-display-file) - (define-key dired-mode-map (kbd "I") 'other-window)) + (define-key dired-mode-map (kbd "I") 'other-window) + (define-key dired-mode-map (kbd "o") 'other-window)) (use-package dired :config @@ -1479,7 +1554,7 @@ Color for Man-mode (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" @@ -1614,14 +1689,23 @@ 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 - (global-company-mode)) + (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) + (setq company-global-modes '(not org-mode))) (use-package company-statistics :ensure t @@ -1629,6 +1713,122 @@ 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 + :ensure t) +#+END_SRC + * Programming Language ** Emacs Lisp #+BEGIN_SRC emacs-lisp :tangle yes :results silent @@ -1729,28 +1929,29 @@ 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) -#+END_SRC + ;; "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)) -*** 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)) + ;; objective c + (add-to-list 'auto-mode-alist '("\\.mm\\'" . objc-mode)) #+END_SRC +*** irony +**** 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 @@ -1768,17 +1969,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 @@ -1786,22 +2008,112 @@ 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 '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 -*** yasnippet +*** flycheck #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package yasnippet + (use-package flycheck + :ensure t) +#+END_SRC + +*** gtags +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package ggtags + :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 () + (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 + +*** 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)) +#+END_SRC + +** Lua +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package lua-mode :ensure t) #+END_SRC +** Scheme +Install =guile=, =guile= is an implementation of =Scheme= programming language. +#+BEGIN_SRC sh + brew install guile +#+END_SRC + +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (setq geiser-scheme-implementation 'guile) +#+END_SRC + +#+BEGIN_SRC scheme + (define a "3") + a +#+END_SRC + +#+RESULTS: +: 3 + +** Racket +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package racket-mode + :ensure t + :config + (define-key racket-mode-map (kbd "s-r") 'racket-run) + (add-to-list 'racket-mode-hook (lambda () (lispy-mode 1)))) + + ;; set racket path + (setenv "PATH" (concat (getenv "PATH") + ":" "/Applications/Racket v6.6/bin")) + (setenv "MANPATH" (concat (getenv "MANPATH") + ":" "/Applications/Racket v6.6/man")) + (setq exec-path (append exec-path '("/Applications/Racket v6.6/bin"))) + + (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 @@ -1819,6 +2131,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 @@ -1831,22 +2145,22 @@ 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 " \n - "#include \"" + "//#include \"" (file-name-sans-extension (file-name-nondirectory (buffer-file-name))) ".hpp\"" \n \n "using namespace std;" \n \n - "int main ()" + "int main (int argc, char *argv[])" "\n{" \n > _ \n - "return 1;" + "return 0;" "\n}" > \n ))) @@ -1858,16 +2172,21 @@ Set the environments vairables in compilation mode " * " (file-name-nondirectory (buffer-file-name)) "\n" " */" > \n \n "#include " \n - "#include \"" + "//#include \"" (file-name-sans-extension (file-name-nondirectory (buffer-file-name))) ".h\"" \n \n - "int main ()\n" + "int main (int argc, char *argv[])\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 @@ -2096,6 +2415,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 @@ -2230,10 +2554,10 @@ 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))) - (defun sd/change-default-directory (buffer dir) - "change defafult directory of buffer to dir" - (with-current-buffer buffer - (cd dir))) + ;; (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 () @@ -2242,7 +2566,11 @@ Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g= (dolist (buffer (buffer-list)) (if (string-match (concat "scratch.*" (projectile-project-name)) (buffer-name buffer)) - (sd/change-default-directory buffer (projectile-project-root))))) + (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 @@ -2347,15 +2675,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) @@ -2366,33 +2697,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) - ("e" eshell 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") @@ -2833,69 +3171,26 @@ 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= - +** =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 - (font-lock-add-keywords 'perl-mode '(("\\(|\\w+?\\(,\\w+?\\)?|\\)" 1 'py-builtins-face))) -#+END_SRC - -* TODO jump last change point -* TODO emms mode-line + (defun sd/kill-region-or-backward-kill-word () + (interactive) + (if (region-active-p) + (kill-region (point) (mark)) + (backward-kill-word 1))) -* =C-u C-h a= search funtions -=apropos-command= + (global-set-key (kbd "C-w") 'sd/kill-region-or-backward-kill-word) +#+END_SRC * 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