+Occur search key bindings
+
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+
+ (define-key occur-mode-map (kbd "C-n")
+ (lambda ()
+ (interactive)
+ (occur-next)
+ (occur-mode-goto-occurrence-other-window)
+ (recenter)
+ (other-window 1)))
+
+ (define-key occur-mode-map (kbd "C-p")
+ (lambda ()
+ (interactive)
+ (occur-prev)
+ (occur-mode-goto-occurrence-other-window)
+ (recenter)
+ (other-window 1)))
+
+#+END_SRC
+
+
+** =M-o= as prefix key for windows
+
+** =M-g= as prefix key for launcher
+
+** others
+
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+
+
+ ;; C-' undefined
+ ;; C-. undefined
+#+END_SRC
+
+* Eshell
+
+Eshell alias
+
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+
+ (defalias 'e 'ido-find-file)
+ (defalias 'ff 'ido-find-file)
+ (defalias 'ee 'ido-find-file-other-window)
+
+#+END_SRC
+
+Quickly start eshll in split window below, refer [[http://www.howardism.org/Technical/Emacs/eshell-fun.html][eshell-here]]
+
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+
+ (defun eshell-x ()
+ (insert "exit")
+ (eshell-send-input)
+ (delete-window))
+
+ (defun eshell-here ()
+ "Opens up a new shell in the directory associated with the
+ current buffer's file. The eshell is renamed to match that
+ directory to make multiple eshell windows easier."
+ (interactive)
+ (let* ((parent (if (buffer-file-name)
+ (file-name-directory (buffer-file-name))
+ default-directory))
+ (height (/ (window-total-height) 3))
+ (name (car (last (split-string parent "/" t)))))
+ (split-window-vertically (- height))
+ (other-window 1)
+ (if (get-buffer (concat "*eshell: " name "*"))
+ (progn
+ (message "buffer exist")
+ (switch-to-buffer (concat "*eshell: " name "*")))
+ (progn
+ (eshell "new")
+ (rename-buffer (concat "*eshell: " name "*"))
+
+ (insert (concat "ls"))
+ (eshell-send-input)))))
+
+ ;; (global-set-key (kbd "M-`") (lambda ()
+ ;; (interactive)
+ ;; (if (buffer-name))))
+
+#+END_SRC