X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;ds=sidebyside;f=emacs.d%2Fconfig.org;h=d71d28b866375c6a565f34463ba8474f2b3e9e08;hb=81367a877d96df83c8e68c920323988d04f930bf;hp=6b3476ef727a963d71874bc357f1ea33619ab045;hpb=276181c3a22f2d249425392d6cd55c64cedcb3c2;p=dotfiles.git diff --git a/emacs.d/config.org b/emacs.d/config.org index 6b3476e..d71d28b 100644 --- a/emacs.d/config.org +++ b/emacs.d/config.org @@ -34,6 +34,8 @@ Set system PATH and emacs exec path (defconst my-email "seudut@gmail.com") (defconst MY-EMACS-DIR (concat (getenv "HOME") "/.emacs.d")) (defconst MY-EMACS-TMP (concat MY-EMACS-DIR "/temp")) + (unless (file-exists-p MY-EMACS-TMP) + (mkdir MY-EMACS-TMP)) #+END_SRC ** General Setting @@ -62,6 +64,8 @@ Set system PATH and emacs exec path (when (display-graphic-p) (fringe-mode '(0 . 0))) + + (blink-cursor-mode 0) ;; (setq-default indicate-empty-lines t) ;; (setq-default indicate-abuffer-boundaries 'right) #+END_SRC @@ -201,7 +205,7 @@ Setting the fonts alignment issue (if window-system (when sd/fixed-font-family (set-frame-font sd/fixed-font-family) - (set-face-attribute 'default nil :font sd/fixed-font-family :height 140) + (set-face-attribute 'default nil :font sd/fixed-font-family :height 120) (set-face-font 'default sd/fixed-font-family))) #+END_SRC @@ -695,6 +699,42 @@ let helm windows split inside current window (setq helm-split-window-in-side-p t)) #+END_SRC +* 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")) + (setq projectile-completion-system 'ivy) + :config + (add-to-list 'projectile-globally-ignored-files "GTAGS") + (projectile-global-mode t)) + + ;; https://emacs.stackexchange.com/questions/16497/how-to-exclude-files-from-projectile + (if (executable-find "rg") + (progn + (defconst modi/rg-arguments + `("--line-number" ; line numbers + "--smart-case" + "--follow" ; follow symlinks + "--mmap") ; apply memory map optimization when possible + "Default rg arguments used in the functions in `projectile' package.") + + (defun modi/advice-projectile-use-rg () + "Always use `rg' for getting a list of all files in the project." + (mapconcat 'identity + (append '("\\rg") ; used unaliased version of `rg': \rg + modi/rg-arguments + '("--null" ; output null separated results, + "--files")) ; get file names matching the regex '' (all files) + " ")) + + (advice-add 'projectile-get-ext-command :override #'modi/advice-projectile-use-rg)) + (message "rg is not found")) +#+END_SRC + * Swiper & Ivy & Counsel #+BEGIN_SRC emacs-lisp :tangle yes :results silent (use-package counsel @@ -704,7 +744,8 @@ let helm windows split inside current window (use-package ivy :ensure t) (ivy-mode 1) (setq ivy-use-virtual-buffers nil - ivy-wrap t) + ivy-wrap t + ivy-count-format "%d/%d ") (set-face-attribute 'ivy-current-match nil :background "Orange" :foreground "black") (global-set-key (kbd "M-x") 'counsel-M-x) ;; (global-set-key (kbd "C-h f") 'counsel-describe-function) @@ -712,29 +753,66 @@ let helm windows split inside current window (global-set-key (kbd "C-x C-f") 'counsel-find-file) (define-key read-expression-map (kbd "C-r") 'counsel-expression-history) (global-set-key (kbd "C-c C-r") 'ivy-resume)) - - (use-package counsel-projectile - :ensure t - :defer t) #+END_SRC #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (defun sd/swith-buffer-other-window () + (ivy-set-actions + t + '(("q" (lambda (x) (ivy-quit-and-run (message "=="))) "exit"))) + + (ivy-set-actions + 'projectile-switch-to-buffer + '(("j" ivy--switch-buffer-other-window-action "other window" ))) + + (defun sd/projectile-find-file-other-window-action (file) + (message "=========") + (message (projectile-expand-root file)) + (find-file-other-window (projectile-expand-root file))) + + (ivy-set-actions + 'projectile-find-file + '(("j" sd/projectile-find-file-other-window-action "other-window"))) + + (defun sd/swith-to-buffer () + "switch to buffer" + (interactive) + (if (projectile-project-p) + (projectile-switch-to-buffer) + (ivy-switch-buffer))) + + (ivy-set-actions + 'sd/swith-to-buffer + '(("j" ivy--switch-buffer-other-window-action "other window"))) + + (defun sd/exit-ivy-and-swith-to-buffer () + "exit ivy complete, and call swith to buffer" (interactive) - (ivy-set-action (cond ((eq (ivy-state-caller ivy-last) 'ivy-switch-buffer) - 'ivy--switch-buffer-other-window-action) - ((eq (ivy-state-caller ivy-last) 'counsel-recentf) - 'find-file-other-window) - ((eq (ivy-state-caller ivy-last) 'counsel-projectile-find-file) - 'counsel-projectile-find-file-action-other-window) - (t - nil))) - (ivy-done) - (ivy-shrink-after-dispatching)) + (ivy-quit-and-run + (ivy-switch-buffer))) + + (defun my/ivy-read-action (key) + (let ((actions (ivy-state-action ivy-last))) + (if (null (ivy--actionp actions)) + t + (let* ((action-idx (cl-position-if + (lambda (x) (equal (car x) key)) + (cdr actions)))) + (cond ((member key '("" "")) + nil) + ((null action-idx) + (message "%s is not bound" key) + nil) + (t + (message "") + (setcar actions (1+ action-idx)) + (ivy-set-action actions))))))) (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") (lambda () (interactive) + (my/ivy-read-action "j") + (ivy-done))) + (define-key ivy-minibuffer-map (kbd "M-o") #'sd/exit-ivy-and-swith-to-buffer)) #+END_SRC stolen from [[https://github.com/mariolong/emacs.d/blob/f6a061594ef1b5d1f4750e9dad9dc97d6e122840/emacs-init.org][here]] @@ -792,12 +870,12 @@ Always indents header, and hide header leading starts so that no need type =#+ST :features ob-racket) ;; Lua support - ;(use-package ob-lua - ; :ensure t) +;; (use-package ob-lua +;; :ensure t) ;; use current window for org source buffer editting - (setq org-src-window-setup 'current-window ) + ;; (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) @@ -816,7 +894,7 @@ Always indents header, and hide header leading starts so that no need type =#+ST (latex . t) (java . t) (ruby . t) - ; (lua . t) +; (lua . t) (lisp . t) (scheme . t) (racket . t) @@ -1226,29 +1304,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)))) @@ -1517,11 +1595,26 @@ Refer [[https://github.com/abo-abo/hydra/blob/master/hydra-examples.el][hydra-ex ("d" ace-delete-window "Delete" :exit t) ("x" sd/exchange-win-layout "eXchange" :exit t) ("u" winner-undo "window-Undo" :exit t) - ("r" winner-redo "window-Redo" :exit t)) - - ;; (with-eval-after-load "evil" - ;; (define-key evil-normal-state-map (kbd ";t") 'sd/hydra-window-layout/body)) - + ("r" winner-redo "window-Redo" :exit t) + ("C-h" (lambda () (interactive) (evil-window-increase-width 3)) "<<") + ("C-l" (lambda () (interactive) (evil-window-decrease-width 3)) ">>") + ("C-k" (lambda () (interactive) (evil-window-increase-height 3)) "^") + ("C-j" (lambda () (interactive) (evil-window-decrease-height 3)) "v") + ("=" balance-windows "=" :exit t) + ("q" nil "quit")) + + (defhydra sd/hydra-gtags (:color red :colums nil) + "ggtags - global" + ("d" sd/ggtags-find-definition "Definition" :exit t) + ("r" ggtags-find-reference "Reference" :exit t) + ("s" sd/ggtags-find-symbol "Symbol" :exit t)) + + (defhydra sd/hydra-projectile (:color red :column nil) + "Projectile: " + ("s" projectile-switch-open-project "Switch" :exit t) + ("f" projectile-find-file "File" :exit t) + ("b" projectile-switch-to-buffer "Buffer" :exit t) + ("p" projectile-switch-project "Project" :exit t)) #+END_SRC *** hydra launcher @@ -2146,6 +2239,24 @@ here on Mac, just use "open" commands to pen =.pdf=, =.html= and image files (yas-reload-all)) #+END_SRC +** YouCompleteMe +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package ycmd + :ensure t + :init + (use-package company-ycmd + :ensure t + :init + (setq company-ycmd-enable-fuzzy-matching nil) + :config + (company-ycmd-setup)) + (setq ycmd-force-semantic-completion t) + (add-hook 'c++-mode-hook 'ycmd-mode) + (add-hook 'c-mode-hook 'ycmd-mode) + (set-variable 'ycmd-server-command '("python" "/Users/peng/project/ycmd/ycmd")) + (set-variable 'ycmd-global-config "/Users/peng/project/ycmd/cpp/ycm/.ycm_extra_conf.py")) +#+END_SRC + ** company and yasnippet Add yasnippet as the company candidates @@ -2272,14 +2383,21 @@ Refer, [[http://emacs.stackexchange.com/questions/7908/how-to-make-yasnippet-and (set-face-attribute 'font-lock-function-name-face nil :foreground "#A6E22E" :weight 'normal :slant 'normal) (set-face-attribute 'font-lock-variable-name-face nil :foreground "#00FF00") - (font-lock-add-keywords 'c-mode - ;; highlight %s \n - '(("\\([%\\][a-zA-Z]\\)" (1 font-lock-keyword-face prepend)) - ("[^[:alpha:]]\\([[:digit:]]*\\)[^[:alpha:]]" (1 font-lock-constant-face append)) - ;; hex number - ("[^[:alpha:]]\\(0[x\\|X][0-9a-fA-F]*\\)[^[:alpha:]]" (1 font-lock-constant-face append)) - ;; hightlight the function call - ("\\s\"?\\(\\(\\sw\\|\\s_\\)+\\(<-\\)?\\)\\s\"?*\\s-*(" (1 font-lock-function-name-face))) t) + (dolist (mode '(c-mode + c++-mode)) + (font-lock-add-keywords mode + ;; highlight %s \n + '(("\\([%\\][a-zA-Z]\\)" (1 font-lock-keyword-face prepend)) + ("[^[:alpha:]]\\([[:digit:]]*\\)[^[:alpha:]]" (1 font-lock-constant-face append)) + ;; hex number + ("[^[:alpha:]]\\(0[x\\|X][0-9a-fA-F]*\\)[^[:alpha:]]" (1 font-lock-constant-face append)) + ;; hightlight the function call + ("\\s\"?\\(\\(\\sw\\|\\s_\\)+\\(<-\\)?\\)\\s\"?*\\s-*(" (1 font-lock-function-name-face))) t)) + + (font-lock-add-keywords 'c++-mode + '( + ("[\s\\|::]\\(cin\\|cout\\|endl\\)[^[:alpha:][:digit:]]" (1 font-lock-constant-face append)) + ) t) #+END_SRC ** Emacs Lisp @@ -2356,18 +2474,18 @@ C/C++ ide tools ;; (setq c-default-style "stroustrup" ;; c-basic-offset 4) - ;; "C-M-j" is my global binding for avy goto line below - ;; disable it in c mode - (mapcar #'(lambda (map) - (define-key map (kbd "C-M-j") nil)) - (list c-mode-map - c++-mode-map - objc-mode-map)) + ;; ;; "C-M-j" is my global binding for avy goto line below + ;; ;; disable it in c mode + ;; (mapcar #'(lambda (map) + ;; (define-key map (kbd "C-M-j") nil)) + ;; (list c-mode-map + ;; c++-mode-map + ;; objc-mode-map)) ;; objective c (add-to-list 'auto-mode-alist '("\\.mm\\'" . objc-mode)) - (setq c-hungry-delete-key t) + (setq-default c-hungry-delete-key t) ;; Looks `c-hanging-braces-alist' doesn't work as expected when `electric-pair-mode' is enabled. @@ -2394,7 +2512,6 @@ C/C++ ide tools ;; (advice-add 'c-electric-brace :after (lambda (arg) "Add new line after insert {}" (newline-and-indent))) #+END_SRC - *** irony **** install irony server Install clang, on mac, it has =libclang.dylib=, but no develop headers. Install by =brew= @@ -2417,12 +2534,12 @@ then install irony searver, and =LIBCLANG_LIBRARY= and =LIBCLANG_INCLUDE_DIR= ac **** irony config irony-mode-hook, copied from [[https://github.com/Sarcasm/irony-mode][irony-mode]] github #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package irony - :ensure t - :config - (add-hook 'c++-mode-hook 'irony-mode) - (add-hook 'c-mode-hook 'irony-mode) - (add-hook 'objc-mode-hook 'irony-mode)) + ;; (use-package irony + ;; :ensure t + ;; :init + ;; (add-hook 'c++-mode-hook 'irony-mode) + ;; (add-hook 'c-mode-hook 'irony-mode) + ;; (add-hook 'objc-mode-hook 'irony-mode)) ;; replace the `completion-at-point' and `complete-symbol' bindings in ;; irony-mode's buffers by irony-mode's function @@ -2433,10 +2550,10 @@ irony-mode-hook, copied from [[https://github.com/Sarcasm/irony-mode][irony-mode (define-key irony-mode-map [remap complete-symbol] 'irony-completion-at-point-async)) - (add-hook 'irony-mode-hook 'my-irony-mode-hook) - (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options) + ;; (add-hook 'irony-mode-hook 'my-irony-mode-hook) + ;; (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options) - (add-hook 'c++-mode-local-vars-hook #'sd/c++-mode-local-vars) + ;; (add-hook 'c++-mode-local-vars-hook #'sd/c++-mode-local-vars) ;; add C++ completions, because by default c++ file can not complete ;; c++ std functions, another method is create .dir-local.el file, for p @@ -2450,28 +2567,28 @@ irony-mode-hook, copied from [[https://github.com/Sarcasm/irony-mode][irony-mode irony-company #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package company-irony - :ensure t) + ;; (use-package company-irony + ;; :ensure t) - (use-package flycheck-irony - :ensure t) + ;; (use-package flycheck-irony + ;; :ensure t) - (use-package company-c-headers - :ensure t - :config - (add-to-list 'company-c-headers-path-system "/usr/include/c++/4.2.1/") - (add-to-list 'company-c-headers-path-system "/usr/local/include/")) + ;; (use-package company-c-headers + ;; :ensure t + ;; :config + ;; (add-to-list 'company-c-headers-path-system "/usr/include/c++/4.2.1/") + ;; (add-to-list 'company-c-headers-path-system "/usr/local/include/")) ;; (with-eval-after-load 'company ;; (add-to-list 'company-backends 'company-irony) ;; (add-to-list 'company-backends 'company-c-headers)) - (with-eval-after-load 'company - (push '(company-irony :with company-yasnippet) company-backends) - (push '(company-c-headers :with company-yasnippet) company-backends)) + ;; (with-eval-after-load 'company + ;; (push '(company-irony :with company-yasnippet) company-backends) + ;; (push '(company-c-headers :with company-yasnippet) company-backends)) - (with-eval-after-load 'flycheck - (add-hook 'flycheck-mode-hook #'flycheck-irony-setup)) + ;; (with-eval-after-load 'flycheck + ;; (add-hook 'flycheck-mode-hook #'flycheck-irony-setup)) #+END_SRC *** flycheck @@ -2500,6 +2617,18 @@ irony-company (when (derived-mode-p 'c-mode 'c++-mode 'java-mode) (ggtags-mode 1)))) + (defun sd/ggtags-find-definition () + "Find the definition with current name completing." + (interactive) + (setq current-prefix-arg '(4)) + (call-interactively 'ggtags-find-definition)) + + (defun sd/ggtags-find-symbol () + "Find symbol" + (interactive) + (setq current-prefix-arg '(4)) + (call-interactively 'ggtags-find-other-symbol)) + (require 'cc-mode) (require 'semantic) (setq semanticdb-default-save-directory (concat MY-EMACS-TMP "/semantic/")) @@ -2531,7 +2660,7 @@ irony-company (setq out-file-name (shell-quote-argument (concat (file-name-sans-extension buffer-file-name) ".out")))) (setq-local compilation-read-command t) (set (make-local-variable 'compile-command) - (concat "g++ -Wall " + (concat "g++ -Wall -std=c++11 " current-file-name " -o " out-file-name @@ -2585,7 +2714,6 @@ Install =guile=, =guile= is an implementation of =Scheme= programming language. (add-to-list 'auto-mode-alist '("\\.rkt\\'" . racket-mode)) #+END_SRC - * Compile Set the environments vairables in compilation mode #+BEGIN_SRC emacs-lisp :tangle yes :results silent @@ -2786,6 +2914,13 @@ Emacs lisp auto-insert, based on the default module in =autoinsert.el=, but repl :ensure t) #+END_SRC +* Iedit +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package iedit + :ensure t + :init + (global-set-key (kbd "C-;") #'iedit-mode)) +#+END_SRC * Gnus ** Gmail setting Refer [[https://www.emacswiki.org/emacs/GnusGmail][GnusGmail]] @@ -3110,115 +3245,7 @@ We can use [[https://www.gnu.org/software/emms/quickstart.html][Emms]] for multi :commands (bing-dict-brief)) #+END_SRC -* 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) -#+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 - -** 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-switch-project-action (lambda () - (projectile-dired) - (sd/project-switch-action))) - (setq projectile-cache-file (concat sd-temp-directory "projectile.cache")) - :config - (add-to-list 'projectile-globally-ignored-files "GTAGS") - (projectile-global-mode t)) - - ;; change default-directory of scratch buffer to projectile-project-root - (defun sd/project-switch-action () - "Change default-directory of scratch buffer to current projectile-project-root directory" - (interactive) - (dolist (buffer (buffer-list)) - (if (string-match (concat "scratch.*" (projectile-project-name)) - (buffer-name buffer)) - (let ((root (projectile-project-root))) - (with-current-buffer buffer - (cd root)))))) - - - - ;; https://emacs.stackexchange.com/questions/16497/how-to-exclude-files-from-projectile - ;; (setq projectile-enable-caching t) - (if (executable-find "rg") - (progn - (defconst modi/rg-arguments - `("--line-number" ; line numbers - "--smart-case" - "--follow" ; follow symlinks - "--mmap") ; apply memory map optimization when possible - "Default rg arguments used in the functions in `projectile' package.") - - (defun modi/advice-projectile-use-rg () - "Always use `rg' for getting a list of all files in the project." - (mapconcat 'identity - (append '("\\rg") ; used unaliased version of `rg': \rg - modi/rg-arguments - '("--null" ; output null separated results, - "--files")) ; get file names matching the regex '' (all files) - " ")) - - (advice-add 'projectile-get-ext-command :override #'modi/advice-projectile-use-rg)) - (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 +* Project operations - =super= ** Windown & Buffer - =C-o= Defind a =hydra= function for windows, buffer & bookmark operations. And map it to =C-o= globally. @@ -3441,17 +3468,17 @@ Search, replace and hightlight will in later paragraph :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-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 "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) + ;; (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) @@ -3461,6 +3488,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 @@ -3746,6 +3776,45 @@ Occur search key bindings *** 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 "") '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-=") '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]] + +#+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 @@ -3759,7 +3828,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