emacs - change expand region hydra
[dotfiles.git] / emacs.d / config.org
index f1d0fe7..8ee6f53 100644 (file)
@@ -102,36 +102,38 @@ Make a temp directory for all cache/history files
   (setq history-length 1000)
   (setq savehist-additional-variables '(kill-ring search-ring regexp-search-ring))
   (savehist-mode 1)
+
+  ;; set temp file path for recentf and auto-save
+  (setq recentf-save-file (concat sd-temp-directory "recentf"))
+  (setq auto-save-list-file-prefix (concat sd-temp-directory "auto-save-list/.saves-"))
 #+END_SRC
 
 * Package Management Tools
 
 ** Use-package
-
 Using [[https://github.com/jwiegley/use-package][use-package]] to manage emacs packages
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
   (unless (package-installed-p 'use-package)
     (package-refresh-contents)
     (package-install 'use-package))
 
   (require 'use-package)
-
 #+END_SRC
 
 ** El-get
-
 [[https://github.com/dimitri/el-get][El-get]] is package management tool, whicl allows to install external elisp package from any git repository not in mepla. 
 Check out [[http://tapoueh.org/emacs/el-get.html][el-get]].
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
   (use-package el-get
     :ensure t
     :init
     (add-to-list 'load-path "~/.emacs.d/el-get"))
+#+END_SRC
 
+** paradox
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (use-package paradox
+    :ensure t)
 #+END_SRC
 
 * Color and Fonts Settings
@@ -1029,20 +1031,20 @@ and Defined keys, using vi keybindings, Refer abo-abo's setting [[https://github
 #+END_SRC
 
 * Eshell
-*** Eshell alias
+** Eshell alias
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (defalias 'e 'find-file)
   (defalias 'ff 'find-file)
   (defalias 'ee 'find-files)
 #+END_SRC
 
-*** eshell temp directory
+** 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
+** Eshell erase buffer
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (defun sd/eshell-clear-buffer ()
     "Clear eshell buffer"
@@ -1055,7 +1057,7 @@ set default eshell history folder
                                 (local-set-key (kbd "C-l") 'sd/eshell-clear-buffer)))
 #+END_SRC
 
-*** Toggle Eshell
+** Toggle Eshell
 Toggle an eshell in split window below, refer [[http://www.howardism.org/Technical/Emacs/eshell-fun.html][eshell-here]]
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (defun sd/window-has-eshell ()
@@ -1096,7 +1098,7 @@ Toggle an eshell in split window below, refer [[http://www.howardism.org/Technic
   (global-set-key (kbd "s-e") 'sd/toggle-eshell-here)
 #+END_SRC
 
-*** TODO smart display
+** TODO smart display
 * Misc Settings
 
 ** [[https://github.com/abo-abo/hydra][Hydra]]
@@ -1151,7 +1153,7 @@ Refer [[https://github.com/abo-abo/hydra/blob/master/hydra-examples.el][hydra-ex
 *** hydra misc
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (defhydra sd/hydra-misc (:color red :columns nil)
-    "Miscellaneous Commands"
+    "Misc"
     ("e" eshell "eshell" :exit t)
     ("p" (lambda ()
            (interactive)
@@ -1258,16 +1260,6 @@ Type =o= to go to the link
 
 #+END_SRC
 
-** Emux
-
-[[https://github.com/re5et/emux][emux]] is 
-
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
-  (el-get-bundle re5et/emux)
-
-#+END_SRC
-
 ** Smart Parens
 
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
@@ -1310,46 +1302,6 @@ Type =o= to go to the link
 
 #+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-directory (concat sd-temp-directory "emms"))
-    (setq emms-source-file-default-directory "~/Music/")
-    :config
-    (emms-standard)
-    (emms-default-players)
-    (define-emms-simple-player mplayer '(file url)
-      (regexp-opt '(".ogg" ".mp3" ".mgp" ".wav" ".wmv" ".wma" ".ape"
-                    ".mov" ".avi" ".ogm" ".asf" ".mkv" ".divx" ".mpeg"
-                    "http://" "mms://" ".rm" ".rmvb" ".mp4" ".flac" ".vob"
-                    ".m4a" ".flv" ".ogv" ".pls"))
-      "mplayer" "-slave" "-quiet" "-really-quiet" "-fullscreen")
-    (emms-history-load))
-#+END_SRC
-
-** GnoGo
-
-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
-    :ensure t
-    :defer t
-    :init
-    (require 'gnugo-imgen)
-    (setq gnugo-xpms 'gnugo-imgen-create-xpms)
-    (add-hook 'gnugo-start-game-hook '(lambda ()
-                                        (gnugo-image-display-mode)
-                                        (gnugo-grid-mode)))
-      :config
-    (add-to-list 'gnugo-option-history (format "--boardsize 19 --color black --level 1")))
-
-#+END_SRC
-
 ** Tabbar
 
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
@@ -1420,8 +1372,6 @@ When see function by =C-h f=, and visit the source code, I would like the buffer
 ** TODO Man mode
 Color for Man-mode
 
-** TODO swiper to occur
-
 ** TODO UTF8
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   ;; (set-language-environment "UTF-8")
@@ -1450,7 +1400,8 @@ Color for Man-mode
     (define-key org-tree-slide-mode-map [escape] 'org-tree-slide-move-previous-tree))
 #+END_SRC
 
-* dired
+* Dired
+** Dired config
 =C-o= is defined as a global key for window operation, here unset it in dired mode
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package dired
@@ -1465,7 +1416,7 @@ Color for Man-mode
                                  (dired-omit-mode))))
 #+END_SRC
 
-Dired+
+** Dired+
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package dired+
     :ensure t
@@ -1477,6 +1428,33 @@ Dired+
     (define-key dired-mode-map (kbd "g") 'dired-goto-file))
 #+END_SRC
 
+** dired-hacks
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (use-package dired-hacks-utils
+    :ensure t)
+
+
+  (defconst my-dired-media-files-extensions '("mp3" "mp4" "MP3" "MP4" "avi" "mpg" "flv" "ogg" "wmv" "mkv" "mov" "wma")
+  "Media file extensions that should launch in VLC.")
+
+    (add-to-list 'dired-guess-shell-alist-user
+                 (list (concat "\\."
+                               (regexp-opt my-dired-media-files-extensions)
+                               "\\'") "mplayer"))
+#+END_SRC
+
+* Ibuffer
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (global-set-key (kbd "s-b") 'ibuffer)
+
+  (with-eval-after-load 'ibuffer
+    (define-key ibuffer-mode-map (kbd "C-o") nil)
+    (define-key ibuffer-mode-map (kbd "j") 'ibuffer-forward-line)
+    (define-key ibuffer-mode-map (kbd "k") 'ibuffer-backward-line)
+    (define-key ibuffer-mode-map (kbd "r") 'ibuffer-update)
+    (define-key ibuffer-mode-map (kbd "g") 'ibuffer-jump-to-buffer))
+#+END_SRC
+
 * Completion
 company mode and company-statistics
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
@@ -1938,6 +1916,43 @@ Use =gnuplot= on =Org-mode= file, see [[http://orgmode.org/worg/org-contrib/babe
     (add-hook 'ediff-suspend-hook 'ediff-toggle-wide-display))
 #+END_SRC
 
+* Entertainment
+** GnoGo
+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
+    :ensure t
+    :defer t
+    :init
+    (require 'gnugo-imgen)
+    (setq gnugo-xpms 'gnugo-imgen-create-xpms)
+    (add-hook 'gnugo-start-game-hook '(lambda ()
+                                        (gnugo-image-display-mode)
+                                        (gnugo-grid-mode)))
+    :config
+    (add-to-list 'gnugo-option-history (format "--boardsize 19 --color black --level 1")))
+#+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-directory (concat sd-temp-directory "emms"))
+    (setq emms-source-file-default-directory "~/Music/")
+    :config
+    (emms-standard)
+    (emms-default-players)
+    (define-emms-simple-player mplayer '(file url)
+      (regexp-opt '(".ogg" ".mp3" ".mgp" ".wav" ".wmv" ".wma" ".ape"
+                    ".mov" ".avi" ".ogm" ".asf" ".mkv" ".divx" ".mpeg"
+                    "http://" "mms://" ".rm" ".rmvb" ".mp4" ".flac" ".vob"
+                    ".m4a" ".flv" ".ogv" ".pls"))
+      "mplayer" "-slave" "-quiet" "-really-quiet" "-fullscreen")
+    (emms-history-load))
+#+END_SRC
+
 * Dictionary
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package bing-dict
@@ -1947,7 +1962,7 @@ Use =gnuplot= on =Org-mode= file, see [[http://orgmode.org/worg/org-contrib/babe
     :commands (bing-dict-brief))
 #+END_SRC
 
-* NEXT Key Bindings
+* 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=
@@ -1975,6 +1990,7 @@ Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g=
     (setq projectile-enable-caching t)
     (setq projectile-cache-file (concat sd-temp-directory "projectile.cache"))
     :config
+    (add-to-list 'projectile-globally-ignored-files "GTAGS")
     (projectile-global-mode t))
 
   (use-package persp-projectile
@@ -2090,7 +2106,8 @@ Most use =C-o C-o= to switch buffers; =C-o x, v= to split window; =C-o o= to del
       (delete-other-windows)))
 
   (defhydra sd/hydra-window (:color red :columns nil)
-    "window"
+    "Window"
+    ;; windows split
     ("h" windmove-left nil :exit t)
     ("j" windmove-down nil :exit t)
     ("k" windmove-up nil :exit t)
@@ -2109,21 +2126,30 @@ Most use =C-o C-o= to switch buffers; =C-o x, v= to split window; =C-o o= to del
            (split-window-below)
            (windmove-down))
      "horz" :exit t)
-    ;; ("o" delete-other-windows "one" :exit t)
+
+    ;; buffer / windows switch
     ("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")
+    ;; ("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)
+    ;; ("i" ace-maximize-window "ace-one" :exit t)
+
     ("u" (progn (winner-undo) (setq this-command 'winner-undo)) "undo")
     ("r" (progn (winner-redo) (setq this-command 'winner-redo)) "redo")
+
+    ;; ibuffer, dired, eshell, bookmarks
+    ;; ("d" ace-delete-window "ace-one" :exit t)
+    ("C-o" ido-switch-buffer nil :exit t)
+    ("d" dired-jump nil :exit t)
+    ("b" ibuffer nil n:exit t)
+    ("e" eshell nil :exit t)
+    ("m" bookmark-jump-other-window nil :exit t)
+    ("M" bookmark-set nil :exit t)
+    ("g" magit-status nil :exit t)
+    ("p" paradox-list-packages nil :exit t)
+
+    ;; quit
     ("q" nil "cancel")
     ("<ESC>" nil)
     ("C-h" nil nil :exit t)
@@ -2131,7 +2157,6 @@ Most use =C-o C-o= to switch buffers; =C-o x, v= to split window; =C-o o= to del
     ;; ("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)
@@ -2207,10 +2232,6 @@ since there is no map such as =helm-mark-ring=map=, so I cannot binding a key to
 =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
@@ -2287,14 +2308,6 @@ Search, replace and hightlight will in later paragraph
   (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
@@ -2370,18 +2383,11 @@ set the isearch history size, the default is only =16=
   (setq regexp-search-ring-max 1000)
   (setq search-ring-max 1000)
 
+  ;; when search a word or a symbol , also add the word into regexp-search-ring
   (defadvice isearch-update-ring (after sd/isearch-update-ring (string &optional regexp) activate)
     "Add search-ring to regexp-search-ring"
     (unless regexp
       (add-to-history 'regexp-search-ring string regexp-search-ring-max)))
-
-  ;; (defun isearch-update-ring (string &optional regexp)
-  ;;   "Add STRING to the beginning of the search ring.
-  ;; REGEXP if non-nil says use the regexp search ring."
-  ;;   (add-to-history
-  ;;    (if regexp 'regexp-search-ring 'search-ring)
-  ;;    string
-  ;;    (if regexp regexp-search-ring-max search-ring-max)))
 #+END_SRC
 
 *** =M-s= prefix
@@ -2445,8 +2451,6 @@ use the prefix =M-s= for searching in buffers
   (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
@@ -2499,6 +2503,78 @@ stolen from [[https://github.com/mariolong/emacs.d/blob/f6a061594ef1b5d1f4750e9d
                                          (insert (format "%s" (with-ivy-window (thing-at-point 'symbol)))))))
 #+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
+
 * 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=
@@ -2512,35 +2588,14 @@ new file =C-x C-f C-f=
 * TODO jump last change point
 * TODO emms mode-line
 
-* 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")))
-
-  (setq auto-save-list-file-prefix (concat sd-temp-directory "auto-save-list/.saves-")) 
-
-#+END_SRC
-
 * =C-u C-h a= search funtions 
 =apropos-command= 
 
-* 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
 
-
 * M prefix
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
 
@@ -2585,5 +2640,3 @@ When define a key to a anonymous function, the lambda function should be interac
   ;; M-b 
 #+END_SRC
 
-* TODO ibuffer hydra
-* TODO expand region action, selected mode map