branch: externals/dired-preview commit c879b76f4d2b995bd93ca9cff004ac3416d01b28 Author: Sean Devlin <s...@toadstyle.org> Commit: Sean Devlin <s...@toadstyle.org>
Allow ignoring of files without extensions --- dired-preview-test.el | 40 ++++++++++++++++++++++++++++++++++++++++ dired-preview.el | 27 +++++++++++++-------------- 2 files changed, 53 insertions(+), 14 deletions(-) diff --git a/dired-preview-test.el b/dired-preview-test.el new file mode 100644 index 0000000000..12e537dec6 --- /dev/null +++ b/dired-preview-test.el @@ -0,0 +1,40 @@ +;;; dired-preview-test.el --- Unit tests for Dired preview -*- lexical-binding: t -*- + +;;; Commentary: + +;; Tests for Dired preview. + +;;; Code: + +(require 'ert) +(require 'dired-preview) + +(ert-deftest dired-preview-test--dired-preview--file-ignored-p () + "Test that `dired-preview--file-ignored-p' returns non-nil for ignored file names." + (let ((dired-preview-ignored-extensions-regexp + (custom--standard-value 'dired-preview-ignored-extensions-regexp))) + (dolist (ext '("mkv" "webm" "mp4" "mp3" "ogg" "m4a" "flac" "wav" + "gz" "zst" "tar" "xz" "rar" "zip" "iso" "epub" "pdf")) + (should (dired-preview--file-ignored-p (format "example.%s" ext))) + (should-not (dired-preview--file-ignored-p (format "example.%s_" ext))))) + (let ((dired-preview-ignored-extensions-regexp "\\.DS_Store\\'")) + (should (dired-preview--file-ignored-p ".DS_Store")))) + +(ert-deftest dired-preview-test--dired-preview--infer-type () + "Test that `dired-preview--infer-type' infers the correct file type." + (let ((dired-preview-ignored-extensions-regexp + (custom--standard-value 'dired-preview-ignored-extensions-regexp))) + (dolist (ext '("mkv" "webm" "mp4" "mp3" "ogg" "m4a" "flac" "wav" + "gz" "zst" "tar" "xz" "rar" "zip" "iso" "epub" "pdf")) + (should (eq 'ignore + (car (dired-preview--infer-type + (format "example.%s" ext))))) + (should-not (eq 'ignore + (car (dired-preview--infer-type + (format "example.%s_" ext))))))) + (let ((dired-preview-ignored-extensions-regexp "\\.DS_Store\\'")) + (should (eq 'ignore + (car (dired-preview--infer-type ".DS_Store")))))) + +(provide 'dired-preview-test) +;;; dired-preview-test.el ends here diff --git a/dired-preview.el b/dired-preview.el index fbfc2a0b1d..f0562cf78e 100644 --- a/dired-preview.el +++ b/dired-preview.el @@ -72,7 +72,7 @@ (concat "\\." "\\(mkv\\|webm\\|mp4\\|mp3\\|ogg\\|m4a\\|flac\\|wav" "\\|gz\\|zst\\|tar\\|xz\\|rar\\|zip" - "\\|iso\\|epub\\|pdf\\)") + "\\|iso\\|epub\\|pdf\\)\\'") "Regular expression of file type extensions to not preview. When the value is nil, do not ignore any file: preview everything. @@ -294,15 +294,16 @@ aforementioned user option." (defun dired-preview--file-ignored-p (file) "Return non-nil if FILE extension is among the ignored extensions. See user option `dired-preview-ignored-extensions-regexp'." - (when-let* (((not (file-directory-p file))) - ((stringp dired-preview-ignored-extensions-regexp)) - (ext (file-name-extension file :include-dot)) - ((not (string-blank-p ext)))) - (string-match-p ext dired-preview-ignored-extensions-regexp))) + (when-let* (((stringp dired-preview-ignored-extensions-regexp)) + ((not (file-directory-p file))) + (file-nondir (file-name-nondirectory file))) + (string-match-p dired-preview-ignored-extensions-regexp file-nondir))) (defun dired-preview--file-large-p (file) "Return non-nil if FILE exceeds `dired-preview-max-size'." - (>= (file-attribute-size (file-attributes file)) dired-preview-max-size)) + (>= (or (file-attribute-size (file-attributes file)) + 0) + dired-preview-max-size)) (defun dired-preview--file-displayed-p (file) "Return non-nil if FILE is already displayed in a window." @@ -333,17 +334,15 @@ See user option `dired-preview-ignored-extensions-regexp'." "Infer what type FILE is. Return a cons cell whose `car' is a symbol describing FILE and `cdr' is FILE." - (let ((ext (file-name-extension file :include-dot)) - (file (expand-file-name file))) + (let* ((file (expand-file-name file)) + (file-nondir (file-name-nondirectory file))) (cond - ((and (not (string-empty-p ext)) - dired-preview-ignored-extensions-regexp - (string-match-p ext dired-preview-ignored-extensions-regexp)) + ((and dired-preview-ignored-extensions-regexp + (string-match-p dired-preview-ignored-extensions-regexp file-nondir)) (cons 'ignore file)) ((dired-preview--file-large-p file) (cons 'large file)) - ((and (not (string-empty-p ext)) - (string-match-p ext dired-preview-image-extensions-regexp)) + ((string-match-p dired-preview-image-extensions-regexp file-nondir) (cons 'image file)) ((file-directory-p file) (cons 'directory file))