summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmin Bandali <bandali@gnu.org>2018-12-23 16:37:55 -0500
committerAmin Bandali <bandali@gnu.org>2018-12-23 16:47:29 -0500
commitcb0c13d0b54257e02bdb611fec6c5c3b5c77f1c3 (patch)
tree36aad57f839fa6902bd3ea858d9095949b538ad3
parent2b34d6dd398163f85acd95cded83c573a02a5c72 (diff)
downloadconfigs-cb0c13d0b54257e02bdb611fec6c5c3b5c77f1c3.tar.gz
configs-cb0c13d0b54257e02bdb611fec6c5c3b5c77f1c3.tar.xz
configs-cb0c13d0b54257e02bdb611fec6c5c3b5c77f1c3.zip
[emacs/dired] add a few bindings
Diffstat (limited to '')
-rw-r--r--init.org52
1 files changed, 51 insertions, 1 deletions
diff --git a/init.org b/init.org
index 9a420d0..d148363 100644
--- 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
+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
@@ -1052,7 +1072,37 @@ TODO: break this giant source block down into individual org sections.
(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)