[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#35564: [PATCH v2] Tweak dired warning about "wildcard" characters
From: |
Noam Postavsky |
Subject: |
bug#35564: [PATCH v2] Tweak dired warning about "wildcard" characters |
Date: |
Wed, 12 Jun 2019 08:23:10 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.2 (gnu/linux) |
Kévin Le Gouguec <kevin.legouguec@gmail.com> writes:
> +(defun dired--isolated-char-p (command pos)
> + "Assert whether the character at POS is isolated within COMMAND.
> +A character is isolated if:
> +- it is surrounded by whitespace, the start of the command, or
> + the end of the command,
> +- it is surrounded by `\\=`' characters."
> + (let ((n (length command))
> + (whitespace '(?\s ?\t)))
> + (or (= n 1)
> + (and (= pos 0)
> + (memq (elt command 1) whitespace))
> + (and (= pos (1- n))
> + (memq (elt command (1- pos)) whitespace))
> + (and
> + (> pos 0)
> + (< pos (1- n))
> + (let ((prev (elt command (1- pos)))
> + (next (elt command (1+ pos))))
> + (or (and (memq prev whitespace)
> + (memq next whitespace))
> + (and (= prev ?`)
> + (= next ?`))))))))
I think this might be better expressed in regexp:
(and (string-match
(rx-to-string '(seq (or bos (in blank ?`))
(group (eval (string (aref command pos))))
(or eos (in blank ?`))))
command (max 0 (1- pos)))
(= pos (match-beginning 1)))
Although this gives different results for things like:
(dired--isolated-char-p "?`foo`" 0)
Do we care about that? (if yes, then that's a missing test case)
> +(defun dired--highlight-nosubst-char (command char)
> + "Highlight occurences of CHAR that are not isolated in COMMAND.
> +These occurences will not be substituted; they will be sent as-is
> +to the shell, which may interpret them as wildcards."
> + (save-match-data
> + (let ((highlighted (substring-no-properties command))
> + (pos 0))
> + (while (string-match (regexp-quote char) command pos)
> + (let ((start (match-beginning 0))
> + (end (match-end 0)))
> + (unless (dired--isolated-char-p command start)
> + (add-face-text-property start end 'warning nil highlighted))
> + (setq pos end)))
> + highlighted)))
And perhaps the regexp above (if it's correct) can be integrated into
this search? (maybe not though, since negation isn't straightforward in
regexps)
bug#35564: [PATCH v3] Tweak dired warning about "wildcard" characters, Kévin Le Gouguec, 2019/06/26