GNU bug report logs -
#35564
27.0.50; [PATCH] Tweak dired-do-shell-command warning about "wildcard" characters
Previous Next
Reported by: Kévin Le Gouguec <kevin.legouguec <at> gmail.com>
Date: Sat, 4 May 2019 18:03:02 UTC
Severity: normal
Tags: fixed, moreinfo, patch
Merged with 28969
Found in version 27.0.50
Fixed in version 28.1
Done: Lars Ingebrigtsen <larsi <at> gnus.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
Kévin Le Gouguec <kevin.legouguec <at> 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)
This bug report was last modified 4 years and 296 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.