Permalink
Cannot retrieve contributors at this time
Fetching contributors…
| ;;* require -*- lexical-binding: t -*- | |
| (require 'dired-x) | |
| (require 'dired-aux) | |
| (require 'term) | |
| ;;* set | |
| (setq dired-listing-switches | |
| (if (eq system-type 'windows-nt) | |
| "-alh" | |
| "-laGh1v --group-directories-first")) | |
| (advice-add 'dired-internal-noselect :filter-args 'ora-dired-internal-noselect) | |
| (defun ora-dired-internal-noselect (args) | |
| (cl-destructuring-bind (dir-or-list &optional switches mode) args | |
| (when (file-remote-p dir-or-list) | |
| (setq switches "-alh")) | |
| (list dir-or-list switches mode))) | |
| (setq directory-free-space-args "-Pmh") | |
| (setq dired-recursive-copies 'always) | |
| (setq dired-recursive-deletes 'always) | |
| (setq dired-omit-files | |
| (format "\\(?:\\.%s\\'\\)\\|%s\\|\\`\\.[^.]\\|\\`_minted" | |
| (regexp-opt | |
| '("aux" "log" "pickle" "synctex.gz" "run.xml" "bcf" "am" "in" "blx.bib" | |
| "vrb" "opt" "nav" "snm" "out")) | |
| (regexp-opt | |
| '("compile_commands.json" | |
| "__pycache__")))) | |
| (setq dired-omit-verbose nil) | |
| (setq dired-garbage-files-regexp | |
| "\\.idx\\|\\.run\\.xml$\\|\\.bbl$\\|\\.bcf$\\|.blg$\\|-blx.bib$\\|.nav$\\|.snm$\\|.out$\\|.synctex.gz$\\|\\(?:\\.\\(?:aux\\|bak\\|dvi\\|log\\|orig\\|rej\\|toc\\|pyg\\)\\)\\'") | |
| (setq dired-dwim-target t) | |
| (setq dired-guess-shell-alist-user | |
| '(("\\.pdf\\'" "evince" "okular") | |
| ("\\.\\(?:djvu\\|eps\\)\\'" "evince") | |
| ("\\.\\(?:jpg\\|jpeg\\|png\\|svg\\|gif\\|tiff\\|xpm\\|bmp\\)\\'" "eog") | |
| ("\\.\\(?:xcf\\)\\'" "gimp") | |
| ("\\.csv\\'" "libreoffice") | |
| ("\\.tex\\'" "pdflatex" "latex") | |
| ("\\.\\(?:mp4\\|mkv\\|avi\\|flv\\|ogv\\|ifo\\|m4v\\|wmv\\|webm\\)\\(?:\\.part\\)?\\'" | |
| "vlc") | |
| ("\\.\\(?:mp3\\|flac\\|wv\\)\\'" "rhythmbox") | |
| ("\\.html?\\'" "firefox") | |
| ("\\.cue?\\'" "audacious") | |
| ("\\.\\(?:pptx?\\|odt\\|xlsx?\\|docx?\\)\\'" "libreoffice"))) | |
| ;;* advice | |
| (defadvice dired-advertised-find-file (around ora-dired-subst-directory activate) | |
| "Replace current buffer if file is a directory." | |
| (interactive) | |
| (let* ((orig (current-buffer)) | |
| (filename (dired-get-filename t t)) | |
| (bye-p (file-directory-p filename))) | |
| ad-do-it | |
| (when (and bye-p (not (string-match "[/\\\\]\\.$" filename))) | |
| (kill-buffer orig)))) | |
| (defadvice dired-delete-entry (before ora-force-clean-up-buffers (file) activate) | |
| (let ((buffer (get-file-buffer file))) | |
| (when buffer | |
| (kill-buffer buffer)))) | |
| ;;* rest | |
| (defun ora-dired-get-size () | |
| (interactive) | |
| (let* ((cmd (concat "du -sch " | |
| (mapconcat (lambda (x) (shell-quote-argument (file-name-nondirectory x))) | |
| (dired-get-marked-files) " "))) | |
| (res (shell-command-to-string cmd))) | |
| (if (string-match "\\(^[ 0-9.,]+[A-Za-z]+\\).*total$" res) | |
| (message (match-string 1 res)) | |
| (error "unexpected output %s" res)))) | |
| (defvar ora-dired-filelist-cmd | |
| '(("vlc" "-L"))) | |
| (defun ora-dired-start-process (cmd &optional file-list) | |
| (interactive | |
| (let ((files (dired-get-marked-files t nil))) | |
| (list | |
| (cond ((memq system-type '(windows-nt cygwin)) | |
| nil) | |
| (current-prefix-arg | |
| (dired-read-shell-command "& on %s: " nil files)) | |
| (t | |
| (let ((prog (dired-guess-default files))) | |
| (if (consp prog) | |
| (car prog) | |
| prog)))) | |
| files))) | |
| (if (eq system-type 'windows-nt) | |
| (dolist (file file-list) | |
| (w32-shell-execute "open" (expand-file-name file))) | |
| (when (eq system-type 'cygwin) | |
| (setq cmd "cygstart")) | |
| (let (list-switch) | |
| (start-process | |
| cmd nil shell-file-name | |
| shell-command-switch | |
| (format | |
| "nohup 1>/dev/null 2>/dev/null %s \"%s\"" | |
| (if (and (> (length file-list) 1) | |
| (setq list-switch | |
| (cadr (assoc cmd ora-dired-filelist-cmd)))) | |
| (format "%s %s" cmd list-switch) | |
| cmd) | |
| (mapconcat #'expand-file-name file-list "\" \"")))))) | |
| (defun ora-dired-open-term () | |
| "Open an `ansi-term' that corresponds to current directory." | |
| (interactive) | |
| (let ((current-dir (dired-current-directory))) | |
| (term-send-string | |
| (ora-terminal) | |
| (if (file-remote-p current-dir) | |
| (let ((v (tramp-dissect-file-name current-dir t))) | |
| (format "ssh %s@%s\n" | |
| (aref v 1) (aref v 2))) | |
| (format "cd '%s'\n" current-dir))) | |
| (setq default-directory current-dir))) | |
| (require 'hydra) | |
| (defhydra hydra-marked-items (dired-mode-map "") | |
| " | |
| Number of marked items: %(length (dired-get-marked-files)) | |
| " | |
| ("m" dired-mark "mark")) | |
| (defun ora-ediff-files () | |
| (interactive) | |
| (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 and hook | |
| (define-key dired-mode-map "r" 'ora-dired-start-process) | |
| (define-key dired-mode-map "e" 'ora-ediff-files) | |
| (define-key dired-mode-map (kbd "C-t") nil) | |
| (define-key dired-mode-map "i" 'counsel-find-file) | |
| (define-key dired-mode-map "I" 'dired-insert-subdir) | |
| (define-key dired-mode-map "j" 'dired-next-line) | |
| (define-key dired-mode-map "k" 'dired-previous-line) | |
| (define-key dired-mode-map "h" 'dired-do-shell-command) | |
| (define-key dired-mode-map "Y" 'ora-dired-rsync) | |
| (define-key dired-mode-map (kbd "C-j") 'dired-find-file) | |
| (define-key dired-mode-map (kbd "%^") 'dired-flag-garbage-files) | |
| (define-key dired-mode-map (kbd "z") 'ora-dired-get-size) | |
| (define-key dired-mode-map "F" 'find-name-dired) | |
| (define-key dired-mode-map "f" 'dired-goto-file) | |
| (define-key dired-mode-map (kbd "M-o") 'dired-omit-mode) | |
| (define-key dired-mode-map (kbd "`") 'ora-dired-open-term) | |
| (define-key dired-mode-map (kbd "'") 'eshell-this-dir) | |
| (define-key dired-mode-map "a" 'ora-dired-up-directory) | |
| (define-key dired-mode-map "!" 'sudired) | |
| (define-key dired-mode-map "h" nil) | |
| (define-key dired-mode-map "O" 'ora-dired-other-window) | |
| (defun ora-dired-other-window () | |
| (interactive) | |
| (save-selected-window | |
| (dired-find-file-other-window))) | |
| (defun ora-dired-up-directory () | |
| (interactive) | |
| (let ((buffer (current-buffer))) | |
| (dired-up-directory) | |
| (unless (equal buffer (current-buffer)) | |
| (kill-buffer buffer)))) | |
| (use-package make-it-so | |
| :commands make-it-so mis-mode | |
| :init | |
| (setq mis-recipes-directory | |
| (expand-file-name | |
| "git/make-it-so/recipes/" emacs-d))) | |
| (add-to-list 'dired-compress-file-suffixes | |
| '("\\.rar\\'" "" "unrar x '%i'")) | |
| (add-to-list 'dired-compress-file-suffixes | |
| '("\\.7z\\'" "" "7z x '%i'")) | |
| (add-to-list 'dired-compress-file-suffixes | |
| '("\\.tgz\\'" "" "gzip -dc %i | tar -xv")) | |
| (eval-after-load 'tramp-sh | |
| '(progn | |
| (setq tramp-sh-file-name-handler-alist | |
| (assq-delete-all 'vc-registered tramp-sh-file-name-handler-alist)))) | |
| ;;;###autoload | |
| (defun ora-dired-hook () | |
| (mis-mode 1) | |
| (dired-omit-mode)) | |
| (defun ora-dired-utf8-unix () | |
| (interactive) | |
| (let ((files (dired-get-marked-files))) | |
| (dolist (file files) | |
| (find-file file) | |
| (set-buffer-file-coding-system 'utf-8-unix) | |
| (delete-trailing-whitespace) | |
| (save-buffer) | |
| (kill-buffer)))) | |
| (provide 'ora-dired) |