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

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)
http://www.xdnf.cn/news/14294.html

相关文章:

  • 为应对激烈竞争环境,IBMS系统如何提升企业管理效率
  • [Java恶补day24] 整理模板·考点三【二分查找】
  • 2.1话题发布
  • 探索Agent的发展潜力:大模型与具身智能的融合
  • 浅谈拼写纠错
  • 调用AkShare获取A股股票基本信息
  • 布局和约束相关的生命周期(layoutIfNeeded,updateConstraintsIfNeeded)
  • iOS安全和逆向系列教程 第19篇:ARM64汇编语言基础与逆向分析
  • 使用清华大学的 Hugging Face 镜像
  • PTP时间同步实战测试clock master/slave 直连校时+PPS测试
  • 第8章——8天Python从入门到精通【itheima】-88~90-Python的文件操作(文件的写出+文件的追加+综合案例)
  • 强化学习 PPO
  • GRUB2 启动配置的工作原理与优先级规则详解
  • 软件测试银行项目之“信用卡测试流程”
  • LlamaIndex 工作流 并发执行
  • Day13_C语言基础项目实战
  • Java性能问题排查
  • 暴雨亮相EAC2025分享热管理液冷技术
  • Android 中 linux 命令查询设备信息
  • PyTorch框架-自动微分模块
  • 小知识点三、无刷电机闭环控制
  • 大模型_Ubuntu24.04安装RagFlow_使用hyper-v虚拟机_超级详细--人工智能工作笔记0251
  • 【C++】C++17之std::optional
  • 41.第二阶段x64游戏实战-封包-分析周围对象ID
  • qt信号与槽--01
  • 【论文解读】Agentic AI 遇见工业自动化:从“指令”到“意图”的嬗变
  • Tabulate - C++表格格式化库介绍与使用
  • MongoDB详细安装步骤(Windows 系统)
  • SHELL 编程正则表达式
  • js 查看字符串字节数