Make Total Commmander like key binding for Enter and Backspace.
authorOleksandr Gavenko <gavenkoa@gmail.com>
Fri, 10 Sep 2010 18:46:13 +0300
changeset 463 adc3abb3c1fc
parent 462 f99a3783e44e
child 464 ae073d35f674
child 465 0a9cbfab10f4
Make Total Commmander like key binding for Enter and Backspace.
.emacs-my
--- a/.emacs-my	Fri Sep 10 15:26:25 2010 +0300
+++ b/.emacs-my	Fri Sep 10 18:46:13 2010 +0300
@@ -462,13 +462,37 @@
 ;;  dired-recursive-copies 'top
 ;;  dired-recursive-deletes 'top)
 
+(defun my-dired-up-dir ()
+  "'Reuse' buffer if enter to dir or open new buffer if enter to file."
+  (interactive)
+  (let* ( (dir (dired-current-directory)) (i (- (length dir) 2)) newdir )
+    (while (and
+            (>= i 0)
+            (not (equal (aref dir i) ?/)) )
+      (setq i (- i 1))
+      )
+    (setq newdir (substring dir 0 (max 0 i)))
+    (when (file-directory-p newdir)
+      (find-alternate-file newdir)
+      (dired-goto-file dir)
+      )
+    ))
+(define-key dired-mode-map (kbd "<backspace>") 'my-dired-up-dir)
+
+(defun my-dired-enter-to-dir ()
+  "'Reuse' buffer if enter to dir or open new buffer if enter to file."
+  (interactive)
+  (let ( (file (dired-get-file-for-visit)) )
+    (if (file-directory-p file)
+        (find-alternate-file file)
+      (find-file file)
+      )))
+(define-key dired-mode-map (kbd "<return>")
+  'my-dired-enter-to-dir)
+
 (when (>= emacs-major-version 22)
   ;; Enable 'a' command.
   (put 'dired-find-alternate-file 'disabled nil)
-  (define-key dired-mode-map (kbd "<return>")
-    'dired-find-alternate-file)
-  (define-key dired-mode-map (kbd "<backspace>")
-    (lambda () (interactive) (find-alternate-file "..")))
   )
 
 ;;; ----------------------------------------------------------------