* bug#7563: 23.2; `split-string-and-unquote' mis-documented / purpose unclear
@ 2010-12-05 21:28 Dave Abrahams
2010-12-05 21:38 ` bug#7563: related bug Dave Abrahams
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Dave Abrahams @ 2010-12-05 21:28 UTC (permalink / raw)
To: 7563
This bug report will be sent to the Free Software Foundation,
not to your local site managers!
Please write in English if possible, because the Emacs maintainers
usually do not have translators to read other languages for them.
Your bug report will be posted to the bug-gnu-emacs@gnu.org mailing list,
and to the gnu.emacs.bug news group.
Please describe exactly what actions triggered the bug
and the precise symptoms of the bug. If you can, give
a recipe starting from `emacs -Q':
The info doc for split-string ends with:
If you need to split a string that is a shell command, where
individual arguments could be quoted, see split-string-and-unquote.
Here's the info doc for split-string-and-unquote.
-- Function: split-string-and-unquote string &optional separators
This function splits STRING into substrings at matches for the
regular expression SEPARATORS, like `split-string' does (*note
Creating Strings::); in addition, it removes quoting from the
substrings. It then makes a list of the substrings and returns it.
If SEPARATORS is omitted or `nil', it defaults to `"\\s-+"', which
is a regular expression that matches one or more characters with
whitespace syntax (*note Syntax Class Table::).
This function performs two types of quoting: enclosing a whole
string in double quotes `"..."', and quoting individual characters
with a backslash escape `\'. The latter is also used in Lisp
strings, so this function can handle those as well.
First problem: the last paragraph above is simply wrong.
split-string-and-unquote doesn't perform any type of quoting; it
un-quotes.
Second problem: the doc implies that a string that could be executed
by the shell could be split into its constituent arguments by
split-string-and-unquote, but in general, it cannot, e.g.:
(split-string-and-unquote "'foo bar'") => ("'foo" "bar'")
(split-string-and-unquote "foo\\ bar") => ("foo" "bar")
I'm not sure what this function is really supposed to be for, but any
implication that it properly handles conversion into shell arguments
is highly misleading. Some motivation should be given for proper use
of split-string-and-unquote, or it should be deprecated.
If Emacs crashed, and you have the Emacs process in the gdb debugger,
please include the output from the following gdb commands:
`bt full' and `xbacktrace'.
For information about debugging Emacs, please read the file
/Applications/Emacs.app/Contents/Resources/etc/DEBUG.
In GNU Emacs 23.2.1 (x86_64-apple-darwin, NS apple-appkit-1038.29)
of 2010-05-08 on black.local
Windowing system distributor `Apple', version 10.3.1038
configured using `configure '--host=x86_64-apple-darwin' '--build=i686-apple-darwin' '--with-ns' 'build_alias=i686-apple-darwin' 'host_alias=x86_64-apple-darwin' 'CC=gcc -mmacosx-version-min=10.5''
Important settings:
value of $LC_ALL: nil
value of $LC_COLLATE: nil
value of $LC_CTYPE: nil
value of $LC_MESSAGES: nil
value of $LC_MONETARY: nil
value of $LC_NUMERIC: nil
value of $LC_TIME: nil
value of $LANG: nil
value of $XMODIFIERS: nil
locale-coding-system: nil
default enable-multibyte-characters: t
Major mode: Emacs-Lisp
Minor modes in effect:
diff-auto-refine-mode: t
global-auto-complete-mode: t
auto-complete-mode: t
yas/global-mode: t
show-paren-mode: t
server-mode: t
global-auto-revert-mode: t
delete-selection-mode: t
tooltip-mode: t
mouse-wheel-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
auto-encryption-mode: t
auto-compression-mode: t
line-number-mode: t
transient-mark-mode: t
Recent input:
C-. C-, C-k r e p r <M-backspace> w i l l SPC r e p
r e e <backspace> s e n t SPC a SPC l i s t SPC o f
SPC a r g u m e n t s C-, C-, C-. C-, C-, C-, C-, C-,
C-, C-p C-p C-p C-n C-n C-n C-e C-p C-e C-, C-, C-,
C-, C-, C-, C-h f s p i <backspace> l i t - s t <tab>
- a n <tab> <return> <help-echo> <down-mouse-1> <mouse-1>
<down-mouse-1> <mouse-1> C-h f s p l i t - s t <tab>
- a n <tab> <return> C-x C-n C-n C-n C-n C-n C-n C-n
C-n C-n C-n C-p C-p C-p C-p C-. C-. C-. C-. C-. C-.
C-. C-. C-. C-e C-n C-, C-, C-, C-, C-, C-, C-, C-e
C-, C-, C-, C-, C-, C-, C-, C-, C-, C-, C-. C-. C-.
C-. C-. C-. C-. C-. C-h f <return> C-n C-n C-n C-n
C-n C-n C-n C-n C-e C-p C-p C-p C-p C-p C-n C-n C-n
C-e C-n C-p C-p C-p C-p C-p C-p C-p C-p C-, C-, C-,
C-, C-, C-, C-, C-, C-, C-, C-n C-n C-n C-h f C-g C-g
C-h i u M-< s s p l i t - s t r i n g - a n d - u n
<return> <return> C-s C-s C-n C-n C-n C-s u n q u o
t e C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n
C-n C-n C-n C-n C-n C-n C-p C-p C-p C-p C-p C-n C-a
C-SPC C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p
C-p C-p M-w C-x C-p M-x r e p o r t - e m <tab> <r
eturn>
Recent messages:
Type C-x 1 to delete the help window. [3 times]
Auto-saving...
[12 times]
Quit [2 times]
[2 times]
Mark set [2 times]
[2 times]
Mark saved where search started
Mark set
[4 times]
Load-path shadows:
/Users/dave/.emacs.d/3rd-party/package.d/bibl-mode/bibl-mode hides /Users/dave/.emacs.d/3rd-party/package.d/bibl-mode/bibl-mode/bibl-mode
/Users/dave/.emacs.d/3rd-party/package.d/bibl-mode/bibl-lists hides /Users/dave/.emacs.d/3rd-party/package.d/bibl-mode/bibl-mode/bibl-lists
/Users/dave/.emacs.d/3rd-party/package.d/bibl-mode/bibl-grab hides /Users/dave/.emacs.d/3rd-party/package.d/bibl-mode/bibl-mode/bibl-grab
/Users/dave/.emacs.d/3rd-party/package.d/magit/etc/emacs/site-start.d/50magit hides /Users/dave/.emacs.d/3rd-party/package.d/magit/magit/etc/emacs/site-start.d/50magit
/Users/dave/.emacs.d/3rd-party/package.d/magit/magit/share/emacs/site-lisp/magit hides /Users/dave/.emacs.d/3rd-party/package.d/magit/share/emacs/site-lisp/magit
/Users/dave/.emacs.d/3rd-party/package.d/magit/magit/share/emacs/site-lisp/magit-topgit hides /Users/dave/.emacs.d/3rd-party/package.d/magit/share/emacs/site-lisp/magit-topgit
/Users/dave/.emacs.d/3rd-party/package.d/magit/magit/share/emacs/site-lisp/magit-svn hides /Users/dave/.emacs.d/3rd-party/package.d/magit/share/emacs/site-lisp/magit-svn
/Users/dave/.emacs.d/3rd-party/package.d/magit/magit/share/emacs/site-lisp/magit-key-mode hides /Users/dave/.emacs.d/3rd-party/package.d/magit/share/emacs/site-lisp/magit-key-mode
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-weather hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-weather
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-util hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-util
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-ucs hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-ucs
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-tabmenu hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-tabmenu
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-symbol hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-symbol
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-session hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-session
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-search hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-search
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-rss hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-rss
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-proc hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-proc
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-perldoc hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-perldoc
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-namazu hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-namazu
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-mail hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-mail
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-load hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-load
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-lnum hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-lnum
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-image hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-image
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-hist hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-hist
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-form hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-form
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-filter hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-filter
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-fb hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-fb
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-favicon hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-favicon
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-ems hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-ems
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-dtree hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-dtree
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-cookie hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-cookie
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-ccl hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-ccl
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-bug hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-bug
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-bookmark hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-bookmark
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/w3m-antenna hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/w3m-antenna
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/octet hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/octet
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/mime-w3m hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/mime-w3m
/Users/dave/.emacs.d/3rd-party/package.d/w3m/lisp/mew-w3m hides /Users/dave/.emacs.d/3rd-party/package.d/w3m/w3m/lisp/mew-w3m
/Users/dave/.emacs.d/3rd-party/package.d/flim/lisp/flim/sha1 hides /Applications/Emacs.app/Contents/Resources/lisp/sha1
/Users/dave/.emacs.d/3rd-party/package.d/semi/lisp/semi/pgg hides /Applications/Emacs.app/Contents/Resources/lisp/pgg
/Users/dave/.emacs.d/3rd-party/package.d/semi/lisp/semi/pgg-pgp5 hides /Applications/Emacs.app/Contents/Resources/lisp/pgg-pgp5
/Users/dave/.emacs.d/3rd-party/package.d/semi/lisp/semi/pgg-pgp hides /Applications/Emacs.app/Contents/Resources/lisp/pgg-pgp
/Users/dave/.emacs.d/3rd-party/package.d/semi/lisp/semi/pgg-parse hides /Applications/Emacs.app/Contents/Resources/lisp/pgg-parse
/Users/dave/.emacs.d/3rd-party/package.d/semi/lisp/semi/pgg-gpg hides /Applications/Emacs.app/Contents/Resources/lisp/pgg-gpg
/Users/dave/.emacs.d/3rd-party/package.d/semi/lisp/semi/pgg-def hides /Applications/Emacs.app/Contents/Resources/lisp/pgg-def
/Users/dave/.emacs.d/3rd-party/package.d/flim/lisp/flim/md4 hides /Applications/Emacs.app/Contents/Resources/lisp/md4
/Users/dave/elisp/package.d/linum hides /Applications/Emacs.app/Contents/Resources/lisp/linum
/Users/dave/.emacs.d/3rd-party/package.d/flim/lisp/flim/hex-util hides /Applications/Emacs.app/Contents/Resources/lisp/hex-util
/Users/dave/.emacs.d/3rd-party/package.d/tramp/lisp/format-spec hides /Applications/Emacs.app/Contents/Resources/lisp/format-spec
/Users/dave/elisp/custom hides /Applications/Emacs.app/Contents/Resources/lisp/custom
/Users/dave/.emacs.d/3rd-party/package.d/remember/lisp/remember hides /Applications/Emacs.app/Contents/Resources/lisp/textmodes/remember
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org hides /Applications/Emacs.app/Contents/Resources/lisp/org/org
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-xoxo hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-xoxo
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-wl hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-wl
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-w3m hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-w3m
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-vm hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-vm
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-timer hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-timer
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-table hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-table
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-src hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-src
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-rmail hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-rmail
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-remember hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-remember
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-publish hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-publish
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-protocol hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-protocol
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-plot hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-plot
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-mouse hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-mouse
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-mobile hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-mobile
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-mhe hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-mhe
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-mew hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-mew
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-macs hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-macs
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-mac-message hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-mac-message
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-list hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-list
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-latex hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-latex
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-jsinfo hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-jsinfo
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-irc hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-irc
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-install hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-install
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-inlinetask hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-inlinetask
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-info hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-info
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-indent hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-indent
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-id hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-id
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-icalendar hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-icalendar
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-html hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-html
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-habit hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-habit
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-gnus hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-gnus
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-freemind hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-freemind
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-footnote hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-footnote
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-feed hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-feed
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-faces hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-faces
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-exp hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-exp
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-exp-blocks hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-exp-blocks
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-docbook hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-docbook
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-datetree hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-datetree
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-crypt hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-crypt
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-compat hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-compat
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-colview hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-colview
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-clock hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-clock
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-bibtex hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-bibtex
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-bbdb hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-bbdb
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-attach hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-attach
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-ascii hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-ascii
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-archive hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-archive
/Users/dave/.emacs.d/3rd-party/package.d/org-mode/lisp/org-agenda hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-agenda
/Users/dave/.emacs.d/3rd-party/package.d/tramp/lisp/trampver hides /Applications/Emacs.app/Contents/Resources/lisp/net/trampver
/Users/dave/.emacs.d/3rd-party/package.d/tramp/lisp/tramp hides /Applications/Emacs.app/Contents/Resources/lisp/net/tramp
/Users/dave/.emacs.d/3rd-party/package.d/tramp/lisp/tramp-uu hides /Applications/Emacs.app/Contents/Resources/lisp/net/tramp-uu
/Users/dave/.emacs.d/3rd-party/package.d/tramp/lisp/tramp-smb hides /Applications/Emacs.app/Contents/Resources/lisp/net/tramp-smb
/Users/dave/.emacs.d/3rd-party/package.d/tramp/lisp/tramp-gw hides /Applications/Emacs.app/Contents/Resources/lisp/net/tramp-gw
/Users/dave/.emacs.d/3rd-party/package.d/tramp/lisp/tramp-ftp hides /Applications/Emacs.app/Contents/Resources/lisp/net/tramp-ftp
/Users/dave/.emacs.d/3rd-party/package.d/tramp/lisp/tramp-fish hides /Applications/Emacs.app/Contents/Resources/lisp/net/tramp-fish
/Users/dave/.emacs.d/3rd-party/package.d/tramp/lisp/tramp-compat hides /Applications/Emacs.app/Contents/Resources/lisp/net/tramp-compat
/Users/dave/.emacs.d/3rd-party/package.d/tramp/lisp/tramp-cmds hides /Applications/Emacs.app/Contents/Resources/lisp/net/tramp-cmds
/Users/dave/.emacs.d/3rd-party/package.d/tramp/lisp/tramp-cache hides /Applications/Emacs.app/Contents/Resources/lisp/net/tramp-cache
/Users/dave/.emacs.d/3rd-party/package.d/tramp/lisp/socks hides /Applications/Emacs.app/Contents/Resources/lisp/net/socks
/Users/dave/.emacs.d/3rd-party/package.d/flim/lisp/flim/sasl hides /Applications/Emacs.app/Contents/Resources/lisp/net/sasl
/Users/dave/.emacs.d/3rd-party/package.d/flim/lisp/flim/sasl-ntlm hides /Applications/Emacs.app/Contents/Resources/lisp/net/sasl-ntlm
/Users/dave/.emacs.d/3rd-party/package.d/flim/lisp/flim/sasl-digest hides /Applications/Emacs.app/Contents/Resources/lisp/net/sasl-digest
/Users/dave/.emacs.d/3rd-party/package.d/flim/lisp/flim/sasl-cram hides /Applications/Emacs.app/Contents/Resources/lisp/net/sasl-cram
/Users/dave/.emacs.d/3rd-party/package.d/flim/lisp/flim/ntlm hides /Applications/Emacs.app/Contents/Resources/lisp/net/ntlm
/Users/dave/.emacs.d/3rd-party/package.d/flim/lisp/flim/hmac-md5 hides /Applications/Emacs.app/Contents/Resources/lisp/net/hmac-md5
/Users/dave/.emacs.d/3rd-party/package.d/flim/lisp/flim/hmac-def hides /Applications/Emacs.app/Contents/Resources/lisp/net/hmac-def
/Users/dave/.emacs.d/3rd-party/package.d/wanderlust/lisp/wl/rfc2368 hides /Applications/Emacs.app/Contents/Resources/lisp/mail/rfc2368
/Users/dave/.emacs.d/3rd-party/package.d/wanderlust/lisp/wl/utf7 hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/utf7
/Users/dave/.emacs.d/3rd-party/package.d/semi/lisp/semi/smime hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/smime
/Users/dave/.emacs.d/3rd-party/package.d/planner/contrib/timeclock hides /Applications/Emacs.app/Contents/Resources/lisp/calendar/timeclock
Features:
(shadow emacsbug apropos tmm electric debug ediff-merg ediff-diff
ediff-wind ediff-help ediff-util ediff-mult ediff-init ediff vc
vc-dispatcher find-dired grep compile man doc-mode magit log-edit
pcvs-util add-log magit-key-mode browse-url parse-time vc-cvs
make-mode sh-script executable dired-aux info tabify org-archive
org-mobile cal-china lunar solar cal-dst cal-bahai cal-islam
cal-hebrew holidays hol-loaddefs diary-lib diary-loaddefs cal-iso epg
disp-table org-eval org-bookmark bookmark org-mac-message org-habit
org-id org-crypt org-agenda diff-mode diff dabbrev thingatpt find-func
flow-fill smtp sasl sasl-anonymous sasl-login sasl-plain newcomment
elmo-filter mel-q-ccl smiley multi-isearch wl-score mule-util ssl
my-xmlunicode quail elmo-nntp elmo-sendlog elmo-internal elmo-imap4
time-stamp elmo-net elmo-dop elmo-cache elmo-map hl-line modb-legacy
modb-standard wl-mime mime-edit pgg-parse pccl pccl-20 ccl mailalias
mime-setup mail-mime-setup semi-setup mime-pgp pgg-def mime-play
filename mime-image wl-demo wl-draft eword-encode wl-template sendmail
wl-news wl-address wl-thread wl-folder wl-spam wl-action elmo-spam
elsp-header elsp-generic wl-gravatar gravatar gnus-picon gnus-art
mm-uu mml2015 mm-view smime gnus-sum nnoo gnus-group gnus-undo nnmail
mail-source format-spec gnus-start gnus-spec gnus-int gnus-range
message ecomplete rfc822 mml mml-sec password-cache mm-decode
mm-bodies mm-encode mailcap mail-parse rfc2231 rfc2047 rfc2045 qp
ietf-drums mailabbrev gmm-utils mailheader canlock sha1 sha1-el
hex-util hashcash gnus-win bbdb signature org-wl org byte-opt
ob-emacs-lisp ob-tangle ob-ref ob-lob ob-table org-footnote org-src
ob-comint comint ring ob-keys ob org-list org-faces org-compat
org-entities org-macs noutline outline cal-menu calendar cal-loaddefs
filladapt wl-summary ps-print ps-def lpr wl-refile wl-message
elmo-mime mmelmo-buffer mmelmo-imap mime-view calist semi-def mmimap
mime-parse mmbuffer mmgeneric wl-highlight elmo-multi mime-conf wl
wl-e21 wl-util pp elmo-flag elmo-localdir bytecomp byte-compile
wl-vars epg-config wl-version elmo elmo-signal elmo-msgdb modb
modb-generic modb-entity mime elmo-util emu invisible inv-23 poem
poem-e20 poem-e20_3 utf7 eword-decode mel mime-def alist std11
mcharset mcs-20 mcs-e20 pces pces-e20 pces-20 broken pcustom elmo-date
timezone path-util elmo-vars poe elmo-version pym static apel-ver
product luna vc-git dired regexp-opt package reporter init w3m-load
remember-autoloads planner-autoloads muse-autoloads
color-theme-autoloads bbdb-autoloads my-loaddefs auto-complete-config
auto-complete popup ido maxframe osx-plist xml windmove ffap dwa-util
initsplit yasnippet advice advice-preload derived easy-mmode edmacro
kmacro help-mode view assoc cl cl-19 paren server gnus gnus-ems
nnheader gnus-util netrc time-date mail-utils mm-util mail-prsvr
wid-edit autorevert delsel cus-start cus-load autoload help-fns
org-install tooltip ediff-hook vc-hooks lisp-float-type mwheel ns-win
easymenu tool-bar dnd fontset image fringe lisp-mode register page
menu-bar rfn-eshadow timer select scroll-bar mldrag mouse jit-lock
font-lock syntax facemenu font-core frame cham georgian utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese hebrew
greek romanian slovak czech european ethiopic indian cyrillic chinese
case-table epa-hook jka-cmpr-hook help simple abbrev loaddefs button
minibuffer faces cus-face files text-properties overlay md5 base64
format env code-pages mule custom widget hashtable-print-readable
backquote make-network-process ns multi-tty emacs)
--
Dave Abrahams
BoostPro Computing
http://www.boostpro.com
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#7563: related bug
2010-12-05 21:28 bug#7563: 23.2; `split-string-and-unquote' mis-documented / purpose unclear Dave Abrahams
@ 2010-12-05 21:38 ` Dave Abrahams
2010-12-06 0:37 ` bug#7563: one more detail Dave Abrahams
2010-12-11 9:50 ` bug#7563: 23.2; `split-string-and-unquote' mis-documented / purpose unclear Eli Zaretskii
2 siblings, 0 replies; 9+ messages in thread
From: Dave Abrahams @ 2010-12-05 21:38 UTC (permalink / raw)
To: 7563
Perhaps this report will also help resolve
http://debbugs.gnu.org/cgi/bugreport.cgi?bug=1212
--
Dave Abrahams
BoostPro Computing
http://www.boostpro.com
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#7563: one more detail
2010-12-05 21:28 bug#7563: 23.2; `split-string-and-unquote' mis-documented / purpose unclear Dave Abrahams
2010-12-05 21:38 ` bug#7563: related bug Dave Abrahams
@ 2010-12-06 0:37 ` Dave Abrahams
2010-12-11 9:51 ` Eli Zaretskii
2010-12-11 9:50 ` bug#7563: 23.2; `split-string-and-unquote' mis-documented / purpose unclear Eli Zaretskii
2 siblings, 1 reply; 9+ messages in thread
From: Dave Abrahams @ 2010-12-06 0:37 UTC (permalink / raw)
To: 7563
split-string-and-unquote and combine-and-quote-strings are introduced
in §37.2 `Shell Arguments', which seems wrong. The introductory text
is misleading:
The following two functions are useful for creating shell commands
from individual argument strings, and taking shell command lines apart
into individual arguments.
--
Dave Abrahams
BoostPro Computing
http://www.boostpro.com
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#7563: 23.2; `split-string-and-unquote' mis-documented / purpose unclear
2010-12-05 21:28 bug#7563: 23.2; `split-string-and-unquote' mis-documented / purpose unclear Dave Abrahams
2010-12-05 21:38 ` bug#7563: related bug Dave Abrahams
2010-12-06 0:37 ` bug#7563: one more detail Dave Abrahams
@ 2010-12-11 9:50 ` Eli Zaretskii
[not found] ` <m2fwu477ch.wl%dave@boostpro.com>
2 siblings, 1 reply; 9+ messages in thread
From: Eli Zaretskii @ 2010-12-11 9:50 UTC (permalink / raw)
To: Dave Abrahams; +Cc: 7563-done, 1212-done
> Date: Sun, 05 Dec 2010 16:28:16 -0500
> From: Dave Abrahams <dave@boostpro.com>
> Cc:
>
> This function performs two types of quoting: enclosing a whole
> string in double quotes `"..."', and quoting individual characters
> with a backslash escape `\'. The latter is also used in Lisp
> strings, so this function can handle those as well.
>
>
> First problem: the last paragraph above is simply wrong.
> split-string-and-unquote doesn't perform any type of quoting; it
> un-quotes.
I changed "performs" to "supports". Thanks for catching this.
> Second problem: the doc implies that a string that could be executed
> by the shell could be split into its constituent arguments by
> split-string-and-unquote, but in general, it cannot, e.g.:
>
> (split-string-and-unquote "'foo bar'") => ("'foo" "bar'")
> (split-string-and-unquote "foo\\ bar") => ("foo" "bar")
>
> I'm not sure what this function is really supposed to be for, but any
> implication that it properly handles conversion into shell arguments
> is highly misleading. Some motivation should be given for proper use
> of split-string-and-unquote, or it should be deprecated.
This has come up before; see Bug #1212 and this thread:
http://lists.gnu.org/archive/html/emacs-devel/2008-10/msg00431.html
The best explanation I can give you is that this function is for
taking minibuffer input and converting it to a list of string
arguments as required by call-process and start-process. (I added
this information to the manual.) Note that the documentation does not
mention "shell" anywhere. You could also gain some insight by looking
at the users of this function.
With those changes, I'm closing this bug report (and 1212 as well),
because the issue has been already beaten to death in the above
discussion.
The changes I made are on the emacs-23 branch, btw, in case you want
to eyeball them.
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#7563: one more detail
2010-12-06 0:37 ` bug#7563: one more detail Dave Abrahams
@ 2010-12-11 9:51 ` Eli Zaretskii
0 siblings, 0 replies; 9+ messages in thread
From: Eli Zaretskii @ 2010-12-11 9:51 UTC (permalink / raw)
To: Dave Abrahams; +Cc: 7563
> From: Dave Abrahams <dave@boostpro.com>
> Date: Sun, 5 Dec 2010 19:37:16 -0500
> Cc:
>
> split-string-and-unquote and combine-and-quote-strings are introduced
> in §37.2 `Shell Arguments', which seems wrong. The introductory text
> is misleading:
>
> The following two functions are useful for creating shell commands
> from individual argument strings, and taking shell command lines apart
> into individual arguments.
I added some more explanations to this introductory text, which
hopefully will make more sense.
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#7563: 23.2; `split-string-and-unquote' mis-documented / purpose unclear
[not found] ` <524EC395-B36D-4678-AF93-43C24C9E9745@boostpro.com>
@ 2010-12-11 18:50 ` Eli Zaretskii
2010-12-11 19:41 ` Dave Abrahams
0 siblings, 1 reply; 9+ messages in thread
From: Eli Zaretskii @ 2010-12-11 18:50 UTC (permalink / raw)
To: Dave Abrahams; +Cc: 7563
> Cc: "7563-done@debbugs.gnu.org" <7563-done@debbugs.gnu.org>,
> "1212-done@debbugs.gnu.org" <1212-done@debbugs.gnu.org>
> From: Dave Abrahams <dave@boostpro.com>
> Date: Sat, 11 Dec 2010 12:57:30 -0500
>
> Sorry, let me precise: your fix is correct inasmuch as it fulfills your intention, but the text you were working on is still wrong because it says quite clearly that backslash escaping is supported, but as I have shown, it is not.
Quoting with backslashes _is_ supported, in the Lisp string style.
Try this, for example:
(split-string-and-unquote "\"foo\\\"bar\" bar") => ("foo\"bar" "bar")
> Specifically it specifically states they handle backslashes, and strongly implies that they have generally-useful semantics for interacting with arbitrary shells, when in fact they are essentially implementation details of call-/start-process whose semantics are only appropriate to an undocumented set of conditions set up in those two functions.
I tried to make it more clear that these functions are mainly for
working with command-line arguments of call-/start-process.
> >> * The functions' design still has nothing to do with shell quoting;
> >> they are hard-coded to work with double-quotes and only
> >> double-quotes, which is not guaranteed to work for an arbitrary
> >> definition of "shell."
> >
> > I believe the manual says precisely that. If the problem is with
> > mentioning "shell", would removing that solve this difficulty?
>
> It would certainly help
Done.
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#7563: 23.2; `split-string-and-unquote' mis-documented / purpose unclear
2010-12-11 18:50 ` Eli Zaretskii
@ 2010-12-11 19:41 ` Dave Abrahams
2010-12-11 20:42 ` Eli Zaretskii
0 siblings, 1 reply; 9+ messages in thread
From: Dave Abrahams @ 2010-12-11 19:41 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 7563@debbugs.gnu.org
BoostPro Computing * http://boostpro.com
[Sent from coveted but awkward mobile device]
--
On Dec 11, 2010, at 1:50 PM, Eli Zaretskii <eliz@gnu.org> wrote:
>>>
>>> I believe the manual says precisely that. If the problem is with
>>> mentioning "shell", would removing that solve this difficulty?
>>
>> It would certainly help
>
> Done.
Thanks. I'm away from the docs ATM but IIRC this stuff is documented in a section on interacting with the shell but it seems from the way you describe the behavior that this function is all about Emacs string processing and should be elsewhere or it will mislead people
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#7563: 23.2; `split-string-and-unquote' mis-documented / purpose unclear
2010-12-11 19:41 ` Dave Abrahams
@ 2010-12-11 20:42 ` Eli Zaretskii
2010-12-11 22:27 ` Dave Abrahams
0 siblings, 1 reply; 9+ messages in thread
From: Eli Zaretskii @ 2010-12-11 20:42 UTC (permalink / raw)
To: Dave Abrahams; +Cc: 7563
> Cc: "7563@debbugs.gnu.org" <7563@debbugs.gnu.org>
> From: Dave Abrahams <dave@boostpro.com>
> Date: Sat, 11 Dec 2010 14:41:52 -0500
>
> Thanks. I'm away from the docs ATM but IIRC this stuff is documented in a section on interacting with the shell but it seems from the way you describe the behavior that this function is all about Emacs string processing and should be elsewhere or it will mislead people
We cannot have a separate section for every possible sub-class of
features. The description of these functions is in the section named
"Shell Arguments", indeed, but this section is part of a chapter named
"Processes", and it deals with a specialized kind of quoting, so I
don't see how this will mislead, given the explicit references to
call-process and start-process.
If naming sections is important, we could rename the section to
something like "Command Arguments".
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#7563: 23.2; `split-string-and-unquote' mis-documented / purpose unclear
2010-12-11 20:42 ` Eli Zaretskii
@ 2010-12-11 22:27 ` Dave Abrahams
0 siblings, 0 replies; 9+ messages in thread
From: Dave Abrahams @ 2010-12-11 22:27 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 7563@debbugs.gnu.org
IMO they would be much more appropriately documented right next to split-string and concat
BoostPro Computing * http://boostpro.com
[Sent from coveted but awkward mobile device]
--
On Dec 11, 2010, at 3:42 PM, Eli Zaretskii <eliz@gnu.org> wrote:
>> Cc: "7563@debbugs.gnu.org" <7563@debbugs.gnu.org>
>> From: Dave Abrahams <dave@boostpro.com>
>> Date: Sat, 11 Dec 2010 14:41:52 -0500
>>
>> Thanks. I'm away from the docs ATM but IIRC this stuff is documented in a section on interacting with the shell but it seems from the way you describe the behavior that this function is all about Emacs string processing and should be elsewhere or it will mislead people
>
> We cannot have a separate section for every possible sub-class of
> features. The description of these functions is in the section named
> "Shell Arguments", indeed, but this section is part of a chapter named
> "Processes", and it deals with a specialized kind of quoting, so I
> don't see how this will mislead, given the explicit references to
> call-process and start-process.
>
> If naming sections is important, we could rename the section to
> something like "Command Arguments".
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2010-12-11 22:27 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-05 21:28 bug#7563: 23.2; `split-string-and-unquote' mis-documented / purpose unclear Dave Abrahams
2010-12-05 21:38 ` bug#7563: related bug Dave Abrahams
2010-12-06 0:37 ` bug#7563: one more detail Dave Abrahams
2010-12-11 9:51 ` Eli Zaretskii
2010-12-11 9:50 ` bug#7563: 23.2; `split-string-and-unquote' mis-documented / purpose unclear Eli Zaretskii
[not found] ` <m2fwu477ch.wl%dave@boostpro.com>
[not found] ` <834oakux25.fsf@gnu.org>
[not found] ` <524EC395-B36D-4678-AF93-43C24C9E9745@boostpro.com>
2010-12-11 18:50 ` Eli Zaretskii
2010-12-11 19:41 ` Dave Abrahams
2010-12-11 20:42 ` Eli Zaretskii
2010-12-11 22:27 ` Dave Abrahams
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).