branch: externals/dired-preview
commit b347f4215f38cabc7491155c6a16d8b0055a2724
Merge: a4ab2b5be5 c879b76f4d
Author: Protesilaos Stavrou <i...@protesilaos.com>
Commit: GitHub <nore...@github.com>

    Merge pull request #26 from sdevlin/ignore-whole-file-name
    
    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))

Reply via email to