X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=emacs.d%2Fconfig.org;h=cabe148735461b609a88c864dee42c0e455d9b8f;hb=76851aa71ae8130ac912be2cbc143ec12a1633c8;hp=84e80fd925b1ced9bdd68b023adccf1142b33102;hpb=2d6be42dad6be7123612f5d46a85c00bcefb1dab;p=dotfiles.git diff --git a/emacs.d/config.org b/emacs.d/config.org index 84e80fd..cabe148 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,13 @@ 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) + (add-hook 'dired-mode-hook 'hl-line-mode) #+END_SRC ** Smart Comments @@ -166,38 +169,91 @@ Check out [[http://tapoueh.org/emacs/el-get.html][el-get]]. #+END_SRC ** Font Setting - -syntax highlighting - +*** 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 - +*** [[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 - +Setting the fonts alignment issue #+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 + +*** Chinese fonts +Fix the font alignment issue when both Chinese and English hybird in org-mode table. Refer [[http://coldnew.github.io/blog/2013/11-16_d2f3a/][解決 org-mode 表格內中英文對齊的問題]] +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (defvar emacs-english-font "Source Code Pro" "The font name of English.") + + (defvar emacs-cjk-font "STHeiti" "The font name for CJK.") + + (defvar emacs-font-size-pair '(13 . 16) "Default font size pair for (english . chinese)") + + (defvar emacs-font-size-pair-list + '(( 5 . 6) (10 . 12) + (11 . 14) (12 . 14) + (13 . 16) (14 . 16) (15 . 18) (16 . 20) (17 . 20) + (18 . 22) (19 . 22) (20 . 24) (21 . 26) + (24 . 28) (26 . 32) (28 . 34) + (30 . 36) (34 . 40) (36 . 44)) + "This list is used to store matching (englis . chinese) font-size.") + + (defun font-exist-p (fontname) + "Test if this font is exist or not." + (if (or (not fontname) (string= fontname "")) + nil + (if (not (x-list-fonts fontname)) nil t))) + + (defun set-font (english chinese size-pair) + "Setup emacs English and Chinese font on x window-system." + (if (font-exist-p english) + (set-frame-font (format "%s:pixelsize=%d" english (car size-pair)) t)) + (if (font-exist-p chinese) + (dolist (charset '(han cjk-misc) ;; '(kana han symbol cjk-misc bopomofo) + ) + (set-fontset-font (frame-parameter nil 'font) charset + (font-spec :family chinese :size (cdr size-pair)))))) + + (defun emacs-step-font-size (step) + "Increase/Decrease emacs's font size." + (let ((scale-steps emacs-font-size-pair-list)) + (if (< step 0) (setq scale-steps (reverse scale-steps))) + (setq emacs-font-size-pair + (or (cadr (member emacs-font-size-pair scale-steps)) + emacs-font-size-pair)) + (when emacs-font-size-pair + (message "emacs font size set to %.1f" (car emacs-font-size-pair)) + (set-font emacs-english-font emacs-cjk-font emacs-font-size-pair)))) + + (defun increase-emacs-font-size () + "Decrease emacs's font-size acording emacs-font-size-pair-list." + (interactive) (emacs-step-font-size 1)) + + (defun decrease-emacs-font-size () + "Increase emacs's font-size acording emacs-font-size-pair-list." + (interactive) (emacs-step-font-size -1)) +#+END_SRC + +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + ;; Setup font size based on emacs-font-size-pair + (set-font emacs-english-font emacs-cjk-font '(13 . 16)) + + (global-set-key (kbd "s-=") 'increase-emacs-font-size) + (global-set-key (kbd "s--") 'decrease-emacs-font-size) #+END_SRC @@ -206,7 +262,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 +271,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)) @@ -343,13 +400,17 @@ Enable rainbow mode in emacs lisp mode #+END_SRC +** 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 . "") @@ -370,6 +431,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 +654,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 @@ -658,7 +720,15 @@ Always indents header, and hide header leading starts so that no need type =#+ST (setq org-confirm-babel-evaluate nil) (setq org-use-speed-commands t) (setq org-completion-use-ido t) - (setq org-startup-with-inline-images t)) + (setq org-startup-with-inline-images t) + ;; (setq org-emphasis-regexp-components + ;; ;; markup 记号前后允许中文 + ;; (list (concat " \t('\"{" "[:nonascii:]") + ;; (concat "- \t.,:!?;'\")}\\[" "[:nonascii:]") + ;; " \t\r\n,\"'" + ;; "." + ;; 1)) + ) (org-babel-do-load-languages 'org-babel-load-languages @@ -1209,9 +1279,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. @@ -1226,7 +1297,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 @@ -1241,9 +1311,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 +1524,47 @@ 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 + +** url-download +To download file in =elisp=, best is =url-copy-file=, here refer [[http://stackoverflow.com/questions/4448055/download-a-file-with-emacs-lisp][download-a-file-with-emacs-lisp]] using =url-retrieve-synchronously= wrapping +as a http download client tool +#+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 (read-directory-name "Save to (~/Downloads): " "~/Downloads" "~/Downloads" 'confirm' nil))) + (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 @@ -1482,7 +1604,8 @@ brew install the-silver-searcher (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 @@ -1552,6 +1675,7 @@ Disalble =ido= when new a directory or file in =dired= mode ;; call the function which you want to disable ido (mk-disable-ido 'dired-create-directory) (mk-disable-ido 'sd/dired-new-file) + (mk-disable-ido 'dired-goto-file) #+END_SRC ** Dired open with @@ -1638,14 +1762,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 @@ -1653,6 +1786,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,28 +2002,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 @@ -1798,17 +2042,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 @@ -1816,20 +2081,46 @@ 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 + +*** 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 () @@ -1843,32 +2134,57 @@ irony-company (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 -*** yasnippet +** Lua #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package yasnippet + (use-package lua-mode :ensure t) #+END_SRC -*** semantic +** 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 -*** google C style +#+RESULTS: +: 3 + +** Racket #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package google-c-style + (use-package racket-mode :ensure t :config - (add-hook 'c-mode-hook 'google-set-c-style)) -#+END_SRC + (define-key racket-mode-map (kbd "s-r") 'racket-run) + (add-to-list 'racket-mode-hook (lambda () (lispy-mode 1)))) -** Lua -#+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package lua-mode - :ensure t) + ;; 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 @@ -1888,6 +2204,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 @@ -1912,7 +2230,7 @@ Set the environments vairables in compilation mode (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 0;" @@ -1931,7 +2249,7 @@ Set the environments vairables in compilation mode (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 0;\n" @@ -2169,48 +2487,135 @@ See [[https://www.emacswiki.org/emacs/GnusWindowLayout][GnusWindowLayout]] ;; (gnus-group-select-group "INBOX"))) #+END_SRC -* Gnu Plot -Install =gnuplot= on Mac -#+BEGIN_SRC sh - brew install gnuplot --with-qt -#+END_SRC +* Mu4e +Refer [[http://www.kirang.in/2014/11/13/emacs-as-email-client-with-offlineimap-and-mu4e-on-osx][emacs-as-email-client-with-offlineimap-and-mu4e-on-osx]] -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 - :ensure - :init - (setq gnuplot-help-xpm nil) - (setq gnuplot-line-xpm nil) - (setq gnuplot-region-xpm nil) - (setq gnuplot-buffer-xpm nil) - (setq gnuplot-doc-xpm nil)) -#+END_SRC +** OfflineImap - download all mails from IMAP into local directory, and keep in sync +#+BEGIN_SRC sh :results output replace + # offline-imap + brew install offline-imap + + cp /usr/local/etc/offlineimap.conf ~/.offlineimapr -Use =gnuplot= on =Org-mode= file, see [[http://orgmode.org/worg/org-contrib/babel/languages/ob-doc-gnuplot.html][ob-doc-gnuplot]] -#+BEGIN_SRC gnuplot :exports code :file ./temp/file.png - reset + #For the =offlineimap= config on mac, using =sslcacertfile= instead of =cert_fingerpring=. On Mac + sslcacertfile = /usr/local/etc/openssl/cert.pem +#+END_SRC - set title "Putting it All Together" +#+BEGIN_SRC conf + [general] + ui=TTYUI + accounts = Gmail + autorefresh = 5 - set xlabel "X" - set xrange [-8:8] - set xtics -8,2,8 + [Account Gmail] + localrepository = Gmail-Local + remoterepository = Gmail-Remote + [Repository Gmail-Local] + type = Maildir + localfolders = ~/.Mail/seudut@gmail.com - set ylabel "Y" - set yrange [-20:70] - set ytics -20,10,70 + [Repository Gmail-Remote] + type = Gmail + remotehost = imap.gmail.com + remoteuser = seudut@gmail.com + remotepass = xxxxxxxx + realdelete = no + ssl = yes + #cert_fingerprint = + sslcacertfile = /usr/local/etc/openssl/cert.pem + maxconnections = 1 + folderfilter = lambda folder: folder not in ['[Gmail]/Trash', + '[Gmail]/Spam', + '[Gmail]/All Mail', + ] +#+END_SRC - f(x) = x**2 - g(x) = x**3 - h(x) = 10*sqrt(abs(x)) +Then, run =offlineimap= to sync the mail - plot f(x) w lp lw 1, g(x) w p lw 2, h(x) w l lw 3 +** Mu - fast search, view mails and extract attachments. +#+BEGIN_SRC sh + EMACS=/usr/local/bin/emacs brew install mu --with-emacs +#+END_SRC + +Then, run =mu index --maildir=~/.Mail= + +** Mu4e - Emacs frontend of Mu +config from [[http://www.kirang.in/2014/11/13/emacs-as-email-client-with-offlineimap-and-mu4e-on-osx/][emacs-as-email-client-with-offlineimap-and-mu4e-on-osx]] +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (require 'mu4e) + (setq mu4e-maildir "~/.Mail") + (setq mu4e-drafts-folder "/[Gmail].Drafts") + (setq mu4e-sent-folder "/[Gmail].Sent Mail") + ;; don't save message to Sent Messages, Gmail/IMAP takes care of this + (setq mu4e-sent-messages-behavior 'delete) + ;; allow for updating mail using 'U' in the main view: + (setq mu4e-get-mail-command "offlineimap") + + ;; shortcuts + (setq mu4e-maildir-shortcuts + '( ("/INBOX" . ?i) + ("/[Gmail].Sent Mail" . ?s))) + + ;; something about ourselves + (setq + user-mail-address "seudut@gmail.com" + user-full-name "Peng Li" + mu4e-compose-signature + (concat + "Thanks,\n" + "Peng\n")) + + ;; show images + (setq mu4e-show-images t) + + ;; use imagemagick, if available + (when (fboundp 'imagemagick-register-types) + (imagemagick-register-types)) + + ;; convert html emails properly + ;; Possible options: + ;; - html2text -utf8 -width 72 + ;; - textutil -stdin -format html -convert txt -stdout + ;; - html2markdown | grep -v ' _place_holder;' (Requires html2text pypi) + ;; - w3m -dump -cols 80 -T text/html + ;; - view in browser (provided below) + (setq mu4e-html2text-command "textutil -stdin -format html -convert txt -stdout") + + ;; spell check + (add-hook 'mu4e-compose-mode-hook + (defun my-do-compose-stuff () + "My settings for message composition." + (set-fill-column 72) + (flyspell-mode))) + + ;; add option to view html message in a browser + ;; `aV` in view to activate + (add-to-list 'mu4e-view-actions + '("ViewInBrowser" . mu4e-action-view-in-browser) t) + + ;; fetch mail every 10 mins + (setq mu4e-update-interval 600) + + ;; mu4e view + (setq-default mu4e-headers-fields '((:flags . 6) + (:from-or-to . 22) + (:mailing-list . 20) + (:thread-subject . 70) + (:human-date . 16))) +#+END_SRC + +** Smtp - send mail +- =gnutls=, depends on =gnutls=, first confirm this is installed, otherwise, =brew install gnutls= +- =~/.authinfo= +#+BEGIN_SRC fundamental + machine smtp.gmail.com login password +#+END_SRC +- OPTIONAL, encrypt the =~/.authinfo= file +#+BEGIN_SRC sh :results output replace + gpg --output ~/.authinfo.gpg --symmetric ~/.authinfo #+END_SRC -#+RESULTS: -[[file:./temp/file.png]] * Ediff #+BEGIN_SRC emacs-lisp :tangle yes :results silent (with-eval-after-load 'ediff @@ -2222,7 +2627,7 @@ Use =gnuplot= on =Org-mode= file, see [[http://orgmode.org/worg/org-contrib/babe #+END_SRC * Entertainment -** GnoGo +** GnuGo Play Go in Emacs, gnugo xpm refert [[https://github.com/okanotor/dotemacs/blob/f95b774cb292d1169748bc0a62ba647bbd8c0652/etc/my-inits/my-inits-gnugo.el][to here]]. start at image display mode and grid mode #+BEGIN_SRC emacs-lisp :tangle yes :results silent (use-package gnugo @@ -2347,8 +2752,8 @@ Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g= (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) + ;; (global-set-key (kbd "s-=") 'text-scale-increase) + ;; (global-set-key (kbd "s--") 'text-scale-decrease) ;; (global-set-key (kbd "s-u") 'undo-tree-visualize) @@ -2480,6 +2885,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) @@ -2633,6 +3039,11 @@ Search, replace and hightlight will in later paragraph #+BEGIN_SRC emacs-lisp :tangle yes :results silent (global-set-key (kbd "M-i") #'counsel-imenu) ;; (global-set-key (kbd "M-i") #'imenu) + + ;; define M-[ as C-M-a + ;; http://ergoemacs.org/emacs/emacs_key-translation-map.html + (define-key key-translation-map (kbd "M-[") (kbd "C-M-a")) + (define-key key-translation-map (kbd "M-]") (kbd "C-M-e")) #+END_SRC *** Go-to line @@ -2925,6 +3336,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