+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package highlight-symbol
+ :ensure 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))
+
+ (global-unset-key (kbd "M-s"))
+ (global-set-key (kbd "M-s") 'sd/search-replace/body)
+
+
+ ;; 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
+
+*** 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
+
+
+** Expand region map
+*** Install =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
+
+*** Add a =hydra= map for =expand-region= operations
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (defun sd/mark-line ()
+ "Mark current line without whitespace beginning"
+ (interactive)
+ (back-to-indentation)
+ (set-mark (line-end-position)))
+
+ (defhydra sd/expand-selected (:color red :columns nil
+ :post (deactivate-mark)
+ )
+ "Selected"
+ ;; select
+ ;; ("e" er/expand-region "+")
+ ("SPC" er/expand-region "+")
+ ;; ("c" er/contract-region "-")
+ ("S-SPC" er/contract-region "-")
+ ("r" (lambda ()
+ (interactive)
+ (er/contract-region 0))
+ "reset")
+
+ ("i'" er/mark-inside-quotes "in")
+ ("i\"" er/mark-inside-quotes nil)
+ ("o'" er/mark-outside-quotes "out")
+ ("o\"" er/mark-outside-quotes nil)
+
+ ("i{" er/mark-inside-pairs nil)
+ ("i(" er/mark-inside-pairs nil)
+ ("o{" er/mark-inside-pairs nil)
+ ("o(" er/mark-inside-pairs nil)
+
+ ("p" er/mark-paragraph "paragraph")
+
+ ("l" sd/mark-line "line")
+ ("u" er/mark-url "url")
+ ("f" er/mark-defun "fun")
+ ("n" er/mark-next-accessor "next")
+
+ ("x" exchange-point-and-mark "exchange")
+
+ ;; Search
+ ;; higlight
+
+ ;; exit
+ ("d" kill-region "delete" :exit t)
+
+ ("y" kill-ring-save "yank" :exit t)
+ ("M-SPC" nil "quit" :exit t)
+ ;; ("C-SPC" "quit" :exit t)
+ ("q" deactivate-mark "quit" :exit t))
+
+ (global-set-key (kbd "M-SPC") (lambda ()
+ (interactive)
+ (set-mark-command nil)
+ ;; (er/expand-region 1)
+ (er/mark-word)
+ (sd/expand-selected/body)))
+#+END_SRC
+
+*** TODO make expand-region hydra work with lispy selected
+
+* Key Bindings
+Here are some global key bindings for basic editting
+** Global key bingding
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (global-set-key (kbd "C-h") 'delete-backward-char)
+ (global-set-key (kbd "s-m") 'man)
+ (global-set-key (kbd "<s-return>") 'toggle-frame-fullscreen)
+ ;; project operation
+ (global-set-key (kbd "s-p") 'projectile-switch-open-project)
+ (global-set-key (kbd "s-f") 'projectile-find-file)
+
+ ;; (global-set-key (kbd "s-=") 'increase-emacs-font-size)
+ ;; (global-set-key (kbd "s--") 'decrease-emacs-font-size)
+ (global-set-key (kbd "s-=") 'text-scale-increase)
+ (global-set-key (kbd "s--") 'text-scale-decrease)
+ (global-unset-key (kbd "s-n"))
+#+END_SRC
+
+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
+ (require 'utilities)
+ (global-set-key (kbd "C-w") 'sd/kill-region-or-backward-kill-word)
+#+END_SRC
+
+
+** 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
+
+* Developing
+** perspeen
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ ;; (use-package perspeen
+ ;; :ensure t
+ ;; :init
+ ;; (setq perspeen-use-tab nil)
+ ;; :config
+ ;; (perspeen-mode))
+
+ (el-get-bundle seudut/perspeen
+ :features perspeen
+ (setq perspeen-use-tab nil)
+ ;; (perspeen-mode)
+ )
+
+ ;; super-i to switch to ith workspace
+
+ (defmacro sd/define-keys (map key func &rest args)
+ "A macro to define multi keys "
+ `(define-key ,map ,key (lambda () (interactive) (,func ,@args))))
+
+
+ (with-eval-after-load "perspeen"
+ (dotimes (ii 9)
+ (sd/define-keys perspeen-mode-map (kbd (concat "s-" (number-to-string (+ ii 1))))
+ perspeen-goto-ws (+ ii 1)))
+ (define-key perspeen-mode-map (kbd "s-c") 'perspeen-create-ws)
+ (define-key perspeen-mode-map (kbd "s-n") 'perspeen-next-ws)
+ (define-key perspeen-mode-map (kbd "s-p") 'perspeen-previous-ws)
+ (define-key perspeen-mode-map (kbd "s-'") 'perspeen-last-ws)
+ (define-key perspeen-mode-map (kbd "s-t") 'perspeen-tab-create-tab)
+ (define-key perspeen-mode-map (kbd "s-t") 'perspeen-tab-create-tab))
+#+END_SRC
+* Evil Mode
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (org-babel-load-file "~/.emacs.d/emacs-evil.org")
+#+END_SRC
+
+* Footnotes
+
+[fn:1] [[http://coldnew.github.io/blog/2013/11-16_d2f3a/][解決 org-mode 表格內中英文對齊的問題]]
+
+
+
+
+