From f2694d7e4ee47fd148e4ac77dc7f64c27fbc8ec9 Mon Sep 17 00:00:00 2001 From: Peng Li Date: Sat, 4 Nov 2017 09:53:51 +0800 Subject: [PATCH] Emacs - improve ivy & projectile --- emacs.d/config.org | 99 +++++++++++++++++++++++--------------------------- emacs.d/emacs-evil.org | 73 +++++++++++++++++++++---------------- 2 files changed, 88 insertions(+), 84 deletions(-) diff --git a/emacs.d/config.org b/emacs.d/config.org index 7dc3fc6..e8b7f32 100644 --- a/emacs.d/config.org +++ b/emacs.d/config.org @@ -744,9 +744,21 @@ let helm windows split inside current window (ivy-done) (ivy-shrink-after-dispatching)) + (defun sd/exit-ivy-and-swith-to-buffer () + "exit ivy complete, and call swith to buffer" + (interactive) + (ivy--exhibit) + (ivy-set-action (lambda (buf) + (ivy-switch-buffer))) + (when (ivy-read-action) + (ivy-done)) + (ivy-shrink-after-dispatching)) + (with-eval-after-load "ivy" (define-key ivy-minibuffer-map (kbd "C-o") 'ivy-dispatching-done) - (define-key ivy-minibuffer-map (kbd "C-k") #'sd/swith-buffer-other-window)) + (define-key ivy-minibuffer-map (kbd "C-k") #'sd/swith-buffer-other-window) + ;; (define-key ivy-minibuffer-map (kbd "M-o") nil) + (define-key ivy-minibuffer-map (kbd "C-o") #'sd/exit-ivy-and-swith-to-buffer)) #+END_SRC stolen from [[https://github.com/mariolong/emacs.d/blob/f6a061594ef1b5d1f4750e9dad9dc97d6e122840/emacs-init.org][here]] @@ -1238,29 +1250,29 @@ extend org-mode's easy templates, refer to [[http://coldnew.github.io/coldnew-em ;; Install Ubuntu Mono fonts and apply it in org-table to align Chinese fonts - ;; (with-eval-after-load "org" - ;; (mapc (lambda (face) - ;; (set-face-attribute face nil :inherit 'fixed-pitch)) - ;; (list - ;; 'org-code - ;; 'org-block - ;; 'org-block-background - ;; 'org-block-begin-line - ;; 'org-block-end-line)) - ;; (set-face-attribute 'org-table nil :family "Ubuntu Mono" :height 140) - ;; (set-face-attribute 'org-formula nil :family "Ubuntu Mono" :height 140) - ;; ;; org-special-keyword inherited from font-lock-keywork originally; as org is changed to variable-pitch, it cause - ;; ;; the font in special-keywords are not monospace - ;; (set-face-attribute 'org-special-keyword nil :inherit '(font-lock-keyword-face fixed-pitch)) - ;; ;; same as above - ;; (set-face-attribute 'org-verbatim nil :inherit '(shadow fixed-pitch)) - ;; (set-face-attribute 'org-block-begin-line nil :inherit 'shadow :slant 'italic :foreground nil) - ;; (set-face-attribute 'org-block-end-line nil :inherit 'shadow :slant 'italic :foreground nil) + (with-eval-after-load "org" + (mapc (lambda (face) + (set-face-attribute face nil :inherit 'fixed-pitch)) + (list + 'org-code + 'org-block + 'org-block-background + 'org-block-begin-line + 'org-block-end-line)) + (set-face-attribute 'org-table nil :family "Ubuntu Mono" :height 100) + (set-face-attribute 'org-formula nil :family "Ubuntu Mono" :height 100) + ;; org-special-keyword inherited from font-lock-keywork originally; as org is changed to variable-pitch, it cause + ;; the font in special-keywords are not monospace + (set-face-attribute 'org-special-keyword nil :inherit '(font-lock-keyword-face fixed-pitch)) + ;; same as above + (set-face-attribute 'org-verbatim nil :inherit '(shadow fixed-pitch)) + (set-face-attribute 'org-block-begin-line nil :inherit 'shadow :slant 'italic :foreground nil) + (set-face-attribute 'org-block-end-line nil :inherit 'shadow :slant 'italic :foreground nil) - ;; ;; fix indent broken by variable-pitch-mode - ;; ;; http://emacs.stackexchange.com/questions/26864/variable-pitch-face-breaking-indentation-in-org-mode - ;; (require 'org-indent) - ;; (set-face-attribute 'org-indent nil :inherit '(org-hide fixed-pitch))) + ;; fix indent broken by variable-pitch-mode + ;; http://emacs.stackexchange.com/questions/26864/variable-pitch-face-breaking-indentation-in-org-mode + (require 'org-indent) + (set-face-attribute 'org-indent nil :inherit '(org-hide fixed-pitch))) ;; (with-eval-after-load "org" ;; (let ((default-font-size (- (face-attribute 'default :height) (if (display-graphic-p) 20 0)))) @@ -1541,10 +1553,8 @@ Refer [[https://github.com/abo-abo/hydra/blob/master/hydra-examples.el][hydra-ex "Projectile: " ("s" projectile-switch-open-project "Switch" :exit t) ("f" projectile-find-file "File" :exit t) - ("b" projectile-switch-to-buffer "Buffer" :exit t)) - - - + ("b" projectile-switch-to-buffer "Buffer" :exit t) + ("p" projectile-switch-project "Project" :exit t)) #+END_SRC *** hydra launcher @@ -3181,6 +3191,10 @@ Here are some global key bindings for basic editting #+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 "") 'toggle-frame-fullscreen) + (global-set-key (kbd "s-f") 'projectile-find-file) + (global-set-key (kbd "s-=") 'text-scale-increase) + (global-set-key (kbd "s--") 'text-scale-decrease) #+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]] @@ -3261,31 +3275,6 @@ Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g= (message "rg is not found")) #+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-;") 'persp-switch-last) - - (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) -#+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 @@ -3527,6 +3516,9 @@ Search, replace and hightlight will in later paragraph ;; (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) + (global-set-key (kbd "M-g c") 'avy-goto-char) + (global-set-key (kbd "M-g b") 'avy-goto-word-0-above) + (global-set-key (kbd "M-g w") 'avy-goto-word-0-below) #+END_SRC *** =Imenu= goto tag @@ -3825,7 +3817,8 @@ Occur search key bindings (el-get-bundle seudut/perspeen :features perspeen (setq perspeen-use-tab nil) - (perspeen-mode)) + ;; (perspeen-mode) + ) ;; super-i to switch to ith workspace diff --git a/emacs.d/emacs-evil.org b/emacs.d/emacs-evil.org index fc936b2..64a5ec2 100644 --- a/emacs.d/emacs-evil.org +++ b/emacs.d/emacs-evil.org @@ -117,9 +117,17 @@ https://www.emacswiki.org/emacs/Evil. * Key bindings ** Evil-Leader #+BEGIN_SRC emacs-lisp :tangle yes :results silent + (defun sd/swith-to-buffer () + "switch to buffer" + (interactive) + (call-interactively 'projectile-switch-to-buffer)) + (with-eval-after-load "evil-leader" (cl-loop for (key . fun ) in '(("F" . counsel-projectile-switch-to-buffer) - ("f" . ivy-switch-buffer) + ("f" . (lambda () (interactive) + (call-interactively (if (projectile-project-p) + 'projectile-switch-to-buffer + 'ivy-switch-buffer)))) ("b" . counsel-projectile-find-file) ("r" . ivy-recentf) ("w" . save-buffer) @@ -167,12 +175,33 @@ There are three kinds key bindings ("C-h" . delete-backward-char) ("C-k" . kill-line)) do (define-key evil-insert-state-map (kbd key-sequence) fun)) + + ;; remap some vim keybindings + (dolist (map (list + evil-normal-state-map + evil-visual-state-map + evil-motion-state-map)) + (cl-loop for (keys . fun) in '(("'" . evil-goto-mark) + ("`" . evil-goto-mark-line)) + do (define-key map (kbd keys) fun))) ;; motion mode - (define-key evil-motion-state-map (kbd "SPC") 'scroll-up-command) - (define-key evil-motion-state-map (kbd "S-SPC") 'scroll-down-command)) + ;; (define-key evil-motion-state-map (kbd "SPC") 'scroll-up-command) + ;; (define-key evil-motion-state-map (kbd "S-SPC") 'scroll-down-command) + ) + + + ;; (keymapp (car (list evil-normal-state-map evil-visual-state-map))) + + ;; (keymapp (car '(evil-normal-state-map evil-visual-state-map))) + ;; (keymapp (car `(,evil-normal-state-map ,evil-visual-state-map))) + + + ;; (keymapp evil-normal-state-map) + ;; (keymapp 'evil-normal-state-map) + ;; (keymapp `,evil-normal-state-map) #+END_SRC @@ -203,18 +232,6 @@ Let the search highlight persistent, https://stackoverflow.com/questions/2576803 (evil-define-key 'emacs eshell-mode-map (kbd (concat evil-leader/leader (car key-fun))) (cdr key-fun)))) ;; (define-key eshell-mode-map (kbd "C-j") nil) )) - - ;; - ;; (add-hook 'eshell-mode-map - ;; (lambda () - ;; (mapc (lambda (key-fun) - ;; (evil-define-key 'emacs eshell-mode-map (kbd (concat evil-leader/leader (car key-fun))) (cdr key-fun))) - ;; '(("e" . dired))))) - - ;; (add-hook 'eshell-mode-hook (lambda () - ;; (loop for (key . fun) in '( - ;; ("e" . sd/toggle-project-eshell)) - ;; do (evil-define-key 'emacs eshell-mode-map (kbd (concat evil-leader/leader key)) fun)))) #+END_SRC ** Dired mode #+BEGIN_SRC emacs-lisp :tangle yes :results silent @@ -259,12 +276,12 @@ Let the search highlight persistent, https://stackoverflow.com/questions/2576803 ** expand region #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (with-eval-after-load "evil" - (with-eval-after-load "expand-region" - (define-key evil-normal-state-map (kbd "SPC") 'er/expand-region) - (define-key evil-visual-state-map (kbd "SPC") 'er/expand-region) - (define-key evil-visual-state-map (kbd "S-SPC") 'er/contract-region) - (define-key evil-normal-state-map (kbd "S-SPC") 'er/contract-region))) + ;; (with-eval-after-load "evil" + ;; (with-eval-after-load "expand-region" + ;; (define-key evil-normal-state-map (kbd "SPC") 'er/expand-region) + ;; (define-key evil-visual-state-map (kbd "SPC") 'er/expand-region) + ;; (define-key evil-visual-state-map (kbd "S-SPC") 'er/contract-region) + ;; (define-key evil-normal-state-map (kbd "S-SPC") 'er/contract-region))) #+END_SRC ** Org Mode (worf mode) and Lispy mode @@ -287,12 +304,7 @@ Let the search highlight persistent, https://stackoverflow.com/questions/2576803 (evil-define-key 'normal worf-mode-map (kbd "]") (lambda () (interactive) (call-interactively #'worf-forward) - (evil-emacs-state))) - ;; (evil-define-key 'normal worf-mode-map (kbd "g") (lambda () - ;; (interactive) - ;; (wspecial-worf-goto) - ;; (evil-emacs-state))) - )) + (evil-emacs-state))))) #+END_SRC ** Avy & Evil @@ -304,16 +316,15 @@ Let the search highlight persistent, https://stackoverflow.com/questions/2576803 ?z ?x ?c ?v ?b ?n ?m ?f ?j 59)) ;; (setq avy-background t) + (setq avy-all-windows nil) (with-eval-after-load "evil" (dolist (map (list evil-normal-state-map evil-visual-state-map evil-motion-state-map)) (define-key map (kbd "gw") 'avy-goto-word-0-below) (define-key map (kbd "gb") 'avy-goto-word-0-above) - (define-key map (kbd "J") 'avy-goto-line-below) - (define-key map (kbd "K") 'avy-goto-line-above) - (define-key map (kbd "F") 'avy-goto-char) - (define-key map (kbd "W") 'avy-goto-char-timer))) + (define-key map (kbd "ge") 'avy-goto-word-0) + (define-key map (kbd "gc") 'avy-goto-char))) #+END_SRC ** ggtags -- 2.11.0