emacs - ibuffer
[dotfiles.git] / emacs.d / config.org
index 424117f..387b480 100644 (file)
@@ -1096,6 +1096,14 @@ Toggle an eshell in split window below, refer [[http://www.howardism.org/Technic
   (global-set-key (kbd "s-e") 'sd/toggle-eshell-here)
 #+END_SRC
 
+** exec-path-from-shell
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (use-package exec-path-from-shell
+    :ensure t
+    :config
+    (exec-path-from-shell-initialize))
+#+END_SRC
+
 ** TODO smart display
 * Misc Settings
 
@@ -1300,25 +1308,6 @@ Type =o= to go to the link
 
 #+END_SRC
 
-** Tabbar
-
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
-  ;; (use-package tabbar-ruler
-  ;;   :ensure t
-  ;;   :init
-  ;;   (setq tabbar-ruler-global-tabbar t)
-  ;;   (setq tabbar-ruler-global-ruler t)
-  ;;   (setq tabbar-ruler-popu-menu t)
-  ;;   (setq tabbar-ruler-popu-toolbar t)
-  ;;   (setq tabbar-use-images t)
-  ;;   :config
-  ;;   (tabbar-ruler-group-by-projectile-project)
-  ;;   (global-set-key (kbd "s-1") 'tabbar-forward-group)
-  ;;   (global-set-key (kbd "s-2") 'tabbar-ruler-forward))
-
-#+END_SRC
-
 ** View only for some directory
 When see function by =C-h f=, and visit the source code, I would like the buffer is read only. See [[http://emacs.stackexchange.com/questions/3676/how-to-enter-view-only-mode-when-browsing-emacs-source-code-from-help/3681#3681][here]]
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
@@ -1430,38 +1419,54 @@ Color for Man-mode
 #+END_SRC
 
 * Dired
-** Dired config
+** 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
   (defun sd/dired-key-map ()
     "My keybindings for dired"
     (interactive)
-    (define-key dired-mode-map (kbd "SPC") 'scroll-up-command)
-    (define-key dired-mode-map (kbd "S-SPC") 'scroll-down-command)
+    ;; these two prefix are used globally
     (define-key dired-mode-map (kbd "C-o") nil)
     (define-key dired-mode-map (kbd "M-s") nil)
-    ;; (define-key dired-mode-map (kbd "l") 'dired-isearch-filenames)
+    ;; toggle hidden files
     (define-key dired-mode-map (kbd "H") 'dired-omit-mode)
+    ;; scroll 
+    (define-key dired-mode-map (kbd "SPC") 'scroll-up-command)
+    (define-key dired-mode-map (kbd "DEL") 'scroll-down-command)
+    (define-key dired-mode-map (kbd "j") 'diredp-next-line)
+    (define-key dired-mode-map (kbd "k") 'diredp-previous-line)
+    (define-key dired-mode-map (kbd "g") 'dired-goto-file)
+    ;; (define-key dired-mode-map (kbd "S-SPC") 'scroll-down-command)
+    ;; jump to fil/dirs
+    (define-key dired-mode-map (kbd "f") 'dired-isearch-filenames)
+    ;; subdir
     ;; i dired-maybe-insert-subdir
     ;; o dired-find-file-other-window (switch to other window)
     ;; O dired-display-file
+    (define-key dired-mode-map (kbd "G") 'ido-dired)
     (define-key dired-mode-map (kbd "c") 'sd/dired-new-file)
     (define-key dired-mode-map (kbd "h") 'dired-summary)
     (define-key dired-mode-map (kbd "r") 'revert-buffer)
-    (define-key dired-mode-map (kbd "f") 'dired-isearch-filenames)
-    (define-key dired-mode-map (kbd "DEL") (lambda () (interactive) (find-alternate-file "..")))
+    (define-key dired-mode-map (kbd "l") 'dired-display-file)
+    (define-key dired-mode-map [C-backspace] 'sd/dired-high-level-dir)
     (define-key dired-mode-map (kbd "?") 'describe-mode)
     (define-key dired-mode-map (kbd "z") #'sd/dired-get-size)
     (define-key dired-mode-map (kbd "C-d") 'dired-kill-subdir)
     (define-key dired-mode-map (kbd "M-d") 'dired-kill-subdir)
     (define-key dired-mode-map (kbd "J") 'diredp-next-subdir)
+    (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)) 
 
   (use-package dired
     :config
     (require 'dired-x)
+    ;; also load dired+
+    (use-package dired+
+      :ensure t
+      :init (setq diredp-hide-details-initially-flag nil))
+    
     (setq dired-omit-mode t)
     (setq dired-omit-files (concat dired-omit-files "\\|^\\..+$"))
     (add-hook 'dired-mode-hook (lambda ()
@@ -1473,23 +1478,14 @@ Color for Man-mode
     (interactive)
     (dired-why)
     (message
-     "Δ: d-delete, u-ndelete, x-punge, f-ind, o-ther window, R-ename, C-opy, c-create, +new dir, r-evert, h-summary, ?-help,"))
-  (setq dired-guess-shell-alist-user
-        '(("\\.pdf\\'" "evince" "okular")
-          ("\\.\\(?:djvu\\|eps\\)\\'" "evince")
-          ("\\.\\(?:jpg\\|jpeg\\|png\\|gif\\|xpm\\)\\'" "eog")
-          ("\\.\\(?:xcf\\)\\'" "gimp")
-          ("\\.csv\\'" "libreoffice")
-          ("\\.tex\\'" "pdflatex" "latex")
-          ("\\.\\(?:mp4\\|mkv\\|avi\\|flv\\|ogv\\)\\(?:\\.part\\)?\\'"
-           "vlc")
-          ("\\.\\(?:mp3\\|flac\\)\\'" "rhythmbox")
-          ("\\.html?\\'" "firefox")
-          ("\\.cue?\\'" "audacious")))
+     "Δ: d-delete, u-ndelete, x-punge, f-ind, o-ther window, R-ename, C-opy, c-create, +new dir, r-evert, /-filter, h-summary, ?-help"))
 
+  (defun sd/dired-high-level-dir ()
+    "Go to higher level directory"
+    (interactive)
+    (find-alternate-file ".."))
 #+END_SRC
 
-dired utils
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (defun sd/dired-new-file ()
     "Create a new file in dired mode"
@@ -1509,6 +1505,7 @@ dired utils
            (match-string 1))))))
 #+END_SRC
 
+** disable ido when dired new file
 When create a new directory, I want to disalbe =ido= completion. see [[http://stackoverflow.com/questions/7479565/emacs-ido-mode-and-creating-new-files-in-directories-it-keeps-changing-the-dire][here]]. Thhis code snippets copied
 from [[https://emacs.stackexchange.com/questions/13713/how-to-disable-ido-in-dired-create-directory/13795#13795?newreg%3Ddb17c20f7af3490fb11cf15f1d888e9e][How to disable IDO in ‘dired-create-directory’]]
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
@@ -1532,31 +1529,40 @@ Disalble =ido= when new a directory or file in =dired= mode
   (mk-disable-ido 'sd/dired-new-file)
 #+END_SRC
 
-** Dired+
+** Dired open with
+=!= =dired-do-shell-command=
+=&= =dired-do-async-shell-command=
+here on Mac, just use "open" commands to pen =.pdf=,  =.html= and image files
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-  (use-package dired+
-    :ensure t
-    :init
-    (setq diredp-hide-details-initially-flag nil)
-    :config
-    (define-key dired-mode-map (kbd "j") 'diredp-next-line)
-    (define-key dired-mode-map (kbd "k") 'diredp-previous-line)
-    (define-key dired-mode-map (kbd "g") 'dired-goto-file))
+  (setq dired-guess-shell-alist-user
+        '(("\\.pdf\\'" "open" "okular")
+          ("\\.\\(?:djvu\\|eps\\)\\'" "evince")
+          ("\\.\\(?:jpg\\|jpeg\\|png\\|gif\\|xpm\\)\\'" "open")
+          ("\\.\\(?:xcf\\)\\'" "gimp")
+          ("\\.csv\\'" "libreoffice")
+          ("\\.tex\\'" "pdflatex" "latex")
+          ("\\.\\(?:mp4\\|mkv\\|avi\\|flv\\|ogv\\)\\(?:\\.part\\)?\\'" "mplayer")
+          ("\\.\\(?:mp3\\|flac\\)\\'" "rhythmbox")
+          ("\\.html?\\'" "open")
+          ("\\.dmg\\'" "open")
+          ("\\.cue?\\'" "audacious")))
 #+END_SRC
 
 ** dired-hacks
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package dired-hacks-utils
-    :ensure t)
-
-
-  (defconst my-dired-media-files-extensions '("mp3" "mp4" "MP3" "MP4" "avi" "mpg" "flv" "ogg" "wmv" "mkv" "mov" "wma")
-  "Media file extensions that should launch in VLC.")
+    :ensure t
+    :defer t)
+#+END_SRC
 
-    (add-to-list 'dired-guess-shell-alist-user
-                 (list (concat "\\."
-                               (regexp-opt my-dired-media-files-extensions)
-                               "\\'") "mplayer"))
+** dired-narrow
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  ;;narrow dired to match filter
+  (use-package dired-narrow
+    :ensure t
+    :commands (dired-narrow)
+    :bind (:map dired-mode-map
+                ("/" . dired-narrow)))
 #+END_SRC
 
 * Ibuffer
@@ -1568,7 +1574,14 @@ Disalble =ido= when new a directory or file in =dired= mode
     (define-key ibuffer-mode-map (kbd "j") 'ibuffer-forward-line)
     (define-key ibuffer-mode-map (kbd "k") 'ibuffer-backward-line)
     (define-key ibuffer-mode-map (kbd "r") 'ibuffer-update)
-    (define-key ibuffer-mode-map (kbd "g") 'ibuffer-jump-to-buffer))
+    (define-key ibuffer-mode-map (kbd "g") 'ibuffer-jump-to-buffer)
+    (define-key ibuffer-mode-map (kbd "h") 'sd/ibuffer-summary))
+
+  (defun sd/ibuffer-summary ()
+    "Show summary of keybindings in ibuffer mode"
+    (interactive)
+    (message
+     "Β: m|u - (un)mark, /-filter, //-remove filter, t, RET, g, k, S, D, Q; q to quit; h for help"))
 #+END_SRC
 
 * Completion
@@ -2140,6 +2153,7 @@ Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g=
 
   (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)
@@ -2247,6 +2261,11 @@ Most use =C-o C-o= to switch buffers; =C-o x, v= to split window; =C-o o= to del
     ;; buffer / windows switch
     ("o" sd/toggle-max-windows "one" :exit t)
     ("C-k" sd/delete-current-window "del" :exit t)
+    ("D" (lambda ()
+             (interactive)
+             (kill-buffer)
+             (sd/delete-current-window))
+     "kill" :exit t)
     ("'" other-window "other" :exit t)
     ;; ("a" ace-window "ace")
     ("s" ace-swap-window "swap")
@@ -2258,8 +2277,8 @@ Most use =C-o C-o= to switch buffers; =C-o x, v= to split window; =C-o o= to del
     ;; ibuffer, dired, eshell, bookmarks
     ;; ("d" ace-delete-window "ace-one" :exit t)
     ("C-o" ido-switch-buffer nil :exit t)
-    ("d" projectile-dired nil :exit t)
-    ("b" ibuffer nil n:exit t)
+    ("d" sd/project-or-dired-jump nil :exit t)
+    ("b" ibuffer nil :exit t)
     ("e" eshell nil :exit t)
     ("m" bookmark-jump-other-window nil :exit t)
     ("M" bookmark-set nil :exit t)
@@ -2281,6 +2300,14 @@ Most use =C-o C-o= to switch buffers; =C-o x, v= to split window; =C-o o= to del
 
   (global-unset-key (kbd "C-o"))
   (global-set-key (kbd "C-o") 'sd/hydra-window/body)
+
+  (defun sd/project-or-dired-jump ()
+    "If under project, jump to the root directory, otherwise
+  jump to dired of current file"
+    (interactive)
+    (if (projectile-project-p)
+        (projectile-dired)
+      (dired-jump)))
 #+END_SRC
 
 ** Motion