Commit | Line | Data |
---|---|---|
4c05c418 AB |
1 | ;;; bandali-dired.el --- bandali's dired setup -*- lexical-binding: t; -*- |
2 | ||
3 | ;; Copyright (C) 2018-2020 Amin Bandali | |
4 | ||
5 | ;; Author: Amin Bandali <bandali@gnu.org> | |
6 | ;; Keywords: files | |
7 | ||
8 | ;; This program is free software; you can redistribute it and/or modify | |
9 | ;; it under the terms of the GNU General Public License as published by | |
10 | ;; the Free Software Foundation, either version 3 of the License, or | |
11 | ;; (at your option) any later version. | |
12 | ||
13 | ;; This program is distributed in the hope that it will be useful, | |
14 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 | ;; GNU General Public License for more details. | |
17 | ||
18 | ;; You should have received a copy of the GNU General Public License | |
19 | ;; along with this program. If not, see <https://www.gnu.org/licenses/>. | |
20 | ||
21 | ;;; Commentary: | |
22 | ||
23 | ;; My dired setup and customizations. | |
24 | ||
25 | ;;; Code: | |
26 | ||
c84be134 | 27 | (with-eval-after-load 'dired |
0596e3cf AB |
28 | (csetq |
29 | dired-dwim-target t | |
30 | dired-listing-switches "-alh" | |
31 | dired-recent-directories-file (b/var "dired-recent-directories.el") | |
32 | ls-lisp-dirs-first t | |
33 | ls-lisp-use-insert-directory-program nil) | |
679463c6 | 34 | |
3e61146e | 35 | (declare-function dired-dwim-target-directory "dired-aux") |
679463c6 AB |
36 | ;; easily diff 2 marked files |
37 | ;; https://oremacs.com/2017/03/18/dired-ediff/ | |
38 | (defun dired-ediff-files () | |
39 | (interactive) | |
40 | (require 'dired-aux) | |
41 | (defvar ediff-after-quit-hook-internal) | |
42 | (let ((files (dired-get-marked-files)) | |
43 | (wnd (current-window-configuration))) | |
44 | (if (<= (length files) 2) | |
45 | (let ((file1 (car files)) | |
46 | (file2 (if (cdr files) | |
47 | (cadr files) | |
48 | (read-file-name | |
49 | "file: " | |
50 | (dired-dwim-target-directory))))) | |
51 | (if (file-newer-than-file-p file1 file2) | |
52 | (ediff-files file2 file1) | |
53 | (ediff-files file1 file2)) | |
54 | (add-hook 'ediff-after-quit-hook-internal | |
55 | (lambda () | |
56 | (setq ediff-after-quit-hook-internal nil) | |
57 | (set-window-configuration wnd)))) | |
58 | (error "no more than 2 files should be marked")))) | |
59 | ||
c84be134 AB |
60 | ;; local key bindings |
61 | (define-key dired-mode-map (kbd "b") #'dired-up-directory) | |
62 | (define-key dired-mode-map (kbd "E") #'dired-ediff-files) | |
63 | (define-key dired-mode-map (kbd "e") #'dired-toggle-read-only) | |
64 | (define-key dired-mode-map (kbd "\\") #'dired-hide-details-mode) | |
65 | (define-key dired-mode-map (kbd "z") | |
66 | (lambda () | |
67 | (interactive) | |
68 | (b/dired-start-process "zathura"))) | |
69 | ||
679463c6 | 70 | (require 'dired-x) |
c84be134 AB |
71 | (csetq dired-guess-shell-alist-user |
72 | '(("\\.pdf\\'" "evince" "zathura" "okular") | |
73 | ("\\.doc\\'" "libreoffice") | |
74 | ("\\.docx\\'" "libreoffice") | |
75 | ("\\.ppt\\'" "libreoffice") | |
76 | ("\\.pptx\\'" "libreoffice") | |
77 | ("\\.xls\\'" "libreoffice") | |
78 | ("\\.xlsx\\'" "libreoffice") | |
79 | ("\\.flac\\'" "mpv")))) | |
80 | ;; hooks | |
81 | (add-hook 'dired-mode-hook #'dired-hide-details-mode) | |
679463c6 AB |
82 | |
83 | (provide 'bandali-dired) | |
4c05c418 | 84 | ;;; bandali-dired.el ends here |