2019年3月28日木曜日

Emacsのdired関係を見直し

今回は、ファイルとかディレクトリのハンドリングということで、 dired関係を見直している最中。基本はいつもどおり、コピペ。

dired-aux.eldired-x.eldired-+ とかもあるみたい。 前者のふたつはビルドインで、プラスはサードパーティ。

不便に感じたら、改めて考えよう。

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-filedired-jumpbookmark-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の設定 をアレンジした。 全部動作するかは、未確認。

sxivbookmark-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)

0 件のコメント:

コメントを投稿

麻のボディタオル

2018年の秋(まだ、自転車を封印してない)、 近江上布伝統産業会館 で、興味からボディタオルを購入した。 お、よかった。: 自然派パン工房 ふるさとの道 ほぼ毎日風呂で使ってきて、ついに寿命がきたようだ。 お店の方に、「糸が痩せて破れてくる」まで使える、と...