X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=emacs.d%2Fconfig.org;h=c57bfe53b7a7f46cedae96f749d09d984dce1c74;hb=b4848d1b1d1dfd4a3eb83bf1bbb6abc7b83d9601;hp=cc72e83e96e2a9f52d327a71c9b478db2823af88;hpb=0725d70fba690f9f0df6082c7f23c7b93098b9c1;p=dotfiles.git diff --git a/emacs.d/config.org b/emacs.d/config.org index cc72e83..c57bfe5 100644 --- a/emacs.d/config.org +++ b/emacs.d/config.org @@ -74,6 +74,8 @@ Set the emacs load path (setq initial-frame-alist '((width . 120) (height . 50))) + + ;; (setq-default indicate-empty-lines t) #+END_SRC *** Stop auto save @@ -84,12 +86,6 @@ Set the emacs load path ;; (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 @@ -100,34 +96,44 @@ Make a temp directory for all cache/history files (mkdir sd-temp-directory)) #+END_SRC +*** Save minibuffer history +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (setq savehist-file (concat sd-temp-directory "history")) + (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 @@ -431,7 +437,7 @@ Revised powerline-center-theme :group 'powerline) ;; Don't show buffer modified for scratch and eshell mode - (defun sd/buffer-show-modified () + (defun sd/buffer-is-eshel-or-scratch () "Dot not show modified indicator for buffers" (interactive) (unless (or (string-match "*scratch*" (buffer-name)) @@ -448,7 +454,7 @@ Revised powerline-center-theme (mode-line-buffer-id (if active 'sd/mode-line-buffer-id 'mode-line-buffer-id-inactive)) (mode-line (if active 'mode-line 'mode-line-inactive)) (my-face1 (if active 'sd/powerline-active1 'powerline-inactive1)) - (my-face-buffer-modified (if (and (sd/buffer-show-modified) (buffer-modified-p)) + (my-face-buffer-modified (if (and (sd/buffer-is-eshel-or-scratch) (buffer-modified-p) (not buffer-read-only)) 'sd/buffer-modified-active1 (if buffer-read-only 'sd/buffer-view-active1 my-face1))) @@ -514,36 +520,30 @@ set height in mode line #+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 @@ -557,24 +557,20 @@ set height in mode line #+END_SRC ** SMEX - #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package smex :ensure t - :init (smex-initialize) + :init + (setq smex-save-file (concat sd-temp-directory "smex-items")) + (smex-initialize) :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 @@ -582,7 +578,6 @@ Use [[https://github.com/DarwinAwardWinner/ido-ubiquitous][ido-ubiquitous]] for (setq gnus-completing-read-function 'gnus-ido-completing-read) :config (ido-ubiquitous-mode 1)) - #+END_SRC ** Ido-exit-target @@ -600,208 +595,24 @@ Use [[https://github.com/DarwinAwardWinner/ido-ubiquitous][ido-ubiquitous]] for ido-file-dir-completion-map))) #+END_SRC -* Normal Text Operation -** Edit -*** 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 - -*** 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)) - - ;; (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) - - ;; 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 - -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 - -*** Expand-region +** Counsel #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package expand-region + (use-package counsel :ensure t - :config - (global-set-key (kbd "C-=") 'er/expand-region)) -#+END_SRC - -* Key bindings - -** Esc on 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 - -** =Super= bindings for file, buffer and windows - -Some global bindings on =Super=, on Mac, it is =Command= - -#+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!"))) - - ;; (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 "") '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 + :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) + ;; (set-face-attribute 'ivy-current-match nil :background "Orange" :foreground "black") + (define-key read-expression-map (kbd "C-r") 'counsel-expression-history) + (global-set-key (kbd "C-c C-r") 'ivy-resume)) -** Search Replace and highlight -*** swiper -#+BEGIN_SRC emacs-lisp :tangle yes :results silent - ;; (use-package swiper - ;; :ensure t) - ;; (ivy-mode 1) - ;; (setq ivy-use-virtual-buffers t) - ;; (global-set-key (kbd "s-/") 'swiper) - (use-package counsel - :ensure t - :defer t) - ;;* ;; (global-set-key "\C-s" 'swiper) - ;; (global-set-key (kbd "C-c C-r") 'ivy-resume) ;; (global-set-key (kbd "") '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 "C-h f") 'counsel-describe-function) - (global-set-key (kbd "C-h v") 'counsel-describe-variable) ;; (global-set-key (kbd " l") 'counsel-load-library) ;; (global-set-key (kbd " i") 'counsel-info-lookup-symbol) ;; (global-set-key (kbd " u") 'counsel-unicode-char) @@ -810,7 +621,6 @@ Some global bindings on =Super=, on Mac, it is =Command= ;; (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) ;; (set-face-attribute ;; 'ivy-current-match nil @@ -821,53 +631,11 @@ Some global bindings on =Super=, on Mac, it is =Command= ;; (define-key swiper-map (kbd "M-%") 'swiper-aa-replace) #+END_SRC -*** =M-s= prefix -use the prefix =M-s= for searching in buffers +** helm +let helm windows split inside current window #+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) - - (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))) - - ;; 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) - - - (define-key minibuffer-local-map "\M-s" nil) - - (set-face-background 'ido-first-match "yellow") - - ;; M-s M-w eww-search-words - - ;; M-c - ;; M-r - ;; M-t - ;; M-u, + (with-eval-after-load 'helm + (setq helm-split-window-in-side-p t)) #+END_SRC * Org-mode Settings @@ -1136,15 +904,11 @@ Setting agenda files and the agenda view #+END_SRC ** Export PDF - -Install MacTex-basic and some tex packages - -#+BEGIN_SRC bash - +Install MacTex-basic [[http://www.tug.org/mactex/morepackages.html][MacTex-basic]] and some tex packages +#+BEGIN_SRC sh 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 #+BEGIN_SRC emacs-lisp :tangle yes :results silent @@ -1246,6 +1010,8 @@ and Defined keys, using vi keybindings, Refer abo-abo's setting [[https://github :init ;; don't ask me to confirm the unsaved change (setq magit-save-repository-buffers nil) + ;; default is 50 + (setq git-commit-summary-max-length 80) :commands magit-status magit-blame :config (dolist (map (list magit-status-mode-map @@ -1263,20 +1029,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" @@ -1289,7 +1055,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 () @@ -1315,7 +1081,7 @@ Toggle an eshell in split window below, refer [[http://www.howardism.org/Technic (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)) @@ -1326,11 +1092,19 @@ Toggle an eshell in split window below, refer [[http://www.howardism.org/Technic (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 + +** exec-path-from-shell +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package exec-path-from-shell + :ensure t + :config + (exec-path-from-shell-initialize)) #+END_SRC -*** TODO smart display +** TODO smart display * Misc Settings ** [[https://github.com/abo-abo/hydra][Hydra]] @@ -1342,14 +1116,6 @@ Toggle an eshell in split window below, refer [[http://www.howardism.org/Technic (setq hydra-lv nil) #+END_SRC -*** Font Zoom -#+BEGIN_SRC emacs-lisp :tangle yes :results silent - (defhydra sd/font-zoom (global-map "") - "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 @@ -1393,7 +1159,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) @@ -1500,17 +1266,7 @@ 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 +** Smart Parens #+BEGIN_SRC emacs-lisp :tangle yes :results silent @@ -1539,30 +1295,6 @@ Type =o= to go to the link #+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 @@ -1576,67 +1308,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-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 - - ;; (use-package tabbar-ruler - ;; :ensure t - ;; :init - ;; (setq tabbar-ruler-global-tabbar t) - ;; (setq tabbar-ruler-global-ruler t) - ;; (setq tabbar-ruler-popu-menu t) - ;; (setq tabbar-ruler-popu-toolbar t) - ;; (setq tabbar-use-images t) - ;; :config - ;; (tabbar-ruler-group-by-projectile-project) - ;; (global-set-key (kbd "s-1") 'tabbar-forward-group) - ;; (global-set-key (kbd "s-2") 'tabbar-ruler-forward)) - -#+END_SRC - ** View only for some directory When see function by =C-h f=, and visit the source code, I would like the buffer is read only. See [[http://emacs.stackexchange.com/questions/3676/how-to-enter-view-only-mode-when-browsing-emacs-source-code-from-help/3681#3681][here]] #+BEGIN_SRC emacs-lisp :tangle yes :results silent @@ -1645,7 +1316,10 @@ When see function by =C-h f=, and visit the source code, I would like the buffer '((nil . ((buffer-read-only . t) (show-trailing-whitespace . nil) (tab-width . 8) - (eval . (whitespace-mode -1)))))) + (eval . (whitespace-mode -1)) + (eval . (when buffer-file-name + (setq-local view-no-disable-on-exit t) + (view-mode-enter))))))) ;; (dir-locals-set-directory-class (expand-file-name "/usr/local/share/emacs") 'emacs) (dir-locals-set-directory-class "/usr/local/Cellar/emacs" 'emacs) @@ -1658,6 +1332,10 @@ When see function by =C-h f=, and visit the source code, I would like the buffer #+BEGIN_SRC emacs-lisp :tangle yes :results silent (el-get-bundle info+ :url "https://raw.githubusercontent.com/emacsmirror/emacswiki.org/master/info+.el" + ;; (require 'info+) + ) + + (with-eval-after-load 'info (require 'info+)) #+END_SRC @@ -1688,8 +1366,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") @@ -1718,31 +1394,187 @@ Color for Man-mode (define-key org-tree-slide-mode-map [escape] 'org-tree-slide-move-previous-tree)) #+END_SRC -* dired +** pdf-tools +#+BEGIN_SRC sh + brew install poppler +#+END_SRC + +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package pdf-tools + :ensure t + :init + ;; run to complete the installation + (pdf-tools-install) + :config + (add-to-list 'auto-mode-alist '("\.pdf$" . pdf-view-mode)) + (add-hook 'pdf-outline-buffer-mode-hook #'sd/pdf-outline-map)) + + (defun sd/pdf-outline-map () + "My keybindings in pdf-outline-map" + (interactive) + (define-key pdf-outline-buffer-mode-map (kbd "C-o") nil) + (define-key pdf-outline-buffer-mode-map (kbd "i") 'outline-toggle-children) + (define-key pdf-outline-buffer-mode-map (kbd "j") 'next-line) + (define-key pdf-outline-buffer-mode-map (kbd "k") 'previous-line)) +#+END_SRC + +* Dired +** Dired bindings =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 + (defun sd/dired-key-map () + "My keybindings for dired" + (interactive) + ;; these two prefix are used globally + (define-key dired-mode-map (kbd "C-o") nil) + (define-key dired-mode-map (kbd "M-s") nil) + ;; toggle hidden files + (define-key dired-mode-map (kbd "H") 'dired-omit-mode) + ;; scroll + (define-key dired-mode-map (kbd "SPC") 'scroll-up-command) + (define-key dired-mode-map (kbd "DEL") 'scroll-down-command) + (define-key dired-mode-map (kbd "j") 'diredp-next-line) + (define-key dired-mode-map (kbd "k") 'diredp-previous-line) + (define-key dired-mode-map (kbd "g") 'dired-goto-file) + ;; (define-key dired-mode-map (kbd "S-SPC") 'scroll-down-command) + ;; jump to fil/dirs + (define-key dired-mode-map (kbd "f") 'dired-isearch-filenames) + ;; subdir + ;; i dired-maybe-insert-subdir + ;; o dired-find-file-other-window (switch to other window) + ;; O dired-display-file + (define-key dired-mode-map (kbd "G") 'ido-dired) + (define-key dired-mode-map (kbd "c") 'sd/dired-new-file) + (define-key dired-mode-map (kbd "h") 'dired-summary) + (define-key dired-mode-map (kbd "r") 'revert-buffer) + (define-key dired-mode-map (kbd "l") 'dired-display-file) + (define-key dired-mode-map [C-backspace] 'sd/dired-high-level-dir) + (define-key dired-mode-map (kbd "?") 'describe-mode) + (define-key dired-mode-map (kbd "z") #'sd/dired-get-size) + (define-key dired-mode-map (kbd "C-d") 'dired-kill-subdir) + (define-key dired-mode-map (kbd "M-d") 'dired-kill-subdir) + (define-key dired-mode-map (kbd "J") 'diredp-next-subdir) + (define-key dired-mode-map (kbd "TAB") 'diredp-next-subdir) + (define-key dired-mode-map (kbd "K") 'diredp-prev-subdir) + (define-key dired-mode-map (kbd "O") 'dired-display-file) + (define-key dired-mode-map (kbd "I") 'other-window)) + (use-package dired :config (require 'dired-x) + ;; also load dired+ + (use-package dired+ + :ensure t + :init (setq diredp-hide-details-initially-flag nil)) + (setq dired-omit-mode t) (setq dired-omit-files (concat dired-omit-files "\\|^\\..+$")) (add-hook 'dired-mode-hook (lambda () - (define-key dired-mode-map (kbd "C-o") nil) - (define-key dired-mode-map (kbd "H") 'dired-omit-mode) - (define-key dired-mode-map (kbd "DEL") (lambda () (interactive) (find-alternate-file ".."))) + (sd/dired-key-map) (dired-omit-mode)))) + + (defadvice dired-summary (around sd/dired-summary activate) + "Revisied dired summary." + (interactive) + (dired-why) + (message + "Δ: d-delete, u-ndelete, x-punge, f-ind, o-ther window, R-ename, C-opy, c-create, +new dir, r-evert, /-filter, h-summary, ?-help")) + + (defun sd/dired-high-level-dir () + "Go to higher level directory" + (interactive) + (find-alternate-file "..")) +#+END_SRC + +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (defun sd/dired-new-file () + "Create a new file in dired mode" + (interactive) + (call-interactively 'find-file)) + + ;; copied from abo-abo's config + (defun sd/dired-get-size () + (interactive) + (let ((files (dired-get-marked-files))) + (with-temp-buffer + (apply 'call-process "/usr/bin/du" nil t nil "-sch" files) + (message + "Size of all marked files: %s" + (progn + (re-search-backward "\\(^[ 0-9.,]+[A-Za-z]+\\).*total$") + (match-string 1)))))) +#+END_SRC + +** disable ido when dired new file +When create a new directory, I want to disalbe =ido= completion. see [[http://stackoverflow.com/questions/7479565/emacs-ido-mode-and-creating-new-files-in-directories-it-keeps-changing-the-dire][here]]. Thhis code snippets copied +from [[https://emacs.stackexchange.com/questions/13713/how-to-disable-ido-in-dired-create-directory/13795#13795?newreg%3Ddb17c20f7af3490fb11cf15f1d888e9e][How to disable IDO in ‘dired-create-directory’]] +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (defun mk-anti-ido-advice (func &rest args) + "Temporarily disable IDO and call function FUNC with arguments ARGS." + (interactive) + (let ((read-file-name-function #'read-file-name-default)) + (if (called-interactively-p 'any) + (call-interactively func) + (apply func args)))) + + (defun mk-disable-ido (command) + "Disable IDO when command COMMAND is called." + (advice-add command :around #'mk-anti-ido-advice)) +#+END_SRC + +Disalble =ido= when new a directory or file in =dired= mode +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + ;; call the function which you want to disable ido + (mk-disable-ido 'dired-create-directory) + (mk-disable-ido 'sd/dired-new-file) +#+END_SRC + +** Dired open with +=!= =dired-do-shell-command= +=&= =dired-do-async-shell-command= +here on Mac, just use "open" commands to pen =.pdf=, =.html= and image files +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (setq dired-guess-shell-alist-user + '(("\\.pdf\\'" "open" "okular") + ("\\.\\(?:djvu\\|eps\\)\\'" "evince") + ("\\.\\(?:jpg\\|jpeg\\|png\\|gif\\|xpm\\)\\'" "open") + ("\\.\\(?:xcf\\)\\'" "gimp") + ("\\.csv\\'" "libreoffice") + ("\\.tex\\'" "pdflatex" "latex") + ("\\.\\(?:mp4\\|mkv\\|avi\\|flv\\|ogv\\)\\(?:\\.part\\)?\\'" "mplayer") + ("\\.\\(?:mp3\\|flac\\)\\'" "rhythmbox") + ("\\.html?\\'" "open") + ("\\.dmg\\'" "open") + ("\\.cue?\\'" "audacious"))) #+END_SRC -Dired+ +** dired-hacks #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package dired+ + (use-package dired-hacks-utils :ensure t - :init - (setq diredp-hide-details-initially-flag nil) - :config - (define-key dired-mode-map (kbd "j") 'diredp-next-line) - (define-key dired-mode-map (kbd "k") 'diredp-previous-line) - (define-key dired-mode-map (kbd "g") 'dired-goto-file)) + :defer t) +#+END_SRC + +** dired-narrow +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + ;;narrow dired to match filter + (use-package dired-narrow + :ensure t + :commands (dired-narrow) + :bind (:map dired-mode-map + ("/" . dired-narrow))) +#+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 @@ -2196,16 +2028,6 @@ Use =gnuplot= on =Org-mode= file, see [[http://orgmode.org/worg/org-contrib/babe #+RESULTS: [[file:./temp/file.png]] - -* Blog -#+BEGIN_SRC emacs-lisp :tangle yes :results silent - -#+END_SRC - -* key -- passion -- vision -- mission * Ediff #+BEGIN_SRC emacs-lisp :tangle yes :results silent (with-eval-after-load 'ediff @@ -2216,51 +2038,199 @@ 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 -* 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= - -** write color syntax for =Man-mode= +* 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 - (font-lock-add-keywords 'perl-mode '(("\\(|\\w+?\\(,\\w+?\\)?|\\)" 1 'py-builtins-face))) + (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 -* TODO set fly-spell binding - -* TODO imenu bindings - -* DONE modified indicator -:LOGBOOK: -- State "DONE" from "TODO" [2016-07-18 Mon 23:35] -:END: -* DONE highlight selected ido candicate -:LOGBOOK: -- State "DONE" from "TODO" [2016-07-19 Tue 01:49] -:END: -* DONE show time in right of mode-line -:LOGBOOK: -- State "DONE" from "TODO" [2016-07-19 Tue 01:11] -:END: -* DONE ediff mode -:LOGBOOK: -- State "DONE" from "TODO" [2016-07-19 Tue 01:11] -:END: -* TODO jump last change point -* TODO emms mode-line +* 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 +* 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= settins +*** Projectile +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package projectile + :ensure t + :init + (setq projectile-enable-caching t) + (setq projectile-switch-project-action 'projectile-dired) + (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 + :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 "") '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" + "Window" + ;; windows split ("h" windmove-left nil :exit t) ("j" windmove-down nil :exit t) ("k" windmove-up nil :exit t) @@ -2279,27 +2249,42 @@ 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) - ("C-o" ido-switch-buffer "buf" :exit t) + + ;; buffer / windows switch + ("o" sd/toggle-max-windows "one" :exit t) ("C-k" sd/delete-current-window "del" :exit t) + ("D" (lambda () + (interactive) + (kill-buffer) + (sd/delete-current-window)) + "kill" :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) - ("q" nil "cancel") + ;; ("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" sd/project-or-dired-jump nil :exit t) + ("b" ibuffer nil :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") + ("" 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) @@ -2307,6 +2292,14 @@ Most use =C-o C-o= to switch buffers; =C-o x, v= to split window; =C-o o= to del (global-unset-key (kbd "C-o")) (global-set-key (kbd "C-o") 'sd/hydra-window/body) + + (defun sd/project-or-dired-jump () + "If under project, jump to the root directory, otherwise + jump to dired of current file" + (interactive) + (if (projectile-project-p) + (projectile-dired) + (dired-jump))) #+END_SRC ** Motion @@ -2361,16 +2354,24 @@ Stolen [[https://www.masteringemacs.org/article/fixing-mark-commands-transient-m ;; (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= +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) + (setq mark-ring-max 50) + + (use-package helm + :ensure t + :init + (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 -**** TODO Mapping toggle mark ring= *** Registers Registers can save text, position, rectangles, file and configuration and other things. Here for movement, we can use register to save/jump position @@ -2409,67 +2410,187 @@ Search, replace and hightlight will in later paragraph (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) - - ;; 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 - - ;; M-g M-g goto-line - ;; M-g M-n next-error - ;; M-g M-p previous-error + ;; ;; 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-unset-key (kbd "C-M-i")) - ;; (global-set-key (kbd "C-M-i") #'counsel-imenu) (global-set-key (kbd "M-i") #'counsel-imenu) + ;; (global-set-key (kbd "M-i") #'imenu) +#+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 -**** got-to-line - - - ** 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 + (setq kill-ring-max 100) ; default is 60p + + (use-package helm + :ensure t + :init + (global-set-key (kbd "M-y") #'helm-show-kill-ring)) +#+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 + +*** 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)) + + ;; (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) + + ;; 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 + +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 + ** Search & Replace / hightlight =M-s= -*** search -*** replace -*** hightlight +*** isearch +=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 +set the isearch history size, the default is only =16= #+BEGIN_SRC emacs-lisp :tangle yes :results silent + (setq history-length 5000) + (setq regexp-search-ring-max 1000) + (setq search-ring-max 1000) - ;; (defhydra sd/search-highlight (:color red :columns nil) - ;; "search" - ;; ("M-s" . isearch-forward-regexp "search-forward" :exit t) - ;; ("s" . isearch-forward-regexp "search-forward" :exit t) - ;; ("r" . isearch-backward-regexp "search-backward" :exit t) - ;; ) + ;; 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))) +#+END_SRC - ;; (setq-default indicate-empty-lines t) +*** =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)) + + ;; (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 + (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 @@ -2524,73 +2645,98 @@ stolen from [[https://github.com/mariolong/emacs.d/blob/f6a061594ef1b5d1f4750e9d (insert (format "%s" (with-ivy-window (thing-at-point 'symbol))))))) #+END_SRC -* TODO Temp directory for cached/history/temp files +** Expand region map +*** Install =expand-region= #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package recentf + (use-package expand-region + :ensure t :config - (setq recentf-save-file (concat sd-temp-directory "recentf"))) + ;; (global-set-key (kbd "C-=") 'er/expand-region) + ) +#+END_SRC - (use-package projectile - :config - (setq projectile-cache-file (concat sd-temp-directory "projectile.cache"))) +*** 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") - (use-package ido - :config - (setq ido-save-directory-list-file (concat sd-temp-directory "ido.last"))) + ("i'" er/mark-inside-quotes "in") + ("i\"" er/mark-inside-quotes nil) + ("o'" er/mark-outside-quotes "out") + ("o\"" er/mark-outside-quotes nil) - (use-package savehist - :config - (setq savehist-file (concat sd-temp-directory "history"))) + ("i{" er/mark-inside-pairs nil) + ("i(" er/mark-inside-pairs nil) + ("o{" er/mark-inside-pairs nil) + ("o(" er/mark-inside-pairs nil) - (use-package emms - :config - (setq emms-directory (concat sd-temp-directory "emms"))) + ("p" er/mark-paragraph "paragraph") - (setq auto-save-list-file-prefix (concat sd-temp-directory "auto-save-list/.saves-")) + ("l" sd/mark-line "line") + ("u" er/mark-url "url") + ("f" er/mark-defun "fun") + ("n" er/mark-next-accessor "next") - (use-package smex - :config - (setq smex-save-file (concat sd-temp-directory "smex-items"))) -#+END_SRC + ("x" exchange-point-and-mark "exchange") -* test -#+BEGIN_SRC ditaa :file temp/hello-world.png :cmdline -r -+--------------+ -| | -| Hello World! | -| | -+--------------+ -#+END_SRC + ;; Search + ;; higlight -#+RESULTS: -[[file:temp/hello-world.png]] + ;; exit + ("d" kill-region "delete" :exit t) -#+BEGIN_SRC ditaa :file temp/hello.png - +------------+ - | | - | hello | - | | - +------------+ + ("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 -#+RESULTS: -[[file:temp/hello.png]] +*** TODO make expand-region hydra work with lispy selected -* =C-u C-h a= search funtions -=apropos-command= +* 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= -* TODO Questions -- interactive for anonymous function -When define a key to a anonymous function, the lambda function should be interactive +** write color syntax for =Man-mode= #+BEGIN_SRC emacs-lisp :tangle yes :results silent - ;; (require 'saveplace) - ;; (setq-default save-place t) - ;; (delete-selection-mode 1) + (font-lock-add-keywords 'perl-mode '(("\\(|\\w+?\\(,\\w+?\\)?|\\)" 1 'py-builtins-face))) #+END_SRC +* TODO jump last change point +* TODO emms mode-line + +* =C-u C-h a= search funtions +=apropos-command= + +* key +- passion +- vision +- mission * M prefix #+BEGIN_SRC emacs-lisp :tangle yes :results silent