[emacs/dired] add a few bindings
authorAmin Bandali <bandali@gnu.org>
Sun, 23 Dec 2018 21:37:55 +0000 (16:37 -0500)
committerAmin Bandali <bandali@gnu.org>
Sun, 23 Dec 2018 21:47:29 +0000 (16:47 -0500)
init.org

index 9a420d0..d148363 100644 (file)
--- a/init.org
+++ b/init.org
@@ -445,6 +445,26 @@ Convenience macro for =setq='ing multiple variables to the same value:
   `(progn ,@(mapcar (lambda (x) (list 'setq x value)) vars)))
 #+end_src
 
   `(progn ,@(mapcar (lambda (x) (list 'setq x value)) vars)))
 #+end_src
 
+The following process-related stuff from [[https://github.com/alezost/emacs-config][alezost's emacs-config]].
+
+#+begin_src emacs-lisp
+(defun a/start-process (program &rest args)
+  "Same as `start-process', but doesn't bother about name and buffer."
+  (let ((process-name (concat program "_process"))
+        (buffer-name  (generate-new-buffer-name
+                       (concat program "_output"))))
+    (apply #'start-process
+           process-name buffer-name program args)))
+
+(defun a/dired-start-process (program &optional args)
+  "Open current file with a PROGRAM."
+  ;; Shell command looks like this: "program [ARGS]... FILE" (ARGS can
+  ;; be nil, so remove it).
+  (apply #'a/start-process
+         program
+         (remove nil (list args (dired-get-file-for-visit)))))
+#+end_src
+
 * Core
 :PROPERTIES:
 :CUSTOM_ID: core
 * Core
 :PROPERTIES:
 :CUSTOM_ID: core
@@ -1052,7 +1072,37 @@ TODO: break this giant source block down into individual org sections.
 
 (use-package dired
   :defer t
 
 (use-package dired
   :defer t
-  :config (setq dired-listing-switches "-alh"))
+  :config
+  (setq dired-listing-switches "-alh")
+
+  ;; easily diff 2 marked files
+  ;; https://oremacs.com/2017/03/18/dired-ediff/
+  (defun dired-ediff-files ()
+    (interactive)
+    (require 'ediff)
+    (let ((files (dired-get-marked-files))
+          (wnd (current-window-configuration)))
+      (if (<= (length files) 2)
+          (let ((file1 (car files))
+                (file2 (if (cdr files)
+                           (cadr files)
+                         (read-file-name
+                          "file: "
+                          (dired-dwim-target-directory)))))
+            (if (file-newer-than-file-p file1 file2)
+                (ediff-files file2 file1)
+              (ediff-files file1 file2))
+            (add-hook 'ediff-after-quit-hook-internal
+                      (lambda ()
+                        (setq ediff-after-quit-hook-internal nil)
+                        (set-window-configuration wnd))))
+        (error "no more than 2 files should be marked"))))
+  :bind (:map dired-mode-map
+              ("e" . dired-ediff-files)
+              ("E" . dired-toggle-read-only)
+              ("z" . (lambda ()
+                       (interactive)
+                       (a/dired-start-process "zathura")))))
 
 (use-package eldoc
   :when (version< "25" emacs-version)
 
 (use-package eldoc
   :when (version< "25" emacs-version)