Emacs - Use Ivy instead of ido
[dotfiles.git] / emacs.d / config.org
index 4b7e6f4..aa75064 100644 (file)
@@ -60,6 +60,8 @@ Set system PATH and emacs exec path
 
   (when (display-graphic-p)
     (fringe-mode '(0 . 0)))
+  ;; (setq-default indicate-empty-lines t)
+  ;; (setq-default indicate-abuffer-boundaries 'right)
 #+END_SRC
 
 *** Custom file 
@@ -118,6 +120,11 @@ Make a temp directory for all cache/history files
   (setq large-file-warning-threshold nil)
 #+END_SRC
 
+*** Xterm mode
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (unless (display-graphic-p)
+    (xterm-mouse-mode))
+#+END_SRC
 * Package Management Tools
 ** Use-package
 Using [[https://github.com/jwiegley/use-package][use-package]] to manage emacs packages
@@ -180,7 +187,7 @@ Check out [[http://tapoueh.org/emacs/el-get.html][el-get]].
   (if window-system
       (defvar sd/fixed-font-family
         (cond ((x-list-fonts "Hasklig")         "Hasklig")
-              ((x-list-fonts "Source Code Pro") "Source Code Pro:weight") ;; weigth=light
+              ((x-list-fonts "Source Code Pro") "Source Code Pro:weight=light") ;; weigth=light
               ((x-list-fonts "Anonymous Pro")   "Anonymous Pro")
               ((x-list-fonts "M+ 1mn")          "M+ 1mn"))
         "The fixed width font based on what is installed, `nil' if not defined."))
@@ -601,9 +608,10 @@ set height in mode line
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package ido
     :ensure t
-    :init (setq ido-enable-flex-matching nil
+    :init (setq ido-enable-flex-matching t
                 ido-ignore-extensions t
                 ido-use-virtual-buffers t
+                ido-use-faces nil
                 ido-everywhere t)
     (setq ido-save-directory-list-file (concat sd-temp-directory "ido.last"))
     :config
@@ -616,15 +624,6 @@ set height in mode line
     (define-key ido-file-completion-map (kbd "C-w") #'ido-delete-backward-word-updir)
     (define-key ido-file-dir-completion-map (kbd "C-w") #'ido-delete-backward-updir)
     ;; (define-key ido-file-dir-completion-map (kbd "C-i") #'ido-copy-current-word)
-    
-    ;; (dolist (map (list
-    ;;               ido-buffer-completion-map
-    ;;               ido-file-completion-map
-    ;;               ido-file-dir-completion-map
-    ;;               ido-common-completion-map))
-    ;;   (define-key map (kbd "C-w") #'ido-delete-backward-word-updir)
-    ;;   ;; (define-key map (kbd "C-i") #'ido-copy-current-file-name)
-    ;;   )
     )
 
   (icomplete-mode t)
@@ -634,8 +633,6 @@ set height in mode line
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package flx-ido
     :ensure t
-    :init (setq ido-enable-flex-matching nil
-                ido-use-faces nil)
     :config (flx-ido-mode nil))
 #+END_SRC
 
@@ -1168,35 +1165,63 @@ extend org-mode's easy templates, refer to [[http://coldnew.github.io/coldnew-em
 *** variable-pitch-mode and fixed-pitch-mode
 [[https://yoo2080.wordpress.com/2013/05/30/monospace-font-in-tables-and-source-code-blocks-in-org-mode-proportional-font-in-other-parts/][monospace font in tables and source code blocks in org-mode, proportional font in other parts]]
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-  (unless (find-font (font-spec :name "Ubuntu Mono"))
-    (warn "Font not found Ubuntu Mono"))
-  (unless (find-font (font-spec :name "Source Code Pro"))
-    (warn "Font not found Source Code Pro"))
-  (unless (find-font (font-spec :name "Source Sans Pro"))
-    (warn "Font not found Source Sans Pro"))
+  (when (display-graphic-p)
+    (unless (find-font (font-spec :name "Ubuntu Mono"))
+      (warn "Font not found Ubuntu Mono"))
+    (unless (find-font (font-spec :name "Source Code Pro"))
+      (warn "Font not found Source Code Pro"))
+    (unless (find-font (font-spec :name "Source Sans Pro"))
+      (warn "Font not found Source Sans Pro")))
 
   (set-face-attribute 'variable-pitch nil :font "Source Sans Pro" :height 160)
   (set-face-attribute 'fixed-pitch nil :font "Source Code Pro" :height (face-attribute 'default :height))
 
-  ;; (add-hook 'text-mode-hook 'variable-pitch-mode)
 
   ;; 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))
+  ;; (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)
     
-    ;; 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))))
+  ;;     (set-face-attribute 'org-code nil :height default-font-size)
+  ;;     (set-face-attribute 'org-block nil :height default-font-size)
+  ;;     (set-face-attribute 'org-block-begin-line nil :background nil :foreground nil :inherit 'shadow :slant 'italic :height default-font-size)
+  ;;     (set-face-attribute 'org-block-end-line nil :background nil :foreground nil :inherit 'shadow :slant 'italic :height default-font-size)
+  ;;     (when (find-font (font-spec :name "Ubuntu Mono"))
+  ;;       (set-face-attribute 'org-table nil :family "Ubutu Mono" :height default-font-size)
+  ;;       (set-face-attribute 'org-formula nil :family "Ubutu Mono" :height default-font-size))))
+
+  (add-hook 'org-mode-hook
+            (lambda ()
+              (let ((default-font-size (- (face-attribute 'default :height) (if (display-graphic-p) 20 0))))
+                (set-face-attribute 'org-code nil :height default-font-size)
+                (set-face-attribute 'org-block nil :height default-font-size)
+                (set-face-attribute 'org-block-begin-line nil :background nil :foreground nil :inherit 'shadow :slant 'italic :height default-font-size)
+                (set-face-attribute 'org-block-end-line nil :background nil :foreground nil :inherit 'shadow :slant 'italic :height default-font-size)
+                (when (find-font (font-spec :name "Ubuntu Mono"))
+                  (set-face-attribute 'org-table nil :family "Ubutu Mono" :height default-font-size)
+                  (set-face-attribute 'org-formula nil :family "Ubutu Mono" :height default-font-size)))))
 #+END_SRC
 
 Also correct the face of  =org-meta-line= in =org-table= 
@@ -1493,12 +1518,12 @@ Type =o= to go to the link
 
 ** Smart Parens
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-  (use-package smartparens
-    :ensure t
-    :config
-    (progn
-      (require 'smartparens-config)
-      (add-hook 'prog-mode-hook 'smartparens-mode)))
+  ;; (use-package smartparens
+  ;;   :ensure t
+  ;;   :config
+  ;;   (progn
+  ;;     (require 'smartparens-config)
+  ;;     (add-hook 'prog-mode-hook 'smartparens-mode)))
 #+END_SRC
 
 ** Ace-Windows
@@ -1760,6 +1785,7 @@ as a http download client tool
       (dired-up-directory)
       (kill-buffer old)))
 #+END_SRC
+
 ** 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
@@ -2139,42 +2165,35 @@ Refer, [[http://emacs.stackexchange.com/questions/7908/how-to-make-yasnippet-and
 ** Color identiifiers mode
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package color-identifiers-mode
-    :ensure t)
+    :ensure t
+    :init
+    (dolist (mode '(emacs-lisp-mode-hook
+                    c-mode-hook
+                    c++-mode-hook))
+      (add-hook mode #'color-identifiers-mode))
+    :diminish color-identifiers-mode)
+
+  (global-prettify-symbols-mode t)
 #+END_SRC
 ** Font lock face
+
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-  (set-face-attribute 'font-lock-keyword-face nil :weight 'bold)
+  (set-face-attribute 'font-lock-keyword-face nil :foreground "#F92672"  :weight 'bold)
   (set-face-attribute 'font-lock-builtin-face nil :weight 'bold)
-#+END_SRC
+  (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")
 
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (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))))
-
-
-  ;; Also make function calls highlighted
-  (font-lock-add-keywords 'c-mode
-    '(("\\s\"?\\(\\(\\sw\\|\\s_\\)+\\(<-\\)?\\)\\s\"?*\\s-*("
-  (1 font-lock-function-name-face))) t)
-
-
-
+                            ("[^[: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)
 #+END_SRC
 
 ** Emacs Lisp
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-  (use-package color-identifiers-mode
-    :ensure t
-    :init
-    (add-hook 'emacs-lisp-mode-hook 'color-identifiers-mode)
-
-    :diminish color-identifiers-mode)
-
-  (global-prettify-symbols-mode t)
-#+END_SRC
-
 In Lisp Mode, =M-o= is defined, but I use this for global hydra window. So here disable this key
 bindings in =lispy-mode-map= after loaded. see [[http://stackoverflow.com/questions/298048/how-to-handle-conflicting-keybindings][here]]
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
@@ -2245,8 +2264,8 @@ C/C++ ide tools
 3. tags jump
 *** c/c++ style
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-  (setq c-default-style "stroustrup"
-        c-basic-offset 4)
+  ;; (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
@@ -2260,6 +2279,31 @@ C/C++ ide tools
   (add-to-list 'auto-mode-alist '("\\.mm\\'" . objc-mode))
 
   (setq c-hungry-delete-key t)
+
+
+  ;; Looks `c-hanging-braces-alist' doesn't work as expected when  `electric-pair-mode' is enabled.
+  (electric-pair-mode 1)
+
+  (defconst sd/c-style
+    '("stroustrup"
+      (c-tab-always-indent . t)
+      (c-basic-offset . 4)
+      (c-hanging-braces-alist . ((substatement-open before)
+                                 (statement-block-intro before)))
+      (c-hanging-colons-alist . ())
+      (c-echo-syntactic-information-p . nil)
+      (c-hanging-semi&comma-criteria . ()))
+    "My C programming style")
+
+  (c-add-style "sd-c-style" sd/c-style)
+
+  (setq c-default-style "sd-c-style")
+
+  (add-hook 'c-mode-hook '(lambda ()
+                            (c-toggle-auto-newline 1)
+                            (c-set-style "sd-c-style")))
+
+  ;; (advice-add 'c-electric-brace :after (lambda (arg) "Add new line after insert {}" (newline-and-indent)))
 #+END_SRC
 
 *** irony
@@ -2637,12 +2681,12 @@ Emacs lisp auto-insert, based on the default module in =autoinsert.el=, but repl
            ("\\.markdown\\'" . markdown-mode))
     :init (setq markdown-command "multimarkdown"))
 
-  (add-hook 'gfm-mode-hook (lambda ()
-                             (set-face-attribute 'markdown-inline-code-face nil :inherit 'fixed-pitch)
-                             (set-face-attribute 'markdown-pre-face nil :inherit 'fixed-pitch)))
-  (with-eval-after-load "gfm-mode"
-    (set-face-attribute 'markdown-inline-code-face nil :inherit 'fixed-pitch)
-    (set-face-attribute 'markdown-pre-face nil :inherit 'fixed-pitch))
+  ;; (add-hook 'gfm-mode-hook (lambda ()
+  ;;                            (set-face-attribute 'markdown-inline-code-face nil :inherit 'fixed-pitch)
+  ;;                            (set-face-attribute 'markdown-pre-face nil :inherit 'fixed-pitch)))
+  ;; (with-eval-after-load "gfm-mode"
+  ;;   (set-face-attribute 'markdown-inline-code-face nil :inherit 'fixed-pitch)
+  ;;   (set-face-attribute 'markdown-pre-face nil :inherit 'fixed-pitch))
 #+END_SRC
 
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
@@ -3032,6 +3076,31 @@ Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g=
           (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
@@ -3518,7 +3587,8 @@ stolen from [[https://github.com/mariolong/emacs.d/blob/f6a061594ef1b5d1f4750e9d
   (use-package swiper
     :ensure t
     :init
-    (setq ivy-use-virtual-buffers t)
+    (setq ivy-use-virtual-buffers nil)
+    (setq ivy-wrap t)
     (set-face-attribute 'ivy-current-match nil :background "Orange" :foreground "black")
     :config
     (ivy-mode)
@@ -3530,6 +3600,9 @@ stolen from [[https://github.com/mariolong/emacs.d/blob/f6a061594ef1b5d1f4750e9d
     (define-key swiper-map (kbd "M-.") (lambda ()
                                          (interactive)
                                          (insert (format "%s" (with-ivy-window (thing-at-point 'symbol)))))))
+
+  (with-eval-after-load "ivy"
+    (define-key ivy-minibuffer-map (kbd "C-o") 'ivy-dispatching-done))
 #+END_SRC
 
 ** Expand region map
@@ -3655,6 +3728,7 @@ blog with modify list
 
 draw one line top of the windows
 * test
+This is a test.
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   ;; test local mode line
   ;; (add-to-list 'load-path "~/.emacs.d/elisp")