今回は、ファイルとかディレクトリのハンドリングということで、 dired関係を見直している最中。基本はいつもどおり、コピペ。
dired-aux.el や dired-x.el 、 dired-+ とかもあるみたい。 前者のふたつはビルドインで、プラスはサードパーティ。
不便に感じたら、改めて考えよう。
dired-async-modeで非同期処理とffap
; async (use-package async :ensure t :config (progn ; Dired async. (use-package dired-async :config (dired-async-mode 1) ) ; Byte compilation async. (use-package async-bytecomp :config (async-bytecomp-package-mode 1) (setq async-bytecomp-allowed-packages '(all))) ) ) ; ffap (ffap-bindings)
私に、dired-async-modeは必要なさそうだけど、 magitでrequireされるようなので、設定してみた。
ffapは、find-file-at-pointの略でビルトインで、 ファイルを開く操作の強化パッケージ。 一応入れているが、使ってないように思う。 自分が気付いてないだけかもしれないので、そのまま。
diredへの入口は、 counsel-find-file と dired-jump と bookmark-jump-other-window で間に合っているように思う。
dired関係と wdiredの設定
色々設定したが、多すぎたかも。 後で削除することになるかも。
(use-package dired :ensure nil :bind (("C-x C-j" . dired-jump) ("C-x x" . dired)) :config ; Omitting (setq-default dired-omit-files "^.+~$\\|^.+#$\\|^\\...+$\\|\\.out$\\|\\.snm$\\|\\.tar.gz$") (setq-default dired-omit-mode t) ;; Dired listing ;; -a : Do not ignore entries starting with . ;; -l : Use long listing format. ;; -G : Do not print group names like 'users' ;; -h : Human-readable sizes like 1K, 234M, .. ;; -v : Do natural sort .. so the file names starting with . will show up first. ;; -F : Classify filenames by appending '*' to executables, ;; '/' to directories, etc. (setq dired-listing-switches "-alGhvF --group-directories-first") ;; https://kakurasan.blogspot.com/2015/05/dired-filemanager-renamer.html ;; 新規バッファを作らずに移動するコマンド "dired-find-alternate-file" は ;; 標準では無効化されているので、使用したい場合は下の記述で有効にする (put 'dired-find-alternate-file 'disabled nil) ;; 使ってないと思う。 (setq dired-recursive-deletes 'always) ;; always delete and copy recursively (setq dired-recursive-copies 'always) (setq dired-isearch-filenames t) ;; C-s 時にファイル名だけにマッチ (setq dired-dwim-target t) ;; 2画面なら他方にコピー ) ;; filter dynamically by type (swiperがあるから不要かも) (use-package dired-narrow :ensure t) ;; Reuse the current dired buffer to visit a directory (use-package dired-single :ensure t :config (define-key dired-mode-map [return] 'dired-single-buffer) ;; (define-key dired-mode-map [mouse-1] 'dired-single-buffer-mouse) ) ;; Collapse unique nested paths in dired listing (use-package dired-collapse :ensure t :defer :init (add-hook 'dired-mode-hook 'dired-collapse-mode)) ;; Insert subdirectories in a tree-like fashion (use-package dired-subtree :ensure t) ;; dired-ranger copy paste move を簡単に (use-package dired-ranger :defer t :ensure t :config (setq dired-ranger-copy-ring-size 1) (define-key dired-mode-map (kbd "C-w") (lambda () (interactive) (dired-ranger-copy nil) ; t adds item to dired-ranger-copy-ring (define-key dired-mode-map (kbd "C-y") 'dired-ranger-move))) (define-key dired-mode-map (kbd "M-w") (lambda () (interactive) (dired-ranger-copy nil) (define-key dired-mode-map (kbd "C-y") 'dired-ranger-paste))) ) ; ;; wdired included from ver 24 (use-package wdired :defer t :ensure nil :bind (:map dired-mode-map ("r" . wdired-change-to-wdired-mode)) ;; 20190414 :config (setq wdired-allow-to-change-permissions t))
uniquifyで名前を扱いやすく
別ディレクトリ同一ファイル名を区別しやすくするための設定。 デフォルトの機能をオーバーライドしているらしい。
(use-package uniquify :ensure nil :config (setq uniquify-buffer-name-style 'forward) (setq uniquify-separator "/") (setq uniquify-after-kill-buffer-p t) ; rename after killing uniquified (setq uniquify-ignore-buffers-re "^\\*") ; don't muck with special buffers (setq uniquify-buffer-name-style 'post-forward-angle-brackets) (setq uniquify-ignore-buffers-re "*[^*]+*") )
sxivも使う
diredからsxivのサムネイルモードを起動させるためのもの。
有難いです。
;; https://gist.github.com/kobapan/28908b564b610bd3e6f3fae78637ac8b (defun call-sxiv () (interactive) (let ((image-files ; 画像ファイル名のリスト (delq nil ; この辺はemacs26辺りで filterマクロに置き換えか? (mapcar (lambda (f) (when (string-match "\.\\(jpe?g\\|png\\|gif\\|bmp\\)$" f) f)) (directory-files default-directory))))) ; 現ディレクトリ内のfileリスト in alphabetical order (start-process-shell-command ; シェルコマンドを非同期実行 "sxiv" nil ;プロセス用のバッファを開かない (format "sxiv -f -t -n %s %s" (length image-files) ; 画像ファイルの個数=最後の画像ファイル (mapconcat 'identity image-files " ") )))) ; リストを空白区切りで連結
hydraでメニュー化して使う
hydra wikiのdiredの設定 をアレンジした。 全部動作するかは、未確認。
sxiv と bookmark-jump-other-window は、便利かと思って追加した。
wdiredは、hydraのメニューを閉じないと使えないみたいなので、 タイトルに追記しておいた。
(defhydra hydra-dired (:hint nil :color pink) "Dired(wdired run hydra menu off)" ("m" dired-mark "mark" :column "Mark") ("u" dired-unmark "unmark") ("U" dired-unmark-all-marks "unmark all") ("E" dired-mark-extension "by ext.") ("T" dired-toggle-marks "toggle all") ; ("c" dired-ranger-copy "copy" :column "ranger") ("p" dired-ranger-paste "paste") ("M" dired-ranger-move "move") ;; fixed(0419) ; ("C" dired-do-copy "copy" :column "File") ;; Copy all marked files ("D" dired-do-delete "delete") ("G" dired-do-chgrp "chgrp") ("M" dired-do-chmod "chmod") ("v" dired-view-file "view") ;; q to exit, s to search, = gets line # ; ("+" dired-create-directory "mkdir" :column "dir") ("w" dired-kill-subdir "rmdir") ("i" dired-subtree-insert "show-subd") (";" dired-subtree-remove "hide-subd") ; ("s" dired-sort-toggle-or-edit "sort" :column "Sel, Sort") ("f" dired-narrow-fuzzy "filter") ;; dired-narrow, dired-narrow-regexp, dired-narrow-fuzzy ("F" dired-do-find-marked-files "Find marked") ("B" bookmark-jump-other-window "bkmark-list") ; ("g" revert-buffer "read all again" :column "disp") ;; read all directories again (refresh) ("l" dired-do-redisplay "redisplay") ;; relist the marked or singel directory (")" dired-omit-mode "toggle omit") ("(" dired-hide-details-mode "toggle details") ("d" diredp-ediff "pdiff" :column "disp, diff") ;; smart diff ("e" dired-ediff-files "ediff") ; ("A" dired-do-find-regexp "find regexp" :column "grep sync ..") ("R" dired-do-rsynch "rsync") ("S" dired-do-symlink "symlink") ("Y" dired-do-relsymlink "r-symlink") ; ("z" diredp-compress-this-file "compress file" :column "comp, oters") ("Z" dired-do-compress "Compress") ("?" dired-summary "summary") ("V" call-sxiv "sxiv current") ("." nil "quit" :column "quit") ) (define-key dired-mode-map "." 'hydra-dired/body)