          ("C-M-z" . helm-resume)
          ("C-x C-f" . helm-find-files)
          ("C-x b" . helm-mini)
-         ;("C-x o" . helm-occur)
+         ("C-x o" . helm-occur)
          ("M-y" . helm-show-kill-ring)
          ("C-h a" . helm-apropos)
-;         ("C-h m" . helm-man-woman)
+         ("C-h m" . helm-man-woman)
          ("C-h SPC" . helm-all-mark-rings)
          ("C-x C-i" . helm-semantic-or-imenu)
          ("C-x C-m" . helm-M-x)
          ("C-x C-b" . helm-buffers-list)
-         ("C-x v" . helm-projectile)
-         ("C-x p" . helm-projectile-ag)
+         ("C-c p g" . helm-google-suggest)
+         ("C-c p p" . helm-projectile)
+         ("C-c p f" . helm-projectile-find-file)
+         ("C-c p a" . helm-do-ag-project-root)
          :map helm-map
-         ("<tab>" . helm-execute-persistent-action))
+         ("<tab>" . helm-execute-persistent-action)
+         ("C-i"   . helm-execute-persistent-action)
+         ("C-z"   . helm-select-action))
   :init
   :config
-  (setq helm-split-window-in-side-p t
-        helm-split-window-default-side 'below
-        helm-idle-delay 0.0
-        helm-input-idle-delay 0.01
-        helm-quick-update t
-        helm-ff-skip-boring-files t)
+  (setq
+
+   helm-split-window-in-side-p t
+   helm-move-to-line-cycle-in-source t ; move to end or beginning of source when reaching top or bottom of source.
+   helm-ff-search-library-in-sexp t ; search for library in `require' and `declare-function' sexp.
+   helm-scroll-amount 4 ; scroll 4 lines other window using M-<next>/M-<prior>
+   helm-split-window-default-side 'below
+   helm-ff-file-name-history-use-recentf t
+   helm-candidate-number-limit 500 ; limit the number of displayed canidates
+   helm-buffers-fuzzy-matching t          ; fuzzy matching buffer names when non-nil
+   helm-M-x-fuzzy-matching t
+                                        ; useful in helm-mini that lists buffers
+   helm-idle-delay 0.0
+   helm-input-idle-delay 0.01
+   helm-quick-update t
+   helm-ff-skip-boring-files t)
   (helm-mode 1)
-  )
+  (helm-autoresize-mode t))
 
 (require 'helm-grep)
 
 ;; The default "C-x c" is quite close to "C-x C-c", which quits Emacs.
 ;; Changed to "C-c h". Note: We must set "C-c h" globally, because we
 ;; cannot change `helm-command-prefix-key' once `helm-config' is loaded.
-;(global-set-key (kbd "C-c h") 'helm-command-prefix)
+(global-set-key (kbd "C-c h") 'helm-command-prefix)
 (global-unset-key (kbd "C-x c"))
-
-(define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action) ; rebihnd tab to do persistent action
-(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action) ; make TAB works in terminal
-(define-key helm-map (kbd "C-z")  'helm-select-action) ; list actions using C-z
 
 (define-key helm-grep-mode-map (kbd "<return>")  'helm-grep-mode-jump-other-window)
 (define-key helm-grep-mode-map (kbd "n")  'helm-grep-mode-jump-other-window-forward)

;; If nil, you can slightly boost invoke speed in exchange for text color
(setq helm-swoop-speed-or-color t)

(helm-mode 1)
                                        ;(define-key shell-mode-map (kbd "C-c C-l") 'helm-comint-input-ring)
(eval-after-load 'shell
  '(define-key shell-mode-map  (kbd "C-c C-l") 'helm-comint-input-ring)); [(\C-z)] 'clear-shell-buffer))
(add-hook 'shell-mode-hook 'my-shell-mode-hook)


(use-package helm-zhihu-daily
  :ensure t
  :config)

(use-package docker-tramp
  :ensure t)
