moved dired interactive functions to where they make sense
This commit is contained in:
parent
860fe0c01e
commit
b177fa30cb
142
conf.org
142
conf.org
|
@ -1680,76 +1680,6 @@ Keeping confirmation enabled does weird stuff with helm. Not ideal at the moment
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
*** interactive functions
|
*** interactive functions
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defun nd/dired-move-to-parent-directory ()
|
|
||||||
"Move buffer to parent directory (like 'cd ..')."
|
|
||||||
(interactive)
|
|
||||||
(find-alternate-file ".."))
|
|
||||||
|
|
||||||
(defun nd/dired-xdg-open ()
|
|
||||||
"Open all non-text files in external app using xdg-open. Only regular files are considered"
|
|
||||||
(interactive)
|
|
||||||
(let* ((file-list (seq-filter #'file-regular-p (dired-get-marked-files)))
|
|
||||||
(do-it (if (<= (length file-list) 5)
|
|
||||||
t
|
|
||||||
(y-or-n-p "Open more then 5 files? "))))
|
|
||||||
(when do-it
|
|
||||||
(mapc
|
|
||||||
(lambda (f) (let ((process-connection-type nil))
|
|
||||||
(start-process "" nil "xdg-open" f)))
|
|
||||||
file-list))))
|
|
||||||
|
|
||||||
(defun nd/dired-open-with ()
|
|
||||||
"Open marked non-text files in external app via open-with dialog
|
|
||||||
according to mime types as listed in all available desktop files."
|
|
||||||
(interactive)
|
|
||||||
(let* ((mf (seq-filter #'file-regular-p (dired-get-marked-files)))
|
|
||||||
(qmf (mapcar #'shell-quote-argument mf))
|
|
||||||
(file-mime-list (mapcar (lambda (f) (list f (nd/get-mime-type f))) qmf)))
|
|
||||||
|
|
||||||
(if (= (length file-mime-list) 0)
|
|
||||||
(message "No files selected")
|
|
||||||
|
|
||||||
(let* ((first-pair (car file-mime-list))
|
|
||||||
(last-pairs (cdr file-mime-list))
|
|
||||||
mime-alist file-list)
|
|
||||||
(setq file-list (nth 0 first-pair)
|
|
||||||
mime-alist (nd/get-apps-from-mime (nth 1 first-pair)))
|
|
||||||
;; if multiple files selected, add to the selection list
|
|
||||||
(if last-pairs
|
|
||||||
(progn
|
|
||||||
(setq file-list (string-join (mapcar #'car file-mime-list) " "))
|
|
||||||
(dolist (mime (mapcar (lambda (f) (nth 1 f)) last-pairs))
|
|
||||||
(setq mime-alist (intersection mime-alist
|
|
||||||
(nd/get-apps-from-mime mime)
|
|
||||||
:test #'equal)))))
|
|
||||||
(if (= (length mime-alist) 0)
|
|
||||||
(let* ((ml (delete-dups (mapcan #'cdr file-mime-list)))
|
|
||||||
(mls (string-join ml ", ")))
|
|
||||||
(if (= (length ml) 1)
|
|
||||||
(message (concat "No apps found for mime type: " mls))
|
|
||||||
(message (concat "No common apps found for mime types: " mls))))
|
|
||||||
(helm
|
|
||||||
:sources (helm-build-sync-source "Apps"
|
|
||||||
:candidates mime-alist
|
|
||||||
:action '(("Open" . (lambda (f) (nd/execute-desktop-command f file-list)))))
|
|
||||||
:buffer "*helm open with*"))))))
|
|
||||||
|
|
||||||
(defun nd/dired-sort-by ()
|
|
||||||
"Sort current dired buffer by a list of choices presented in helm menu.
|
|
||||||
Note this assumes there are no sorting switches on `dired-ls'"
|
|
||||||
(interactive)
|
|
||||||
(let ((sort-alist '(("Name" . "")
|
|
||||||
("Date" . "-t")
|
|
||||||
("Size" . "-S")
|
|
||||||
("Extension" . "-X")
|
|
||||||
("Dirs First" . "--group-directories-first"))))
|
|
||||||
(helm
|
|
||||||
:sources
|
|
||||||
(helm-build-sync-source "Switches"
|
|
||||||
:candidates sort-alist
|
|
||||||
:action
|
|
||||||
'(("Sort" . (lambda (s) (dired-sort-other (concat dired-listing-switches " " s))))))
|
|
||||||
:buffer "*helm sort buffer*")))
|
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
*** compression
|
*** compression
|
||||||
Only supports tar.gz, tar.bz2, tar.xz, and .zip by default. Add support for more fun algos such as lzo and zpaq
|
Only supports tar.gz, tar.bz2, tar.xz, and .zip by default. Add support for more fun algos such as lzo and zpaq
|
||||||
|
@ -2208,6 +2138,78 @@ Most packages that don't have an evil version are in this one. I don't like surp
|
||||||
**** dired
|
**** dired
|
||||||
Dired makes new buffers by default. Use =find-alternate-file= to avoid this.
|
Dired makes new buffers by default. Use =find-alternate-file= to avoid this.
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(defun nd/dired-move-to-parent-directory ()
|
||||||
|
"Move buffer to parent directory (like 'cd ..')."
|
||||||
|
(interactive)
|
||||||
|
(find-alternate-file ".."))
|
||||||
|
|
||||||
|
(defun nd/dired-xdg-open ()
|
||||||
|
"Open all non-text files in external app using xdg-open.
|
||||||
|
Only regular files are considered."
|
||||||
|
(interactive)
|
||||||
|
(let* ((file-list (seq-filter #'file-regular-p (dired-get-marked-files)))
|
||||||
|
(do-it (if (<= (length file-list) 5)
|
||||||
|
t
|
||||||
|
(y-or-n-p "Open more then 5 files? "))))
|
||||||
|
(when do-it
|
||||||
|
(mapc
|
||||||
|
(lambda (f) (let ((process-connection-type nil))
|
||||||
|
(start-process "" nil "xdg-open" f)))
|
||||||
|
file-list))))
|
||||||
|
|
||||||
|
(defun nd/dired-open-with ()
|
||||||
|
"Open marked non-text files in external app via open-with dialog
|
||||||
|
according to mime types as listed in all available desktop files."
|
||||||
|
(interactive)
|
||||||
|
(let* ((mf (seq-filter #'file-regular-p (dired-get-marked-files)))
|
||||||
|
(qmf (mapcar #'shell-quote-argument mf))
|
||||||
|
(file-mime-list (mapcar (lambda (f) (list f (nd/get-mime-type f))) qmf)))
|
||||||
|
|
||||||
|
(if (= (length file-mime-list) 0)
|
||||||
|
(message "No files selected")
|
||||||
|
|
||||||
|
(let* ((first-pair (car file-mime-list))
|
||||||
|
(last-pairs (cdr file-mime-list))
|
||||||
|
mime-alist file-list)
|
||||||
|
(setq file-list (nth 0 first-pair)
|
||||||
|
mime-alist (nd/get-apps-from-mime (nth 1 first-pair)))
|
||||||
|
;; if multiple files selected, add to the selection list
|
||||||
|
(if last-pairs
|
||||||
|
(progn
|
||||||
|
(setq file-list (string-join (mapcar #'car file-mime-list) " "))
|
||||||
|
(dolist (mime (mapcar (lambda (f) (nth 1 f)) last-pairs))
|
||||||
|
(setq mime-alist (intersection mime-alist
|
||||||
|
(nd/get-apps-from-mime mime)
|
||||||
|
:test #'equal)))))
|
||||||
|
(if (= (length mime-alist) 0)
|
||||||
|
(let* ((ml (delete-dups (mapcan #'cdr file-mime-list)))
|
||||||
|
(mls (string-join ml ", ")))
|
||||||
|
(if (= (length ml) 1)
|
||||||
|
(message (concat "No apps found for mime type: " mls))
|
||||||
|
(message (concat "No common apps found for mime types: " mls))))
|
||||||
|
(helm
|
||||||
|
:sources (helm-build-sync-source "Apps"
|
||||||
|
:candidates mime-alist
|
||||||
|
:action '(("Open" . (lambda (f) (nd/execute-desktop-command f file-list)))))
|
||||||
|
:buffer "*helm open with*"))))))
|
||||||
|
|
||||||
|
(defun nd/dired-sort-by ()
|
||||||
|
"Sort current dired buffer by a list of choices presented in helm menu.
|
||||||
|
Note this assumes there are no sorting switches on `dired-ls'"
|
||||||
|
(interactive)
|
||||||
|
(let ((sort-alist '(("Name" . "")
|
||||||
|
("Date" . "-t")
|
||||||
|
("Size" . "-S")
|
||||||
|
("Extension" . "-X")
|
||||||
|
("Dirs First" . "--group-directories-first"))))
|
||||||
|
(helm
|
||||||
|
:sources
|
||||||
|
(helm-build-sync-source "Switches"
|
||||||
|
:candidates sort-alist
|
||||||
|
:action
|
||||||
|
'(("Sort" . (lambda (s) (dired-sort-other (concat dired-listing-switches " " s))))))
|
||||||
|
:buffer "*helm sort buffer*")))
|
||||||
|
|
||||||
(put 'dired-find-alternate-file 'disabled nil)
|
(put 'dired-find-alternate-file 'disabled nil)
|
||||||
|
|
||||||
(evil-define-key 'normal dired-mode-map
|
(evil-define-key 'normal dired-mode-map
|
||||||
|
|
Loading…
Reference in New Issue