mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-29 07:58:28 +00:00
Allow splitting strings in Eshell expansions with "plain" strings
Since '$var[hello 0]' doesn't make sense when 'var' is a string, the previous restriction was unnecessary. * lisp/eshell/esh-var.el (Commentary): Update documentation. (eshell-apply-indices): Allow "plain" strings to split strings. * test/lisp/eshell/esh-var-test.el (esh-var-test/interp-var-string-split-indices) (esh-var-test/quoted-interp-var-string-split-indices): Update tests. * doc/misc/eshell.texi (Dollars expansion): Update documentation.
This commit is contained in:
parent
990f36fa10
commit
d72cd4a2b7
@ -1055,9 +1055,9 @@ Multiple sets of indices can also be specified. For example, if
|
||||
|
||||
@item $@var{expr}[@var{regexp} @var{i...}]
|
||||
As above (when @var{expr} expands to a string), but use @var{regexp}
|
||||
to split the string. @var{regexp} can be any form other than a number
|
||||
or a plain variable name. For example, @samp{$@var{var}[: 0]} will
|
||||
return the first element of a colon-delimited string.
|
||||
to split the string. @var{regexp} can be any form other than a
|
||||
number. For example, @samp{$@var{var}[: 0]} will return the first
|
||||
element of a colon-delimited string.
|
||||
|
||||
@item $#@var{expr}
|
||||
Expands to the length of the result of @var{expr}, an expression in
|
||||
|
@ -74,9 +74,8 @@
|
||||
;; $EXPR["\\\\" 10]
|
||||
;;
|
||||
;; Separate on backslash characters. Actually, the first argument --
|
||||
;; if it doesn't have the form of a number, or a plain variable name
|
||||
;; -- can be any regular expression. So to split on numbers, use
|
||||
;; '$EXPR["[0-9]+" 10 20]'.
|
||||
;; if it doesn't have the form of a number -- can be any regular
|
||||
;; expression. So to split on numbers, use '$EXPR["[0-9]+" 10 20]'.
|
||||
;;
|
||||
;; $EXPR[hello]
|
||||
;;
|
||||
@ -566,13 +565,11 @@ For example, to retrieve the second element of a user's record in
|
||||
(while indices
|
||||
(let ((refs (car indices)))
|
||||
(when (stringp value)
|
||||
(let (separator)
|
||||
(if (not (or (not (stringp (caar indices)))
|
||||
(string-match
|
||||
(concat "^" eshell-variable-name-regexp "$")
|
||||
(caar indices))))
|
||||
(setq separator (caar indices)
|
||||
refs (cdr refs)))
|
||||
(let (separator (index (caar indices)))
|
||||
(when (and (stringp index)
|
||||
(not (get-text-property 0 'number index)))
|
||||
(setq separator index
|
||||
refs (cdr refs)))
|
||||
(setq value
|
||||
(mapcar #'eshell-convert
|
||||
(split-string value separator)))))
|
||||
|
@ -84,6 +84,11 @@
|
||||
(should (equal (eshell-test-command-result "echo $eshell-test-value[: 0]")
|
||||
"zero"))
|
||||
(should (equal (eshell-test-command-result "echo $eshell-test-value[: 0 2]")
|
||||
'("zero" "two"))))
|
||||
(let ((eshell-test-value "zeroXoneXtwoXthreeXfour"))
|
||||
(should (equal (eshell-test-command-result "echo $eshell-test-value[X 0]")
|
||||
"zero"))
|
||||
(should (equal (eshell-test-command-result "echo $eshell-test-value[X 0 2]")
|
||||
'("zero" "two")))))
|
||||
|
||||
(ert-deftest esh-var-test/interp-var-regexp-split-indices ()
|
||||
@ -216,6 +221,13 @@ inside double-quotes"
|
||||
"zero"))
|
||||
(should (equal (eshell-test-command-result
|
||||
"echo \"$eshell-test-value[: 0 2]\"")
|
||||
'("zero" "two"))))
|
||||
(let ((eshell-test-value "zeroXoneXtwoXthreeXfour"))
|
||||
(should (equal (eshell-test-command-result
|
||||
"echo \"$eshell-test-value[X 0]\"")
|
||||
"zero"))
|
||||
(should (equal (eshell-test-command-result
|
||||
"echo \"$eshell-test-value[X 0 2]\"")
|
||||
'("zero" "two")))))
|
||||
|
||||
(ert-deftest esh-var-test/quoted-interp-var-regexp-split-indices ()
|
||||
|
Loading…
Reference in New Issue
Block a user