今回は、ファイルとかディレクトリのハンドリングということで、 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)






