当前位置: 首页 > news >正文

Emacs定制:文件管理dired

依赖包

主要使用了dired-rainbow显示颜色,dired-efap编辑,dired-filter过滤,以及dired-async异步操作。

(require 'dired-rainbow)
(require 'dired-efap)
(require 'dired-filter)
(require 'dired-async)

一般设置

清理dired的buffer时不用确认

(setq dired-clean-confirm-killing-deleted-buffers nil)

find-ls的选项

(setq find-ls-option '("-print0 | xargs -0 ls -ald" . ""))

把目录显示在前面

(setq dired-listing-switches "--block-size=M -lvh --full-time --group-directories-first -n")

猜测用户自定义的缩写

(setq dired-guess-shell-alist-user nil)

递归删除目录

(setq dired-recursive-deletes 'always)

颜色设置

;; text file name extensions
(defvar text-file-name-extensions(purecopy '("txt" "md" "org")));; doc file name extensions
(defvar doc-file-name-extensions(purecopy '("pdf" "doc" "docx" "xls" "xlsx" "ppt" "xml" "htm" "html")));; code file name extensions
(defvar code-file-name-extensions(purecopy '("h" "c" "cxx" "cpp" "el" "pl" "py" "pm")));; image file name extensions
(setq image-file-name-extensions(append (purecopy '("jpe")) image-file-name-extensions));; audio file name extensions
(defvar audio-file-name-extensions(purecopy '("mp3" "ogg" "wav" "wma" "flac" "aac" "ape" "aif")));; video file name extensions
(defvar video-file-name-extensions(purecopy '("m4v" "mp4" "mov" "mkv" "avi" "rmvb" "rm" "wmv" "3gp" "vob""mpg" "mpeg" "divx" "ogm" "ogv" "asf" "flv" "webm")));; 加入Hook
(add-hook 'dired-mode-hook(lambda ();; auto load dired-rainbow(load "dired-rainbow")(dired-rainbow-define text "white smoke"text-file-name-extensions)(dired-rainbow-define doc "light gray"doc-file-name-extensions)(dired-rainbow-define code "wheat"code-file-name-extensions)(dired-rainbow-define image "dark salmon"image-file-name-extensions)(dired-rainbow-define audio "tomato"audio-file-name-extensions)(dired-rainbow-define video "gold"video-file-name-extensions)))

命令执行

定义一个advice,如果执行的命令加了&,则在后台执行,忽略输出。

(defadvice dired-run-shell-command (around kid-dired-run-shell-command (command))"Run a shell command COMMAND .
If the COMMAND ends with `&' then run it in background and *discard* the
output, otherwise simply let the original `dired-run-shell-command' run it."(if (string-match "&[[:blank:]]*$" command)(let ((proc (start-process "kid-shell" nil shell-file-nameshell-command-switch(substring command 0 (match-beginning 0)))))(set-process-sentinel proc 'shell-command-sentinel))ad-do-it))(ad-activate 'dired-run-shell-command)

音视频播放相关

使用mplayer查看媒体文件信息

(defun mplayer-identify ()"Mplayer using '-identify command'."(interactive)(dired-run-shell-command(concat "mplayer -identify -frames 5 -endpos 0 -vo null "(shell-quote-wildcard-pattern (dired-file-name-at-point))))(shrink-window 5)(other-window 1))

使用mplayer翻转角度播放。

(defun mplayer-rotate-play (value)"Mplayer using '-vf rotate=VALUE'."(interactive "Nmplayer -vf rotate=")(dired-run-shell-command(concat (format "mplayer -vf rotate=%d " value)(shell-quote-wildcard-pattern (dired-file-name-at-point)) " >/dev/null 2>&1 &")))

使用vlc播放

(defun vlc-play ()"play video using 'VLC'."(interactive "")(dired-run-shell-command(concat "vlc "(shell-quote-wildcard-pattern (dired-file-name-at-point)) " >/dev/null 2>&1 &")))

加入快捷键

;; 使用i查看媒体信息
(define-key dired-mode-map (kbd "i")'mplayer-identify)
;; 使用e播放
(define-key dired-mode-map (kbd "e")'emms-play-dired)
;; 使用E转换角度播放
(define-key dired-mode-map (kbd "E")'mplayer-rotate-play)

重新定义RET的行为。

如果是视频文件,就使用vlc播放。否则,就调用dired-find-file。

(define-key dired-mode-map (kbd "<RET>")(lambda () (interactive)(let ((find-match nil))(dolist (ext video-file-name-extensions)(when (string-suffix-p ext (dired-file-name-at-point) t)(setq find-match t)))(if find-match(vlc-play)(dired-find-file)))))

编辑文件名


;; 禁用鼠标
(setq dired-efap-use-mouse nil)(setq dired-efap-initial-filename-selection nil);; 使用r编辑文件名
(define-key dired-mode-map (kbd "r")'dired-efap)

清理目录,刷新显示

(defun dired-rmdir-subdirs ()"rmdir sub directories."(interactive)(message "%s" (shell-command-to-string "find . -depth -mindepth 1 -type d -exec rmdir --ignore-fail-on-non-empty -v {} \\;")));; 使用c清理目录
(define-key dired-mode-map (kbd "c")(lambda () (interactive)(dired-rmdir-subdirs)(revert-buffer)))

查看图片

使用I进入image-dired,查看图片

(define-key dired-mode-map (kbd "I")(lambda () (interactive)(image-dired (expand-file-name (dired-file-name-at-point)))))

定义一些image-dired-thumbnail-mode的快捷键

(add-hook 'image-dired-thumbnail-mode-hook(lambda ()(define-key image-dired-thumbnail-mode-map (kbd "f")'image-dired-display-next-thumbnail-original)(define-key image-dired-thumbnail-mode-map (kbd "b")'image-dired-display-previous-thumbnail-original)(define-key image-dired-thumbnail-mode-map (kbd "RET")'image-dired-find-file)(define-key image-dired-thumbnail-mode-map (kbd "n")'image-dired-next-line)(define-key image-dired-thumbnail-mode-map (kbd "p")'image-dired-previous-line)))(defun image-dired-find-file ()"find image in display buffer."(interactive)(let ((file (image-dired-original-file-name)))(if (not (image-dired-image-at-point-p))(message "No thumbnail at point")(if (not file)(message "No original file name found")(find-file file)(delete-other-windows)))))

异步执行

当复制、移动文件时,在后台异步执行

(autoload 'dired-async-mode "dired-async.el" nil t)
(dired-async-mode 1)
(dired-async--modeline-mode)

相关文章:

  • 2025最新版!Windows Python3 超详细安装图文教程(支持 Python3 全版本)
  • 坚持做一件事情和好奇做一件事,本质区别和思考
  • 知识点|MVC模式(Model–view–controller)
  • 知识点|MTV模式(Model-template-view)
  • Day53打卡 @浙大疏锦行
  • 三维重建 —— 3. 单视几何
  • 为应对激烈竞争环境,IBMS系统如何提升企业管理效率
  • 深入讲解 Ollama 的源码
  • 快速幂算法详解:从暴力到优雅的数学优化
  • ELK日志文件分析系统——概念
  • 实验复现:应用 RIR 触发器的 TrojanRoom 后门攻击实现
  • 网盘直链解析网页版
  • 贫血模型与充血模型
  • 实现网页中嵌入B站视频播放器:解决high_quality=1 失效的问题
  • 03 - ECA模块
  • Python-Flask实现登录
  • XAttention 计算步骤详解及示例
  • 58、嵌入式Servlet容器-【源码分析】切换web服务器与定制化
  • UDS协议中0x34、0x36、0x37服务详解及应用
  • 表达式的自动类型转换
  • 做网站怎么租用服务器/百度云资源搜索平台
  • 太原找工作网站/关键词排名优化江苏的团队
  • 大连意动网站建设有限公司怎么样/seo网站推广与优化方案
  • mac wordpress建站教程视频/免费的客户资源怎么找
  • 深圳 做网站 互联/自动秒收录网
  • 河北沙河市建设局网站/网络营销策划方案模板范文