Most config are just copied from [[https://github.com/howardabrams/dot-files][howardabrams]]'s and [[https://github.com/abo-abo/oremacs][abo-abo's]] dotfiles
* Basic Settings
-
** Setting loading Path
Set system PATH and emacs exec path
#+END_SRC
-** Window Setting
-
-Disable scroll bar, tool-bar and menu-bar
-
+** General Setting
+*** scroll bar, tool-bar and menu-bar
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(scroll-bar-mode 0)
(tool-bar-mode 0)
(setq make-backup-files nil)
#+END_SRC
-set custom file
-
+*** Custom file
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(setq custom-file "~/.emacs.d/custom.el")
(if (file-exists-p custom-file)
(load custom-file))
-
#+END_SRC
-Switch the focus to help window when it appears
-
+*** Switch the focus to help window when it appears
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(setq help-window-select t)
-
-#+END_SRC
-
-Setting scroll right/left
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- ; (global-set-key (kbd "C-,") 'scoll-left)
- ; (global-set-key (kbd "C-.") 'scoll-right)
#+END_SRC
-Set default window size
+*** Set default window size
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(setq initial-frame-alist
'((width . 120)
(height . 50)))
+
+ ;; (setq-default indicate-empty-lines t)
#+END_SRC
-Stop auto save
+*** Stop auto save
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(setq auto-save-default nil)
;; (desktop-save-mode t)
#+END_SRC
+*** Save minibuffer history
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (savehist-mode 1)
+ (setq history-length 1000)
+#+END_SRC
+
+*** temp folder
+Make a temp directory for all cache/history files
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (defconst sd-temp-directory
+ (file-name-as-directory "~/.emacs.d/temp"))
+
+ (unless (file-exists-p sd-temp-directory)
+ (mkdir sd-temp-directory))
+#+END_SRC
+
* Package Management Tools
** Use-package
(powerline-raw "%3c" face1 'r)
(funcall separator-right face1 my-face1)
;; (powerline-raw " " my-face1)
- (powerline-raw (format-time-string " %I:%M %p ") my-face1 'r)
+ (powerline-raw (format-time-string " %I:%M %p ") my-face1 'r)
;; (powerline-raw "%6p" my-face1 'r)
;; (powerline-hud my-face1 face1 )
))
set height in mode line
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (custom-set-variables
- '(powerline-height 14)
- '(powerline-text-scale-factor (/ (float 100) 140)))
+ (set-variable 'powerline-height 14)
+ (set-variable 'powerline-text-scale-factor (/ (float 100) 140))
+ ;; (custom-set-variables
+ ;; '(powerline-height 14)
+ ;; '(powerline-text-scale-factor (/ (float 100) 140)))
;; 100/140;0.8
(set-face-attribute 'mode-line nil :height 100)
#+END_SRC
* IDO & SMEX
-
** IDO
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(use-package ido
:ensure t
:init (setq ido-enable-flex-matching t
ido-ignore-extensions t
ido-use-virtual-buffers t
ido-everywhere t)
+ (setq ido-save-directory-list-file (concat sd-temp-directory "ido.last"))
:config
(ido-mode 1)
(ido-everywhere 1)
(add-to-list 'completion-ignored-extensions ".pyc"))
(icomplete-mode t)
-
#+END_SRC
** FLX
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(use-package flx-ido
:ensure t
:init (setq ido-enable-flex-matching t
ido-use-faces nil)
:config (flx-ido-mode 1))
-
#+END_SRC
** IDO-vertically
#+END_SRC
** SMEX
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(use-package smex
:ensure t
- :init (smex-initialize)
+ :init
+ (smex-initialize)
+ (setq smex-save-file (concat sd-temp-directory "smex-items"))
:bind
("M-x" . smex)
("M-X" . smex-major-mode-commands))
-
#+END_SRC
** Ido-ubiquitous
-
Use [[https://github.com/DarwinAwardWinner/ido-ubiquitous][ido-ubiquitous]] for ido everywhere. It makes =describe-function= can also use ido
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(use-package ido-ubiquitous
:ensure t
:init
(setq gnus-completing-read-function 'gnus-ido-completing-read)
:config
(ido-ubiquitous-mode 1))
-
#+END_SRC
** Ido-exit-target
ido-file-dir-completion-map)))
#+END_SRC
-* Normal Text Operation
-** Edit
-*** undo-tree
+** Counsel
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (use-package undo-tree
+ (use-package counsel
:ensure t
- :config
- (define-key undo-tree-visualizer-mode-map "j" 'undo-tree-visualize-redo)
- (define-key undo-tree-visualizer-mode-map "k" 'undo-tree-visualize-undo)
- (define-key undo-tree-visualizer-mode-map "h" 'undo-tree-visualize-switch-branch-left)
- (define-key undo-tree-visualizer-mode-map "l" 'undo-tree-visualize-switch-branch-right)
- (global-undo-tree-mode 1))
-
- (global-set-key (kbd "s-u") 'undo-tree-visualize)
-#+END_SRC
-
-*** flyspell
-Stolen from [[https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-spelling.el][here]], hunspell will search dictionary in =DICPATH=
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (setenv "DICPATH" "/usr/local/share/hunspell")
-
- (when (executable-find "hunspell")
- (setq-default ispell-program-name "hunspell")
- (setq ispell-really-hunspell t))
+ :defer t
+ :init
+ (global-set-key (kbd "M-x") 'counsel-M-x)
+ (global-set-key (kbd "C-h f") 'counsel-describe-function)
+ (global-set-key (kbd "C-h v") 'counsel-describe-variable))
- ;; (defun text-mode-hook-setup ()
- ;; ;; Turn off RUN-TOGETHER option when spell check text-mode
- ;; (setq-local ispell-extra-args (flyspell-detect-ispell-args)))
- ;; (add-hook 'text-mode-hook 'text-mode-hook-setup)
- ;; (add-hook 'text-mode-hook 'flyspell-mode)
+ ;; (global-set-key "\C-s" 'swiper)
+ ;; (global-set-key (kbd "C-c C-r") 'ivy-resume)
+ ;; (global-set-key (kbd "<f6>") 'ivy-resume)
+ ;; ;; (global-set-key (kbd "C-x C-f") 'counsel-find-file)
+ ;; (global-set-key (kbd "<f1> l") 'counsel-load-library)
+ ;; (global-set-key (kbd "<f2> i") 'counsel-info-lookup-symbol)
+ ;; (global-set-key (kbd "<f2> u") 'counsel-unicode-char)
+ ;; (global-set-key (kbd "C-c g") 'counsel-git)
+ ;; (global-set-key (kbd "C-c j") 'counsel-git-grep)
+ ;; (global-set-key (kbd "C-c k") 'counsel-ag)
+ ;; (global-set-key (kbd "C-x l") 'counsel-locate)
+ ;; (global-set-key (kbd "C-S-o") 'counsel-rhythmbox)
+ ;; ;; (define-key read-expression-map (kbd "C-r") 'counsel-expression-history)
- ;; enable flyspell check on comments and strings in progmamming modes
- ;; (add-hook 'prog-mode-hook 'flyspell-prog-mode)
+ ;; (set-face-attribute
+ ;; 'ivy-current-match nil
+ ;; :background "Orange"
+ ;; :foreground "black")
- ;; I don't use the default mappings
- (with-eval-after-load 'flyspell
- (define-key flyspell-mode-map (kbd "C-;") nil)
- (define-key flyspell-mode-map (kbd "C-,") nil)
- (define-key flyspell-mode-map (kbd "C-.") nil))
+ ;; ivy-resume
+ ;; (define-key swiper-map (kbd "M-%") 'swiper-aa-replace)
#+END_SRC
-Make flyspell enabled for org-mode, see [[http://emacs.stackexchange.com/questions/9333/how-does-one-use-flyspell-in-org-buffers-without-flyspell-triggering-on-tangled][here]]
+** helm
+let helm windows split inside current window
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- ;; NO spell check for embedded snippets
- (defadvice org-mode-flyspell-verify (after org-mode-flyspell-verify-hack activate)
- (let ((rlt ad-return-value)
- (begin-regexp "^[ \t]*#\\+begin_\\(src\\|html\\|latex\\)")
- (end-regexp "^[ \t]*#\\+end_\\(src\\|html\\|latex\\)")
- old-flag
- b e)
- (when ad-return-value
- (save-excursion
- (setq old-flag case-fold-search)
- (setq case-fold-search t)
- (setq b (re-search-backward begin-regexp nil t))
- (if b (setq e (re-search-forward end-regexp nil t)))
- (setq case-fold-search old-flag))
- (if (and b e (< (point) e)) (setq rlt nil)))
- (setq ad-return-value rlt)))
+ (with-eval-after-load 'helm
+ (setq helm-split-window-in-side-p t))
#+END_SRC
-*** Expand-region
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (use-package expand-region
- :ensure t
- :config
- (global-set-key (kbd "C-=") 'er/expand-region))
-#+END_SRC
+* Org-mode Settings
-** Motion
-*** Avy
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (use-package avy
- :ensure t
- :config
- (avy-setup-default))
-#+END_SRC
+** Org-mode Basic setting
+
+Always indents header, and hide header leading starts so that no need type =#+STATUP: indent=
-*** =M-g= prefix
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (global-set-key (kbd "M-g j") 'avy-goto-line-below)
- (global-set-key (kbd "M-g k") 'avy-goto-line-above)
- (global-set-key (kbd "M-g w") 'avy-goto-word-1-below)
- (global-set-key (kbd "M-g b") 'avy-goto-word-1-above)
- (global-set-key (kbd "M-g e") 'avy-goto-word-0)
- (global-set-key (kbd "M-g f") 'avy-goto-char-timer)
- (global-set-key (kbd "M-g c") 'avy-goto-char-in-line)
+ (use-package org
+ :ensure t
+ :init
+ (setq org-startup-indented t)
+ (setq org-hide-leading-starts t)
+ (setq org-src-fontify-natively t)
+ (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))
- ;; M-g TAB move-to-column
- ;; M-g ESC Prefix Command
- ;; M-g c goto-char
- ;; M-g g goto-line
- ;; M-g n next-error
- ;; M-g p previous-error
+ (org-babel-do-load-languages
+ 'org-babel-load-languages
+ '((python . t)
+ (C . t)
+ (perl . t)
+ (calc . t)
+ (latex . t)
+ (java . t)
+ (ruby . t)
+ (lisp . t)
+ (scheme . t)
+ (sh . t)
+ (sqlite . t)
+ (js . t)
+ (gnuplot . t)
+ (ditaa . t)))
- ;; M-g M-g goto-line
- ;; M-g M-n next-error
- ;; M-g M-p previous-error
-#+END_SRC
+ ;; use current window for org source buffer editting
+ (setq org-src-window-setup 'current-window )
+ (define-key org-mode-map (kbd "C-'") nil)
+ ;; C-M-i is mapped to imenu globally
+ (define-key org-mode-map (kbd "C-M-i") nil)
-** Search & highlight
-* Key bindings
+ ;; set the ditta.jar path
+ (setq org-ditaa-jar-path "/usr/local/Cellar/ditaa/0.9/libexec/ditaa0_9.jar")
+ (unless
+ (file-exists-p org-ditaa-jar-path)
+ (error "seudut: ditaa.jar not found at %s " org-ditaa-jar-path))
+#+END_SRC
-** Esc on Minibuffer
+** Org-bullets
-Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g=
+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
+ :init
+ (add-hook 'org-mode-hook
+ (lambda ()
+ (org-bullets-mode t))))
- (define-key minibuffer-local-map [escape] 'keyboard-escape-quit)
- (define-key minibuffer-local-map [escape] 'keyboard-escape-quit)
- (define-key minibuffer-local-ns-map [escape] 'keyboard-escape-quit)
- (define-key minibuffer-local-isearch-map [escape] 'keyboard-escape-quit)
- (define-key minibuffer-local-completion-map [escape] 'keyboard-escape-quit)
- (define-key minibuffer-local-must-match-map [escape] 'keyboard-escape-quit)
- (define-key minibuffer-local-must-match-filename-map [escape] 'keyboard-escape-quit)
- (define-key minibuffer-local-filename-completion-map [escape] 'keyboard-escape-quit)
- (define-key minibuffer-local-filename-must-match-map [escape] 'keyboard-escape-quit)
-
- ;; Also map s-h same as C-g
- (define-key minibuffer-local-map (kbd "s-h") 'keyboard-escape-quit)
+ (setq org-bullets-bullet-list '("⦿" "✪" "◉" "○" "►" "◆"))
+ ;; increase font size when enter org-src-mode
+ (add-hook 'org-src-mode-hook (lambda () (text-scale-increase 2)))
#+END_SRC
-** =Ctrl= key bindings
+** 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
- ;;
- ;; C-h help
- ;; C-j newline and indent
- ;; C-k kill line
- ;; C-l recenter-top-bottom
- ;; (global-set-key (kbd "C-;") 'ido-switch-buffer)
- ;; C-;
- ;; C-'
- ;; C-ret
+ (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)
+ )
+
+#+END_SRC
- ;; C-n next-line
- ;; C-m
- ;; C-,
- ;; C-.
- ;; C-/
+** Get Things Done
- ;; C-y
- ;; C-u
- ;; C-i
- ;; C-o
- ;; C-p
- ;; C-[
- ;; C-]
- ;; C-\
+Refer to [[http://doc.norang.ca/org-mode.html][Organize Your Life in Plain Text]]
+*** basic setup
- ;; C-=
- ;; C--
- ;; C-0
- ;; C-9
- ;; C-8
- ;; C-7
+standard key binding
- ;; C-Space
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (global-set-key "\C-cl" 'org-store-link)
+ (global-set-key "\C-ca" 'org-agenda)
+ (global-set-key "\C-cb" 'org-iswitchb)
#+END_SRC
-** =Super= bindings for file, buffer and windows
+*** Plain List
-Some global bindings on =Super=, on Mac, it is =Command=
+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
- (defun sd/delete-current-window ()
- (interactive)
- (if (> (length (window-list)) 1)
- (delete-window)
- (message "Only one Windows now!")))
+ ;; (use-package org-mode
+ ;; :init
+ ;; (font-lock-add-keywords 'org-mode
+ ;; '(("^ *\\([-+]\\) "
+ ;; (0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "•")))))))
+#+END_SRC
+
+*** Todo Keywords
- (global-set-key (kbd "s-h") 'keyboard-quit)
- (global-set-key (kbd "s-j") 'ido-switch-buffer)
- (global-set-key (kbd "s-k") 'ido-find-file)
- (global-set-key (kbd "s-l") 'sd/delete-current-window)
- ;; s-l --> goto-line
- ;; (global-set-key (kbd "s-/") 'swiper)
- ;; s-; -->
- ;; s-' --> 'next-multiframe-window
- (global-set-key (kbd "<s-return>") 'toggle-frame-fullscreen)
+refer to [[http://coldnew.github.io/coldnew-emacs/#orgheadline94][fancy todo states]],
- (global-set-key (kbd "s-f") 'projectile-find-file)
+To track TODO state changes, the =!= is to insert a timetamp, =@= is to insert a note with
+timestamp for the state change.
- (global-set-key (kbd "s-`") 'mode-line-other-buffer)
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ ;; (setq org-todo-keywords
+ ;; '((sequence "☛ TODO(t)" "|" "✔ DONE(d)")
+ ;; (sequence "⚑ WAITING(w)" "|")
+ ;; (sequence "|" "✘ CANCELLED(c)")))
+ ; (setq org-todo-keyword-faces
+ ; (quote ("TODO" . (:foreground "red" :weight bold))
+ ; ("NEXT" . (:foreground "blue" :weight bold))
+ ; ("WAITING" . (:foreground "forest green" :weight bold))
+ ; ("DONE" . (:foreground "magenta" :weight bold))
+ ; ("CANCELLED" . (:foreground "forest green" :weight bold))))
- (global-set-key (kbd "s-n") 'persp-next)
- (global-set-key (kbd "s-p") 'persp-prev)
- (global-set-key (kbd "s-=") 'text-scale-increase)
- (global-set-key (kbd "s--") 'text-scale-decrease)
+ (setq org-todo-keywords
+ (quote ((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d!)")
+ ;; (sequence "WAITING(w@/!)" "HOLD(h@/!)" "|" "CANCELLED(c@/!)" "PHONE" "MEETING")
+ (sequence "WAITING(w@/!)" "HOLD(h@/!)" "|" "CANCELLED(c@/!)" ))))
- ;; (global-set-key (kbd "s-u") 'undo-tree-visualize)
+ (setq org-todo-keyword-faces
+ (quote (("TODO" :foreground "red" :weight bold)
+ ("NEXT" :foreground "blue" :weight bold)
+ ("DONE" :foreground "forest green" :weight bold)
+ ("WAITING" :foreground "orange" :weight bold)
+ ("HOLD" :foreground "magenta" :weight bold)
+ ("CANCELLED" :foreground "forest green" :weight bold)
+ ;; ("MEETING" :foreground "forest green" :weight bold)
+ ;; ("PHONE" :foreground "forest green" :weight bold)
+ )))
+#+END_SRC
+Fast todo selections
- ;; someothers default mapping on super (command) key
- ;; s-s save-buffer
- ;; s-k kill-this-buffer
-
-
- ;; s-h --> ns-do-hide-emacs
- ;; s-j --> ido-switch-buffer +
- ;; s-k --> kill-this-buffer
- ;; s-l --> goto-line
- ;; s-; --> undefined
- ;; s-' --> next-multiframe-window
- ;; s-ret --> toggle-frame-fullscreen +
-
- ;; s-y --> ns-paste-secondary
- ;; s-u --> revert-buffer
- ;; s-i --> undefined - but used for iterm globally
- ;; s-o --> used for emacs globally
- ;; s-p --> projectile-persp-switch-project +
- ;; s-[ --> next-buffer +
- ;; s-] --> previous-buffer +
-
- ;; s-0 --> undefined
- ;; s-9 --> undefined
- ;; s-8 --> undefined
- ;; s-7 --> undefined
- ;; s-6 --> undefined
- ;; s-- --> center-line
- ;; s-= --> undefined
-
- ;; s-n --> make-frame
- ;; s-m --> iconify-frame
- ;; s-b --> undefined
- ;; s-, --> customize
- ;; s-. --> undefined
- ;; s-/ --> undefined
-
- ;; s-g --> isearch-repeat-forward
- ;; s-f --> projectile-find-file +
- ;; s-d --> isearch-repeat-background
- ;; s-s --> save-buffer
- ;; s-a --> make-whole-buffer
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (setq org-use-fast-todo-selection t)
+ (setq org-treat-S-cursor-todo-selection-as-state-change nil)
+#+END_SRC
- ;; s-b --> undefined
- ;; s-v --> yank
- ;; s-c --> ns-copy-including-secondary
+TODO state triggers and tags, [[http://doc.norang.ca/org-mode.html][Organize Your Life in Plain Text]]
- ;; s-t --> ns-popup-font-panel
- ;; s-r --> undefined
- ;; s-e --> isearch-yanqk-kill
- ;; s-w --> delete-frame
- ;; s-q --> same-buffers-kill-emacs
+- Moving a task to =CANCELLED=, adds a =CANCELLED= tag
+- Moving a task to =WAITING=, adds a =WAITING= tag
+- Moving a task to =HOLD=, add =HOLD= tags
+- Moving a task to =DONE=, remove =WAITING=, =HOLD= tag
+- Moving a task to =NEXT=, remove all waiting/hold/cancelled tags
- ;; s-` --> other-frame
+This tags are used to filter tasks in agenda views
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (setq org-todo-state-tags-triggers
+ (quote (("CANCELLED" ("CANCELLED" . t))
+ ("WAITING" ("WAITING" . t))
+ ("HOLD" ("WAITING") ("HOLD" . t))
+ (done ("WAITING") ("HOLD"))
+ ("TODO" ("WAITING") ("CANCELLED") ("HOLD"))
+ ("NEXT" ("WAITING") ("CANCELLED") ("HOLD"))
+ ("DONE" ("WAITING") ("CANCELLED") ("HOLD")))))
#+END_SRC
-** Search Replace and highlight
-*** Occur
-Occur search key bindings
+Logging Stuff
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (add-hook 'occur-hook (lambda ()
- (switch-to-buffer-other-window "*Occur*")
- (define-key occur-mode-map (kbd "C-o") nil)))
- ;; auto select occur window
-
- (define-key occur-mode-map (kbd "C-n")
- (lambda ()
- (interactive)
- (occur-next)
- (occur-mode-goto-occurrence-other-window)
- (recenter)
- (other-window 1)))
-
- (define-key occur-mode-map (kbd "C-p")
- (lambda ()
- (interactive)
- (occur-prev)
- (occur-mode-goto-occurrence-other-window)
- (recenter)
- (other-window 1)))
-
- (use-package color-moccur
- :ensure t
- :commands (isearch-moccur isearch-all)
- :init
- (setq isearch-lazy-highlight t)
- :config
- (use-package moccur-edit))
+ ;; log time when task done
+ ;; (setq org-log-done (quote time))
+ ;; save clocking into to LOGBOOK
+ (setq org-clock-into-drawer t)
+ ;; save state change notes and time stamp into LOGBOOK drawer
+ (setq org-log-into-drawer t)
+ (setq org-clock-into-drawer "CLOCK")
#+END_SRC
-*** swiper
+*** Tags
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (use-package swiper
- :ensure t)
+ (setq org-tag-alist (quote ((:startgroup)
+ ("@office" . ?e)
+ ("@home" . ?h)
+ (:endgroup)
+ ("WAITING" . ?w)
+ ("HOLD" . ?h)
+ ("CANCELLED" . ?c))))
- (ivy-mode 1)
- (setq ivy-use-virtual-buffers t)
- (global-set-key (kbd "s-/") 'swiper)
- ;;*
- ;; (global-set-key "\C-s" 'swiper)
- ;; (global-set-key (kbd "C-c C-r") 'ivy-resume)
- ;; (global-set-key (kbd "<f6>") 'ivy-resume)
- ;; ;; (global-set-key (kbd "M-x") 'counsel-M-x)
- ;; ;; (global-set-key (kbd "C-x C-f") 'counsel-find-file)
- ;; (global-set-key (kbd "<f1> f") 'counsel-describe-function)
- ;; (global-set-key (kbd "<f1> v") 'counsel-describe-variable)
- ;; (global-set-key (kbd "<f1> l") 'counsel-load-library)
- ;; (global-set-key (kbd "<f2> i") 'counsel-info-lookup-symbol)
- ;; (global-set-key (kbd "<f2> u") 'counsel-unicode-char)
- ;; (global-set-key (kbd "C-c g") 'counsel-git)
- ;; (global-set-key (kbd "C-c j") 'counsel-git-grep)
- ;; (global-set-key (kbd "C-c k") 'counsel-ag)
- ;; (global-set-key (kbd "C-x l") 'counsel-locate)
- ;; (global-set-key (kbd "C-S-o") 'counsel-rhythmbox)
- ;; ;; (define-key read-expression-map (kbd "C-r") 'counsel-expression-history)
+ ;; Allow setting single tags without the menu
+ (setq org-fast-tag-selection-single-key (quote expert))
#+END_SRC
-*** =M-s= prefix
-use the prefix =M-s= for searching in buffers
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (defun sd/make-keymap (key bindings)
- (setq keymap (make-sparse-keymap))
- (dolist (binding bindings)
- (define-key keymap (car binding) (cdr binding)))
- (global-set-key key keymap))
-
- (use-package highlight-symbol
- :ensure t)
+*** Capture - Refile - Archive
- (sd/make-keymap "\M-s"
- '(("w" . save-buffer)
- ;; ("\M-w" . save-buffer)
- ("e" . revert-buffer)
- ("s" . isearch-forward-regexp)
- ("\M-s" . isearch-forward-regexp)
- ("r" . isearch-backward-regexp)
- ("." . isearch-forward-symbol-at-point)
- ("o" . occur)
- ;; ("h" . highlight-symbol-at-point)
- ("h" . highlight-symbol)
- ("m" . highlight-regexp)
- ("l" . highlight-lines-matching-regexp)
- ("M" . unhighlight-regexp)
- ("f" . keyboard-quit)
- ("q" . keyboard-quit)))
+Capture lets you quickly store notes with little interruption of your work flow.
- ;; search and replace and highlight
- (define-key isearch-mode-map (kbd "M-s") 'isearch-repeat-forward)
- (define-key isearch-mode-map (kbd "M-r") 'isearch-repeat-backward)
- (global-set-key (kbd "s-[") 'highlight-symbol-next)
- (global-set-key (kbd "s-]") 'highlight-symbol-prev)
- (global-set-key (kbd "s-\\") 'highlight-symbol-query-replace)
+**** Capture Templates
+When a new taks needs to be added, categorize it as
- (define-key minibuffer-local-map "\M-s" nil)
+All captured file which need next actions are stored in =refile.org=,
+- A new task / note (t) =refile.org=
+- A work task in office =office.org=
+- A jourenl =diary.org=
+- A new habit (h) =refile.org=
- (set-face-background 'ido-first-match "yellow")
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (setq org-directory "~/org")
+ (setq org-default-notes-file "~/org/refile.org")
+ (setq sd/org-diary-file "~/org/diary.org")
- ;; M-s M-w eww-search-words
+ (global-set-key (kbd "C-c c") 'org-capture)
- ;; M-c
- ;; M-r
- ;; M-t
- ;; M-u,
+ (setq org-capture-templates
+ (quote (("t" "Todo" entry (file org-default-notes-file)
+ "* TODO %?\n:LOGBOOK:\n- Added: %U\t\tAt: %a\n:END:")
+ ("n" "Note" entry (file org-default-notes-file)
+ "* %? :NOTE:\n:LOGBOOK:\n- Added: %U\t\tAt: %a\n:END:")
+ ("j" "Journal" entry (file+datetree sd/org-diary-file)
+ "* %?\n:LOGBOOK:\n:END:" :clock-in t :clock-resume t)
+ ("h" "Habit" entry (file org-default-notes-file)
+ "* NEXT %?\n:LOGBOOK:\n%a\nSCHEDULED: %(format-time-string \"%<<%Y-%m-%d %a .+1d/3d>>\")\n:END:\n:PROPERTIES:\n:STYLE: habit\n:REPEAT_TO_STATE: NEXT\n:END:\n "))))
#+END_SRC
-** =M-o= as prefix key for windows
-
-** =M-g= as prefix key for launcher
-
-* Org-mode Settings
-
-** Org-mode Basic setting
-
-Always indents header, and hide header leading starts so that no need type =#+STATUP: indent=
+**** Refiling Tasks
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (use-package org
- :ensure t
- :init
- (setq org-startup-indented t)
- (setq org-hide-leading-starts t)
- (setq org-src-fontify-natively t)
- (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))
-
- (org-babel-do-load-languages
- 'org-babel-load-languages
- '((python . t)
- (C . t)
- (perl . t)
- (calc . t)
- (latex . t)
- (java . t)
- (ruby . t)
- (lisp . t)
- (scheme . t)
- (sh . t)
- (sqlite . t)
- (js . t)
- (gnuplot . t)
- (ditaa . t)))
+ (setq org-refile-targets (quote (;; (nil :maxlevel . 9)
+ (org-agenda-files :maxlevel . 9))))
- ;; use current window for org source buffer editting
- (setq org-src-window-setup 'current-window )
+ (setq org-refile-use-outline-path t)
- (define-key org-mode-map (kbd "C-'") nil)
+ (setq org-refile-allow-creating-parent-nodes (quote confirm))
#+END_SRC
-** Org-bullets
-
-use [[https://github.com/sabof/org-bullets][org-bullets]] package to show utf-8 charactes
-
+*** Agenda Setup
+Setting agenda files and the agenda view
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (use-package org-bullets
- :ensure t
- :init
- (add-hook 'org-mode-hook
- (lambda ()
- (org-bullets-mode t))))
-
- (setq org-bullets-bullet-list '("⦿" "✪" "◉" "○" "►" "◆"))
+ (setq org-agenda-files (quote ("~/org/gtd.org"
+ "~/org/work.org")))
- ;; increase font size when enter org-src-mode
- (add-hook 'org-src-mode-hook (lambda () (text-scale-increase 2)))
-#+END_SRC
+ ;; only show today's tasks in agenda view
+ (setq org-agenda-span 'day)
+ ;; Use current windows for agenda view
+ (setq org-agenda-window-setup 'current-window)
-** Worf Mode
+ ;; show all feature entries for repeating tasks,
+ ;; this is already setting by default
+ (setq org-agenda-repeating-timestamp-show-all t)
-[[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]]
+ ;; Show all agenda dates - even if they are empty
+ (setq org-agenda-show-all-dates t)
+#+END_SRC
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+** Export PDF
- (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)
- )
+Install MacTex-basic and some tex packages
-#+END_SRC
+#+BEGIN_SRC bash
-** Get Things Done
+ sudo tlmgr update --self
-Refer to [[http://doc.norang.ca/org-mode.html][Organize Your Life in Plain Text]]
-*** basic setup
+ 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
-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)
- (global-set-key "\C-cb" 'org-iswitchb)
-#+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
- ;; (font-lock-add-keywords 'org-mode
- ;; '(("^ *\\([-+]\\) "
- ;; (0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "•")))))))
-#+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)")
- ;; (sequence "⚑ WAITING(w)" "|")
- ;; (sequence "|" "✘ CANCELLED(c)")))
- ; (setq org-todo-keyword-faces
- ; (quote ("TODO" . (:foreground "red" :weight bold))
- ; ("NEXT" . (:foreground "blue" :weight bold))
- ; ("WAITING" . (:foreground "forest green" :weight bold))
- ; ("DONE" . (:foreground "magenta" :weight bold))
- ; ("CANCELLED" . (:foreground "forest green" :weight bold))))
-
-
- (setq org-todo-keywords
- (quote ((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d!)")
- ;; (sequence "WAITING(w@/!)" "HOLD(h@/!)" "|" "CANCELLED(c@/!)" "PHONE" "MEETING")
- (sequence "WAITING(w@/!)" "HOLD(h@/!)" "|" "CANCELLED(c@/!)" ))))
-
- (setq org-todo-keyword-faces
- (quote (("TODO" :foreground "red" :weight bold)
- ("NEXT" :foreground "blue" :weight bold)
- ("DONE" :foreground "forest green" :weight bold)
- ("WAITING" :foreground "orange" :weight bold)
- ("HOLD" :foreground "magenta" :weight bold)
- ("CANCELLED" :foreground "forest green" :weight bold)
- ;; ("MEETING" :foreground "forest green" :weight bold)
- ;; ("PHONE" :foreground "forest green" :weight bold)
- )))
-#+END_SRC
-
-Fast todo selections
-
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (setq org-use-fast-todo-selection t)
- (setq org-treat-S-cursor-todo-selection-as-state-change nil)
-#+END_SRC
-
-TODO state triggers and tags, [[http://doc.norang.ca/org-mode.html][Organize Your Life in Plain Text]]
-
-- Moving a task to =CANCELLED=, adds a =CANCELLED= tag
-- Moving a task to =WAITING=, adds a =WAITING= tag
-- Moving a task to =HOLD=, add =HOLD= tags
-- Moving a task to =DONE=, remove =WAITING=, =HOLD= tag
-- Moving a task to =NEXT=, remove all waiting/hold/cancelled tags
-
-This tags are used to filter tasks in agenda views
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (setq org-todo-state-tags-triggers
- (quote (("CANCELLED" ("CANCELLED" . t))
- ("WAITING" ("WAITING" . t))
- ("HOLD" ("WAITING") ("HOLD" . t))
- (done ("WAITING") ("HOLD"))
- ("TODO" ("WAITING") ("CANCELLED") ("HOLD"))
- ("NEXT" ("WAITING") ("CANCELLED") ("HOLD"))
- ("DONE" ("WAITING") ("CANCELLED") ("HOLD")))))
-#+END_SRC
-
-Logging Stuff
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- ;; log time when task done
- ;; (setq org-log-done (quote time))
- ;; save clocking into to LOGBOOK
- (setq org-clock-into-drawer t)
- ;; save state change notes and time stamp into LOGBOOK drawer
- (setq org-log-into-drawer t)
- (setq org-clock-into-drawer "CLOCK")
-#+END_SRC
-
-*** Tags
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (setq org-tag-alist (quote ((:startgroup)
- ("@office" . ?e)
- ("@home" . ?h)
- (:endgroup)
- ("WAITING" . ?w)
- ("HOLD" . ?h)
- ("CANCELLED" . ?c))))
-
- ;; Allow setting single tags without the menu
- (setq org-fast-tag-selection-single-key (quote expert))
-#+END_SRC
-
-*** Capture - Refile - Archive
-
-Capture lets you quickly store notes with little interruption of your work flow.
-
-**** Capture Templates
-
-When a new taks needs to be added, categorize it as
-
-All captured file which need next actions are stored in =refile.org=,
-- A new task / note (t) =refile.org=
-- A work task in office =office.org=
-- A jourenl =diary.org=
-- A new habit (h) =refile.org=
-
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (setq org-directory "~/org")
- (setq org-default-notes-file "~/org/refile.org")
- (setq sd/org-diary-file "~/org/diary.org")
-
- (global-set-key (kbd "C-c c") 'org-capture)
-
- (setq org-capture-templates
- (quote (("t" "Todo" entry (file org-default-notes-file)
- "* TODO %?\n:LOGBOOK:\n- Added: %U\t\tAt: %a\n:END:")
- ("n" "Note" entry (file org-default-notes-file)
- "* %? :NOTE:\n:LOGBOOK:\n- Added: %U\t\tAt: %a\n:END:")
- ("j" "Journal" entry (file+datetree sd/org-diary-file)
- "* %?\n:LOGBOOK:\n:END:" :clock-in t :clock-resume t)
- ("h" "Habit" entry (file org-default-notes-file)
- "* NEXT %?\n:LOGBOOK:\n%a\nSCHEDULED: %(format-time-string \"%<<%Y-%m-%d %a .+1d/3d>>\")\n:END:\n:PROPERTIES:\n:STYLE: habit\n:REPEAT_TO_STATE: NEXT\n:END:\n "))))
-#+END_SRC
-
-**** Refiling Tasks
-
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (setq org-refile-targets (quote (;; (nil :maxlevel . 9)
- (org-agenda-files :maxlevel . 9))))
-
- (setq org-refile-use-outline-path t)
-
- (setq org-refile-allow-creating-parent-nodes (quote confirm))
-#+END_SRC
-
-*** Agenda Setup
-Setting agenda files and the agenda view
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (setq org-agenda-files (quote ("~/org/gtd.org"
- "~/org/work.org")))
-
- ;; only show today's tasks in agenda view
- (setq org-agenda-span 'day)
- ;; Use current windows for agenda view
- (setq org-agenda-window-setup 'current-window)
-
- ;; show all feature entries for repeating tasks,
- ;; this is already setting by default
- (setq org-agenda-repeating-timestamp-show-all t)
-
- ;; Show all agenda dates - even if they are empty
- (setq org-agenda-show-all-dates t)
-#+END_SRC
-
-** Export PDF
-
-Install MacTex-basic and some tex packages
-
-#+BEGIN_SRC bash
-
- 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
-
-#+END_SRC
+#+END_SRC
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
;; ;; allow for export=>beamer by placing
(defalias 'ee 'find-files)
#+END_SRC
+*** eshell temp directory
+set default eshell history folder
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (setq eshell-directory-name (concat sd-temp-directory "eshell"))
+#+END_SRC
+
*** Eshell erase buffer
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(defun sd/eshell-clear-buffer ()
(select-window (sd/window-has-eshell)))
(progn
(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))
(insert (format "cd %s" dir))
(eshell-send-input)))))
- (global-unset-key (kbd "M-`"))
- (global-set-key (kbd "M-`") 'sd/toggle-eshell-here)
+ ;; (global-unset-key (kbd "M-`"))
+ (global-set-key (kbd "s-e") 'sd/toggle-eshell-here)
#+END_SRC
*** TODO smart display
(setq hydra-lv nil)
#+END_SRC
-*** Font Zoom
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (defhydra sd/font-zoom (global-map "<f2>")
- "zoom"
- ("g" text-scale-increase "in")
- ("l" text-scale-decrease "out"))
-#+END_SRC
-
*** Windmove Splitter
Refer [[https://github.com/abo-abo/hydra/blob/master/hydra-examples.el][hydra-example]], to enlarge or shrink the windows splitter
#+END_SRC
-*** hydra-window
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (winner-mode 1)
-
- (defhydra sd/hydra-window (:color red :columns nil)
- "window"
- ("h" windmove-left nil :exit t)
- ("j" windmove-down nil :exit t)
- ("k" windmove-up nil :exit t)
- ("l" windmove-right nil :exit t)
- ("H" hydra-move-splitter-left nil)
- ("J" hydra-move-splitter-down nil)
- ("K" hydra-move-splitter-up nil)
- ("L" hydra-move-splitter-right nil)
- ("v" (lambda ()
- (interactive)
- (split-window-right)
- (windmove-right))
- "vert" :exit t)
- ("x" (lambda ()
- (interactive)
- (split-window-below)
- (windmove-down))
- "horz" :exit t)
- ("o" delete-other-windows "one" :exit t)
- ("C-o" ido-switch-buffer "buf" :exit t)
- ("C-k" sd/delete-current-window "del" :exit t)
- ("'" 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)
- ("b" ido-switch-buffer "buf" :exit t)
- ("C-b" ido-switch-buffer "buf" :exit t)
- ;; ("m" headlong-bookmark-jump "bmk")
- ("q" nil "cancel")
- ("u" (progn (winner-undo) (setq this-command 'winner-undo)) "undo")
- ("r" (progn (winner-redo) (setq this-command 'winner-redo)) "redo")
- ("f" nil))
-
- (global-unset-key (kbd "C-o"))
- (global-set-key (kbd "C-o") 'sd/hydra-window/body)
-#+END_SRC
-
*** hydra misc
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(defhydra sd/hydra-misc (:color red :columns nil)
Enable linum mode on programming modes
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(add-hook 'prog-mode-hook 'linum-mode)
-
+ ;; (add-hook 'prog-mode-hook (lambda ()
+ ;; (setq-default indicate-empty-lines t)))
#+END_SRC
Fix the font size of line number
#+END_SRC
-** Projectile
-
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
- (use-package projectile
- :ensure t
- :init
- (setq projectile-enable-caching t)
- :config
- (projectile-global-mode t))
-
- (use-package persp-projectile
- :ensure t
- :config
- (persp-mode)
- :bind
- (:map projectile-mode-map
- ("s-t" . projectile-persp-switch-project)))
-
- ;; projectile-find-file
- ;; projectile-switch-buffer
- ;; projectile-find-file-other-window
-#+END_SRC
-
** Which key
[[https://github.com/justbur/emacs-which-key][which-key]] show the key bindings
#+END_SRC
** Emms
-
We can use [[https://www.gnu.org/software/emms/quickstart.html][Emms]] for multimedia in Emacs
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(use-package emms
:ensure t
:init
(setq emms-source-file-default-directory "~/Music/")
+ (setq emms-directory (concat sd-temp-directory "emms"))
:config
(emms-standard)
(emms-default-players)
".m4a" ".flv" ".ogv" ".pls"))
"mplayer" "-slave" "-quiet" "-really-quiet" "-fullscreen")
(emms-history-load))
-
#+END_SRC
** GnoGo
#+END_SRC
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (use-package markdown-preview-eww
- :ensure t)
+ (use-package markdown-preview-eww
+ :ensure t)
+#+END_SRC
+
+* Gnus
+** Gmail setting
+Refer [[https://www.emacswiki.org/emacs/GnusGmail][GnusGmail]]
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (setq user-mail-address "seudut@gmail.com"
+ user-full-name "Peng Li")
+
+ (setq gnus-select-method
+ '(nnimap "gmail"
+ (nnimap-address "imap.gmail.com")
+ (nnimap-server-port "imaps")
+ (nnimap-stream ssl)))
+
+ (setq smtpmail-smtp-service 587
+ gnus-ignored-newsgroups "^to\\.\\|^[0-9. ]+\\( \\|$\\)\\|^[\"]\"[#'()]")
+
+ ;; Use gmail sending mail
+ (setq message-send-mail-function 'smtpmail-send-it
+ smtpmail-starttls-credentials '(("smtp.gmail.com" 587 nil nil))
+ smtpmail-auth-credentials '(("smtp.gmail.com" 587 "seudut@gmail.com" nil))
+ smtpmail-default-smtp-server "smtp.gmail.com"
+ smtpmail-smtp-server "smtp.gmail.com"
+ smtpmail-smtp-service 587
+ starttls-use-gnutls t)
+#+END_SRC
+
+And put the following in =~/.authinfo= file, replacing =<USE>= with your email address
+and =<PASSWORD>= with the password
+#+BEGIN_EXAMPLE
+ machine imap.gmail.com login <USER> password <PASSWORD> port imaps
+ machine smtp.gmail.com login <USER> password <PASSWORD> port 587
+#+END_EXAMPLE
+
+Then Run =M-x gnus=
+
+** Group buffer
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package gnus
+ :init
+ (setq gnus-permanently-visible-groups "\.*")
+ :config
+ (cond (window-system
+ (setq custom-background-mode 'light)
+ (defface my-group-face-1
+ '((t (:foreground "Red" :bold t))) "First group face")
+ (defface my-group-face-2
+ '((t (:foreground "DarkSeaGreen4" :bold t)))
+ "Second group face")
+ (defface my-group-face-3
+ '((t (:foreground "Green4" :bold t))) "Third group face")
+ (defface my-group-face-4
+ '((t (:foreground "SteelBlue" :bold t))) "Fourth group face")
+ (defface my-group-face-5
+ '((t (:foreground "Blue" :bold t))) "Fifth group face")))
+ (setq gnus-group-highlight
+ '(((> unread 200) . my-group-face-1)
+ ((and (< level 3) (zerop unread)) . my-group-face-2)
+ ((< level 3) . my-group-face-3)
+ ((zerop unread) . my-group-face-4)
+ (t . my-group-face-5))))
+
+
+ ;; key-
+ (add-hook 'gnus-group-mode-hook (lambda ()
+ (define-key gnus-group-mode-map "k" 'gnus-group-prev-group)
+ (define-key gnus-group-mode-map "j" 'gnus-group-next-group)
+ (define-key gnus-group-mode-map "g" 'gnus-group-jump-to-group)
+ (define-key gnus-group-mode-map "v" (lambda () (interactive) (gnus-group-select-group t)))))
+#+END_SRC
+
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (setq gnus-fetch-old-headers 't)
+
+
+
+ (setq gnus-extract-address-components
+ 'mail-extract-address-components)
+ ;; summary buffer
+ (setq gnus-summary-line-format "%U%R%z%I%(%[%-20,20f%]%) %s%-80= %11&user-date;\n")
+ (setq gnus-user-date-format-alist '(((gnus-seconds-today) . "%H:%M")
+ ((+ 86400 (gnus-seconds-today)) . "%a %H:%M")
+ (604800 . "%a, %b %-d")
+ (15778476 . "%b %-d")
+ (t . "%Y-%m-%d")))
+
+ (setq gnus-thread-sort-functions '((not gnus-thread-sort-by-number)))
+ (setq gnus-unread-mark ?\.)
+ (setq gnus-use-correct-string-widths t)
+
+ ;; thread
+ (setq gnus-thread-hide-subtree t)
+
+ ;; (with-eval-after-load 'gnus-summary-mode
+ ;; (define-key gnus-summary-mode-map (kbd "C-o") 'sd/hydra-window/body))
+
+ (add-hook 'gnus-summary-mode-hook (lambda ()
+ (define-key gnus-summary-mode-map (kbd "C-o") nil)))
+
+
+#+END_SRC
+
+** Windows layout
+See [[https://www.emacswiki.org/emacs/GnusWindowLayout][GnusWindowLayout]]
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (gnus-add-configuration
+ '(summary
+ (horizontal 1.0
+ (vertical 35
+ (group 1.0))
+ (vertical 1.0
+ (summary 1.0 poine)))))
+
+ (gnus-add-configuration
+ '(article
+ (horizontal 1.0
+ (vertical 35
+ (group 1.0))
+ (vertical 1.0
+ (summary 0.50 point)
+ (article 1.0)))))
+
+ (with-eval-after-load 'gnus-group-mode
+ (gnus-group-select-group "INBOX"))
+ ;; (add-hook 'gnus-group-mode-map (lambda ()
+ ;; (gnus-group-select-group "INBOX")))
+#+END_SRC
+
+* Gnu Plot
+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
+
+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
+
+ set title "Putting it All Together"
+
+ set xlabel "X"
+ set xrange [-8:8]
+ set xtics -8,2,8
+
+
+ set ylabel "Y"
+ set yrange [-20:70]
+ set ytics -20,10,70
+
+ f(x) = x**2
+ g(x) = x**3
+ h(x) = 10*sqrt(abs(x))
+
+ plot f(x) w lp lw 1, g(x) w p lw 2, h(x) w l lw 3
+#+END_SRC
+
+#+RESULTS:
+[[file:./temp/file.png]]
+* Ediff
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (with-eval-after-load 'ediff
+ (setq ediff-split-window-function 'split-window-horizontally)
+ (setq ediff-window-setup-function 'ediff-setup-windows-plain)
+ (add-hook 'ediff-startup-hook 'ediff-toggle-wide-display)
+ (add-hook 'ediff-cleanup-hook 'ediff-toggle-wide-display)
+ (add-hook 'ediff-suspend-hook 'ediff-toggle-wide-display))
+#+END_SRC
+
+* Dictionary
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package bing-dict
+ :ensure t
+ :init
+ (global-set-key (kbd "s-d") 'bing-dict-brief)
+ :commands (bing-dict-brief))
+#+END_SRC
+
+* NEXT Key Bindings
+Here are some global key bindings for basic editting
+** Esc in minibuffer
+Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g=
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (define-key minibuffer-local-map [escape] 'keyboard-escape-quit)
+ (define-key minibuffer-local-map [escape] 'keyboard-escape-quit)
+ (define-key minibuffer-local-ns-map [escape] 'keyboard-escape-quit)
+ (define-key minibuffer-local-isearch-map [escape] 'keyboard-escape-quit)
+ (define-key minibuffer-local-completion-map [escape] 'keyboard-escape-quit)
+ (define-key minibuffer-local-must-match-map [escape] 'keyboard-escape-quit)
+ (define-key minibuffer-local-must-match-filename-map [escape] 'keyboard-escape-quit)
+ (define-key minibuffer-local-filename-completion-map [escape] 'keyboard-escape-quit)
+ (define-key minibuffer-local-filename-must-match-map [escape] 'keyboard-escape-quit)
+
+ ;; Also map s-h same as C-g
+ (define-key minibuffer-local-map (kbd "s-h") 'keyboard-escape-quit)
+#+END_SRC
+
+** Project operations - =super=
+*** Projectile
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package projectile
+ :ensure t
+ :init
+ (setq projectile-enable-caching t)
+ (setq projectile-cache-file (concat sd-temp-directory "projectile.cache"))
+ :config
+ (projectile-global-mode t))
+
+ (use-package persp-projectile
+ :ensure t
+ :config
+ (persp-mode)
+ :bind
+ (:map projectile-mode-map
+ ("s-t" . projectile-persp-switch-project)))
+
+ ;; projectile-find-file
+ ;; projectile-switch-buffer
+ ;; projectile-find-file-other-window
+#+END_SRC
+
+*** project config =super= keybindings
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ ;; (global-set-key (kbd "s-h") 'keyboard-quit)
+ ;; (global-set-key (kbd "s-j") 'ido-switch-buffer)
+ ;; (global-set-key (kbd "s-k") 'ido-find-file)
+ ;; (global-set-key (kbd "s-l") 'sd/delete-current-window)
+ ;; s-l --> goto-line
+ ;; (global-set-key (kbd "s-/") 'swiper)
+ ;; s-; -->
+ ;; s-' --> 'next-multiframe-window
+ (global-set-key (kbd "<s-return>") 'toggle-frame-fullscreen)
+
+ (global-set-key (kbd "s-f") 'projectile-find-file)
+ (global-set-key (kbd "s-`") 'mode-line-other-buffer)
+
+ (global-set-key (kbd "s-n") 'persp-next)
+ (global-set-key (kbd "s-p") 'persp-prev)
+
+ (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)
+
+
+ ;; someothers default mapping on super (command) key
+ ;; s-s save-buffer
+ ;; s-k kill-this-buffer
+
+
+ ;; s-h --> ns-do-hide-emacs
+ ;; s-j --> ido-switch-buffer +
+ ;; s-k --> kill-this-buffer
+ ;; s-l --> goto-line
+ ;; s-; --> undefined
+ ;; s-' --> next-multiframe-window
+ ;; s-ret --> toggle-frame-fullscreen +
+
+ ;; s-y --> ns-paste-secondary
+ ;; s-u --> revert-buffer
+ ;; s-i --> undefined - but used for iterm globally
+ ;; s-o --> used for emacs globally
+ ;; s-p --> projectile-persp-switch-project +
+ ;; s-[ --> next-buffer +
+ ;; s-] --> previous-buffer +
+
+ ;; s-0 --> undefined
+ ;; s-9 --> undefined
+ ;; s-8 --> undefined
+ ;; s-7 --> undefined
+ ;; s-6 --> undefined
+ ;; s-- --> center-line
+ ;; s-= --> undefined
+
+ ;; s-n --> make-frame
+ ;; s-m --> iconify-frame
+ ;; s-b --> undefined
+ ;; s-, --> customize
+ ;; s-. --> undefined
+ ;; s-/ --> undefined
+
+ ;; s-g --> isearch-repeat-forward
+ ;; s-f --> projectile-find-file +
+ ;; s-d --> isearch-repeat-background
+ ;; s-s --> save-buffer
+ ;; s-a --> make-whole-buffer
+
+ ;; s-b --> undefined
+ ;; s-v --> yank
+ ;; s-c --> ns-copy-including-secondary
+
+ ;; s-t --> ns-popup-font-panel
+ ;; s-r --> undefined
+ ;; s-e --> isearch-yanqk-kill
+ ;; s-w --> delete-frame
+ ;; s-q --> same-buffers-kill-emacs
+
+ ;; s-` --> other-frame
+#+END_SRC
+
+** Windown & Buffer - =C-o=
+Defind a =hydra= function for windows, buffer & bookmark operations. And map it to =C-o= globally.
+Most use =C-o C-o= to switch buffers; =C-o x, v= to split window; =C-o o= to delete other windows
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (winner-mode 1)
+
+ (defun sd/delete-current-window ()
+ (interactive)
+ (if (> (length (window-list)) 1)
+ (delete-window)
+ (message "Only one Windows now!")))
+
+ (defun sd/toggle-max-windows ()
+ "Set maximize current if there are multiple windows, if only
+ one window, window undo"
+ (interactive)
+ (if (equal (length (window-list)) 1)
+ (winner-undo)
+ (delete-other-windows)))
+
+ (defhydra sd/hydra-window (:color red :columns nil)
+ "window"
+ ("h" windmove-left nil :exit t)
+ ("j" windmove-down nil :exit t)
+ ("k" windmove-up nil :exit t)
+ ("l" windmove-right nil :exit t)
+ ("H" hydra-move-splitter-left nil)
+ ("J" hydra-move-splitter-down nil)
+ ("K" hydra-move-splitter-up nil)
+ ("L" hydra-move-splitter-right nil)
+ ("v" (lambda ()
+ (interactive)
+ (split-window-right)
+ (windmove-right))
+ "vert" :exit t)
+ ("x" (lambda ()
+ (interactive)
+ (split-window-below)
+ (windmove-down))
+ "horz" :exit t)
+ ;; ("o" delete-other-windows "one" :exit t)
+ ("o" sd/toggle-max-windows "one" :exit t)
+ ("C-o" ido-switch-buffer "buf" :exit t)
+ ("C-k" sd/delete-current-window "del" :exit t)
+ ("'" 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)
+ ("b" ido-switch-buffer "buf" :exit t)
+ ("C-b" ido-switch-buffer "buf" :exit t)
+ ("m" bookmark-jump-other-window "open bmk" :exit t)
+ ("M" bookmark-set "set bmk" :exit t)
+ ("u" (progn (winner-undo) (setq this-command 'winner-undo)) "undo")
+ ("r" (progn (winner-redo) (setq this-command 'winner-redo)) "redo")
+ ("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-;" nil nil :exit t)
+ ("p" nil nil :exit t)
+ ("n" nil nil :exit t)
+ ("[" nil nil :exit t)
+ ("]" nil nil :exit t)
+ ("f" nil))
+
+ (global-unset-key (kbd "C-o"))
+ (global-set-key (kbd "C-o") 'sd/hydra-window/body)
+#+END_SRC
+
+** Motion
+- =C-M-=
+[[https://www.masteringemacs.org/article/effective-editing-movement][effective-editing-movement]]
+*** Command Arguments, numeric argumens
+=C-u 4= same as =C-4=, =M-4=
+*** Basic movement
+moving by line / word /
+=C-f=, =C-b=, =C-p=, =C-n=, =M-f=, =M-b=
+=C-a=, =C-e=
+=M-m= (move first non-whitespace on this line)
+=M-}=, =M-{=, Move forward end of paragraph
+=M-a=, =M-e=, beginning / end of sentence
+=C-M-a=, =C-M-e=, move begining of defun
+=C-x ]=, =C-x [=, forward/backward one page
+=C-v=, =M-v=, =C-M-v=, =C-M-S-v= scroll down/up
+=M-<=, =M->=, beginning/end of buffer
+=M-r=, Repositiong point
+
+*** Moving by S-expression / List
+*** Marks
+=C-<SPC>= set marks toggle the region
+=C-u C-<SPC>= Jump to the mark, repeated calls go further back the mark ring
+=C-x C-x= Exchanges the point and mark.
+
+Stolen [[https://www.masteringemacs.org/article/fixing-mark-commands-transient-mark-mode][fixing-mark-commands-transient-mark-mode]]
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (defun push-mark-no-activate ()
+ "Pushes `point' to `mark-ring' and does not activate the region
+ Equivalent to \\[set-mark-command] when \\[transient-mark-mode] is disabled"
+ (interactive)
+ (push-mark (point) t nil)
+ (message "Pushed mark to ring"))
+
+ ;; (global-set-key (kbd "C-`") 'push-mark-no-activate)
+
+ (defun jump-to-mark ()
+ "Jumps to the local mark, respecting the `mark-ring' order.
+ This is the same as using \\[set-mark-command] with the prefix argument."
+ (interactive)
+ (set-mark-command 1))
+
+ ;; (global-set-key (kbd "M-`") 'jump-to-mark)
+
+ (defun exchange-point-and-mark-no-activate ()
+ "Identical to \\[exchange-point-and-mark] but will not activate the region."
+ (interactive)
+ (exchange-point-and-mark)
+ (deactivate-mark nil))
+
+ ;; (define-key global-map [remap exchange-point-and-mark] 'exchange-point-and-mark-no-activate)
+#+END_SRC
+
+Show the mark ring using =helm-mark-ring=, also mapping =M-`= to quit minibuffer. so that =M-`= can
+toggle the mark ring. the best way is add a new action and mapping to =helm-source-mark-ring=, but
+since there is no map such as =helm-mark-ring=map=, so I cannot binding a key to the quit action.
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (global-set-key (kbd "M-`") #'helm-mark-ring)
+
+ (define-key minibuffer-local-map (kbd "M-`") 'keyboard-escape-quit)
+#+END_SRC
+
+=M-h= marks the next paragraph
+=C-x h= marks the whole buffer
+=C-M-h= marks the next defun
+=C-x C-p= marks the next page
+**** DONE Mapping toggle mark ring=
+:LOGBOOK:
+- State "DONE" from "TODO" [2016-07-22 Fri 23:18]
+:END:
+*** Registers
+Registers can save text, position, rectangles, file and configuration and other things.
+Here for movement, we can use register to save/jump position
+=C-x r SPC= store point in register
+=C-x r j= jump to register
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package list-register
+ :ensure t)
+#+END_SRC
+
+*** Bookmarks
+As I would like use bookmakr for different buffer/files. to help to swith
+different buffer/file quickly. this setting is in Windows/buffer node
+=C-x r m= set a bookmarks
+=C-x r l= list bookmarks
+=C-x r b= jump to bookmarks
+
+*** Search
+Search, replace and hightlight will in later paragraph
+*** =Avy= for easy motion
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package avy
+ :ensure t
+ :config
+ (avy-setup-default))
+
+ (global-set-key (kbd "C-M-j") 'avy-goto-line-below)
+ (global-set-key (kbd "C-M-n") 'avy-goto-line-below)
+ (global-set-key (kbd "C-M-k") 'avy-goto-line-above)
+ (global-set-key (kbd "C-M-p") 'avy-goto-line-above)
+
+ (global-set-key (kbd "C-M-f") 'avy-goto-word-1-below)
+ (global-set-key (kbd "C-M-b") 'avy-goto-word-1-above)
+
+ ;; (global-set-key (kbd "M-g e") 'avy-goto-word-0)
+ (global-set-key (kbd "C-M-w") 'avy-goto-char-timer)
+ (global-set-key (kbd "C-M-l") 'avy-goto-char-in-line)
+
+ ;; ;; will delete above
+ ;; (global-set-key (kbd "M-g j") 'avy-goto-line-below)
+ ;; (global-set-key (kbd "M-g k") 'avy-goto-line-above)
+ ;; (global-set-key (kbd "M-g w") 'avy-goto-word-1-below)
+ ;; (global-set-key (kbd "M-g b") 'avy-goto-word-1-above)
+ ;; (global-set-key (kbd "M-g e") 'avy-goto-word-0)
+ ;; (global-set-key (kbd "M-g f") 'avy-goto-char-timer)
+ ;; (global-set-key (kbd "M-g c") 'avy-goto-char-in-line)
+#+END_SRC
+
+*** =Imenu= goto tag
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ ;; (global-set-key (kbd "M-i") #'counsel-imenu)
+ (global-set-key (kbd "M-i") #'imenu)
+
+ ;; (global-set-key (kbd "M-l") 'goto-line)
+#+END_SRC
+
+*** Go-to line
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (global-set-key (kbd "M-l") 'goto-line)
+#+END_SRC
+
+*** Movement effective
+**** isearch
+=C-s=, =C-r=
+=C-w=, put the word into search minibuffer, =M-y=
+=M-c=, toggle case sensitivity
+=M-n=, =M-p=, history
+**** tagss
+** Edit
+*** basic editting
+- cut, yank, =C-w=, =C-y=
+- save, revert
+- undo, redo - undo-tree
+- select, expand-region
+- spell check, flyspell
+
+*** Kill ring
+=helm-show-kill-ring=
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (global-set-key (kbd "M-y") #'helm-show-kill-ring)
+#+END_SRC
+
+*** Expand-region
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package expand-region
+ :ensure t
+ :config
+ (global-set-key (kbd "C-=") 'er/expand-region))
+#+END_SRC
+
+*** undo-tree
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package undo-tree
+ :ensure t
+ :config
+ (define-key undo-tree-visualizer-mode-map "j" 'undo-tree-visualize-redo)
+ (define-key undo-tree-visualizer-mode-map "k" 'undo-tree-visualize-undo)
+ (define-key undo-tree-visualizer-mode-map "h" 'undo-tree-visualize-switch-branch-left)
+ (define-key undo-tree-visualizer-mode-map "l" 'undo-tree-visualize-switch-branch-right)
+ (global-undo-tree-mode 1))
+
+ (global-set-key (kbd "s-u") 'undo-tree-visualize)
#+END_SRC
-* Gnus
-** Gmail setting
-Refer [[https://www.emacswiki.org/emacs/GnusGmail][GnusGmail]]
+*** flyspell
+Stolen from [[https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-spelling.el][here]], hunspell will search dictionary in =DICPATH=
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (setq user-mail-address "seudut@gmail.com"
- user-full-name "Peng Li")
+ (setenv "DICPATH" "/usr/local/share/hunspell")
- (setq gnus-select-method
- '(nnimap "gmail"
- (nnimap-address "imap.gmail.com")
- (nnimap-server-port "imaps")
- (nnimap-stream ssl)))
+ (when (executable-find "hunspell")
+ (setq-default ispell-program-name "hunspell")
+ (setq ispell-really-hunspell t))
- (setq smtpmail-smtp-service 587
- gnus-ignored-newsgroups "^to\\.\\|^[0-9. ]+\\( \\|$\\)\\|^[\"]\"[#'()]")
+ ;; (defun text-mode-hook-setup ()
+ ;; ;; Turn off RUN-TOGETHER option when spell check text-mode
+ ;; (setq-local ispell-extra-args (flyspell-detect-ispell-args)))
+ ;; (add-hook 'text-mode-hook 'text-mode-hook-setup)
+ ;; (add-hook 'text-mode-hook 'flyspell-mode)
- ;; Use gmail sending mail
- (setq message-send-mail-function 'smtpmail-send-it
- smtpmail-starttls-credentials '(("smtp.gmail.com" 587 nil nil))
- smtpmail-auth-credentials '(("smtp.gmail.com" 587 "seudut@gmail.com" nil))
- smtpmail-default-smtp-server "smtp.gmail.com"
- smtpmail-smtp-server "smtp.gmail.com"
- smtpmail-smtp-service 587
- starttls-use-gnutls t)
+ ;; enable flyspell check on comments and strings in progmamming modes
+ ;; (add-hook 'prog-mode-hook 'flyspell-prog-mode)
+
+ ;; I don't use the default mappings
+ (with-eval-after-load 'flyspell
+ (define-key flyspell-mode-map (kbd "C-;") nil)
+ (define-key flyspell-mode-map (kbd "C-,") nil)
+ (define-key flyspell-mode-map (kbd "C-.") nil))
#+END_SRC
-And put the following in =~/.authinfo= file, replacing =<USE>= with your email address
-and =<PASSWORD>= with the password
-#+BEGIN_EXAMPLE
- machine imap.gmail.com login <USER> password <PASSWORD> port imaps
- machine smtp.gmail.com login <USER> password <PASSWORD> port 587
-#+END_EXAMPLE
+Make flyspell enabled for org-mode, see [[http://emacs.stackexchange.com/questions/9333/how-does-one-use-flyspell-in-org-buffers-without-flyspell-triggering-on-tangled][here]]
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ ;; NO spell check for embedded snippets
+ (defadvice org-mode-flyspell-verify (after org-mode-flyspell-verify-hack activate)
+ (let ((rlt ad-return-value)
+ (begin-regexp "^[ \t]*#\\+begin_\\(src\\|html\\|latex\\)")
+ (end-regexp "^[ \t]*#\\+end_\\(src\\|html\\|latex\\)")
+ old-flag
+ b e)
+ (when ad-return-value
+ (save-excursion
+ (setq old-flag case-fold-search)
+ (setq case-fold-search t)
+ (setq b (re-search-backward begin-regexp nil t))
+ (if b (setq e (re-search-forward end-regexp nil t)))
+ (setq case-fold-search old-flag))
+ (if (and b e (< (point) e)) (setq rlt nil)))
+ (setq ad-return-value rlt)))
+#+END_SRC
-Then Run =M-x gnus=
+** Search & Replace / hightlight =M-s=
+*** search
+=C-s=, =C-r=,
+=C-w= add word at point to search string,
+=M-%= query replace
+=C-M-y= add character at point to search string
+=M-s C-e= add reset of line at point
+=C-y= yank from clipboard to search string
+=M-n=, =M-p=, history
+=C-M-i= complete search string
-** Group buffer
+*** =M-s= prefix
+use the prefix =M-s= for searching in buffers
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (use-package gnus
- :init
- (setq gnus-permanently-visible-groups "\.*")
- :config
- (cond (window-system
- (setq custom-background-mode 'light)
- (defface my-group-face-1
- '((t (:foreground "Red" :bold t))) "First group face")
- (defface my-group-face-2
- '((t (:foreground "DarkSeaGreen4" :bold t)))
- "Second group face")
- (defface my-group-face-3
- '((t (:foreground "Green4" :bold t))) "Third group face")
- (defface my-group-face-4
- '((t (:foreground "SteelBlue" :bold t))) "Fourth group face")
- (defface my-group-face-5
- '((t (:foreground "Blue" :bold t))) "Fifth group face")))
- (setq gnus-group-highlight
- '(((> unread 200) . my-group-face-1)
- ((and (< level 3) (zerop unread)) . my-group-face-2)
- ((< level 3) . my-group-face-3)
- ((zerop unread) . my-group-face-4)
- (t . my-group-face-5))))
-
+ (defun sd/make-keymap (key bindings)
+ (setq keymap (make-sparse-keymap))
+ (dolist (binding bindings)
+ (define-key keymap (car binding) (cdr binding)))
+ (global-set-key key keymap))
- ;; key-
- (add-hook 'gnus-group-mode-hook (lambda ()
- (define-key gnus-group-mode-map "k" 'gnus-group-prev-group)
- (define-key gnus-group-mode-map "j" 'gnus-group-next-group)
- (define-key gnus-group-mode-map "g" 'gnus-group-jump-to-group)
- (define-key gnus-group-mode-map "v" (lambda () (interactive) (gnus-group-select-group t)))))
+ ;; (sd/make-keymap "\M-s"
+ ;; '(("w" . save-buffer)
+ ;; ;; ("\M-w" . save-buffer)
+ ;; ("e" . revert-buffer)
+ ;; ("s" . isearch-forward-regexp)
+ ;; ("\M-s" . isearch-forward-regexp)
+ ;; ("r" . isearch-backward-regexp)
+ ;; ("." . isearch-forward-symbol-at-point)
+ ;; ("o" . occur)
+ ;; ;; ("h" . highlight-symbol-at-point)
+ ;; ("h" . highlight-symbol)
+ ;; ("m" . highlight-regexp)
+ ;; ("l" . highlight-lines-matching-regexp)
+ ;; ("M" . unhighlight-regexp)
+ ;; ("f" . keyboard-quit)
+ ;; ("q" . keyboard-quit)))
#+END_SRC
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (setq gnus-fetch-old-headers 't)
-
-
-
- (setq gnus-extract-address-components
- 'mail-extract-address-components)
- ;; summary buffer
- (setq gnus-summary-line-format "%U%R%z%I%(%[%-20,20f%]%) %s%-80= %11&user-date;\n")
- (setq gnus-user-date-format-alist '(((gnus-seconds-today) . "%H:%M")
- ((+ 86400 (gnus-seconds-today)) . "%a %H:%M")
- (604800 . "%a, %b %-d")
- (15778476 . "%b %-d")
- (t . "%Y-%m-%d")))
+ (use-package highlight-symbol
+ :ensure t)
- (setq gnus-thread-sort-functions '((not gnus-thread-sort-by-number)))
- (setq gnus-unread-mark ?\.)
- (setq gnus-use-correct-string-widths t)
+ (defhydra sd/search-replace (:color red :columns nil)
+ "Search"
+ ("w" save-buffer "save" :exit t)
+ ("e" revert-buffer "revert" :exit t)
+ ("u" undo-tree-visualize "undo" :exit t)
+ ("s" isearch-forward-regexp "s-search" :exit t)
+ ("M-s" isearch-forward-regexp "s-search" :exit t)
+ ("r" isearch-backward-regexp "r-search" :exit t)
+ ("." isearch-forward-symbol-at-point "search point" :exit t)
+ ("/" swiper "swiper" :exit t)
+ ("o" occur "occur" :exit t)
+ ("h" highlight-symbol "higlight" :exit t)
+ ("l" highlight-lines-matching-regexp "higlight line" :exit t)
+ ("m" highlight-regexp "higlight" :exit t)
+ ("M" unhighlight-regexp "unhiglight" :exit t)
+ ("q" nil "quit")
+ ("f" nil))
- ;; thread
- (setq gnus-thread-hide-subtree t)
+ (global-unset-key (kbd "M-s"))
+ (global-set-key (kbd "M-s") 'sd/search-replace/body)
- ;; (with-eval-after-load 'gnus-summary-mode
- ;; (define-key gnus-summary-mode-map (kbd "C-o") 'sd/hydra-window/body))
- (add-hook 'gnus-summary-mode-hook (lambda ()
- (define-key gnus-summary-mode-map (kbd "C-o") nil)))
+ ;; search and replace and highlight
+ (define-key isearch-mode-map (kbd "M-s") 'isearch-repeat-forward)
+ (define-key isearch-mode-map (kbd "M-r") 'isearch-repeat-backward)
+ (global-set-key (kbd "s-[") 'highlight-symbol-next)
+ (global-set-key (kbd "s-]") 'highlight-symbol-prev)
+ (global-set-key (kbd "s-\\") 'highlight-symbol-query-replace)
+#+END_SRC
+*** replace
+*** hightlight
+*** Occur
+Occur search key bindings
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (defun sd/occur-keys ()
+ "My key bindings in occur-mode"
+ (interactive)
+ (switch-to-buffer-other-window "*Occur*")
+ (define-key occur-mode-map (kbd "C-o") nil)
+ (define-key occur-mode-map (kbd "C-n") (lambda ()
+ (interactive)
+ (occur-next)
+ (occur-mode-goto-occurrence-other-window)
+ (recenter)
+ (other-window 1)))
+ (define-key occur-mode-map (kbd "C-p") (lambda ()
+ (interactive)
+ (occur-prev)
+ (occur-mode-goto-occurrence-other-window)
+ (recenter)
+ (other-window 1))))
+
+ (add-hook 'occur-hook #'sd/occur-keys)
+ (use-package color-moccur
+ :ensure t
+ :commands (isearch-moccur isearch-all)
+ :init
+ (setq isearch-lazy-highlight t)
+ :config
+ (use-package moccur-edit))
#+END_SRC
-** Windows layout
-See [[https://www.emacswiki.org/emacs/GnusWindowLayout][GnusWindowLayout]]
+*** Swiper
+stolen from [[https://github.com/mariolong/emacs.d/blob/f6a061594ef1b5d1f4750e9dad9dc97d6e122840/emacs-init.org][here]]
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (gnus-add-configuration
- '(summary
- (horizontal 1.0
- (vertical 35
- (group 1.0))
- (vertical 1.0
- (summary 1.0 poine)))))
+ (use-package swiper
+ :ensure t
+ :init
+ (setq ivy-use-virtual-buffers t)
+ (set-face-attribute 'ivy-current-match nil :background "Orange" :foreground "black")
+ :config
+ (ivy-mode)
+ (global-set-key (kbd "s-/") 'swiper)
+ (define-key swiper-map (kbd "M-r") 'swiper-query-replace)
+ (define-key swiper-map (kbd "C-.") (lambda ()
+ (interactive)
+ (insert (format "%s" (with-ivy-window (thing-at-point 'word))))))
+ (define-key swiper-map (kbd "M-.") (lambda ()
+ (interactive)
+ (insert (format "%s" (with-ivy-window (thing-at-point 'symbol)))))))
+#+END_SRC
- (gnus-add-configuration
- '(article
- (horizontal 1.0
- (vertical 35
- (group 1.0))
- (vertical 1.0
- (summary 0.50 point)
- (article 1.0)))))
+* 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=
- (with-eval-after-load 'gnus-group-mode
- (gnus-group-select-group "INBOX"))
- ;; (add-hook 'gnus-group-mode-map (lambda ()
- ;; (gnus-group-select-group "INBOX")))
-#+END_SRC
+** write color syntax for =Man-mode=
-* Gnu Plot
-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))
+ (font-lock-add-keywords 'perl-mode '(("\\(|\\w+?\\(,\\w+?\\)?|\\)" 1 'py-builtins-face)))
#+END_SRC
-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
+* TODO jump last change point
+* TODO emms mode-line
- set title "Putting it All Together"
+* TODO Temp directory for cached/history/temp files
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package recentf
+ :init
+ (setq recentf-save-file (concat sd-temp-directory "recentf")))
- set xlabel "X"
- set xrange [-8:8]
- set xtics -8,2,8
+ ;; (use-package projectile
+ ;; :init
+ ;; (setq projectile-cache-file (concat sd-temp-directory "projectile.cache")))
+ ;; (use-package ido
+ ;; :init
+ ;; (setq ido-save-directory-list-file (concat sd-temp-directory "ido.last")))
- set ylabel "Y"
- set yrange [-20:70]
- set ytics -20,10,70
+ (use-package savehist
+ :init
+ (setq savehist-file (concat sd-temp-directory "history")))
- f(x) = x**2
- g(x) = x**3
- h(x) = 10*sqrt(abs(x))
+ ;; (use-package emms
+ ;; :init
+ ;; (setq emms-directory (concat sd-temp-directory "emms")))
- plot f(x) w lp lw 1, g(x) w p lw 2, h(x) w l lw 3
+ (setq auto-save-list-file-prefix (concat sd-temp-directory "auto-save-list/.saves-"))
+
+ ;; use-package smex
+ ;; :init
+ ;; (setq smex-save-file (concat sd-temp-directory "smex-items"))
#+END_SRC
-#+RESULTS:
-[[file:./temp/file.png]]
+* =C-u C-h a= search funtions
+=apropos-command=
-* Blog
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+* TODO Questions
+- interactive for anonymous function
+When define a key to a anonymous function, the lambda function should be interactive
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ ;; (require 'saveplace)
+ ;; (setq-default save-place t)
+ ;; (delete-selection-mode 1)
#+END_SRC
* key
- passion
- vision
- mission
-* Ediff
+
+
+* M prefix
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (with-eval-after-load 'ediff
- (setq ediff-split-window-function 'split-window-horizontally)
- (setq ediff-window-setup-function 'ediff-setup-windows-plain)
- (add-hook 'ediff-startup-hook 'ediff-toggle-wide-display)
- (add-hook 'ediff-cleanup-hook 'ediff-toggle-wide-display)
- (add-hook 'ediff-suspend-hook 'ediff-toggle-wide-display))
-#+END_SRC
-* 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=
+ ;; 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 ======
-** write color syntax for =Man-mode=
+ ;; M-y - yank
+ ;; M-u - upcase word
+ ;; M-i - ====== imenu
+ ;; M-o ====== prefix
+ ;; M-p
+ ;; M-[ =====
+ ;; M-] ========
+ ;; M-\ deleter horizontal space =====
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (font-lock-add-keywords 'perl-mode '(("\\(|\\w+?\\(,\\w+?\\)?|\\)" 1 'py-builtins-face)))
-#+END_SRC
+ ;; M-n
+ ;; M-m ---- indent
+ ;; M-, --- mark stack====== =
+ ;; M-. lisp-goto-symboo, find definitation
-* TODO set fly-spell binding
+ ;; M-a
+ ;; M-s =====
+ ;; M-d
+ ;; M-f
+ ;; M-g - prefix
-* TODO imenu bindings
+ ;; M-q - lisp fill, fill paragraph
+ ;; M-w
+ ;; M-e
+ ;; M-r - rePositioning
+ ;; M-t transpose word
-* DONE modified indicator
-:LOGBOOK:
-- State "DONE" from "TODO" [2016-07-18 Mon 23:35]
-:END:
-* TODO highlight selected ido candicate
-* TODO show time in right of mode-line
-* TODO ediff mode
-* TODO jump last change point
-* TODO emms mode-line
+ ;; M-z zap-to-char
+ ;; M-x
+ ;; M-c capitalize-word
+ ;; M-v
+ ;; M-b
+#+END_SRC
+
+* TODO ibuffer hydra