emacs - dired mode, disable ido-completing for dired-goto-file
[dotfiles.git] / emacs.d / config.org
index 6d3b4c3..5fd431a 100644 (file)
@@ -47,6 +47,9 @@ Set the emacs load path
   (show-paren-mode 1)
   ;; don't backupf
   (setq make-backup-files nil)
+
+  ;;supress the redefined warning at startup
+  (setq ad-redefinition-action 'accept)
 #+END_SRC
 
 *** Custom file 
@@ -144,13 +147,13 @@ Check out [[http://tapoueh.org/emacs/el-get.html][el-get]].
 #+END_SRC
 
 * Color and Fonts Settings
-
 ** highlight current line
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
-  (global-hl-line-mode)
-
+  ;; (global-hl-line-mode)
+  ;; don't want high light current line in eshell/term mode
+  (add-hook 'prog-mode-hook 'hl-line-mode)
+  (add-hook 'text-mode-hook 'hl-line-mode)
+  (add-hook 'dired-mode-hook 'hl-line-mode)
 #+END_SRC
 
 ** Smart Comments
@@ -166,39 +169,29 @@ Check out [[http://tapoueh.org/emacs/el-get.html][el-get]].
 #+END_SRC
 
 ** Font Setting
-
 syntax highlighting
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
   (global-font-lock-mode 1)
-
 #+END_SRC
 
 [[https://github.com/i-tu/Hasklig][Hasklig]] and Source Code Pro, defined fonts family
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
   (if window-system
       (defvar sd/fixed-font-family
         (cond ((x-list-fonts "Hasklig")         "Hasklig")
-              ((x-list-fonts "Source Code Pro") "Source Code Pro:weight:light")
+              ((x-list-fonts "Source Code Pro") "Source Code Pro:weight")
               ((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."))
-
 #+END_SRC
 
 Setting the fonts 
-
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
   (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 130)
         (set-face-font 'default sd/fixed-font-family)))
-
 #+END_SRC
 
 ** Color Theme
@@ -206,7 +199,6 @@ Setting the fonts
 Loading theme should be after all required loaded, refere [[https://github.com/jwiegley/use-package][:defer]] in =use-package=
 
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
   (setq vc-follow-symlinks t)
 
   (use-package color-theme
@@ -216,7 +208,9 @@ Loading theme should be after all required loaded, refere [[https://github.com/j
               :ensure t
               :no-require t
               :config
-              (load-theme 'sanityinc-tomorrow-bright t)))
+              ;; (load-theme 'sanityinc-tomorrow-bright t)
+              (load-theme 'molokai t)
+              ))
 
   ;(eval-after-load 'color-theme
   ;  (load-theme 'sanityinc-tomorrow-bright t))
@@ -343,6 +337,11 @@ Enable rainbow mode in emacs lisp mode
 
 #+END_SRC
 
+** cusor color
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (set-cursor-color 'red)
+#+END_SRC
+
 * Mode-line
 ** clean mode line
 clean mode line, Refer to [[https://www.masteringemacs.org/article/hiding-replacing-modeline-strings][Marstering Emacs]], some greek character see [[http://xahlee.info/math/math_unicode_greek.html][math_unicode_greek]]
@@ -592,7 +591,7 @@ Use [[https://github.com/DarwinAwardWinner/ido-ubiquitous][ido-ubiquitous]] for
   (use-package ido-exit-target
     :ensure t
     :init
-    (mapcar '(lambda (map)
+    (mapcar #'(lambda (map)
               (define-key map (kbd "C-j") #'ido-exit-target-other-window)
               (define-key map (kbd "C-k") #'ido-exit-target-split-window-below))
             (list ido-buffer-completion-map
@@ -1209,9 +1208,10 @@ Fix the font size of line number
 I like [[https://github.com/coldnew/linum-relative][linum-relative]], just like the =set relativenumber= on =vim=
 
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
   (use-package linum-relative
     :ensure t
+    :init
+    (setq linum-relative-current-symbol "")
     :config
     (defun linum-new-mode ()
       "If line numbers aren't displayed, then display them.
@@ -1226,7 +1226,6 @@ I like [[https://github.com/coldnew/linum-relative][linum-relative]], just like
 
   ;; auto enable linum-new-mode in programming modes
   (add-hook 'prog-mode-hook 'linum-relative-mode)
-
 #+END_SRC
 
 ** Save File Position
@@ -1247,7 +1246,7 @@ define =multi-term= mapping to disable some mapping which is used globally.
     :ensure t)
 
   (defun sd/term-mode-mapping ()
-    (mapcar (lambda (map)
+    (mapcar #'(lambda (map)
               (define-key map (kbd "C-o") nil)
               (define-key map (kbd "C-g") nil))
             (list term-mode-map
@@ -1472,6 +1471,29 @@ brew install the-silver-searcher
   (add-hook 'text-mode-hook 'table-recognize)
 #+END_SRC
 
+** url-download
+To download file in =elisp=, best is =url-copy-file=, here refer [[http://stackoverflow.com/questions/4448055/download-a-file-with-emacs-lisp][download-a-file-with-emacs-lisp]] using =url-retrieve-synchronously= wrapping
+as a http download client tool
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (defun sd/download-file (&optional url download-dir download-name)
+    (interactive)
+    (let ((url (or url
+                   (read-string "Enter download URL: ")))
+          (download-dir (or (read-string "Save to (~/Downloads): ") "~/Downloads")))
+      (let ((download-buffer (url-retrieve-synchronously url)))
+        (save-excursion
+          (set-buffer download-buffer)
+          ;; we may have to trim the http response
+          (goto-char (point-min))
+          (re-search-forward "^$" nil 'move)
+          (forward-char)
+          (delete-region (point-min) (point))
+          (write-file (concat (or download-dir
+                                  "~/Downloads/")
+                              (or download-name
+                                  (car (last (split-string url "/" t))))))))))
+#+END_SRC
+
 * Dired
 ** Dired bindings
 =C-o= is defined as a global key for window operation, here unset it in dired mode
@@ -1511,7 +1533,8 @@ brew install the-silver-searcher
     (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)) 
+    (define-key dired-mode-map (kbd "I") 'other-window)
+    (define-key dired-mode-map (kbd "o") 'other-window)) 
 
   (use-package dired
     :config
@@ -1581,6 +1604,7 @@ Disalble =ido= when new a directory or file in =dired= mode
   ;; call the function which you want to disable ido
   (mk-disable-ido 'dired-create-directory)
   (mk-disable-ido 'sd/dired-new-file)
+  (mk-disable-ido 'dired-goto-file)
 #+END_SRC
 
 ** Dired open with
@@ -1667,14 +1691,23 @@ here on Mac, just use "open" commands to pen =.pdf=,  =.html= and image files
 #+END_SRC
 
 * Completion
-company mode and company-statistics
+** company mode and company-statistics
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package company
     :ensure t
     :diminish company-mode
     :init (setq company-idle-delay 0.1)
+    (setq company-selection-wrap-around t)
     :config
-    (global-company-mode))
+    (define-key company-active-map (kbd "M-n") nil)
+    (define-key company-active-map (kbd "M-p") nil)
+    (define-key company-active-map (kbd "C-n") #'company-select-next)
+    (define-key company-active-map (kbd "C-p") #'company-select-previous)
+     ;; should map both (kbd "TAB") and [tab],https://github.com/company-mode/company-mode/issues/75
+    (define-key company-active-map (kbd "TAB") #'company-complete-selection)
+    (define-key company-active-map [tab] #'company-complete-selection)
+    (global-company-mode)
+    (setq company-global-modes '(not org-mode)))
 
   (use-package company-statistics
     :ensure t
@@ -1682,6 +1715,116 @@ company mode and company-statistics
     (company-statistics-mode))
 #+END_SRC
 
+** YASnippet
+*** yasnippet
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (use-package yasnippet
+    :ensure t
+    :defer t
+    :init
+    (add-hook 'prog-mode-hook #'yas-minor-mode)
+    :config
+    (yas-reload-all))
+#+END_SRC
+
+
+** company and yasnippet
+Add yasnippet as the company candidates
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  ;Add yasnippet support for all company backends
+  ;https://github.com/syl20bnr/spacemacs/pull/179
+  (defvar company-mode/enable-yas t
+    "Enable yasnippet for all backends.")
+
+  (defun company-mode/backend-with-yas (backend)
+    (if (or (not company-mode/enable-yas) (and (listp backend) (member 'company-yasnippet backend)))
+        backend
+      (append (if (consp backend) backend (list backend))
+              '(:with company-yasnippet))))
+
+  (setq company-backends (mapcar #'company-mode/backend-with-yas company-backends))
+#+END_SRC
+
+Refer, [[http://emacs.stackexchange.com/questions/7908/how-to-make-yasnippet-and-company-work-nicer][how-to-make-yasnippet-and-company-work-nicer]]
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (defun check-expansion ()
+    (save-excursion
+      (if (looking-at "\\_>") t
+        (backward-char 1)
+        (if (looking-at "\\.") t
+          (backward-char 1)
+          (if (looking-at "->") t nil)))))
+
+  (defun do-yas-expand ()
+    (let ((yas/fallback-behavior 'return-nil))
+      (yas/expand)))
+
+  (defun tab-indent-or-complete ()
+    (interactive)
+    (cond
+     ((minibufferp)
+      (minibuffer-complete))
+     (t
+      (indent-for-tab-command)
+      (if (or (not yas/minor-mode)
+              (null (do-yas-expand)))
+          (if (check-expansion)
+              (progn
+                (company-manual-begin)
+                (if (null company-candidates)
+                    (progn
+                      (company-abort)
+                      (indent-for-tab-command)))))))))
+
+  (defun tab-complete-or-next-field ()
+    (interactive)
+    (if (or (not yas/minor-mode)
+            (null (do-yas-expand)))
+        (if company-candidates
+            (company-complete-selection)
+          (if (check-expansion)
+              (progn
+                (company-manual-begin)
+                (if (null company-candidates)
+                    (progn
+                      (company-abort)
+                      (yas-next-field))))
+            (yas-next-field)))))
+
+  (defun expand-snippet-or-complete-selection ()
+    (interactive)
+    (if (or (not yas/minor-mode)
+            (null (do-yas-expand))
+            (company-abort))
+        (company-complete-selection)))
+
+  (defun abort-company-or-yas ()
+    (interactive)
+    (if (null company-candidates)
+        (yas-abort-snippet)
+      (company-abort)))
+
+  '
+  ;; (require 'company)
+  ;; (require 'yasnippet)
+
+
+  ;; (global-set-key [tab] 'tab-indent-or-complete)
+  ;; (global-set-key (kbd "TAB") 'tab-indent-or-complete)
+  ;; (global-set-key [(control return)] 'company-complete-common)
+
+  ;; (define-key company-active-map [tab] 'expand-snippet-or-complete-selection)
+  ;; (define-key company-active-map (kbd "TAB") 'expand-snippet-or-complete-selection)
+
+  ;; (define-key yas-minor-mode-map [tab] nil)
+  ;; (define-key yas-minor-mode-map (kbd "TAB") nil)
+
+  ;; (define-key yas-keymap [tab] 'tab-complete-or-next-field)
+  ;; (define-key yas-keymap (kbd "TAB") 'tab-complete-or-next-field)
+  ;; (define-key yas-keymap [(control tab)] 'yas-next-field)
+  ;; (define-key yas-keymap (kbd "C-g") 'abort-company-or-yas)
+#+END_SRC
+
 * Libs
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package s
@@ -1799,11 +1942,14 @@ C/C++ ide tools
 
   ;; "C-M-j" is my global binding for avy goto line below
   ;; disable it in c mode
-  (mapcar '(lambda (map)
+  (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))
 #+END_SRC
 
 *** irony
@@ -1872,10 +2018,13 @@ irony-company
     :config
     (add-to-list 'company-c-headers-path-system "/usr/include/c++/4.2.1/"))
 
-  (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
+  ;;   (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 'flycheck
     (add-hook 'flycheck-mode-hook #'flycheck-irony-setup))
@@ -1887,17 +2036,6 @@ irony-company
     :ensure t)
 #+END_SRC
 
-*** yasnippet
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-  (use-package yasnippet
-    :ensure t
-    :defer t
-    :init
-    (add-hook 'prog-mode-hook #'yas-minor-mode)
-    :config
-    (yas-reload-all))
-#+END_SRC
-
 *** gtags
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package ggtags
@@ -1925,7 +2063,6 @@ irony-company
   (global-semantic-idle-scheduler-mode 1)
 
   (semantic-mode 1)
-
 #+END_SRC
 
 *** google C style
@@ -1943,6 +2080,42 @@ irony-company
     :ensure t)
 #+END_SRC
 
+** Scheme
+Install =guile=, =guile= is an implementation of =Scheme= programming language.
+#+BEGIN_SRC sh
+  brew install guile
+#+END_SRC
+
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (setq geiser-scheme-implementation 'guile)
+#+END_SRC
+
+#+BEGIN_SRC scheme
+  (define a "3")
+  a
+#+END_SRC
+
+#+RESULTS:
+: 3
+
+** Racket
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (use-package racket-mode
+    :ensure t
+    :config
+    (define-key racket-mode-map (kbd "s-r") 'racket-run)
+    (add-to-list 'racket-mode-hook (lambda () (lispy-mode 1))))
+
+  ;; set racket path
+  (setenv "PATH" (concat (getenv "PATH")
+                         ":" "/Applications/Racket v6.6/bin"))
+  (setenv "MANPATH" (concat (getenv "MANPATH")
+                            ":" "/Applications/Racket v6.6/man"))
+  (setq exec-path (append exec-path '("/Applications/Racket v6.6/bin")))
+
+  (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
@@ -1986,7 +2159,7 @@ Set the environments vairables in compilation mode
           (file-name-nondirectory (buffer-file-name)))
          ".hpp\"" \n \n
          "using namespace std;" \n \n
-         "int main ()"
+         "int main (int argc, char *argv[])"
          "\n{" \n 
          > _ \n
          "return 0;"
@@ -2005,7 +2178,7 @@ Set the environments vairables in compilation mode
          (file-name-sans-extension
           (file-name-nondirectory (buffer-file-name)))
          ".h\"" \n \n
-         "int main ()\n"
+         "int main (int argc, char *argv[])\n"
          "{" \n
          > _ \n
          "return 0;\n"
@@ -2554,6 +2727,7 @@ Most use =C-o C-o= to switch buffers; =C-o x, v= to split window; =C-o o= to del
     ;; other special buffers
     ("d" sd/project-or-dired-jump nil :exit t)
     ("b" ibuffer nil :exit t)
+    ("t" multi-term nil :exit t)
     ("e" sd/toggle-project-eshell nil :exit t)
     ("m" bookmark-jump-other-window nil :exit t)
     ("M" bookmark-set nil :exit t)
@@ -2707,6 +2881,11 @@ Search, replace and hightlight will in later paragraph
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (global-set-key (kbd "M-i") #'counsel-imenu)
   ;; (global-set-key (kbd "M-i") #'imenu)
+
+  ;; define M-[ as C-M-a
+  ;; http://ergoemacs.org/emacs/emacs_key-translation-map.html
+  (define-key key-translation-map (kbd "M-[") (kbd "C-M-a"))
+  (define-key key-translation-map (kbd "M-]") (kbd "C-M-e"))
 #+END_SRC
 
 *** Go-to line
@@ -2999,6 +3178,18 @@ stolen from [[https://github.com/mariolong/emacs.d/blob/f6a061594ef1b5d1f4750e9d
 #+END_SRC
 
 *** TODO make expand-region hydra work with lispy selected
+** =C-w= delete backward word
+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
+  (defun sd/kill-region-or-backward-kill-word ()
+    (interactive)
+    (if (region-active-p)
+        (kill-region (point) (mark))
+      (backward-kill-word 1)))
+
+  (global-set-key (kbd "C-w") 'sd/kill-region-or-backward-kill-word)
+#+END_SRC
+
 * key
 - passion
 - vision