From d9cae60fa5048abd3528f96a285109329639fda6 Mon Sep 17 00:00:00 2001 From: Kyle Meyer Date: Fri, 23 Jan 2015 23:23:05 -0500 Subject: Improve organization and consistency of files - Add pages and more headings for large files. - Try to use consistent order for file (or page) structure. * Loading * Settings * Hooks * Any mode activation or function calls * My functions * Key bindings --- lisp/init-dired.el | 154 ++++++++++++++++++++++++++++------------------------- 1 file changed, 81 insertions(+), 73 deletions(-) (limited to 'lisp/init-dired.el') diff --git a/lisp/init-dired.el b/lisp/init-dired.el index b046c81..7c40a06 100644 --- a/lisp/init-dired.el +++ b/lisp/init-dired.el @@ -1,7 +1,7 @@ -(put 'dired-find-alternate-file 'disabled nil) - (require 'dired-x) +(put 'dired-find-alternate-file 'disabled nil) + ;; .git is present as part of `dired-omit-extensions', but this seems to ;; only be taken into account if a non-exension part exists. (setq dired-omit-files @@ -22,66 +22,17 @@ (append dired-omit-extensions km/latex-omit-extensions)) (setq-default dired-omit-mode t) -(setq dired-listing-switches "-alh" - dired-dwim-target t) +(setq dired-dwim-target t + dired-listing-switches "-alh") (setq dired-guess-shell-alist-user '(("\\.pdf\\'" "zathura"))) -(setq dired-recursive-deletes t - dired-recursive-copies t) - -(defun km/dired-copy-project-filename-as-kill () - "Copy names of marked project files into kill ring. -This is similar to `dired-copy-filename-as-kill', but the leading -path is always relative to `projectile-project-root'." - (interactive) - (km/dired-copy-filename-relative-to-directory - (projectile-project-root))) - -(defun km/dired-copy-filename-relative-to-directory (directory) - "Like `dired-copy-filename-as-kill', but the filename is always -relative to DIRECTORY." - (let* ((string - (mapconcat 'identity - (--map (file-relative-name it directory) - (dired-get-marked-files t)) - " "))) - (if (eq last-command 'kill-region) - (kill-append string nil) - (kill-new string)) - (message "%s" string))) - -(defun km/dired-copy-relative-filename-as-kill () - "Copy names of marked files into kill ring. -This is similar to `dired-copy-filename-as-kill', but the leading -path is always relative to the `default-directory' of the other -window." - (interactive) - (km/dired-copy-filename-relative-to-directory - (km/other-default-directory))) - -(defun km/other-default-directory () - "Get `default-directory' for result of `(other-window 1)'." - (save-window-excursion - (other-window 1) - default-directory)) - -(define-prefix-command 'km/dired-copy-filename-map) -(define-key km/dired-copy-filename-map "o" - 'km/dired-copy-relative-filename-as-kill) -(define-key km/dired-copy-filename-map "w" 'dired-copy-filename-as-kill) -(after 'projectile - (define-key km/dired-copy-filename-map "p" - 'km/dired-copy-project-filename-as-kill)) - -;; This overrides the default binding for `dired-copy-filename-as-kill'. -(define-key dired-mode-map "w" 'km/dired-copy-filename-map) +(setq dired-recursive-copies t + dired-recursive-deletes t) (add-hook 'dired-mode-hook 'dired-hide-details-mode) -(define-key dired-mode-map (kbd "C-c C-b") 'dired-up-directory) - (defun km/dired-switch-to-buffer () (interactive) (switch-to-buffer (km/dired-completing-buffer))) @@ -99,10 +50,6 @@ window." (derived-mode-p 'dired-mode)) (buffer-list))) -(define-key ctl-x-4-map "D" 'km/dired-switch-to-buffer-other-window) -;; This overrides the binding for `list-directory'. -(global-set-key (kbd "C-x C-d") 'km/dired-switch-to-buffer) - (defun km/org-open-dired-marked-files (&optional in-emacs) (interactive "P") (let* ((files (dired-get-marked-files)) @@ -111,36 +58,97 @@ window." (yes-or-no-p (format "Open %s files?" num-files))) (--each files (org-open-file it in-emacs))))) +;; This overrides the binding for `list-directory'. +(define-key dired-mode-map (kbd "C-c C-b") 'dired-up-directory) +(global-set-key (kbd "C-x C-d") 'km/dired-switch-to-buffer) + +(define-key ctl-x-4-map "D" 'km/dired-switch-to-buffer-other-window) + +(define-prefix-command 'km/dired-prefix-map) +(define-key dired-mode-map (kbd "C-c m") 'km/dired-prefix-map) + (after 'org ;; This overrides `dired-find-file', which is also bound to "f". (define-key dired-mode-map "e" 'km/org-open-dired-marked-files)) + +;;; Dired Narrow + +(define-key dired-mode-map "/" 'dired-narrow) + (define-prefix-command 'km/dired-narrow-prefix-map) -(define-key km/dired-narrow-prefix-map "n" 'dired-narrow) +(define-key km/dired-prefix-map "n" 'km/dired-narrow-prefix-map) + (define-key km/dired-narrow-prefix-map "f" 'dired-narrow-fuzzy) +(define-key km/dired-narrow-prefix-map "n" 'dired-narrow) (define-key km/dired-narrow-prefix-map "r" 'dired-narrow-regexp) -(define-key dired-mode-map "/" 'dired-narrow) + +;;; Dired Subtree (define-prefix-command 'km/dired-subtree-prefix-map) -(define-key km/dired-subtree-prefix-map "i" 'dired-subtree-insert) -(define-key km/dired-subtree-prefix-map "r" 'dired-subtree-remove) +(define-key km/dired-prefix-map "s" 'km/dired-subtree-prefix-map) + +(define-key km/dired-subtree-prefix-map "@" 'dired-subtree-mark-subtree) +(define-key km/dired-subtree-prefix-map "." 'dired-subtree-unmark-subtree) +(define-key km/dired-subtree-prefix-map "<" 'dired-subtree-beginning) +(define-key km/dired-subtree-prefix-map ">" 'dired-subtree-end) (define-key km/dired-subtree-prefix-map "g" 'dired-subtree-revert) -(define-key km/dired-subtree-prefix-map "s" 'dired-subtree-narrow) -(define-key km/dired-subtree-prefix-map "u" 'dired-subtree-up) (define-key km/dired-subtree-prefix-map "d" 'dired-subtree-down) +(define-key km/dired-subtree-prefix-map "i" 'dired-subtree-insert) (define-key km/dired-subtree-prefix-map "n" 'dired-subtree-next-sibling) (define-key km/dired-subtree-prefix-map "p" 'dired-subtree-previous-sibling) -(define-key km/dired-subtree-prefix-map "<" 'dired-subtree-beginning) -(define-key km/dired-subtree-prefix-map ">" 'dired-subtree-end) -(define-key km/dired-subtree-prefix-map "@" 'dired-subtree-mark-subtree) -(define-key km/dired-subtree-prefix-map "." 'dired-subtree-unmark-subtree) +(define-key km/dired-subtree-prefix-map "r" 'dired-subtree-remove) +(define-key km/dired-subtree-prefix-map "s" 'dired-subtree-narrow) +(define-key km/dired-subtree-prefix-map "u" 'dired-subtree-up) -(define-prefix-command 'km/dired-prefix-map) + +;;; Copying file names -(define-key km/dired-prefix-map "n" 'km/dired-narrow-prefix-map) -(define-key km/dired-prefix-map "s" 'km/dired-subtree-prefix-map) +(defun km/dired-copy-project-filename-as-kill () + "Copy names of marked project files into kill ring. +This is similar to `dired-copy-filename-as-kill', but the leading +path is always relative to `projectile-project-root'." + (interactive) + (km/dired-copy-filename-relative-to-directory + (projectile-project-root))) -(define-key dired-mode-map (kbd "C-c m") 'km/dired-prefix-map) +(defun km/dired-copy-relative-filename-as-kill () + "Copy names of marked files into kill ring. +This is similar to `dired-copy-filename-as-kill', but the leading +path is always relative to the `default-directory' of the other +window." + (interactive) + (km/dired-copy-filename-relative-to-directory + (km/other-default-directory))) + +(defun km/dired-copy-filename-relative-to-directory (directory) + "Like `dired-copy-filename-as-kill', but the filename is always +relative to DIRECTORY." + (let* ((string + (mapconcat 'identity + (--map (file-relative-name it directory) + (dired-get-marked-files t)) + " "))) + (if (eq last-command 'kill-region) + (kill-append string nil) + (kill-new string)) + (message "%s" string))) + +(defun km/other-default-directory () + "Get `default-directory' for result of `(other-window 1)'." + (save-window-excursion + (other-window 1) + default-directory)) + +(define-prefix-command 'km/dired-copy-filename-map) +;; This overrides the default binding for `dired-copy-filename-as-kill'. +(define-key dired-mode-map "w" 'km/dired-copy-filename-map) + +(after 'projectile + (define-key km/dired-copy-filename-map "p" + 'km/dired-copy-project-filename-as-kill)) +(define-key km/dired-copy-filename-map "o" 'km/dired-copy-relative-filename-as-kill) +(define-key km/dired-copy-filename-map "w" 'dired-copy-filename-as-kill) (provide 'init-dired) -- cgit v1.2.3