(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
#+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
#+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
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
: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))
#+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 . "")
(flyspell-mode . "")
(irony-mode . "")
(page-break-lines-mode . "")
+ (yas-minor-mode . "y")
;; Major modes
(lisp-interaction-mode . "λ")
(hi-lock-mode . "")
(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
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.
;; auto enable linum-new-mode in programming modes
(add-hook 'prog-mode-hook 'linum-relative-mode)
-
#+END_SRC
** Save File Position
#+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
: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
(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
;; 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
#+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
(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
#+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
(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
(use-package company-c-headers
:ensure t
- :init
+ :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
+ ;; (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 ()
(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
: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
(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
(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;"
(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"
;; (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
-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
+ cp /usr/local/etc/offlineimap.conf ~/.offlineimapr
- set title "Putting it All Together"
+ #For the =offlineimap= config on mac, using =sslcacertfile= instead of =cert_fingerpring=. On Mac
+ sslcacertfile = /usr/local/etc/openssl/cert.pem
+#+END_SRC
- set xlabel "X"
- set xrange [-8:8]
- set xtics -8,2,8
+#+BEGIN_SRC conf
+ [general]
+ ui=TTYUI
+ accounts = Gmail
+ autorefresh = 5
+ [Account Gmail]
+ localrepository = Gmail-Local
+ remoterepository = Gmail-Remote
- set ylabel "Y"
- set yrange [-20:70]
- set ytics -20,10,70
+ [Repository Gmail-Local]
+ type = Maildir
+ localfolders = ~/.Mail/seudut@gmail.com
- f(x) = x**2
- g(x) = x**3
- h(x) = 10*sqrt(abs(x))
+ [Repository Gmail-Remote]
+ type = Gmail
+ remotehost = imap.gmail.com
+ remoteuser = seudut@gmail.com
+ remotepass = xxxxxxxx
+ realdelete = no
+ ssl = yes
+ #cert_fingerprint = <insert gmail server fingerprint here>
+ sslcacertfile = /usr/local/etc/openssl/cert.pem
+ maxconnections = 1
+ folderfilter = lambda folder: folder not in ['[Gmail]/Trash',
+ '[Gmail]/Spam',
+ '[Gmail]/All Mail',
+ ]
+#+END_SRC
- plot f(x) w lp lw 1, g(x) w p lw 2, h(x) w l lw 3
+Then, run =offlineimap= to sync the mail
+
+** 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 <gmail username> password <gmail 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
#+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
;; 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
;; ("C-i" other-window nil :exit t)
("C-b" ido-switch-buffer nil :exit t)
;; 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)
;; quit
("q" nil "cancel")
("<ESC>" nil)
- ("C-h" nil nil :exit t)
- ("C-j" nil nil :exit t)
- ;; ("C-k" nil :exit t)
- ("C-l" nil nil :exit t)
+ ("C-h" windmove-left nil :exit t)
+ ("C-j" windmove-down nil :exit t)
+ ("C-k" windmove-up :exit t)
+ ("C-l" windmove-right nil :exit t)
("C-;" nil nil :exit t)
("n" nil nil :exit t)
("[" nil nil :exit t)
#+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
#+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