From a321999171464604a57af57941b6cb16df0435f0 Mon Sep 17 00:00:00 2001 From: Reuben Thomas Date: Tue, 8 Nov 2016 17:42:24 +0000 Subject: [PATCH 2/5] Allow files to be matched case-sensitively in dired-x * lisp/dired-x.el (dired-mark-unmarked-files): Add an argument which controls case folding for matching the regex (Bug#18716). (dired-omit-case-fold): New variable. Defaults to `t' on case-sensitive systems, `nil' otherwise. (dired-mark-omitted, dired-omit-expunge): Use dired-omit-case-fold. --- lisp/dired-x.el | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/lisp/dired-x.el b/lisp/dired-x.el index 8313905..a51a04b 100644 --- a/lisp/dired-x.el +++ b/lisp/dired-x.el @@ -133,6 +133,13 @@ dired-omit-size-limit :type '(choice (const :tag "no maximum" nil) integer) :group 'dired-x) +(defcustom dired-omit-case-fold (memq system-type '(msdos windows-nt cygwin)) + "Whether `dired-omit-mode' will treat the regexp of files to + omit case-insensitively. The default is to be case sensitive + on case-sensitive systems and case-insensitive otherwise." + :type 'boolean + :group 'dired-x) + ;; For backward compatibility (define-obsolete-variable-alias 'dired-omit-files-p 'dired-omit-mode "22.1") (define-minor-mode dired-omit-mode @@ -507,7 +514,7 @@ dired-mark-omitted "Mark files matching `dired-omit-files' and `dired-omit-extensions'." (interactive) (let ((dired-omit-mode nil)) (revert-buffer)) ;; Show omitted files - (dired-mark-unmarked-files (dired-omit-regexp) nil nil dired-omit-localp)) + (dired-mark-unmarked-files (dired-omit-regexp) nil nil dired-omit-localp dired-omit-case-fold)) (defcustom dired-omit-extensions (append completion-ignored-extensions @@ -551,7 +558,7 @@ dired-omit-expunge (or (string= omit-re "") (let ((dired-marker-char dired-omit-marker-char)) (when dired-omit-verbose (message "Omitting...")) - (if (dired-mark-unmarked-files omit-re nil nil dired-omit-localp) + (if (dired-mark-unmarked-files omit-re nil nil dired-omit-localp dired-omit-case-fold) (progn (setq count (dired-do-kill-lines nil @@ -577,12 +584,14 @@ dired-omit-regexp ""))) ;; Returns t if any work was done, nil otherwise. -(defun dired-mark-unmarked-files (regexp msg &optional unflag-p localp) +(defun dired-mark-unmarked-files (regexp msg &optional unflag-p localp case-fold-p) "Mark unmarked files matching REGEXP, displaying MSG. REGEXP is matched against the entire file name. When called interactively, prompt for REGEXP. With prefix argument, unflag all those files. -Optional fourth argument LOCALP is as in `dired-get-filename'." +Optional fourth argument LOCALP is as in `dired-get-filename'. +Optional fifth argument CASE-FOLD-P specifies the value of +`case-fold-search' used for matching REGEXP." (interactive (list (read-regexp "Mark unmarked files matching regexp (default all): " @@ -594,7 +603,10 @@ dired-mark-unmarked-files ;; not already marked (looking-at-p " ") ;; uninteresting - (let ((fn (dired-get-filename localp t))) + (let ((fn (dired-get-filename localp t)) + ;; Match patterns case-insensitively on case-insensitive + ;; systems + (case-fold-search case-fold-p)) (and fn (string-match-p regexp fn)))) msg))) -- 2.7.4