├── .gitignore ├── screenshot.png ├── .github └── workflows │ └── test.yml ├── Makefile ├── README.md └── diredfl.el /.gitignore: -------------------------------------------------------------------------------- 1 | /diredfl.elc 2 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/purcell/diredfl/HEAD/screenshot.png -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | paths-ignore: 6 | - '**.md' 7 | 8 | jobs: 9 | lint: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: purcell/setup-emacs@master 13 | with: 14 | version: 29.4 15 | - uses: actions/checkout@v4 16 | - name: Run tests 17 | run: make package-lint 18 | 19 | build: 20 | runs-on: ubuntu-latest 21 | strategy: 22 | matrix: 23 | emacs_version: 24 | - 24.1 25 | - 24.5 26 | - 25.3 27 | - 26.3 28 | - 27.2 29 | - 28.2 30 | - 29.4 31 | - snapshot 32 | steps: 33 | - uses: purcell/setup-emacs@master 34 | with: 35 | version: ${{ matrix.emacs_version }} 36 | 37 | - uses: actions/checkout@v4 38 | - name: Run tests 39 | run: make compile 40 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | EMACS ?= emacs 2 | 3 | # A space-separated list of required package names 4 | DEPS = 5 | 6 | INIT_PACKAGES="(progn \ 7 | (require 'package) \ 8 | (push '(\"melpa\" . \"https://melpa.org/packages/\") package-archives) \ 9 | (package-initialize) \ 10 | (dolist (pkg '(PACKAGES)) \ 11 | (unless (package-installed-p pkg) \ 12 | (unless (assoc pkg package-archive-contents) \ 13 | (package-refresh-contents)) \ 14 | (package-install pkg))) \ 15 | )" 16 | 17 | all: compile package-lint clean-elc 18 | 19 | package-lint: 20 | ${EMACS} -Q --eval $(subst PACKAGES,package-lint,${INIT_PACKAGES}) -batch -f package-lint-batch-and-exit diredfl.el 21 | 22 | compile: clean-elc 23 | ${EMACS} -Q --eval $(subst PACKAGES,${DEPS},${INIT_PACKAGES}) -L . -batch -f batch-byte-compile *.el 24 | 25 | clean-elc: 26 | rm -f f.elc 27 | 28 | .PHONY: all compile clean-elc package-lint 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Melpa Status](http://melpa.org/packages/diredfl-badge.svg)](http://melpa.org/#/diredfl) 2 | [![Melpa Stable Status](http://stable.melpa.org/packages/diredfl-badge.svg)](http://stable.melpa.org/#/diredfl) 3 | [![Build Status](https://github.com/purcell/diredfl/actions/workflows/test.yml/badge.svg)](https://github.com/purcell/diredfl/actions/workflows/test.yml) 4 | Support me 5 | 6 | # Extra font lock rules for a more colourful dired 7 | 8 | This is adapted from the extra font lock rules provided by Drew Adams' 9 | `dired+` package, but published via a modern means, and with support 10 | for older Emacsen removed. 11 | 12 | ![Screenshot](screenshot.png) 13 | 14 | ## Installation 15 | 16 | If you're an Emacs 24 user or you have a recent version of 17 | `package.el` you can install `diredfl` from the 18 | [MELPA](http://melpa.org) repository. The version of `diredfl` there 19 | will always be up-to-date. 20 | 21 | Enable `diredfl-mode` in all `dired-mode` buffers by calling or 22 | customising `diredfl-global-mode` as desired. 23 | 24 | ## Related packages 25 | 26 | [dired-hacks](https://github.com/Fuco1/dired-hacks#dired-rainbow) also 27 | contains some enhanced font-lock support for `dired`, but with 28 | different goals from this package. 29 | 30 | ## About 31 | 32 | Author: Steve Purcell 33 | 34 | Homepage: https://github.com/purcell/diredfl 35 | 36 |
37 | 38 | Author links: 39 | 40 | [💝 Support this project and my other Open Source work](https://www.patreon.com/sanityinc) 41 | 42 | [💼 LinkedIn profile](https://uk.linkedin.com/in/stevepurcell) 43 | 44 | [✍ sanityinc.com](http://www.sanityinc.com/) 45 | -------------------------------------------------------------------------------- /diredfl.el: -------------------------------------------------------------------------------- 1 | ;;; diredfl.el --- Extra font lock rules for a more colourful dired -*- lexical-binding: t; -*- 2 | 3 | ;; Copyright (C) 2017 Steve Purcell 4 | 5 | ;; Author: Steve Purcell 6 | ;; Author: Drew Adams 7 | ;; Keywords: faces 8 | ;; URL: https://github.com/purcell/diredfl 9 | ;; Package-Requires: ((emacs "24")) 10 | ;; Package-Version: 0.5 11 | 12 | ;; This program is free software; you can redistribute it and/or modify 13 | ;; it under the terms of the GNU General Public License as published by 14 | ;; the Free Software Foundation, either version 3 of the License, or 15 | ;; (at your option) any later version. 16 | 17 | ;; This program is distributed in the hope that it will be useful, 18 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of 19 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 | ;; GNU General Public License for more details. 21 | 22 | ;; You should have received a copy of the GNU General Public License 23 | ;; along with this program. If not, see . 24 | 25 | ;;; Commentary: 26 | 27 | ;; This is adapted from the extra font lock rules provided by Drew 28 | ;; Adams' `dired+' package, but published via a modern means, and with 29 | ;; support for older Emacsen removed. 30 | 31 | ;; Enable in all Dired buffers by calling or customising `diredfl-global-mode'. 32 | 33 | ;; Alternatively: 34 | 35 | ;; (add-hook 'dired-mode-hook 'diredfl-mode) 36 | 37 | ;;; Code: 38 | 39 | (require 'dired) 40 | 41 | (defgroup diredfl () 42 | "Extra font lock rules for a more colourful Dired." 43 | :group 'dired) 44 | 45 | (defcustom diredfl-compressed-extensions '(".tar" ".taz" ".tgz" ".arj" ".lzh" 46 | ".lzma" ".xz" ".zip" ".z" ".Z" ".gz" ".bz2") 47 | "*List of compressed-file extensions, for highlighting." 48 | :type '(repeat string) :group 'diredfl) 49 | 50 | (defcustom diredfl-ignore-compressed-flag t 51 | "*Non-nil means to font-lock names of compressed files as ignored files. 52 | This applies to filenames whose extensions are in 53 | `diredfl-compressed-extensions'. If nil they are highlighted using 54 | face `diredfl-compressed-file-name'." 55 | :type 'boolean :group 'diredfl) 56 | 57 | (defface diredfl-autofile-name 58 | '((((background dark)) (:background "#111313F03181")) ; Very dark blue 59 | (t (:background "#EEECEC0FCE7E"))) ; Very pale goldenrod 60 | "*Face used in Dired for names of files that are autofile bookmarks." 61 | :group 'diredfl) 62 | (defvar diredfl-autofile-name 'diredfl-autofile-name) 63 | 64 | (defface diredfl-compressed-file-name 65 | '((((background dark)) (:foreground "Blue")) 66 | (t (:foreground "Brown"))) 67 | "*Face used for compressed file names." 68 | :group 'diredfl) 69 | (defvar diredfl-compressed-file-name 'diredfl-compressed-file-name) 70 | 71 | (defface diredfl-compressed-file-suffix 72 | '((((background dark)) (:foreground "Blue")) 73 | (t (:foreground "Yellow"))) 74 | "*Face used for compressed file suffixes in Dired buffers. 75 | This means the `.' plus the file extension. Example: `.zip'." 76 | :group 'diredfl) 77 | (defvar diredfl-compressed-file-suffix 'diredfl-compressed-file-suffix) 78 | 79 | (defface diredfl-date-time 80 | '((((background dark)) (:foreground "#74749A9AF7F7")) ; ~ med blue 81 | (t (:foreground "DarkGoldenrod4"))) 82 | "*Face used for date and time in Dired buffers." 83 | :group 'diredfl) 84 | (defvar diredfl-date-time 'diredfl-date-time) 85 | 86 | (defface diredfl-deletion 87 | '((t (:foreground "Yellow" :background "Red"))) 88 | "*Face used for deletion flags (D) in Dired buffers." 89 | :group 'diredfl) 90 | (defvar diredfl-deletion 'diredfl-deletion) 91 | 92 | (defface diredfl-deletion-file-name 93 | '((t (:foreground "Red"))) 94 | "*Face used for names of deleted files in Dired buffers." 95 | :group 'diredfl) 96 | (defvar diredfl-deletion-file-name 'diredfl-deletion-file-name) 97 | 98 | (defface diredfl-dir-heading 99 | '((((background dark)) (:foreground "Yellow" :background "#00003F3F3434")) ; ~ dark green 100 | (t (:foreground "Blue" :background "Pink"))) 101 | "*Face used for directory headings in Dired buffers." 102 | :group 'diredfl) 103 | (defvar diredfl-dir-heading 'diredfl-dir-heading) 104 | 105 | (defface diredfl-dir-name 106 | '((((background dark)) 107 | (:foreground "#7474FFFFFFFF" :background "#2C2C2C2C2C2C")) ; ~ cyan, dark gray 108 | (t (:foreground "DarkRed" :background "LightGray"))) 109 | "*Face used for directory names." 110 | :group 'diredfl) 111 | (defvar diredfl-dir-name 'diredfl-dir-name) 112 | 113 | (defface diredfl-dir-priv 114 | '((((background dark)) 115 | (:foreground "#7474FFFFFFFF" :background "#2C2C2C2C2C2C")) ; ~ cyan, dark gray 116 | (t (:foreground "DarkRed" :background "LightGray"))) 117 | "*Face used for directory privilege indicator (d) in Dired buffers." 118 | :group 'diredfl) 119 | (defvar diredfl-dir-priv 'diredfl-dir-priv) 120 | 121 | (defface diredfl-exec-priv 122 | '((((background dark)) (:background "#4F4F3B3B2121")) ; ~ dark brown 123 | (t (:background "LightSteelBlue"))) 124 | "*Face used for execute privilege indicator (x) in Dired buffers." 125 | :group 'diredfl) 126 | (defvar diredfl-exec-priv 'diredfl-exec-priv) 127 | 128 | ;; For this to show up, you need `F' among the options in `dired-listing-switches'. 129 | ;; For example, I use "-alF" for `dired-listing-switches'. 130 | (defface diredfl-executable-tag 131 | '((t (:foreground "Red"))) 132 | "*Face used for executable tag (*) on file names in Dired buffers." 133 | :group 'diredfl) 134 | (defvar diredfl-executable-tag 'diredfl-executable-tag) 135 | 136 | (defface diredfl-file-name 137 | '((((background dark)) (:foreground "Yellow")) 138 | (t (:foreground "Blue"))) 139 | "*Face used for file names (without suffixes) in Dired buffers. 140 | This means the base name. It does not include the `.'." 141 | :group 'diredfl) 142 | (defvar diredfl-file-name 'diredfl-file-name) 143 | 144 | (defface diredfl-file-suffix 145 | '((((background dark)) (:foreground "#7474FFFF7474")) ; ~ light green 146 | (t (:foreground "DarkMagenta"))) 147 | "*Face used for file suffixes in Dired buffers. 148 | This means the `.' plus the file extension. Example: `.elc'." 149 | :group 'diredfl) 150 | (defvar diredfl-file-suffix 'diredfl-file-suffix) 151 | 152 | (defface diredfl-flag-mark 153 | '((((background dark)) (:foreground "Blue" :background "#7575D4D41D1D")) ; ~ olive green 154 | (t (:foreground "Yellow" :background "Blueviolet"))) 155 | "*Face used for flags and marks (except D) in Dired buffers." 156 | :group 'diredfl) 157 | (defvar diredfl-flag-mark 'diredfl-flag-mark) 158 | 159 | (defface diredfl-flag-mark-line 160 | '((((background dark)) (:background "#787831311414")) ; ~ dark red brown 161 | (t (:background "Skyblue"))) 162 | "*Face used for flagged and marked lines in Dired buffers." 163 | :group 'diredfl) 164 | (defvar diredfl-flag-mark-line 'diredfl-flag-mark-line) 165 | 166 | (defface diredfl-ignored-file-name 167 | '(;; (((background dark)) (:foreground "#FFFF921F921F")) ; ~ salmon 168 | ;; (((background dark)) (:foreground "#A71F5F645F64")) ; ~ dark salmon 169 | (((background dark)) (:foreground "#C29D6F156F15")) ; ~ salmon 170 | (t (:foreground "#00006DE06DE0"))) ; ~ dark cyan 171 | "*Face used for ignored file names in Dired buffers." 172 | :group 'diredfl) 173 | (defvar diredfl-ignored-file-name 'diredfl-ignored-file-name) 174 | 175 | (defface diredfl-link-priv 176 | '((((background dark)) (:foreground "#00007373FFFF")) ; ~ blue 177 | (t (:foreground "DarkOrange"))) 178 | "*Face used for link privilege indicator (l) in Dired buffers." 179 | :group 'diredfl) 180 | (defvar diredfl-link-priv 'diredfl-link-priv) 181 | 182 | (defface diredfl-no-priv 183 | '((((background dark)) (:background "#2C2C2C2C2C2C")) ; ~ dark gray 184 | (t (:background "LightGray"))) 185 | "*Face used for no privilege indicator (-) in Dired buffers." 186 | :group 'diredfl) 187 | (defvar diredfl-no-priv 'diredfl-no-priv) 188 | 189 | (defface diredfl-number 190 | '((((background dark)) (:foreground "#FFFFFFFF7474")) ; ~ light yellow 191 | (t (:foreground "DarkBlue"))) 192 | "*Face used for numerical fields in Dired buffers. 193 | In particular, inode number, number of hard links, and file size." 194 | :group 'diredfl) 195 | (defvar diredfl-number 'diredfl-number) 196 | 197 | (defface diredfl-other-priv 198 | '((((background dark)) (:background "#111117175555")) ; ~ dark blue 199 | (t (:background "PaleGoldenrod"))) 200 | "*Face used for l,s,S,t,T privilege indicators in Dired buffers." 201 | :group 'diredfl) 202 | (defvar diredfl-other-priv 'diredfl-other-priv) 203 | 204 | (defface diredfl-rare-priv 205 | '((((background dark)) (:foreground "Green" :background "#FFFF00008080")) ; ~ hot pink 206 | (t (:foreground "Magenta" :background "SpringGreen"))) 207 | "*Face used for rare privilege indicators (b,c,s,m,p,S) in Dired buffers." 208 | :group 'diredfl) 209 | (defvar diredfl-rare-priv 'diredfl-rare-priv) 210 | 211 | (defface diredfl-read-priv 212 | '((((background dark)) (:background "#999932325555")) ; ~ burgundy / dark magenta 213 | (t (:background "MediumAquamarine"))) 214 | "*Face used for read privilege indicator (w) in Dired buffers." 215 | :group 'diredfl) 216 | (defvar diredfl-read-priv 'diredfl-read-priv) 217 | 218 | (defface diredfl-symlink 219 | '((((background dark)) (:foreground "#00007373FFFF")) ; ~ blue 220 | (t (:foreground "DarkOrange"))) 221 | "*Face used for symbolic links in Dired buffers." 222 | :group 'diredfl) 223 | (defvar diredfl-symlink 'diredfl-symlink) 224 | 225 | (defface diredfl-tagged-autofile-name 226 | '((((background dark)) (:background "#328C0411328C")) ; Very dark magenta 227 | (t (:background "#CD73FBEECD73"))) ; Very pale green 228 | "*Face used in Dired for names of files that are autofile bookmarks." 229 | :group 'diredfl) 230 | (defvar diredfl-tagged-autofile-name 'diredfl-tagged-autofile-name) 231 | 232 | (defface diredfl-write-priv 233 | '((((background dark)) (:background "#25258F8F2929")) ; ~ dark green 234 | (t (:background "Orchid"))) 235 | "*Face used for write privilege indicator (w) in Dired buffers." 236 | :group 'diredfl) 237 | (defvar diredfl-write-priv 'diredfl-write-priv) 238 | 239 | (defun diredfl-match-ignored-extensions (limit) 240 | "A matcher of ignored filename extensions for use in `font-lock-keywords'. 241 | LIMIT is the extent of the search." 242 | (let ((ignored-extensions 243 | (append (if (boundp 'dired-omit-extensions) 244 | dired-omit-extensions 245 | completion-ignored-extensions) 246 | (when diredfl-ignore-compressed-flag 247 | diredfl-compressed-extensions)))) 248 | (when ignored-extensions 249 | (re-search-forward 250 | (concat "^ \\(.*" 251 | (regexp-opt ignored-extensions) 252 | ;; Optional executable flag 253 | "[*]?\\)$") 254 | limit 255 | t)))) 256 | 257 | ;;; Define second level of fontifying. 258 | (defconst diredfl-font-lock-keywords-1 259 | (list 260 | '("^ \\(.+:\\)$" 1 diredfl-dir-heading) ; Directory headers 261 | '("^ wildcard.*$" 0 'default) ; Override others, e.g. `l' for `diredfl-other-priv'. 262 | '("^ (No match).*$" 0 'default) ; Override others, e.g. `t' for `diredfl-other-priv'. 263 | '("[^ .]\\(\\.[^. /]+\\)$" 1 diredfl-file-suffix) ; Suffix, including `.'. 264 | '("\\([^ ]+\\) -> .+$" 1 diredfl-symlink) ; Symbolic links 265 | 266 | ;; 1) Date/time and 2) filename w/o suffix. 267 | ;; This is a bear, and it is fragile - Emacs can change `dired-move-to-filename-regexp'. 268 | `(,directory-listing-before-filename-regexp 269 | (7 diredfl-date-time t t) ; Date/time, locale (western or eastern) 270 | (2 diredfl-date-time t t) ; Date/time, ISO 271 | (,(concat "\\(.+\\)\\(" (concat (funcall #'regexp-opt diredfl-compressed-extensions) 272 | "\\)[*]?$")) 273 | nil nil (0 diredfl-compressed-file-name keep t))) ; Compressed-file suffix 274 | `(,directory-listing-before-filename-regexp 275 | (7 diredfl-date-time t t) ; Date/time, locale (western or eastern) 276 | (2 diredfl-date-time t t) ; Date/time, ISO 277 | ("\\(.+\\)$" nil nil (0 diredfl-file-name keep t))) ; Filename (not a compressed file) 278 | 279 | ;; Files to ignore 280 | '(diredfl-match-ignored-extensions 1 diredfl-ignored-file-name t) 281 | 282 | ;; Compressed-file (suffix) 283 | (list (concat "\\(" (concat (funcall #'regexp-opt diredfl-compressed-extensions) "\\)[*]?$")) 284 | 1 diredfl-compressed-file-suffix t) 285 | '("\\([*]\\)$" 1 diredfl-executable-tag t) ; Executable (*) 286 | 287 | ;; Inode, hard-links, & file size (. and , are for the decimal point, depending on locale) 288 | ;; See comment for `directory-listing-before-filename-regexp' in `files.el' or `files+.el'. 289 | '("\\_<\\(\\([0-9]+\\([.,][0-9]+\\)?\\)[BkKMGTPEZY]?[ /]?\\)" 1 'diredfl-number) 290 | 291 | ;; Directory names - exclude d:/..., Windows drive letter in a dir heading. 292 | (list (concat dired-re-maybe-mark dired-re-inode-size "\\(d\\)[^:]") 293 | '(1 diredfl-dir-priv t) '(".+" (dired-move-to-filename) nil (0 diredfl-dir-name t))) 294 | 295 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps]........\\(x\\)") ; o x 296 | '(1 diredfl-exec-priv)) 297 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps]........\\([lsStT]\\)") ; o misc 298 | '(1 diredfl-other-priv)) 299 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps].......\\(w\\).") ; o w 300 | '(1 diredfl-write-priv)) 301 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps]......\\(r\\)..") ; o r 302 | '(1 diredfl-read-priv)) 303 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps].....\\(x\\)...") ; g x 304 | '(1 diredfl-exec-priv)) 305 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps].....\\([lsStT]\\)...") ; g misc 306 | '(1 diredfl-other-priv)) 307 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps]....\\(w\\)....") ; g w 308 | '(1 diredfl-write-priv)) 309 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps]...\\(r\\).....") ; g r 310 | '(1 diredfl-read-priv)) 311 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps]..\\(x\\)...") ; u x 312 | '(1 diredfl-exec-priv)) 313 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps]..\\([lsStT]\\)...") ; u misc 314 | '(1 diredfl-other-priv)) 315 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps].\\(w\\)....") ; u w 316 | '(1 diredfl-write-priv)) 317 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps]\\(r\\).....") ; u r 318 | '(1 diredfl-read-priv)) 319 | 320 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps]........\\([-rwxlsStT]\\)") ; o - 321 | '(1 diredfl-no-priv keep)) 322 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps].......\\([-rwxlsStT]\\).") ; g - 323 | '(1 diredfl-no-priv keep)) 324 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps]......\\([-rwxlsStT]\\)..") ; u - 325 | '(1 diredfl-no-priv keep)) 326 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps].....\\([-rwxlsStT]\\)...") ; o - 327 | '(1 diredfl-no-priv keep)) 328 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps]....\\([-rwxlsStT]\\)....") ; g - 329 | '(1 diredfl-no-priv keep)) 330 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps]...\\([-rwxlsStT]\\).....") ; u - 331 | '(1 diredfl-no-priv keep)) 332 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps]..\\([-rwxlsStT]\\)......") ; o - 333 | '(1 diredfl-no-priv keep)) 334 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps].\\([-rwxlsStT]\\).......") ; g - 335 | '(1 diredfl-no-priv keep)) 336 | (list (concat dired-re-maybe-mark dired-re-inode-size "[-bcdlps]\\([-rwxlsStT]\\)........") ; u - 337 | '(1 diredfl-no-priv keep)) 338 | (list (concat dired-re-maybe-mark dired-re-inode-size "\\(-\\)") 339 | '(1 diredfl-no-priv keep)) 340 | 341 | (list (concat dired-re-maybe-mark dired-re-inode-size "\\([bcsmpS]\\)") ; (rare) 342 | '(1 diredfl-rare-priv keep)) 343 | (list (concat dired-re-maybe-mark dired-re-inode-size "\\(l\\)[-rwxlsStT]") ; l 344 | '(1 diredfl-link-priv keep)) 345 | 346 | (list (concat "^\\([^\n " (char-to-string dired-del-marker) "].*$\\)") 347 | '(1 diredfl-flag-mark-line prepend)) ; Flag/mark lines 348 | (list (concat "^\\([^\n " (char-to-string dired-del-marker) "]\\)") ; Flags, marks (except D) 349 | '(1 diredfl-flag-mark prepend)) 350 | 351 | (list (concat "^\\([" (char-to-string dired-del-marker) "].*$\\)") ; Deletion-flagged lines 352 | '(1 diredfl-deletion-file-name prepend)) 353 | (list (concat "^\\([" (char-to-string dired-del-marker) "]\\)") ; Deletion flags (D) 354 | '(1 diredfl-deletion prepend))) 355 | "2nd level of Dired highlighting. See `font-lock-maximum-decoration'.") 356 | 357 | 358 | ;;;###autoload 359 | (define-minor-mode diredfl-mode 360 | "Enable additional font locking in `dired-mode'." 361 | :global nil 362 | (setq font-lock-defaults 363 | (if diredfl-mode 364 | '((dired-font-lock-keywords 365 | dired-font-lock-keywords 366 | diredfl-font-lock-keywords-1) 367 | t nil nil beginning-of-line) 368 | '(dired-font-lock-keywords t nil nil beginning-of-line))) 369 | (font-lock-refresh-defaults)) 370 | 371 | ;;;###autoload 372 | (define-globalized-minor-mode diredfl-global-mode diredfl-mode 373 | (lambda () 374 | (when (derived-mode-p 'dired-mode) 375 | (diredfl-mode))) 376 | :require 'diredfl) 377 | 378 | 379 | (provide 'diredfl) 380 | ;;; diredfl.el ends here 381 | --------------------------------------------------------------------------------