Emacs 区分单(*.gz)和双(*.tar.gz)文件扩展名

Emacs 区分单(*.gz)和双(*.tar.gz)文件扩展名,emacs,elisp,dired,Emacs,Elisp,Dired,我正在寻求帮助,以区分dired模式下的单个文件扩展名(例如,*.gz)和双文件扩展名(例如,*.tar.gz) 下面是我在dired模式下选择一个或多个文件以执行特定操作时使用的函数的摘录,例如,在Emacs中打开,启动进程并从外部打开,或压缩/解压缩。我最初编写这个函数(借用dired-do-create files中的dired-aux.el)时只考虑了单个文件类型扩展名,现在想扩展它的功能,以包括潜在的双文件类型扩展名 (tar gz扩展的defun测试() (互动) (让我们*( (f

我正在寻求帮助,以区分dired模式下的单个文件扩展名(例如,
*.gz
)和双文件扩展名(例如,
*.tar.gz

下面是我在dired模式下选择一个或多个文件以执行特定操作时使用的函数的摘录,例如,在Emacs中打开,启动进程并从外部打开,或压缩/解压缩。我最初编写这个函数(借用
dired-do-create files
中的
dired-aux.el
)时只考虑了单个文件类型扩展名,现在想扩展它的功能,以包括潜在的双文件类型扩展名

(tar gz扩展的defun测试()
(互动)
(让我们*(
(fn列表(直接获取标记文件))
(rfn列表(mapcar(功能指令使相对)fn列表))
(dired一个文件(和(consp fn list)(null(cdr fn list))(car fn list)))
(输入文件名(如果为一个文件,则为一个文件列表))
(分机)
(续)
((stringp输入文件名)
(文件扩展名输入文件名))
((listp输入文件名)
(文件扩展名(汽车输入文件名(()())))
(路径(if(stringp输入文件名)(文件名目录输入文件名)))
(dired缓冲区名称(缓冲区名称))
(msword regexp'(“doc”“docx”))
(dired tar'(“tar.gz”))
(续)
;; http://www.emacswiki.org/emacs/DiredTar
((扩展名等于“.tar.gz”)
(未包装的焦油包)
((扩展名等于“.gz”(但不是.tar.gz))
(直接压缩)
((regexp-match-p msword regexp-ext)
(启动进程“ms word”nil“open”-“Microsoft word”输入文件名)
(t
(信息“去钓鱼。”))()
;; https://github.com/kentaro/auto-save-buffers-enhanced
;; `regexp-match-p`函数在stackoverflow上被@sds修改
;; http://stackoverflow.com/a/20343715/2112489
(defun regexp-match-p(regexps字符串)
(和字符串)
(一网打尽)
(let((禁止更改匹配数据t));小优化
(dolist(regexp regexps)
(当(字符串匹配regexp字符串)
(抛出“匹配的t()()())())))

不确定IIUC,这里有一份关于如何完成该部分的草案:

(defun gz-only ()
  "List marked files in dired-buffer ending at `.gz', but not ending at `.tar.gz'"
  (interactive)
  (let ((flist (dired-get-marked-files))
        erg)
    (dolist (ele flist)
      (and (string-match "\.gz$" ele)(not (string-match "\.tar\.gz$" ele))
      (add-to-list 'erg ele)))
    (when (interactive-p) (message "%s" erg))))

是的,这将很好地完成工作——非常感谢!:)